// // run server (as leader or follower) // func (s *Coordinator) runProtocol(leader string) (err error) { host := s.getHostUDPAddr() // If this host is the leader, then start the leader server. // Otherwise, start the followerCoordinator. if leader == host { logging.Debugf("Coordinator.runServer() : Local Coordinator %s is elected as leader. Leading ...", leader) s.state.setStatus(protocol.LEADING) // start other master services if this node is a candidate as master s.idxMgr.startMasterService() defer s.idxMgr.stopMasterService() err = protocol.RunLeaderServer(s.getHostTCPAddr(), s.listener, s, s, s.factory, s.skillch) } else { logging.Debugf("Coordinator.runServer() : Remote Coordinator %s is elected as leader. Following ...", leader) s.state.setStatus(protocol.FOLLOWING) leaderAddr := s.findMatchingPeerTCPAddr(leader) if len(leaderAddr) == 0 { return NewError(ERROR_COOR_ELECTION_FAIL, NORMAL, COORDINATOR, nil, fmt.Sprintf("Index Coordinator cannot find matching TCP addr for leader "+leader)) } err = protocol.RunFollowerServer(s.getHostTCPAddr(), leaderAddr, s, s, s.factory, s.skillch) } return err }
// // run server (as leader or follower) // func (s *Server) runServer(leader string) (err error) { host := GetHostUDPAddr() // If this host is the leader, then start the leader server. // Otherwise, start the followerServer. if leader == host { log.Current.Debugf("Server.runServer() : Local Server %s is elected as leader. Leading ...", leader) s.state.setStatus(protocol.LEADING) err = protocol.RunLeaderServer(GetHostTCPAddr(), s.listener, s.state, s.handler, s.factory, s.skillch) } else { log.Current.Debugf("Server.runServer() : Remote Server %s is elected as leader. Following ...", leader) s.state.setStatus(protocol.FOLLOWING) leaderAddr := findMatchingPeerTCPAddr(leader) if len(leaderAddr) == 0 { return common.NewError(common.SERVER_ERROR, "Cannot find matching TCP addr for leader "+leader) } err = protocol.RunFollowerServer(GetHostTCPAddr(), leaderAddr, s.state, s.handler, s.factory, s.skillch) } return err }