From 5808bf80c3c9d9cfdddd520d66c4845800fbf721 Mon Sep 17 00:00:00 2001 From: Mark Vulfson Date: Wed, 5 Jun 2019 10:53:11 -0700 Subject: [PATCH] fix(zombie-check): make zombie check run regardless of instance status (#2962) Remove check for all activators being up before running a zombie check. It doesn't really buy us anything other than confusion. E.g. if there is a dedicated instance that runs zombie checks but has queue disabled the zombie check will not run. Even if down instances run a zombie check that should be ok since their view of the queue should still be accurate --- .../spinnaker/orca/q/metrics/AtlasQueueMonitor.kt | 9 ++++++--- .../spinnaker/orca/q/metrics/AtlasQueueMonitorTest.kt | 1 - 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/orca-queue/src/main/kotlin/com/netflix/spinnaker/orca/q/metrics/AtlasQueueMonitor.kt b/orca-queue/src/main/kotlin/com/netflix/spinnaker/orca/q/metrics/AtlasQueueMonitor.kt index bb5103cace..63ca6fb939 100644 --- a/orca-queue/src/main/kotlin/com/netflix/spinnaker/orca/q/metrics/AtlasQueueMonitor.kt +++ b/orca-queue/src/main/kotlin/com/netflix/spinnaker/orca/q/metrics/AtlasQueueMonitor.kt @@ -29,7 +29,6 @@ import com.netflix.spinnaker.orca.pipeline.model.Execution.ExecutionType.PIPELIN import com.netflix.spinnaker.orca.pipeline.persistence.ExecutionRepository import com.netflix.spinnaker.orca.q.ApplicationAware import com.netflix.spinnaker.orca.q.ExecutionLevel -import com.netflix.spinnaker.q.Activator import com.netflix.spinnaker.q.metrics.LockFailed import com.netflix.spinnaker.q.metrics.MessageAcknowledged import com.netflix.spinnaker.q.metrics.MessageDead @@ -78,7 +77,6 @@ class AtlasQueueMonitor private val registry: Registry, private val repository: ExecutionRepository, private val clock: Clock, - private val activators: List, private val conch: NotificationClusterLock, @Value("\${queue.zombie-check.enabled:false}")private val zombieCheckEnabled: Boolean, @Qualifier("scheduler") private val zombieCheckScheduler: Optional, @@ -113,7 +111,12 @@ class AtlasQueueMonitor @Scheduled(fixedDelayString = "\${queue.zombie-check.interval-ms:3600000}") fun checkForZombies() { - if (!zombieCheckEnabled || activators.none { it.enabled } || !conch.tryAcquireLock("zombie", TimeUnit.MINUTES.toSeconds(5))) return + val lockAcquired = conch.tryAcquireLock("zombie", TimeUnit.MINUTES.toSeconds(5)) + + if (!zombieCheckEnabled || !lockAcquired) { + log.info("Not running zombie check: checkEnabled: $zombieCheckEnabled, lockAcquired: $lockAcquired") + return + } try { MDC.put(AGENT_MDC_KEY, this.javaClass.simpleName) diff --git a/orca-queue/src/test/kotlin/com/netflix/spinnaker/orca/q/metrics/AtlasQueueMonitorTest.kt b/orca-queue/src/test/kotlin/com/netflix/spinnaker/orca/q/metrics/AtlasQueueMonitorTest.kt index 15e6edfcff..6595fff42b 100644 --- a/orca-queue/src/test/kotlin/com/netflix/spinnaker/orca/q/metrics/AtlasQueueMonitorTest.kt +++ b/orca-queue/src/test/kotlin/com/netflix/spinnaker/orca/q/metrics/AtlasQueueMonitorTest.kt @@ -99,7 +99,6 @@ object AtlasQueueMonitorTest : SubjectSpek({ registry, repository, clock, - listOf(activator), conch, true, Optional.of(Schedulers.immediate()),