code: func (c *Cluster) UpdateMember(id uint64, m *api.RaftMember) error {
  	c.mu.Lock()
  	defer c.mu.Unlock()
  
  	if c.removed[id] {
  		return ErrIDRemoved
  	}
  
  	oldMember, ok := c.members[id]
  	if !ok {
  		return ErrIDNotFound
  	}
  
  	if oldMember.NodeID != m.NodeID {
  		// Should never happen; this is a sanity check
  		return errors.New("node ID mismatch match on node update")
  	}
  
  	if oldMember.Addr == m.Addr {
  		// nothing to do
  		return nil
  	}
  	oldMember.RaftMember = m
  	c.broadcastUpdate()
  	return nil
  }
docs: // UpdateMember updates member address.