コード例 #1
0
ファイル: cohort_impl.go プロジェクト: investislife/p3
func (ss *cohortStorageServer) RegisterServer(args *storagerpc.RegisterArgs, reply *storagerpc.RegisterReply) error {
	// Node not yet seen by MasterServer
	ss.rw.Lock()
	if _, ok := ss.exists[args.ServerInfo.NodeId]; !ok {
		ss.exists[args.ServerInfo.NodeId] = true
		ss.servers = append(ss.servers, args.ServerInfo)
	}

	if len(ss.servers) < ss.numNodes {
		ss.rw.Unlock()
		reply.Status = storagerpc.NotReady
		return nil
	}

	/// sort the nodes by nodeID starting from lowest
	nodeSorter := func(n1, n2 *storagerpc.Node) bool {
		return n1.NodeId < n2.NodeId
	}
	By(nodeSorter).Sort(ss.servers)

	ss.rw.Unlock()
	reply.Status = storagerpc.OK
	reply.Servers = ss.servers
	return nil
}