in swim/join_handler.go [52:77]
func handleJoin(node *Node, req *joinRequest) (*joinResponse, error) {
node.EmitEvent(JoinReceiveEvent{
Local: node.Address(),
Source: req.Source,
})
node.serverRate.Mark(1)
node.totalRate.Mark(1)
if err := validateSourceAddress(node, req.Source); err != nil {
return nil, err
}
if err := validateSourceApp(node, req.App); err != nil {
return nil, err
}
res := &joinResponse{
App: node.app,
Coordinator: node.address,
Membership: node.disseminator.MembershipAsChanges(),
Checksum: node.memberlist.Checksum(),
}
return res, nil
}