Skip to content

Commit 3d815d2

Browse files
committed
wip
1 parent 7d43445 commit 3d815d2

File tree

3 files changed

+52
-0
lines changed

3 files changed

+52
-0
lines changed

controllers/tests/controller/selfnoderemediation_controller_test.go

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -579,6 +579,9 @@ var _ = Describe("SNR Controller", func() {
579579
})
580580

581581
Context("no peer found", func() {
582+
BeforeEach(func() {
583+
clearSimulatedPeerResponses()
584+
})
582585
It("Verify that watchdog is not triggered", func() {
583586
verifyWatchdogNotTriggered()
584587
})
@@ -1298,6 +1301,7 @@ func configureSimulatedPeerResponses(simulateResponses bool) {
12981301
DeferCleanup(func() {
12991302
apiCheck.ShouldSimulatePeerResponses = orgValue
13001303
apiCheck.RestoreSimulatedPeerResponses(orgResponses)
1304+
apiCheck.RememberSimulatedPeerResponses()
13011305
if !simulateResponses {
13021306
apiCheck.SetPeersOverride(nil)
13031307
}
@@ -1400,13 +1404,28 @@ func addNodes(nodes []newNodeConfig) {
14001404

14011405
}
14021406

1407+
apiCheck.RememberSimulatedPeerResponses()
1408+
14031409
})
14041410
}
14051411

14061412
func resetWatchdogTimer() {
14071413
By("Resetting watchdog timer", func() {
14081414
dummyDog.Reset()
14091415
apiCheck.ResetPeerTimers()
1416+
if apiCheck.ShouldSimulatePeerResponses {
1417+
apiCheck.RestoreBaselineSimulatedResponses()
1418+
apiCheck.RememberSimulatedPeerResponses()
1419+
} else {
1420+
apiCheck.ClearBaselineSimulatedResponses()
1421+
}
1422+
})
1423+
}
1424+
1425+
func clearSimulatedPeerResponses() {
1426+
By("Clearing simulated peer responses", func() {
1427+
apiCheck.ClearSimulatedPeerResponses()
1428+
apiCheck.ClearBaselineSimulatedResponses()
14101429
})
14111430
}
14121431

controllers/tests/shared/shared.go

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -67,6 +67,7 @@ type ApiConnectivityCheckWrapper struct {
6767
peersOverride PeersOverrideFunc
6868
workerLastResponse time.Time
6969
controlPlaneLastResponse time.Time
70+
baselineResponses []selfNodeRemediation.HealthCheckResponseCode
7071
}
7172

7273
// PeersOverrideFunc allows tests to supply synthetic peer address lists without
@@ -186,6 +187,33 @@ func (ckw *ApiConnectivityCheckWrapper) RestoreSimulatedPeerResponses(codes []se
186187
copy(ckw.simulatedPeerResponses, codes)
187188
}
188189

190+
func (ckw *ApiConnectivityCheckWrapper) RememberSimulatedPeerResponses() {
191+
ckw.responsesMu.Lock()
192+
defer ckw.responsesMu.Unlock()
193+
if len(ckw.simulatedPeerResponses) == 0 {
194+
ckw.baselineResponses = nil
195+
return
196+
}
197+
ckw.baselineResponses = make([]selfNodeRemediation.HealthCheckResponseCode, len(ckw.simulatedPeerResponses))
198+
copy(ckw.baselineResponses, ckw.simulatedPeerResponses)
199+
}
200+
201+
func (ckw *ApiConnectivityCheckWrapper) RestoreBaselineSimulatedResponses() {
202+
ckw.responsesMu.Lock()
203+
defer ckw.responsesMu.Unlock()
204+
if len(ckw.baselineResponses) == 0 {
205+
return
206+
}
207+
ckw.simulatedPeerResponses = make([]selfNodeRemediation.HealthCheckResponseCode, len(ckw.baselineResponses))
208+
copy(ckw.simulatedPeerResponses, ckw.baselineResponses)
209+
}
210+
211+
func (ckw *ApiConnectivityCheckWrapper) ClearBaselineSimulatedResponses() {
212+
ckw.responsesMu.Lock()
213+
defer ckw.responsesMu.Unlock()
214+
ckw.baselineResponses = nil
215+
}
216+
189217
// SetPeersOverride registers a custom provider for peer address lists.
190218
func (ckw *ApiConnectivityCheckWrapper) SetPeersOverride(fn PeersOverrideFunc) {
191219
ckw.responsesMu.Lock()

pkg/apicheck/check.go

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -280,6 +280,9 @@ func (c *ApiConnectivityCheck) evaluateWorker(now time.Time) controlplane.Evalua
280280
}
281281

282282
if !summary.responded || !summary.hadMinimum {
283+
if !summary.responded && c.config.MinPeersForRemediation == 0 {
284+
return controlplane.EvaluationIsolation
285+
}
283286
if c.peerTimeoutExceeded(peers.Worker, now) {
284287
return controlplane.EvaluationIsolation
285288
}
@@ -410,6 +413,8 @@ func (c *ApiConnectivityCheck) gatherPeerResponses(role peers.Role, now time.Tim
410413
c.recordPeerSilence(role, now)
411414
}
412415

416+
c.config.Log.Info("peer summary", "role", role, "total", summary.totalPeers(), "healthy", summary.healthy, "unhealthy", summary.unhealthy, "apiErrors", summary.apiErrors, "failures", summary.failures, "responded", summary.responded, "hadMinimum", summary.hadMinimum)
417+
413418
return summary
414419
}
415420

0 commit comments

Comments
 (0)