MCPcopy
hub / github.com/lonng/nano / initNode

Method initNode

cluster/node.go:129–191  ·  view source on GitHub ↗
()

Source from the content-addressed store, hash-verified

127}
128
129func (n *Node) initNode() error {
130 // Current node is not master server and does not contains master
131 // address, so running in singleton mode
132 if !n.IsMaster && n.AdvertiseAddr == "" {
133 return nil
134 }
135
136 listener, err := net.Listen("tcp", n.ServiceAddr)
137 if err != nil {
138 return err
139 }
140
141 // Initialize the gRPC server and register service
142 n.server = grpc.NewServer()
143 n.rpcClient = newRPCClient()
144 clusterpb.RegisterMemberServer(n.server, n)
145
146 go func() {
147 err := n.server.Serve(listener)
148 if err != nil {
149 log.Fatalf("Start current node failed: %v", err)
150 }
151 }()
152
153 if n.IsMaster {
154 clusterpb.RegisterMasterServer(n.server, n.cluster)
155 member := &Member{
156 isMaster: true,
157 memberInfo: &clusterpb.MemberInfo{
158 Label: n.Label,
159 ServiceAddr: n.ServiceAddr,
160 Services: n.handler.LocalService(),
161 },
162 }
163 n.cluster.members = append(n.cluster.members, member)
164 n.cluster.setRpcClient(n.rpcClient)
165 } else {
166 pool, err := n.rpcClient.getConnPool(n.AdvertiseAddr)
167 if err != nil {
168 return err
169 }
170 client := clusterpb.NewMasterClient(pool.Get())
171 request := &clusterpb.RegisterRequest{
172 MemberInfo: &clusterpb.MemberInfo{
173 Label: n.Label,
174 ServiceAddr: n.ServiceAddr,
175 Services: n.handler.LocalService(),
176 },
177 }
178 for {
179 resp, err := client.Register(context.Background(), request)
180 if err == nil {
181 n.handler.initRemoteService(resp.Members)
182 n.cluster.initMembers(resp.Members)
183 break
184 }
185 log.Println("Register current node to cluster failed", err, "and will retry in", n.RetryInterval.String())
186 time.Sleep(n.RetryInterval)

Callers 1

StartupMethod · 0.95

Calls 14

RegisterMethod · 0.95
RegisterMemberServerFunction · 0.92
RegisterMasterServerFunction · 0.92
NewMasterClientFunction · 0.92
newRPCClientFunction · 0.85
FatalfMethod · 0.80
LocalServiceMethod · 0.80
setRpcClientMethod · 0.80
getConnPoolMethod · 0.80
GetMethod · 0.80
initRemoteServiceMethod · 0.80
initMembersMethod · 0.80

Tested by

no test coverage detected