func()

in swim/memberlist.go [418:461]


func (m *memberlist) updateLocalMember(update func(*Member) bool) {
	m.members.Lock()

	before := *m.local
	didUpdate := update(m.local)

	// exit if the update didn't change anything
	if !didUpdate {
		m.members.Unlock()
		return
	}

	// bump incarnation number if the member has been updated
	change := m.bumpIncarnation()

	changes := []Change{change}

	after := *m.local

	m.members.Unlock()

	// since we changed our local state we need to update our checksum
	m.ComputeChecksum()

	// kick in our updating mechanism
	m.node.handleChanges(changes)

	// prepare a membership change event for observable state changes
	var memberChange membership.MemberChange
	if before.isReachable() {
		memberChange.Before = before
	}
	if after.isReachable() {
		memberChange.After = after
	}

	if memberChange.Before != nil || memberChange.After != nil {
		m.node.EmitEvent(membership.ChangeEvent{
			Changes: []membership.MemberChange{
				memberChange,
			},
		})
	}
}