commit
1b9ccfc66f
|
@ -131,6 +131,44 @@ func testDecreaseClusterSize(t *testing.T, size int) {
|
||||||
clusterMustProgress(t, c.Members)
|
clusterMustProgress(t, c.Members)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func TestForceNewCluster(t *testing.T) {
|
||||||
|
c := NewCluster(t, 3)
|
||||||
|
c.Launch(t)
|
||||||
|
cc := mustNewHTTPClient(t, []string{c.Members[0].URL()})
|
||||||
|
kapi := client.NewKeysAPI(cc)
|
||||||
|
ctx, cancel := context.WithTimeout(context.Background(), requestTimeout)
|
||||||
|
resp, err := kapi.Create(ctx, "/foo", "bar", -1)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected create error: %v", err)
|
||||||
|
}
|
||||||
|
cancel()
|
||||||
|
// ensure create has been applied in this machine
|
||||||
|
ctx, cancel = context.WithTimeout(context.Background(), requestTimeout)
|
||||||
|
if _, err := kapi.Watch("foo", resp.Node.ModifiedIndex).Next(ctx); err != nil {
|
||||||
|
t.Fatalf("unexpected watch error: %v", err)
|
||||||
|
}
|
||||||
|
cancel()
|
||||||
|
|
||||||
|
c.Members[0].Stop(t)
|
||||||
|
c.Members[1].Terminate(t)
|
||||||
|
c.Members[2].Terminate(t)
|
||||||
|
c.Members[0].ForceNewCluster = true
|
||||||
|
err = c.Members[0].Restart(t)
|
||||||
|
if err != nil {
|
||||||
|
t.Fatalf("unexpected ForceRestart error: %v", err)
|
||||||
|
}
|
||||||
|
defer c.Members[0].Terminate(t)
|
||||||
|
|
||||||
|
// ensure force restart keep the old data, and new cluster can make progress
|
||||||
|
cc = mustNewHTTPClient(t, []string{c.Members[0].URL()})
|
||||||
|
kapi = client.NewKeysAPI(cc)
|
||||||
|
_, err = kapi.Get(context.TODO(), "/foo")
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("unexpected get error: %v", err)
|
||||||
|
}
|
||||||
|
clusterMustProgress(t, c.Members[:1])
|
||||||
|
}
|
||||||
|
|
||||||
// clusterMustProgress ensures that cluster can make progress. It creates
|
// clusterMustProgress ensures that cluster can make progress. It creates
|
||||||
// a random key first, and check the new key could be got from all client urls
|
// a random key first, and check the new key could be got from all client urls
|
||||||
// of the cluster.
|
// of the cluster.
|
||||||
|
|
Loading…
Reference in New Issue