func handleJoin()

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
}