code: func (s *Serf) RemoveFailedNode(node string) error {
  	// Construct the message to broadcast
  	msg := messageLeave{
  		LTime: s.clock.Time(),
  		Node:  node,
  	}
  	s.clock.Increment()
  
  	// Process our own event
  	s.handleNodeLeaveIntent(&msg)
  
  	// If we have no members, then we don't need to broadcast
  	if !s.hasAliveMembers() {
  		return nil
  	}
  
  	// Broadcast the remove
  	notifyCh := make(chan struct{})
  	if err := s.broadcast(messageLeaveType, &msg, notifyCh); err != nil {
  		return err
  	}
  
  	// Wait for the broadcast
  	select {
  	case <-notifyCh:
  	case <-time.After(s.config.BroadcastTimeout):
  		return fmt.Errorf("timed out broadcasting node removal")
  	}
  
  	return nil
  }
docs: // RemoveFailedNode forcibly removes a failed node from the cluster
  // immediately, instead of waiting for the reaper to eventually reclaim it.
  // This also has the effect that Serf will no longer attempt to reconnect
  // to this node.