Disable UEB health check when kafka is used 50/143350/4
authorFiete Ostkamp <fiete.ostkamp@telekom.de>
Sun, 22 Feb 2026 19:39:15 +0000 (20:39 +0100)
committerLukasz Rajewski <lukasz.rajewski@t-mobile.pl>
Mon, 23 Feb 2026 14:24:26 +0000 (14:24 +0000)
- only schedule the UEB health check when kafka is not active

Issue-ID: SDC-4764
Change-Id: I48f2b49c1d28dc2e2b8411cc20263457c1c3435c
Signed-off-by: Fiete Ostkamp <fiete.ostkamp@telekom.de>
catalog-be/src/main/java/org/openecomp/sdc/be/components/distribution/engine/DistributionEngineClusterHealth.java
catalog-be/src/test/java/org/openecomp/sdc/be/components/distribution/engine/DistributionEngineClusterHealthTest.java

index 9eb0141..cc1b92c 100644 (file)
@@ -34,6 +34,7 @@ import java.util.concurrent.atomic.AtomicBoolean;
 import javax.annotation.PreDestroy;
 import lombok.AllArgsConstructor;
 import lombok.Getter;
+import lombok.Setter;
 import org.openecomp.sdc.be.config.BeEcompErrorManager;
 import org.openecomp.sdc.be.config.ConfigurationManager;
 import org.openecomp.sdc.be.config.DistributionEngineConfiguration;
@@ -51,6 +52,8 @@ public class DistributionEngineClusterHealth {
     protected static final String UEB_HEALTH_LOG_CONTEXT = "ueb.healthcheck";
     //TODO use LoggerMetric instead
     private static final Logger healthLogger = Logger.getLogger(UEB_HEALTH_LOG_CONTEXT);
+    @Setter
+    private boolean isKafkaActive = Boolean.parseBoolean(System.getenv().getOrDefault("USE_KAFKA", "true"));
     boolean lastHealthState = false;
     Object lockOject = new Object();
     ScheduledExecutorService healthCheckScheduler = Executors.newSingleThreadScheduledExecutor(new ThreadFactory() {
@@ -215,16 +218,25 @@ public class DistributionEngineClusterHealth {
             healthLogger.trace("Executing UEB Health Check Task - Start");
             boolean healthStatus = verifyAtLeastOneEnvIsUp();
             if (healthStatus) {
-                boolean queryUebStatus = queryUeb();
-                if (queryUebStatus == lastHealthState) {
+                boolean queryStatus;
+                if (isKafkaActive) {
+                    // When MSB (Kafka) is active, we skip legacy UEB health checks.
+                    // The environment status (set by DistributionEngineInitTask and
+                    // DistributionEnginePollingTask) is sufficient to determine health.
+                    queryStatus = true;
+                    healthLogger.trace("MSB (MSB/Kafka) is active, skipping UEB health check query");
+                } else {
+                    queryStatus = queryUeb();
+                }
+                if (queryStatus == lastHealthState) {
                     return;
                 }
                 synchronized (lockOject) {
-                    if (queryUebStatus != lastHealthState) {
+                    if (queryStatus != lastHealthState) {
                         logger.trace("UEB Health State Changed to {}. Issuing alarm / recovery alarm...", healthStatus);
-                        lastHealthState = queryUebStatus;
+                        lastHealthState = queryStatus;
                         logAlarm(lastHealthState);
-                        if (queryUebStatus) {
+                        if (queryStatus) {
                             healthCheckInfo = HealthCheckInfoResult.OK.getHealthCheckInfo();
                         } else {
                             healthCheckInfo = HealthCheckInfoResult.UNAVAILABLE.getHealthCheckInfo();
index 7997814..2ded7a7 100644 (file)
@@ -123,6 +123,34 @@ class DistributionEngineClusterHealthTest extends BeConfDependentTest {
         Deencapsulation.invoke(healthCheckScheduledTask, "run");
     }
 
+    @Test
+    void testHealthCheckScheduledTaskRunWithKafkaActive() throws Exception {
+        DistributionEngineClusterHealth testSubject;
+        Map<String, AtomicBoolean> envNamePerStatus = new HashMap<>();
+        envNamePerStatus.put("mock", new AtomicBoolean(true));
+        // When Kafka is active, the health check should skip UEB queries
+        // and report healthy based on the environment status alone
+        testSubject = createTestSubject();
+        testSubject.setKafkaActive(true);
+        testSubject.startHealthCheckTask(envNamePerStatus, false);
+        HealthCheckScheduledTask healthCheckScheduledTask = testSubject.new HealthCheckScheduledTask(new LinkedList<>());
+        // No UEB health check calls configured - should still report healthy
+        Deencapsulation.invoke(healthCheckScheduledTask, "run");
+    }
+
+    @Test
+    void testHealthCheckScheduledTaskRunWithKafkaActiveEnvDown() throws Exception {
+        DistributionEngineClusterHealth testSubject;
+        Map<String, AtomicBoolean> envNamePerStatus = new HashMap<>();
+        envNamePerStatus.put("mock", new AtomicBoolean(false));
+        // When Kafka is active but env is down, health check should not report UP
+        testSubject = createTestSubject();
+        testSubject.setKafkaActive(true);
+        testSubject.startHealthCheckTask(envNamePerStatus, false);
+        HealthCheckScheduledTask healthCheckScheduledTask = testSubject.new HealthCheckScheduledTask(new LinkedList<>());
+        Deencapsulation.invoke(healthCheckScheduledTask, "run");
+    }
+
     @Test
     void testLogAlarm() throws Exception {
         DistributionEngineClusterHealth testSubject;