MCPcopy Create free account
hub / github.com/apache/kvrocks-controller / TestCluster_FailureCount

Function TestCluster_FailureCount

controller/cluster_test.go:86–153  ·  view source on GitHub ↗
(t *testing.T)

Source from the content-addressed store, hash-verified

84}
85
86func TestCluster_FailureCount(t *testing.T) {
87 ctx := context.Background()
88 ns := "test-ns"
89 clusterName := "test-clusterName"
90
91 s := NewMockClusterStore()
92 mockNode0 := store.NewClusterMockNode()
93 mockNode0.SetRole(store.RoleMaster)
94 mockNode0.Sequence = 104
95 mockNode1 := store.NewClusterMockNode()
96 mockNode1.SetRole(store.RoleSlave)
97 mockNode1.Sequence = 102
98 mockNode2 := store.NewClusterMockNode()
99 mockNode2.SetRole(store.RoleSlave)
100 mockNode2.Sequence = 103
101 mockNode3 := store.NewClusterMockNode()
102 mockNode3.SetRole(store.RoleSlave)
103 mockNode3.Sequence = 101
104
105 clusterInfo := &store.Cluster{
106 Name: clusterName,
107 Shards: []*store.Shard{{
108 Nodes: []store.Node{
109 mockNode0, mockNode1, mockNode2, mockNode3,
110 },
111 SlotRanges: []store.SlotRange{{Start: 0, Stop: 16383}},
112 MigratingSlot: &store.MigratingSlot{IsMigrating: false},
113 TargetShardIndex: -1,
114 }},
115 }
116 clusterInfo.Version.Store(1)
117
118 require.NoError(t, s.CreateCluster(ctx, ns, clusterInfo))
119
120 cluster := &ClusterChecker{
121 clusterStore: s,
122 namespace: ns,
123 clusterName: clusterName,
124 options: ClusterCheckOptions{
125 pingInterval: time.Second,
126 maxFailureCount: 3,
127 },
128 failureCounts: make(map[string]int64),
129 syncCh: make(chan struct{}, 1),
130 }
131
132 require.EqualValues(t, 1, clusterInfo.Version.Load())
133 for i := int64(0); i < cluster.options.maxFailureCount-1; i++ {
134 require.EqualValues(t, i+1, cluster.increaseFailureCount(0, mockNode2))
135 }
136 for i := int64(0); i < cluster.options.maxFailureCount; i++ {
137 require.EqualValues(t, i+1, cluster.increaseFailureCount(0, mockNode0))
138 }
139 require.False(t, mockNode0.IsMaster())
140 // mockNode2 should become the new master since its sequence is the largest
141 require.True(t, mockNode2.IsMaster())
142 require.EqualValues(t, 2, clusterInfo.Version.Load())
143

Callers

nothing calls this directly

Calls 9

CreateClusterMethod · 0.95
increaseFailureCountMethod · 0.95
resetFailureCountMethod · 0.95
NewClusterMockNodeFunction · 0.92
NewMockClusterStoreFunction · 0.85
SetRoleMethod · 0.65
IsMasterMethod · 0.65
AddrMethod · 0.65
IDMethod · 0.65

Tested by

no test coverage detected