Fixed broken rollout management API concerning target status map. (#365)
Signed-off-by: kaizimmerm <kai.zimmermann@bosch-si.com>
This commit is contained in:
committed by
Michael Hirsch
parent
54ba35966e
commit
a57165686e
@@ -29,13 +29,13 @@ import org.eclipse.hawkbit.repository.jpa.model.JpaAction;
|
||||
import org.eclipse.hawkbit.repository.jpa.model.JpaAction_;
|
||||
import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup;
|
||||
import org.eclipse.hawkbit.repository.jpa.model.JpaRolloutGroup_;
|
||||
import org.eclipse.hawkbit.repository.jpa.model.JpaRollout_;
|
||||
import org.eclipse.hawkbit.repository.jpa.model.JpaTarget;
|
||||
import org.eclipse.hawkbit.repository.jpa.model.JpaTarget_;
|
||||
import org.eclipse.hawkbit.repository.jpa.model.RolloutTargetGroup;
|
||||
import org.eclipse.hawkbit.repository.jpa.model.RolloutTargetGroup_;
|
||||
import org.eclipse.hawkbit.repository.jpa.rsql.RSQLUtility;
|
||||
import org.eclipse.hawkbit.repository.model.Action;
|
||||
import org.eclipse.hawkbit.repository.model.Rollout;
|
||||
import org.eclipse.hawkbit.repository.model.Rollout.RolloutStatus;
|
||||
import org.eclipse.hawkbit.repository.model.RolloutGroup;
|
||||
import org.eclipse.hawkbit.repository.model.Target;
|
||||
@@ -94,7 +94,7 @@ public class JpaRolloutGroupManagement implements RolloutGroupManagement {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<RolloutGroup> findRolloutGroupsAll(final Rollout rollout, final String rsqlParam,
|
||||
public Page<RolloutGroup> findRolloutGroupsAll(final Long rolloutId, final String rsqlParam,
|
||||
final Pageable pageable) {
|
||||
|
||||
final Specification<JpaRolloutGroup> specification = RSQLUtility.parse(rsqlParam, RolloutGroupFields.class,
|
||||
@@ -103,9 +103,10 @@ public class JpaRolloutGroupManagement implements RolloutGroupManagement {
|
||||
return convertPage(
|
||||
rolloutGroupRepository
|
||||
.findAll(
|
||||
(root, query, criteriaBuilder) -> criteriaBuilder.and(
|
||||
criteriaBuilder.equal(root.get(JpaRolloutGroup_.rollout), rollout),
|
||||
specification.toPredicate(root, query, criteriaBuilder)),
|
||||
(root, query,
|
||||
criteriaBuilder) -> criteriaBuilder.and(criteriaBuilder.equal(
|
||||
root.get(JpaRolloutGroup_.rollout).get(JpaRollout_.id), rolloutId),
|
||||
specification.toPredicate(root, query, criteriaBuilder)),
|
||||
pageable),
|
||||
pageable);
|
||||
}
|
||||
|
||||
@@ -148,13 +148,12 @@ public class JpaRolloutManagement implements RolloutManagement {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Page<Rollout> findAllWithDetailedStatusByPredicate(final String rsqlParam, final Pageable pageable) {
|
||||
public Page<Rollout> findAllByPredicate(final String rsqlParam, final Pageable pageable) {
|
||||
|
||||
final Specification<JpaRollout> specification = RSQLUtility.parse(rsqlParam, RolloutFields.class,
|
||||
virtualPropertyReplacer);
|
||||
|
||||
final Page<JpaRollout> findAll = rolloutRepository.findAll(specification, pageable);
|
||||
setRolloutStatusDetails(findAll);
|
||||
return convertPage(findAll, pageable);
|
||||
}
|
||||
|
||||
@@ -468,11 +467,12 @@ public class JpaRolloutManagement implements RolloutManagement {
|
||||
@Override
|
||||
@Transactional(isolation = Isolation.READ_UNCOMMITTED)
|
||||
@Modifying
|
||||
public Rollout startRollout(final Rollout rollout) {
|
||||
final JpaRollout mergedRollout = entityManager.merge((JpaRollout) rollout);
|
||||
checkIfRolloutCanStarted(rollout, mergedRollout);
|
||||
mergedRollout.setStatus(RolloutStatus.STARTING);
|
||||
return rolloutRepository.save(mergedRollout);
|
||||
public Rollout startRollout(final Long rolloutId) {
|
||||
final JpaRollout rollout = Optional.ofNullable(rolloutRepository.findOne(rolloutId))
|
||||
.orElseThrow(() -> new EntityNotFoundException("Rollout with id " + rolloutId + " not found."));
|
||||
checkIfRolloutCanStarted(rollout, rollout);
|
||||
rollout.setStatus(RolloutStatus.STARTING);
|
||||
return rolloutRepository.save(rollout);
|
||||
}
|
||||
|
||||
private void startFirstRolloutGroup(final Rollout rollout) {
|
||||
@@ -575,9 +575,10 @@ public class JpaRolloutManagement implements RolloutManagement {
|
||||
@Override
|
||||
@Transactional(isolation = Isolation.READ_UNCOMMITTED)
|
||||
@Modifying
|
||||
public void pauseRollout(final Rollout rollout) {
|
||||
final JpaRollout mergedRollout = entityManager.merge((JpaRollout) rollout);
|
||||
if (mergedRollout.getStatus() != RolloutStatus.RUNNING) {
|
||||
public void pauseRollout(final Long rolloutId) {
|
||||
final JpaRollout rollout = Optional.ofNullable(rolloutRepository.findOne(rolloutId))
|
||||
.orElseThrow(() -> new EntityNotFoundException("Rollout with id " + rolloutId + " not found."));
|
||||
if (rollout.getStatus() != RolloutStatus.RUNNING) {
|
||||
throw new RolloutIllegalStateException("Rollout can only be paused in state running but current state is "
|
||||
+ rollout.getStatus().name().toLowerCase());
|
||||
}
|
||||
@@ -586,21 +587,22 @@ public class JpaRolloutManagement implements RolloutManagement {
|
||||
// not started until rollout goes back to running state again. The
|
||||
// periodically check for running rollouts will skip rollouts in pause
|
||||
// state.
|
||||
mergedRollout.setStatus(RolloutStatus.PAUSED);
|
||||
rolloutRepository.save(mergedRollout);
|
||||
rollout.setStatus(RolloutStatus.PAUSED);
|
||||
rolloutRepository.save(rollout);
|
||||
}
|
||||
|
||||
@Override
|
||||
@Transactional(isolation = Isolation.READ_UNCOMMITTED)
|
||||
@Modifying
|
||||
public void resumeRollout(final Rollout rollout) {
|
||||
final JpaRollout mergedRollout = entityManager.merge((JpaRollout) rollout);
|
||||
if (!(RolloutStatus.PAUSED.equals(mergedRollout.getStatus()))) {
|
||||
public void resumeRollout(final Long rolloutId) {
|
||||
final JpaRollout rollout = Optional.ofNullable(rolloutRepository.findOne(rolloutId))
|
||||
.orElseThrow(() -> new EntityNotFoundException("Rollout with id " + rolloutId + " not found."));
|
||||
if (!(RolloutStatus.PAUSED.equals(rollout.getStatus()))) {
|
||||
throw new RolloutIllegalStateException("Rollout can only be resumed in state paused but current state is "
|
||||
+ rollout.getStatus().name().toLowerCase());
|
||||
}
|
||||
mergedRollout.setStatus(RolloutStatus.RUNNING);
|
||||
rolloutRepository.save(mergedRollout);
|
||||
rollout.setStatus(RolloutStatus.RUNNING);
|
||||
rolloutRepository.save(rollout);
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -834,7 +836,7 @@ public class JpaRolloutManagement implements RolloutManagement {
|
||||
}
|
||||
|
||||
@Override
|
||||
public Slice<Rollout> findRolloutByFilters(final Pageable pageable, final String searchText) {
|
||||
public Slice<Rollout> findRolloutWithDetailedStatusByFilters(final Pageable pageable, final String searchText) {
|
||||
final Specification<JpaRollout> specs = likeNameOrDescription(searchText);
|
||||
final Slice<JpaRollout> findAll = criteriaNoCountDao.findAll(specs, pageable, JpaRollout.class);
|
||||
setRolloutStatusDetails(findAll);
|
||||
|
||||
@@ -46,7 +46,7 @@ public class PauseRolloutGroupAction implements RolloutGroupActionEvaluator {
|
||||
systemSecurityContext.runAsSystem(() -> {
|
||||
rolloutGroup.setStatus(RolloutGroupStatus.ERROR);
|
||||
rolloutGroupRepository.save(rolloutGroup);
|
||||
rolloutManagement.pauseRollout(rollout);
|
||||
rolloutManagement.pauseRollout(rollout.getId());
|
||||
return null;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -191,7 +191,7 @@ public class RolloutManagementTest extends AbstractJpaIntegrationTest {
|
||||
|
||||
final Rollout createdRollout = createSimpleTestRolloutWithTargetsAndDistributionSet(amountTargetsForRollout,
|
||||
amountOtherTargets, amountGroups, successCondition, errorCondition);
|
||||
rolloutManagement.startRollout(createdRollout);
|
||||
rolloutManagement.startRollout(createdRollout.getId());
|
||||
|
||||
// Run here, because scheduler is disabled during tests
|
||||
rolloutManagement.checkStartingRollouts(0);
|
||||
@@ -334,7 +334,7 @@ public class RolloutManagementTest extends AbstractJpaIntegrationTest {
|
||||
scheduleGroups.forEach(group -> assertThat(group.getStatus()).isEqualTo(RolloutGroupStatus.SCHEDULED));
|
||||
|
||||
// resume the rollout again after it gets paused by error action
|
||||
rolloutManagement.resumeRollout(rolloutManagement.findRolloutById(createdRollout.getId()));
|
||||
rolloutManagement.resumeRollout(createdRollout.getId());
|
||||
|
||||
// the rollout should be running again
|
||||
assertThat(rolloutManagement.findRolloutById(createdRollout.getId()).getStatus())
|
||||
@@ -406,7 +406,7 @@ public class RolloutManagementTest extends AbstractJpaIntegrationTest {
|
||||
validationMap.put(TotalTargetCountStatus.Status.NOTSTARTED, 8L);
|
||||
validateRolloutActionStatus(createdRollout.getId(), validationMap);
|
||||
|
||||
rolloutManagement.startRollout(createdRollout);
|
||||
rolloutManagement.startRollout(createdRollout.getId());
|
||||
|
||||
// Run here, because scheduler is disabled during tests
|
||||
rolloutManagement.checkStartingRollouts(0);
|
||||
@@ -469,7 +469,7 @@ public class RolloutManagementTest extends AbstractJpaIntegrationTest {
|
||||
validationMap.put(TotalTargetCountStatus.Status.NOTSTARTED, 8L);
|
||||
validateRolloutActionStatus(createdRollout.getId(), validationMap);
|
||||
|
||||
rolloutManagement.startRollout(createdRollout);
|
||||
rolloutManagement.startRollout(createdRollout.getId());
|
||||
|
||||
// Run here, because scheduler is disabled during tests
|
||||
rolloutManagement.checkStartingRollouts(0);
|
||||
@@ -599,7 +599,7 @@ public class RolloutManagementTest extends AbstractJpaIntegrationTest {
|
||||
expectedTargetCountStatus.put(TotalTargetCountStatus.Status.SCHEDULED, 5L);
|
||||
validateRolloutActionStatus(rolloutOne.getId(), expectedTargetCountStatus);
|
||||
|
||||
rolloutManagement.startRollout(rolloutTwo);
|
||||
rolloutManagement.startRollout(rolloutTwo.getId());
|
||||
|
||||
// Run here, because scheduler is disabled during tests
|
||||
rolloutManagement.checkStartingRollouts(0);
|
||||
@@ -650,7 +650,7 @@ public class RolloutManagementTest extends AbstractJpaIntegrationTest {
|
||||
Rollout rolloutTwo = createRolloutByVariables("rolloutTwo", "This is the description for rollout two",
|
||||
amountGroupsForRolloutTwo, "controllerId==rollout-*", distributionSet, "50", "80");
|
||||
|
||||
rolloutManagement.startRollout(rolloutTwo);
|
||||
rolloutManagement.startRollout(rolloutTwo.getId());
|
||||
|
||||
// Run here, because scheduler is disabled during tests
|
||||
rolloutManagement.checkStartingRollouts(0);
|
||||
@@ -752,14 +752,14 @@ public class RolloutManagementTest extends AbstractJpaIntegrationTest {
|
||||
final String errorCondition = "20";
|
||||
final Rollout rolloutA = createTestRolloutWithTargetsAndDistributionSet(amountTargetsForRollout, amountGroups,
|
||||
successCondition, errorCondition, "RolloutA", "RolloutA");
|
||||
rolloutManagement.startRollout(rolloutA);
|
||||
rolloutManagement.startRollout(rolloutA.getId());
|
||||
rolloutManagement.checkStartingRollouts(0);
|
||||
|
||||
final int amountTargetsForRollout2 = 10;
|
||||
final int amountGroups2 = 2;
|
||||
final Rollout rolloutB = createTestRolloutWithTargetsAndDistributionSet(amountTargetsForRollout2, amountGroups2,
|
||||
successCondition, errorCondition, "RolloutB", "RolloutB");
|
||||
rolloutManagement.startRollout(rolloutB);
|
||||
rolloutManagement.startRollout(rolloutB.getId());
|
||||
rolloutManagement.checkStartingRollouts(0);
|
||||
|
||||
changeStatusForAllRunningActions(rolloutB, Status.FINISHED);
|
||||
@@ -769,7 +769,7 @@ public class RolloutManagementTest extends AbstractJpaIntegrationTest {
|
||||
final int amountGroups3 = 2;
|
||||
final Rollout rolloutC = createTestRolloutWithTargetsAndDistributionSet(amountTargetsForRollout3, amountGroups3,
|
||||
successCondition, errorCondition, "RolloutC", "RolloutC");
|
||||
rolloutManagement.startRollout(rolloutC);
|
||||
rolloutManagement.startRollout(rolloutC.getId());
|
||||
rolloutManagement.checkStartingRollouts(0);
|
||||
|
||||
changeStatusForAllRunningActions(rolloutC, Status.ERROR);
|
||||
@@ -779,7 +779,7 @@ public class RolloutManagementTest extends AbstractJpaIntegrationTest {
|
||||
final int amountGroups4 = 3;
|
||||
final Rollout rolloutD = createTestRolloutWithTargetsAndDistributionSet(amountTargetsForRollout4, amountGroups4,
|
||||
successCondition, errorCondition, "RolloutD", "RolloutD");
|
||||
rolloutManagement.startRollout(rolloutD);
|
||||
rolloutManagement.startRollout(rolloutD.getId());
|
||||
rolloutManagement.checkStartingRollouts(0);
|
||||
|
||||
changeStatusForRunningActions(rolloutD, Status.ERROR, 1);
|
||||
@@ -873,8 +873,8 @@ public class RolloutManagementTest extends AbstractJpaIntegrationTest {
|
||||
errorCondition, "SomethingElse" + i, "SomethingElse" + i);
|
||||
}
|
||||
|
||||
final Slice<Rollout> rollout = rolloutManagement
|
||||
.findRolloutByFilters(new OffsetBasedPageRequest(0, 100, new Sort(Direction.ASC, "name")), "Rollout%");
|
||||
final Slice<Rollout> rollout = rolloutManagement.findRolloutWithDetailedStatusByFilters(
|
||||
new OffsetBasedPageRequest(0, 100, new Sort(Direction.ASC, "name")), "Rollout%");
|
||||
final List<Rollout> rolloutList = rollout.getContent();
|
||||
assertThat(rolloutList.size()).isEqualTo(5);
|
||||
int i = 1;
|
||||
@@ -912,7 +912,7 @@ public class RolloutManagementTest extends AbstractJpaIntegrationTest {
|
||||
final String rolloutName = "MyRollout";
|
||||
Rollout myRollout = createTestRolloutWithTargetsAndDistributionSet(amountTargetsForRollout, amountGroups,
|
||||
successCondition, errorCondition, rolloutName, rolloutName);
|
||||
rolloutManagement.startRollout(myRollout);
|
||||
rolloutManagement.startRollout(myRollout.getId());
|
||||
|
||||
// Run here, because scheduler is disabled during tests
|
||||
rolloutManagement.checkStartingRollouts(0);
|
||||
@@ -958,7 +958,7 @@ public class RolloutManagementTest extends AbstractJpaIntegrationTest {
|
||||
|
||||
final String rsqlParam = "controllerId==*MyRoll*";
|
||||
|
||||
rolloutManagement.startRollout(myRollout);
|
||||
rolloutManagement.startRollout(myRollout.getId());
|
||||
|
||||
// Run here, because scheduler is disabled during tests
|
||||
rolloutManagement.checkStartingRollouts(0);
|
||||
@@ -1060,7 +1060,7 @@ public class RolloutManagementTest extends AbstractJpaIntegrationTest {
|
||||
assertThat(groups.get(4).getStatus()).isEqualTo(RolloutGroupStatus.READY);
|
||||
assertThat(groups.get(4).getTotalTargets()).isEqualTo(0);
|
||||
|
||||
rolloutManagement.startRollout(myRollout);
|
||||
rolloutManagement.startRollout(myRollout.getId());
|
||||
|
||||
// Run here, because scheduler is disabled during tests
|
||||
rolloutManagement.checkStartingRollouts(0);
|
||||
@@ -1096,7 +1096,7 @@ public class RolloutManagementTest extends AbstractJpaIntegrationTest {
|
||||
"controllerId==" + targetPrefixName + "-*", distributionSet, successCondition, errorCondition);
|
||||
|
||||
assertThat(myRollout.getStatus()).isEqualTo(RolloutStatus.READY);
|
||||
rolloutManagement.startRollout(myRollout);
|
||||
rolloutManagement.startRollout(myRollout.getId());
|
||||
|
||||
// Run here, because scheduler is disabled during tests
|
||||
rolloutManagement.checkStartingRollouts(0);
|
||||
@@ -1266,7 +1266,7 @@ public class RolloutManagementTest extends AbstractJpaIntegrationTest {
|
||||
assertThat(myRollout.getStatus()).isEqualTo(RolloutStatus.CREATING);
|
||||
|
||||
try {
|
||||
rolloutManagement.startRollout(myRollout);
|
||||
rolloutManagement.startRollout(myRollout.getId());
|
||||
fail("Was able to start a Rollout in CREATING status");
|
||||
} catch (final RolloutIllegalStateException e) {
|
||||
// OK
|
||||
|
||||
@@ -73,8 +73,8 @@ public class RSQLRolloutGroupFields extends AbstractJpaIntegrationTest {
|
||||
}
|
||||
|
||||
private void assertRSQLQuery(final String rsqlParam, final long expcetedTargets) {
|
||||
final Page<RolloutGroup> findTargetPage = rolloutGroupManagement.findRolloutGroupsAll(rollout, rsqlParam,
|
||||
new PageRequest(0, 100));
|
||||
final Page<RolloutGroup> findTargetPage = rolloutGroupManagement.findRolloutGroupsAll(rollout.getId(),
|
||||
rsqlParam, new PageRequest(0, 100));
|
||||
final long countTargetsAll = findTargetPage.getTotalElements();
|
||||
assertThat(findTargetPage).isNotNull();
|
||||
assertThat(countTargetsAll).isEqualTo(expcetedTargets);
|
||||
|
||||
Reference in New Issue
Block a user