diff --git a/cluster.go b/cluster.go index 451ce8ba1..155c4a4aa 100644 --- a/cluster.go +++ b/cluster.go @@ -70,7 +70,7 @@ type Node struct { } func (n Node) String() string { - return fmt.Sprintf("Node:%s:%s:%s", n.URI, n.State, n.ID[:6]) + return fmt.Sprintf("Node:%s:%s:%s", n.URI, n.State, n.ID) } // Nodes represents a list of nodes. @@ -364,6 +364,7 @@ func (c *cluster) addNode(node *Node) error { if !c.Topology.addID(node.ID) { return nil } + c.Topology.nodeStates[node.ID] = node.State // save topology return c.saveTopology() @@ -588,6 +589,12 @@ func (c *cluster) nodePositionByID(nodeID string) int { func (c *cluster) addNodeBasicSorted(node *Node) bool { n := c.unprotectedNodeByID(node.ID) if n != nil { + if n.State != node.State || n.IsCoordinator != node.IsCoordinator || n.URI != node.URI { + n.State = node.State + n.IsCoordinator = node.IsCoordinator + n.URI = node.URI + return true + } return false } diff --git a/server/server_test.go b/server/server_test.go index 3aa11b8a2..627e83862 100644 --- a/server/server_test.go +++ b/server/server_test.go @@ -678,6 +678,15 @@ func TestClusterQueriesAfterRestart(t *testing.T) { defer cluster.Close() cmd1 := cluster[1] + for _, com := range cluster { + nodes := com.API.Hosts(context.Background()) + for _, n := range nodes { + if n.State != "READY" { + t.Fatalf("unexpected node state after upping cluster: %v", nodes) + } + } + } + cmd1.MustCreateIndex(t, "testidx", pilosa.IndexOptions{}) cmd1.MustCreateField(t, "testidx", "testfield", pilosa.OptFieldTypeSet(pilosa.CacheTypeRanked, 10))