/** * {@inheritDoc} */ @Override public void from(io.cattle.platform.core.model.ScheduledUpgrade from) { setId(from.getId()); setAccountId(from.getAccountId()); setKind(from.getKind()); setUuid(from.getUuid()); setState(from.getState()); setCreated(from.getCreated()); setRemoved(from.getRemoved()); setRemoveTime(from.getRemoveTime()); setRunAfter(from.getRunAfter()); setData(from.getData()); setStackId(from.getStackId()); setStarted(from.getStarted()); setFinished(from.getFinished()); setPriority(from.getPriority()); }
/** * {@inheritDoc} */ @Override public <E extends io.cattle.platform.core.model.ScheduledUpgrade> E into(E into) { into.from(this); return into; }
@Override public HandlerResult handle(ProcessState state, ProcessInstance process) { ScheduledUpgrade upgrade = (ScheduledUpgrade)state.getResource(); Stack stack = objectManager.loadResource(Stack.class, upgrade.getStackId()); if (stack.getRemoved() != null) { return new HandlerResult() .withChainProcessName(processManager.getStandardProcessName(StandardProcess.REMOVE, upgrade)); Account account = objectManager.loadResource(Account.class, upgrade.getAccountId()); Long delay = DataAccessor.fieldLong(account, AccountConstants.FIELD_SCHEDULED_UPGRADE_DELAY); if (delay == null) { delay = 0L; Date runAfter = new Date(upgrade.getCreated().getTime() + delay * 60000); HandlerResult result = new HandlerResult(SCHEDULED_UPGRADE.RUN_AFTER, runAfter, SCHEDULED_UPGRADE.PRIORITY, priority);
protected void runWithLock(boolean scheduleNext) throws IOException { int max = MAX_UPGRADE.get(); if (scheduleNext) { max++; } List<? extends ScheduledUpgrade> running = stackDao.getRunningUpgrades(); if (running.size() >= max) { return; } Set<Long> runningAccounts = running.stream() .map((x)-> x.getAccountId()) .collect(Collectors.toSet()); List<? extends ScheduledUpgrade> toRun = stackDao.getReadyUpgrades(runningAccounts, max-running.size()); for (ScheduledUpgrade upgrade : toRun) { processManager.scheduleProcessInstance("scheduledupgrade.start", upgrade, null); } }
protected void process(ProcessState state, ProcessInstance process) throws IOException { ScheduledUpgrade upgrade = (ScheduledUpgrade)state.getResource(); Stack stack = objectManager.loadResource(Stack.class, upgrade.getStackId()); if (StringUtils.isBlank(stack.getExternalId()) || stack.getRemoved() != null) { return;
@Override public HandlerResult handle(ProcessState state, ProcessInstance process) { ScheduledUpgrade upgrade = (ScheduledUpgrade)state.getResource(); try { process(state, process); if (upgrade.getFinished() == null) { objectManager.setFields(upgrade, SCHEDULED_UPGRADE.FINISHED, new Date()); objectManager.reload(upgrade); } upgradeManager.run(); return new HandlerResult() .withChainProcessName(objectProcessManager.getStandardProcessName(StandardProcess.REMOVE, upgrade)); } catch (IOException e) { throw new IllegalStateException(e); } }
return new ArrayList<>(data.values()); data.put(scheduledUpgrade.getId(), scheduledUpgrade);