code: func (s *Serf) broadcastJoin(ltime LamportTime) error {
  	// Construct message to update our lamport clock
  	msg := messageJoin{
  		LTime: ltime,
  		Node:  s.config.NodeName,
  	}
  	s.clock.Witness(ltime)
  
  	// Process update locally
  	s.handleNodeJoinIntent(&msg)
  
  	// Start broadcasting the update
  	if err := s.broadcast(messageJoinType, &msg, nil); err != nil {
  		s.logger.Printf("[WARN] serf: Failed to broadcast join intent: %v", err)
  		return err
  	}
  	return nil
  }
docs: // broadcastJoin broadcasts a new join intent with a
  // given clock value. It is used on either join, or if
  // we need to refute an older leave intent. Cannot be called
  // with the memberLock held.