private void startNextGroup(final Rollout rollout, final RolloutGroup rolloutGroup) { // retrieve all actions according to the parent group of the finished // rolloutGroup, so retrieve all child-group actions which need to be // started. final long countOfStartedActions = deploymentManagement.startScheduledActionsByRolloutGroupParent( rollout.getId(), rollout.getDistributionSet().getId(), rolloutGroup.getId()); logger.debug("{} Next actions started for rollout {} and parent group {}", countOfStartedActions, rollout, rolloutGroup); if (countOfStartedActions > 0) { // get all next scheduled groups and set them in state running rolloutGroupRepository.setStatusForCildren(RolloutGroupStatus.RUNNING, rolloutGroup); } else { logger.info("No actions to start for next rolloutgroup of parent {} {}", rolloutGroup.getId(), rolloutGroup.getName()); // nothing for next group, just finish the group, this can happen // e.g. if targets has been deleted after the group has been // scheduled. If the group is empty now, we just finish the group if // there are not actions available for this group. final List<JpaRolloutGroup> findByRolloutGroupParent = rolloutGroupRepository .findByParentIdAndStatus(rolloutGroup.getId(), RolloutGroupStatus.SCHEDULED); findByRolloutGroupParent.forEach(nextGroup -> { logger.debug("Rolloutgroup {} is finished, starting next group", nextGroup); nextGroup.setStatus(RolloutGroupStatus.FINISHED); rolloutGroupRepository.save(nextGroup); // find the next group to set in running state startNextGroup(rollout, nextGroup); }); } } }
private Long createActionsForTargetsInNewTransaction(final long rolloutId, final long groupId, final int limit) { return DeploymentHelper.runInNewTransaction(txManager, "createActionsForTargets", status -> { final PageRequest pageRequest = PageRequest.of(0, limit); final Rollout rollout = rolloutRepository.findById(rolloutId) .orElseThrow(() -> new EntityNotFoundException(Rollout.class, rolloutId)); final RolloutGroup group = rolloutGroupRepository.findById(groupId) .orElseThrow(() -> new EntityNotFoundException(RolloutGroup.class, groupId)); final DistributionSet distributionSet = rollout.getDistributionSet(); final ActionType actionType = rollout.getActionType(); final long forceTime = rollout.getForcedTime(); final Page<Target> targets = targetManagement.findByInRolloutGroupWithoutAction(pageRequest, groupId); if (targets.getTotalElements() > 0) { createScheduledAction(targets.getContent(), distributionSet, actionType, forceTime, rollout, group); } return Long.valueOf(targets.getNumberOfElements()); }); }
private void startNextGroup(final Rollout rollout, final RolloutGroup rolloutGroup) { // retrieve all actions according to the parent group of the finished // rolloutGroup, so retrieve all child-group actions which need to be // started. final long countOfStartedActions = deploymentManagement.startScheduledActionsByRolloutGroupParent( rollout.getId(), rollout.getDistributionSet().getId(), rolloutGroup.getId()); logger.debug("{} Next actions started for rollout {} and parent group {}", countOfStartedActions, rollout, rolloutGroup); if (countOfStartedActions > 0) { // get all next scheduled groups and set them in state running rolloutGroupRepository.setStatusForCildren(RolloutGroupStatus.RUNNING, rolloutGroup); } else { logger.info("No actions to start for next rolloutgroup of parent {} {}", rolloutGroup.getId(), rolloutGroup.getName()); // nothing for next group, just finish the group, this can happen // e.g. if targets has been deleted after the group has been // scheduled. If the group is empty now, we just finish the group if // there are not actions available for this group. final List<JpaRolloutGroup> findByRolloutGroupParent = rolloutGroupRepository .findByParentIdAndStatus(rolloutGroup.getId(), RolloutGroupStatus.SCHEDULED); findByRolloutGroupParent.forEach(nextGroup -> { logger.debug("Rolloutgroup {} is finished, starting next group", nextGroup); nextGroup.setStatus(RolloutGroupStatus.FINISHED); rolloutGroupRepository.save(nextGroup); // find the next group to set in running state startNextGroup(rollout, nextGroup); }); } } }
private void startFirstRolloutGroup(final Rollout rollout) { LOGGER.debug("startFirstRolloutGroup called for rollout {}", rollout.getId()); RolloutHelper.verifyRolloutInStatus(rollout, RolloutStatus.STARTING); final JpaRollout jpaRollout = (JpaRollout) rollout; final List<JpaRolloutGroup> rolloutGroups = rolloutGroupRepository.findByRolloutOrderByIdAsc(jpaRollout); final JpaRolloutGroup rolloutGroup = rolloutGroups.get(0); if (rolloutGroup.getParent() != null) { throw new RolloutIllegalStateException("First Group is not the first group."); } deploymentManagement.startScheduledActionsByRolloutGroupParent(rollout.getId(), rollout.getDistributionSet().getId(), null); rolloutGroup.setStatus(RolloutGroupStatus.RUNNING); rolloutGroupRepository.save(rolloutGroup); jpaRollout.setStatus(RolloutStatus.RUNNING); jpaRollout.setLastCheck(0); rolloutRepository.save(jpaRollout); }
private void startFirstRolloutGroup(final Rollout rollout) { LOGGER.debug("startFirstRolloutGroup called for rollout {}", rollout.getId()); RolloutHelper.verifyRolloutInStatus(rollout, RolloutStatus.STARTING); final JpaRollout jpaRollout = (JpaRollout) rollout; final List<JpaRolloutGroup> rolloutGroups = rolloutGroupRepository.findByRolloutOrderByIdAsc(jpaRollout); final JpaRolloutGroup rolloutGroup = rolloutGroups.get(0); if (rolloutGroup.getParent() != null) { throw new RolloutIllegalStateException("First Group is not the first group."); } deploymentManagement.startScheduledActionsByRolloutGroupParent(rollout.getId(), rollout.getDistributionSet().getId(), null); rolloutGroup.setStatus(RolloutGroupStatus.RUNNING); rolloutGroupRepository.save(rolloutGroup); jpaRollout.setStatus(RolloutStatus.RUNNING); jpaRollout.setLastCheck(0); rolloutRepository.save(jpaRollout); }
private Long createActionsForTargetsInNewTransaction(final long rolloutId, final long groupId, final int limit) { return runInNewTransaction("createActionsForTargets", status -> { final PageRequest pageRequest = new PageRequest(0, limit); final Rollout rollout = rolloutRepository.findOne(rolloutId); final RolloutGroup group = rolloutGroupRepository.findOne(groupId); final DistributionSet distributionSet = rollout.getDistributionSet(); final ActionType actionType = rollout.getActionType(); final long forceTime = rollout.getForcedTime(); final Page<Target> targets = targetManagement.findByInRolloutGroupWithoutAction(pageRequest, groupId); if (targets.getTotalElements() > 0) { createScheduledAction(targets.getContent(), distributionSet, actionType, forceTime, rollout, group); } return Long.valueOf(targets.getNumberOfElements()); }); }
private static ProxyRollout createProxy(final Rollout rollout) { final ProxyRollout proxyRollout = new ProxyRollout(); proxyRollout.setName(rollout.getName()); proxyRollout.setDescription(rollout.getDescription()); final DistributionSet distributionSet = rollout.getDistributionSet(); proxyRollout.setDistributionSetNameVersion( HawkbitCommonUtil.getFormattedNameVersion(distributionSet.getName(), distributionSet.getVersion())); proxyRollout.setNumberOfGroups(rollout.getRolloutGroupsCreated()); proxyRollout.setCreatedDate(SPDateTimeUtil.getFormattedDate(rollout.getCreatedAt())); proxyRollout.setModifiedDate(SPDateTimeUtil.getFormattedDate(rollout.getLastModifiedAt())); proxyRollout.setCreatedBy(UserDetailsFormatter.loadAndFormatCreatedBy(rollout)); proxyRollout.setLastModifiedBy(UserDetailsFormatter.loadAndFormatLastModifiedBy(rollout)); proxyRollout.setForcedTime(rollout.getForcedTime()); proxyRollout.setId(rollout.getId()); proxyRollout.setStatus(rollout.getStatus()); proxyRollout.setRolloutRendererData(new RolloutRendererData(rollout.getName(), rollout.getStatus().toString())); final TotalTargetCountStatus totalTargetCountActionStatus = rollout.getTotalTargetCountStatus(); proxyRollout.setTotalTargetCountStatus(totalTargetCountActionStatus); proxyRollout.setTotalTargetsCount(String.valueOf(rollout.getTotalTargets())); proxyRollout.setApprovalDecidedBy(rollout.getApprovalDecidedBy()); proxyRollout.setApprovalRemark(rollout.getApprovalRemark()); return proxyRollout; }
private static ProxyRollout createProxy(final Rollout rollout) { final ProxyRollout proxyRollout = new ProxyRollout(); proxyRollout.setName(rollout.getName()); proxyRollout.setDescription(rollout.getDescription()); final DistributionSet distributionSet = rollout.getDistributionSet(); proxyRollout.setDistributionSetNameVersion( HawkbitCommonUtil.getFormattedNameVersion(distributionSet.getName(), distributionSet.getVersion())); proxyRollout.setNumberOfGroups(rollout.getRolloutGroupsCreated()); proxyRollout.setCreatedDate(SPDateTimeUtil.getFormattedDate(rollout.getCreatedAt())); proxyRollout.setModifiedDate(SPDateTimeUtil.getFormattedDate(rollout.getLastModifiedAt())); proxyRollout.setCreatedBy(UserDetailsFormatter.loadAndFormatCreatedBy(rollout)); proxyRollout.setLastModifiedBy(UserDetailsFormatter.loadAndFormatLastModifiedBy(rollout)); proxyRollout.setForcedTime(rollout.getForcedTime()); proxyRollout.setId(rollout.getId()); proxyRollout.setStatus(rollout.getStatus()); proxyRollout.setRolloutRendererData(new RolloutRendererData(rollout.getName(), rollout.getStatus().toString())); final TotalTargetCountStatus totalTargetCountActionStatus = rollout.getTotalTargetCountStatus(); proxyRollout.setTotalTargetCountStatus(totalTargetCountActionStatus); proxyRollout.setTotalTargetsCount(String.valueOf(rollout.getTotalTargets())); proxyRollout.setApprovalDecidedBy(rollout.getApprovalDecidedBy()); proxyRollout.setApprovalRemark(rollout.getApprovalRemark()); return proxyRollout; }
distributionSet.setValue(rollout.getDistributionSet().getId()); setActionType(rollout); setAutoStartType(rollout);
distributionSet.setValue(rollout.getDistributionSet().getId()); setActionType(rollout); setAutoStartType(rollout);
body.setRolloutId(rollout.getId()); body.setTargetFilterQuery(rollout.getTargetFilterQuery()); body.setDistributionSetId(rollout.getDistributionSet().getId()); body.setStatus(rollout.getStatus().toString().toLowerCase()); body.setTotalTargets(rollout.getTotalTargets());