From dd593677fd0f8a859f99e07cc5c248456c2aa7c1 Mon Sep 17 00:00:00 2001 From: Avgustin Marinov Date: Tue, 7 Apr 2026 09:59:34 +0300 Subject: [PATCH 1/3] Fix stop rollout when using PosgreSQL (2) (#3000) Signed-off-by: Avgustin Marinov --- .../hawkbit/repository/jpa/management/JpaRolloutManagement.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutManagement.java index 754c6c1e1a..d4abef1803 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutManagement.java @@ -626,7 +626,7 @@ private int updateTargetAssignedDsWithInstalledIfNoActiveActions(List targ "SET t.assigned_distribution_set = t.installed_distribution_set, t.update_status = 1 " + "WHERE t.id IN (" + Jpa.formatNativeQueryInClause("tid", targetIds) + ") " + " AND (SELECT count(*) FROM sp_action a " + - " WHERE a.target=t.id and a.active=1) = 0" + " WHERE a.target = t.id and a.active = TRUE) = 0" ); Jpa.setNativeQueryInParameter(updateQuery, "tid", targetIds); final int updated = updateQuery.executeUpdate(); From f9bb49d33e3c557ed8b337d932f04c24ce3652a6 Mon Sep 17 00:00:00 2001 From: Stanislav Trailov Date: Tue, 7 Apr 2026 16:56:55 +0300 Subject: [PATCH 2/3] Remove table alias on SET when stopping rollouts (#3002) Signed-off-by: strailov --- .../repository/jpa/management/JpaRolloutManagement.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutManagement.java index d4abef1803..c93cc3a17d 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutManagement.java @@ -604,7 +604,7 @@ private void storeActionsAndStatuses(List actions, Action.Status stat private int updateTargetAssignedDsWithFirstActiveAction(List targetIds) { final Query updateQuery = entityManager.createNativeQuery( "UPDATE sp_target t " + - "SET t.assigned_distribution_set = ( " + + "SET assigned_distribution_set = ( " + "SELECT a.distribution_set" + " FROM sp_action a" + " WHERE a.target = t.id AND a.active = TRUE" + @@ -623,7 +623,7 @@ private int updateTargetAssignedDsWithFirstActiveAction(List targetIds) { private int updateTargetAssignedDsWithInstalledIfNoActiveActions(List targetIds) { final Query updateQuery = entityManager.createNativeQuery( "UPDATE sp_target t " + - "SET t.assigned_distribution_set = t.installed_distribution_set, t.update_status = 1 " + + "SET assigned_distribution_set = t.installed_distribution_set, update_status = 1 " + "WHERE t.id IN (" + Jpa.formatNativeQueryInClause("tid", targetIds) + ") " + " AND (SELECT count(*) FROM sp_action a " + " WHERE a.target = t.id and a.active = TRUE) = 0" From f6cb14328344b2a8583afc23acf5797b50810fe7 Mon Sep 17 00:00:00 2001 From: Stanislav Trailov Date: Thu, 9 Apr 2026 10:44:06 +0300 Subject: [PATCH 3/3] Fix force quit actions to explicitly handle 0 active actions (#3004) * Fix force quit actions to explicitly handle 0 active actions Signed-off-by: strailov * Fix dynamic rollout behaviour when using Postgres Signed-off-by: strailov --------- Signed-off-by: strailov --- .../repository/jpa/management/JpaRolloutManagement.java | 4 ++++ .../org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java | 2 ++ 2 files changed, 6 insertions(+) diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutManagement.java index c93cc3a17d..7b977b629c 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaRolloutManagement.java @@ -561,6 +561,10 @@ private void forceQuitActionsOfRollout(final Rollout rollout) { .getContent(); log.info("Found {} active actions for rollout {}", actions.size(), rollout.getId()); + if (actions.isEmpty()) { + return; + } + storeActionsAndStatuses(actions, Action.Status.CANCELED); // find next active actions - filter by targetId list and isActive diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java index 4ec0385922..c4ce9a2925 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/model/JpaRollout.java @@ -28,6 +28,7 @@ import jakarta.persistence.NamedEntityGraph; import jakarta.persistence.NamedEntityGraphs; import jakarta.persistence.OneToMany; +import jakarta.persistence.OrderBy; import jakarta.persistence.Table; import jakarta.persistence.Transient; import jakarta.validation.constraints.Max; @@ -64,6 +65,7 @@ public class JpaRollout extends AbstractJpaNamedEntity implements Rollout, EventAwareEntity { @OneToMany(targetEntity = JpaRolloutGroup.class, fetch = FetchType.LAZY, cascade = { CascadeType.REMOVE }, mappedBy = "rollout") + @OrderBy("id ASC") private List rolloutGroups = new ArrayList<>(); @Setter