mirror of
https://github.com/etcd-io/etcd.git
synced 2024-09-27 06:25:44 +00:00
Add auto-demotion after peer inactivity.
This commit is contained in:
@@ -82,3 +82,63 @@ func TestProxy(t *testing.T) {
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, len(result.Node.Nodes), 2)
|
||||
}
|
||||
|
||||
// Create a full cluster, disconnect a peer, wait for autodemotion, wait for autopromotion.
|
||||
func TestProxyAutoPromote(t *testing.T) {
|
||||
clusterSize := 10 // DefaultActiveSize + 1
|
||||
_, etcds, err := CreateCluster(clusterSize, &os.ProcAttr{Files: []*os.File{nil, os.Stdout, os.Stderr}}, false)
|
||||
if err != nil {
|
||||
t.Fatal("cannot create cluster")
|
||||
}
|
||||
defer func() {
|
||||
// Wrap this in a closure so that it picks up the updated version of
|
||||
// the "etcds" variable.
|
||||
DestroyCluster(etcds)
|
||||
}()
|
||||
|
||||
c := etcd.NewClient(nil)
|
||||
c.SyncCluster()
|
||||
|
||||
time.Sleep(1 * time.Second)
|
||||
|
||||
// Verify that we have one proxy.
|
||||
result, err := c.Get("_etcd/proxies", false, true)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, len(result.Node.Nodes), 1)
|
||||
|
||||
// Reconfigure with a short promote delay (1 second).
|
||||
resp, _ := tests.Put("http://localhost:7001/config", "application/json", bytes.NewBufferString(`{"activeSize":9, "promoteDelay":1}`))
|
||||
if !assert.Equal(t, resp.StatusCode, 200) {
|
||||
t.FailNow()
|
||||
}
|
||||
|
||||
// Remove peer.
|
||||
etcd := etcds[1]
|
||||
etcds = append(etcds[:1], etcds[2:]...)
|
||||
if err := etcd.Kill(); err != nil {
|
||||
panic(err.Error())
|
||||
}
|
||||
etcd.Release()
|
||||
|
||||
// Wait for it to get dropped.
|
||||
time.Sleep(server.PeerActivityMonitorTimeout + (1 * time.Second))
|
||||
|
||||
// Wait for the proxy to be promoted.
|
||||
time.Sleep(server.ActiveMonitorTimeout + (1 * time.Second))
|
||||
|
||||
// Verify that we have 9 peers.
|
||||
result, err = c.Get("_etcd/machines", true, true)
|
||||
assert.NoError(t, err)
|
||||
assert.Equal(t, len(result.Node.Nodes), 9)
|
||||
|
||||
// Verify that node10 is one of those peers.
|
||||
result, err = c.Get("_etcd/machines/node10", false, false)
|
||||
assert.NoError(t, err)
|
||||
|
||||
// Verify that there are no more proxies.
|
||||
result, err = c.Get("_etcd/proxies", false, true)
|
||||
assert.NoError(t, err)
|
||||
if assert.Equal(t, len(result.Node.Nodes), 1) {
|
||||
assert.Equal(t, result.Node.Nodes[0].Key, "/_etcd/proxies/node2")
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user