From 861483f0d6d7cb41799231d213f517d089b7684c Mon Sep 17 00:00:00 2001 From: Avgustin Marinov Date: Fri, 8 Aug 2025 16:39:18 +0300 Subject: [PATCH] Fix entityManager.merge for ds and sm (#2602) Signed-off-by: Avgustin Marinov --- .../mgmt/rest/resource/MgmtRolloutResourceTest.java | 7 +++---- .../jpa/management/JpaDeploymentManagement.java | 8 +++++++- .../jpa/management/JpaDistributionSetManagement.java | 2 +- .../jpa/management/JpaSoftwareModuleManagement.java | 2 +- 4 files changed, 12 insertions(+), 7 deletions(-) diff --git a/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java b/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java index 0194fa9e9..6c3e65662 100644 --- a/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java +++ b/hawkbit-mgmt/hawkbit-mgmt-resource/src/test/java/org/eclipse/hawkbit/mgmt/rest/resource/MgmtRolloutResourceTest.java @@ -1982,10 +1982,9 @@ class MgmtRolloutResourceTest extends AbstractManagementApiIntegrationTest { .andExpect(jsonPath("$._links.start.href", allOf(startsWith(HREF_ROLLOUT_PREFIX), endsWith("/start")))) .andExpect(jsonPath("$._links.pause.href", allOf(startsWith(HREF_ROLLOUT_PREFIX), endsWith("/pause")))) .andExpect(jsonPath("$.dynamic", equalTo(isDynamic))) - .andExpect( - jsonPath("$._links.resume.href", allOf(startsWith(HREF_ROLLOUT_PREFIX), endsWith("/resume")))) - .andExpect(jsonPath("$._links.groups.href", - allOf(startsWith(HREF_ROLLOUT_PREFIX), containsString("/deploygroups")))); + .andExpect(jsonPath("$._links.resume.href", allOf(startsWith(HREF_ROLLOUT_PREFIX), endsWith("/resume")))) + .andExpect(jsonPath( + "$._links.groups.href", allOf(startsWith(HREF_ROLLOUT_PREFIX), containsString("/deploygroups")))); } private Rollout createRollout(final String name, final int amountGroups, final long distributionSetId, diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDeploymentManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDeploymentManagement.java index 4d5220a15..219bc8e3b 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDeploymentManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDeploymentManagement.java @@ -728,7 +728,13 @@ public class JpaDeploymentManagement extends JpaActionManagement implements Depl // implicitly lock, for some reason no update happen if lock in same transaction distributionSet = DeploymentHelper.runInNewTransaction( txManager, "lockDistributionSet-" + dsId, - status -> distributionSetManagement.lock(dsValidAndComplete)); + status -> { + if (entityManager.contains(dsValidAndComplete)) { + return distributionSetManagement.lock(dsValidAndComplete); + } else { + return distributionSetManagement.lock(entityManager.merge(dsValidAndComplete)); + } + }); } else { distributionSet = dsValidAndComplete; } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetManagement.java index 4019c4272..e37f60d56 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaDistributionSetManagement.java @@ -430,7 +430,7 @@ public class JpaDistributionSetManagement private JpaDistributionSet toJpaDistributionSet(final DistributionSet distributionSet) { if (distributionSet instanceof JpaDistributionSet jpaDistributionSet) { - return entityManager.merge(jpaDistributionSet); // if from + return jpaDistributionSet; } else { return getById(distributionSet.getId()); } diff --git a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaSoftwareModuleManagement.java b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaSoftwareModuleManagement.java index 6efe986ae..8b1846ae4 100644 --- a/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaSoftwareModuleManagement.java +++ b/hawkbit-repository/hawkbit-repository-jpa/src/main/java/org/eclipse/hawkbit/repository/jpa/management/JpaSoftwareModuleManagement.java @@ -211,7 +211,7 @@ public class JpaSoftwareModuleManagement private JpaSoftwareModule toJpaSoftwareModule(final SoftwareModule softwareModule) { if (softwareModule instanceof JpaSoftwareModule jpaSoftwareModule) { - return entityManager.merge(jpaSoftwareModule); // if from + return jpaSoftwareModule; } else { return getById(softwareModule.getId()); }