code: func (s *Server) reconcileMember(member serf.Member) error {
  	// Check if this is a member we should handle
  	if !s.shouldHandleMember(member) {
  		s.logger.Printf("[WARN] consul: skipping reconcile of node %v", member)
  		return nil
  	}
  	defer metrics.MeasureSince([]string{"leader", "reconcileMember"}, time.Now())
  	var err error
  	switch member.Status {
  	case serf.StatusAlive:
  		err = s.handleAliveMember(member)
  	case serf.StatusFailed:
  		err = s.handleFailedMember(member)
  	case serf.StatusLeft:
  		err = s.handleLeftMember(member)
  	case StatusReap:
  		err = s.handleReapMember(member)
  	}
  	if err != nil {
  		s.logger.Printf("[ERR] consul: failed to reconcile member: %v: %v",
  			member, err)
  
  		// Permission denied should not bubble up
  		if acl.IsErrPermissionDenied(err) {
  			return nil
  		}
  	}
  	return nil
  }
docs: // reconcileMember is used to do an async reconcile of a single
  // serf member