code: func watchAndResyncBrokerKeys(resyncReg resync.Registration, changeChan chan datasync.ChangeEvent, resyncChan chan datasync.ResyncEvent,
  	closeChan chan string, adapter *watcher, keyPrefixes ...string) (keys *watchBrokerKeys, err error) {
  	keys = &watchBrokerKeys{
  		resyncReg:  resyncReg,
  		changeChan: changeChan,
  		resyncChan: resyncChan,
  		adapter:    adapter,
  		prefixes:   keyPrefixes,
  	}
  
  	var wasErr error
  	if err := keys.resyncRev(); err != nil {
  		wasErr = err
  	}
  	if resyncReg != nil {
  		go keys.watchResync(resyncReg)
  	}
  	if changeChan != nil {
  		if err := keys.adapter.dbW.Watch(keys.watchChanges, closeChan, keys.prefixes...); err != nil {
  			wasErr = err
  		}
  	}
  	return keys, wasErr
  }
docs: // WatchAndResyncBrokerKeys calls keyval watcher Watch() & resync Register().
  // This creates go routines for each tuple changeChan + resyncChan.