@@ -199,7 +199,7 @@ func (n *Node) Register(args *structs.NodeRegisterRequest, reply *structs.NodeUp
199
199
200
200
n .srv .peerLock .RLock ()
201
201
defer n .srv .peerLock .RUnlock ()
202
- if err := n .constructNodeServerInfoResponse (snap , reply ); err != nil {
202
+ if err := n .constructNodeServerInfoResponse (args . Node . ID , snap , reply ); err != nil {
203
203
n .logger .Error ("failed to populate NodeUpdateResponse" , "error" , err )
204
204
return err
205
205
}
@@ -258,7 +258,7 @@ func equalDevices(n1, n2 *structs.Node) bool {
258
258
}
259
259
260
260
// updateNodeUpdateResponse assumes the n.srv.peerLock is held for reading.
261
- func (n * Node ) constructNodeServerInfoResponse (snap * state.StateSnapshot , reply * structs.NodeUpdateResponse ) error {
261
+ func (n * Node ) constructNodeServerInfoResponse (nodeID string , snap * state.StateSnapshot , reply * structs.NodeUpdateResponse ) error {
262
262
reply .LeaderRPCAddr = string (n .srv .raft .Leader ())
263
263
264
264
// Reply with config information required for future RPC requests
@@ -271,6 +271,10 @@ func (n *Node) constructNodeServerInfoResponse(snap *state.StateSnapshot, reply
271
271
})
272
272
}
273
273
274
+ // Add ClientStatus information to heartbeat response.
275
+ node , _ := snap .NodeByID (nil , nodeID )
276
+ reply .SchedulingEligibility = node .SchedulingEligibility
277
+
274
278
// TODO(sean@): Use an indexed node count instead
275
279
//
276
280
// Snapshot is used only to iterate over all nodes to create a node
@@ -564,7 +568,7 @@ func (n *Node) UpdateStatus(args *structs.NodeUpdateStatusRequest, reply *struct
564
568
reply .Index = index
565
569
n .srv .peerLock .RLock ()
566
570
defer n .srv .peerLock .RUnlock ()
567
- if err := n .constructNodeServerInfoResponse (snap , reply ); err != nil {
571
+ if err := n .constructNodeServerInfoResponse (node . GetID (), snap , reply ); err != nil {
568
572
n .logger .Error ("failed to populate NodeUpdateResponse" , "error" , err )
569
573
return err
570
574
}
@@ -821,7 +825,7 @@ func (n *Node) Evaluate(args *structs.NodeEvaluateRequest, reply *structs.NodeUp
821
825
822
826
n .srv .peerLock .RLock ()
823
827
defer n .srv .peerLock .RUnlock ()
824
- if err := n .constructNodeServerInfoResponse (snap , reply ); err != nil {
828
+ if err := n .constructNodeServerInfoResponse (node . GetID (), snap , reply ); err != nil {
825
829
n .logger .Error ("failed to populate NodeUpdateResponse" , "error" , err )
826
830
return err
827
831
}
0 commit comments