func (c *InfluxForceLeaveCommand) Apply(server raft.Server) (interface{}, error) { clusterConfig := server.Context().(*cluster.ClusterConfiguration) s := clusterConfig.GetServerById(&c.Id) if s == nil { return nil, nil } if err := server.RemovePeer(s.RaftName); err != nil { log.Warn("Cannot remove peer: %s", err) } if err := clusterConfig.RemoveServer(s); err != nil { log.Warn("Cannot remove peer from cluster config: %s", err) } server.FlushCommitIndex() return nil, nil }
func (c *InfluxChangeConnectionStringCommand) Apply(server raft.Server) (interface{}, error) { if c.Name == server.Name() { return nil, nil } server.RemovePeer(c.Name) server.AddPeer(c.Name, c.ConnectionString) clusterConfig := server.Context().(*cluster.ClusterConfiguration) newServer := clusterConfig.GetServerByRaftName(c.Name) // it's a new server the cluster has never seen, make it a potential if newServer == nil { return nil, fmt.Errorf("Server %s doesn't exist", c.Name) } newServer.RaftConnectionString = c.ConnectionString newServer.ProtobufConnectionString = c.ProtobufConnectionString server.Context().(*cluster.ClusterConfiguration).ChangeProtobufConnectionString(newServer) server.FlushCommitIndex() return nil, nil }