From 3002b50807cfc8501e7c5a55e7f00c629adedcdf Mon Sep 17 00:00:00 2001 From: Avgustin Marinov Date: Fri, 2 Aug 2024 16:17:01 +0300 Subject: [PATCH] Improve JpaRolloutHandler logging (#1801) Signed-off-by: Marinov Avgustin --- .../repository/jpa/JpaRolloutHandler.java | 11 ++++--- .../management/RolloutManagementFlowTest.java | 30 +++++++++++++++++++ 2 files changed, 37 insertions(+), 4 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutHandler.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutHandler.java index b968c88ce..a7932f5e4 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutHandler.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/JpaRolloutHandler.java @@ -64,12 +64,12 @@ public class JpaRolloutHandler implements RolloutHandler { @Override public void handleAll() { final List rollouts = rolloutManagement.findActiveRollouts(); - if (rollouts.isEmpty()) { return; } - final String handlerId = createRolloutLockKey(tenantAware.getCurrentTenant()); + final String tenant = tenantAware.getCurrentTenant(); + final String handlerId = createRolloutLockKey(tenant); final Lock lock = lockRegistry.obtain(handlerId); if (!lock.tryLock()) { if (log.isTraceEnabled()) { @@ -79,13 +79,16 @@ public class JpaRolloutHandler implements RolloutHandler { } try { - log.trace("Trigger handling {} rollouts.", rollouts.size()); + log.debug("[{}] Trigger handling {} rollouts.", tenant, rollouts.size()); rollouts.forEach(rolloutId -> { try { + log.debug("[{}] Handling rollout {}", tenant, rolloutId); handleRolloutInNewTransaction(rolloutId, handlerId); + log.debug("[{}] Rollout {} processed", tenant, rolloutId); } catch (final Throwable throwable) { - log.error("Failed to process rollout with id {}", rolloutId , throwable); + log.error("[{}] Failed to process rollout with id {}", tenant, rolloutId , throwable); }}); + log.debug("[{}] Finished handling of the rollouts.", tenant); } finally { if (log.isTraceEnabled()) { log.trace("Unlock lock {}", lock); diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/RolloutManagementFlowTest.java b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/RolloutManagementFlowTest.java index 1f5fafc47..55e7d63da 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/RolloutManagementFlowTest.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/test/java/org/eclipse/hawkbit/repository/jpa/management/RolloutManagementFlowTest.java @@ -382,6 +382,36 @@ class RolloutManagementFlowTest extends AbstractJpaIntegrationTest { assertGroup(dynamic2, true, RolloutGroupStatus.RUNNING, 4); // assign the target created when paused } + @Test + @Description("Verifies a simple rollout flow") + void rollout0ThresholdFlow() { + final String rolloutName = "rollout-std-0threshold"; + final int amountGroups = 5; // static only + final String targetPrefix = "controller-rollout-std-0threshold-"; + final DistributionSet distributionSet = testdataFactory.createDistributionSet("dsFor" + rolloutName); + + testdataFactory.createTargets(targetPrefix, 0, amountGroups * 3); + final Rollout rollout = testdataFactory.createRolloutByVariables(rolloutName, rolloutName, amountGroups, + "controllerid==" + targetPrefix + "*", distributionSet, "0", "25", false, false); + final List groups = rolloutGroupManagement.findByRollout( + new OffsetBasedPageRequest(0, amountGroups + 10, Sort.by(Direction.ASC, "id")), + rollout.getId()).getContent(); + + // start rollout + rolloutManagement.start(rollout.getId()); + + // handleStartingRollout (no handleRunning called yet) + rolloutHandler.handleAll(); + assertRollout(rollout, false, RolloutStatus.RUNNING, amountGroups, amountGroups * 3); + for (int step = 1; step <= amountGroups; step++) { + for (int i = 0; i < amountGroups; i++) { + assertGroup(groups.get(i), false, i < step ? RolloutGroupStatus.RUNNING : RolloutGroupStatus.SCHEDULED, 3); + } + // starting the next group + rolloutHandler.handleAll(); + } + } + private void executeStaticWithoutOneTargetFromTheLastGroupAndHandleAll( final List groups, final Rollout rollout, final int amountGroups) {