func (s *fakeServer) bootstrap() (err error) { // Initialize repository service s.repo, err = repo.OpenRepository() if err != nil { return err } s.txn = common.NewTxnState() s.factory = message.NewConcreteMsgFactory() s.handler = action.NewDefaultServerAction(s.repo, s, s.txn) s.killch = make(chan bool, 1) // make it buffered to unblock sender s.status = protocol.ELECTING return nil }
func startWatcher(mgr *IndexManager, repo *repo.Repository, leaderAddr string, watcherId string) (s *watcher, err error) { s = new(watcher) s.mgr = mgr s.leaderAddr = leaderAddr s.repo = repo s.isClosed = false s.observes = make(map[string]*observeHandle) s.notifications = make(map[common.Txnid]*notificationHandle) s.watcherAddr, err = getWatcherAddr(watcherId) if err != nil { return nil, err } logging.Debugf("watcher.startWatcher(): watcher follower ID %s", s.watcherAddr) s.txn = common.NewTxnState() s.factory = message.NewConcreteMsgFactory() // TODO: Using DefaultServerAction, but need a callback on LogAndCommit s.handler = action.NewDefaultServerAction(s.repo, s, s.txn) s.killch = make(chan bool, 1) // make it buffered to unblock sender s.status = protocol.ELECTING readych := make(chan bool) // TODO: call Close() to cleanup the state upon retry by the watcher server go protocol.RunWatcherServer( leaderAddr, s.handler, s.factory, s.killch, readych) // TODO: timeout <-readych return s, nil }