mirror of https://github.com/status-im/consul.git
Support rejoin after leave. Fixes #110.
This commit is contained in:
parent
1d26ea41e1
commit
de309057ff
|
@ -12,6 +12,7 @@ IMPROVEMENTS:
|
|||
* Enable logging to syslog. [GH-105]
|
||||
* Allow raw key value lookup [GH-150]
|
||||
* Log encryption enabled [GH-151]
|
||||
* Support `-rejoin` to rejoin a cluster after a previous leave. [GH-110]
|
||||
|
||||
## 0.2.1 (May 20, 2014)
|
||||
|
||||
|
|
|
@ -64,6 +64,8 @@ func (c *Command) readConfig() *Config {
|
|||
|
||||
cmdFlags.BoolVar(&cmdConfig.EnableSyslog, "syslog", false,
|
||||
"enable logging to syslog facility")
|
||||
cmdFlags.BoolVar(&cmdConfig.RejoinAfterLeave, "rejoin", false,
|
||||
"enable re-joining after a previous leave")
|
||||
cmdFlags.Var((*AppendSliceValue)(&cmdConfig.StartJoin), "join",
|
||||
"address of agent to join on startup")
|
||||
|
||||
|
@ -507,6 +509,7 @@ Options:
|
|||
-log-level=info Log level of the agent.
|
||||
-node=hostname Name of this node. Must be unique in the cluster
|
||||
-protocol=N Sets the protocol version. Defaults to latest.
|
||||
-rejoin Ignores a previous leave and attempts to rejoin the cluster.
|
||||
-server Switches agent to server mode.
|
||||
-syslog Enables logging to syslog
|
||||
-ui-dir=path Path to directory containing the Web UI resources
|
||||
|
|
|
@ -135,6 +135,12 @@ type Config struct {
|
|||
// on linux and OSX. Other platforms will generate an error.
|
||||
EnableSyslog bool `mapstructure:"enable_syslog"`
|
||||
|
||||
// RejoinAfterLeave controls our interaction with the cluster after leave.
|
||||
// When set to false (default), a leave causes Consul to not rejoin
|
||||
// the cluster until an explicit join is received. If this is set to
|
||||
// true, we ignore the leave, and rejoin the cluster on start.
|
||||
RejoinAfterLeave bool `mapstructure:"rejoin_after_leave"`
|
||||
|
||||
// AEInterval controls the anti-entropy interval. This is how often
|
||||
// the agent attempts to reconcile it's local state with the server'
|
||||
// representation of our state. Defaults to every 60s.
|
||||
|
@ -436,6 +442,9 @@ func MergeConfig(a, b *Config) *Config {
|
|||
if b.EnableSyslog {
|
||||
result.EnableSyslog = true
|
||||
}
|
||||
if b.RejoinAfterLeave {
|
||||
result.RejoinAfterLeave = true
|
||||
}
|
||||
|
||||
// Copy the start join addresses
|
||||
result.StartJoin = make([]string, 0, len(a.StartJoin)+len(b.StartJoin))
|
||||
|
|
|
@ -279,6 +279,17 @@ func TestDecodeConfig(t *testing.T) {
|
|||
if !config.EnableSyslog {
|
||||
t.Fatalf("bad: %#v", config)
|
||||
}
|
||||
|
||||
// Rejoin
|
||||
input = `{"rejoin_after_leave": true}`
|
||||
config, err = DecodeConfig(bytes.NewReader([]byte(input)))
|
||||
if err != nil {
|
||||
t.Fatalf("err: %s", err)
|
||||
}
|
||||
|
||||
if !config.RejoinAfterLeave {
|
||||
t.Fatalf("bad: %#v", config)
|
||||
}
|
||||
}
|
||||
|
||||
func TestDecodeConfig_Service(t *testing.T) {
|
||||
|
@ -412,6 +423,7 @@ func TestMergeConfig(t *testing.T) {
|
|||
StartJoin: []string{"1.1.1.1"},
|
||||
UiDir: "/opt/consul-ui",
|
||||
EnableSyslog: true,
|
||||
RejoinAfterLeave: true,
|
||||
}
|
||||
|
||||
c := MergeConfig(a, b)
|
||||
|
|
|
@ -127,6 +127,7 @@ func (c *Client) setupSerf(conf *serf.Config, ch chan serf.Event, path string) (
|
|||
conf.EventCh = ch
|
||||
conf.SnapshotPath = filepath.Join(c.config.DataDir, path)
|
||||
conf.ProtocolVersion = protocolVersionMap[c.config.ProtocolVersion]
|
||||
conf.RejoinAfterLeave = c.config.RejoinAfterLeave
|
||||
if err := ensurePath(conf.SnapshotPath, false); err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
|
|
@ -108,6 +108,12 @@ type Config struct {
|
|||
// Must be provided to serve TLS connections.
|
||||
KeyFile string
|
||||
|
||||
// RejoinAfterLeave controls our interaction with Serf.
|
||||
// When set to false (default), a leave causes a Consul to not rejoin
|
||||
// the cluster until an explicit join is received. If this is set to
|
||||
// true, we ignore the leave, and rejoin the cluster on start.
|
||||
RejoinAfterLeave bool
|
||||
|
||||
// ServerUp callback can be used to trigger a notification that
|
||||
// a Consul server is now up and known about.
|
||||
ServerUp func()
|
||||
|
|
|
@ -220,6 +220,7 @@ func (s *Server) setupSerf(conf *serf.Config, ch chan serf.Event, path string, w
|
|||
conf.EventCh = ch
|
||||
conf.SnapshotPath = filepath.Join(s.config.DataDir, path)
|
||||
conf.ProtocolVersion = protocolVersionMap[s.config.ProtocolVersion]
|
||||
conf.RejoinAfterLeave = s.config.RejoinAfterLeave
|
||||
|
||||
// Until Consul supports this fully, we disable automatic resolution.
|
||||
// When enabled, the Serf gossip may just turn off if we are the minority
|
||||
|
|
|
@ -92,6 +92,11 @@ The options below are all specified on the command-line.
|
|||
version. This should be set only when [upgrading](/docs/upgrading.html).
|
||||
You can view the protocol versions supported by Consul by running `consul -v`.
|
||||
|
||||
* `-rejoin` - When provided Consul will ignore a previous leave and attempt to
|
||||
rejoin the cluster when starting. By default, Consul treats leave as a permanent
|
||||
intent, and does not attempt to join the cluster again when starting. This flag
|
||||
allows the previous state to be used to rejoin the cluster.
|
||||
|
||||
* `-server` - This flag is used to control if an agent is in server or client mode. When provided,
|
||||
an agent will act as a Consul server. Each Consul cluster must have at least one server, and ideally
|
||||
no more than 5 *per* datacenter. All servers participate in the Raft consensus algorithm, to ensure that
|
||||
|
@ -164,6 +169,8 @@ definitions support being updated during a reload.
|
|||
|
||||
* `enable_syslog` - Equivalent to the `-syslog` command-line flag.
|
||||
|
||||
* `rejoin_after_leave` - Equivalent to the `-rejoin` command-line flag.
|
||||
|
||||
* `ca_file` - This provides a the file path to a PEM encoded certificate authority.
|
||||
The certificate authority is used to check the authenticity of client and server
|
||||
connections with the appropriate `verify_incoming` or `verify_outgoing` flags.
|
||||
|
|
Loading…
Reference in New Issue