private void collectScheduleProfileMetadata(ProgramSchedule schedule, ProfileId programProfile, Map<MetadataEntity, Map<String, String>> updates) { ScheduleId scheduleId = schedule.getScheduleId(); LOG.trace("Updating profile metadata for {}", scheduleId); // if we are able to get profile from preferences or schedule properties, use it // otherwise default profile will be used Optional<ProfileId> scheduleProfileId = SystemArguments.getProfileIdFromArgs(scheduleId.getNamespaceId(), schedule.getProperties()); programProfile = scheduleProfileId.orElse(programProfile); addProfileMetadataUpdate(scheduleId, programProfile, updates); }
private void updateScheduleProfileMetadata(ProgramSchedule schedule, ProfileId profileId) { ScheduleId scheduleId = schedule.getScheduleId(); Optional<ProfileId> scheduleProfileId = SystemArguments.getProfileIdFromArgs(scheduleId.getNamespaceId(), schedule.getProperties()); profileId = scheduleProfileId.orElse(profileId); setProfileMetadata(scheduleId, profileId); }
public void launch(Job job) throws Exception { ProgramSchedule schedule = job.getSchedule(); ProgramId programId = schedule.getProgramId(); Map<String, String> userArgs = Maps.newHashMap(); userArgs.putAll(schedule.getProperties()); userArgs.putAll(propertiesResolver.getUserProperties(Id.Program.fromEntityId(programId))); Map<String, String> systemArgs = Maps.newHashMap(); systemArgs.putAll(propertiesResolver.getSystemProperties(Id.Program.fromEntityId(programId))); // Let the triggers update the arguments first before setting the triggering schedule info ((SatisfiableTrigger) job.getSchedule().getTrigger()).updateLaunchArguments(job.getSchedule(), job.getNotifications(), userArgs, systemArgs); TriggeringScheduleInfo triggeringScheduleInfo = getTriggeringScheduleInfo(job); systemArgs.put(ProgramOptionConstants.TRIGGERING_SCHEDULE_INFO, GSON.toJson(triggeringScheduleInfo)); execute(programId, systemArgs, userArgs); LOG.info("Successfully started program {} in schedule {}.", schedule.getProgramId(), schedule.getName()); }
public void launch(Job job) throws Exception { ProgramSchedule schedule = job.getSchedule(); ProgramId programId = schedule.getProgramId(); Map<String, String> userArgs = Maps.newHashMap(); userArgs.putAll(schedule.getProperties()); userArgs.putAll(propertiesResolver.getUserProperties(Id.Program.fromEntityId(programId))); Map<String, String> systemArgs = Maps.newHashMap(); systemArgs.putAll(propertiesResolver.getSystemProperties(Id.Program.fromEntityId(programId))); // Let the triggers update the arguments first before setting the triggering schedule info ((SatisfiableTrigger) job.getSchedule().getTrigger()).updateLaunchArguments(job.getSchedule(), job.getNotifications(), userArgs, systemArgs); TriggeringScheduleInfo triggeringScheduleInfo = getTriggeringScheduleInfo(job); systemArgs.put(ProgramOptionConstants.TRIGGERING_SCHEDULE_INFO, GSON.toJson(triggeringScheduleInfo)); execute(programId, systemArgs, userArgs); LOG.info("Successfully started program {} in schedule {}.", schedule.getProgramId(), schedule.getName()); }
Map<String, String> newProperties = new HashMap<>(schedule.getProperties()); newProperties.putAll(additionalProperties);
timeSchedulerService.getAllScheduledRunTimes(programId, programId.getType().getSchedulableType(), startTimeSecs, endTimeSecs); String userId = schedule.getProperties().get(ProgramOptionConstants.USER_ID); String artifactId = schedule.getProperties().get(ProgramOptionConstants.ARTIFACT_ID); ArtifactSummary artifactSummary = artifactId == null ? null : ArtifactSummary.from(GSON.fromJson(artifactId, ArtifactId.class));
@Override public void deleteSchedules(Iterable<? extends ScheduleId> scheduleIds) throws NotFoundException { checkStarted(); execute((StoreQueueAndProfileTxRunnable<Void, NotFoundException>) (store, queue, profileDataset) -> { long deleteTime = System.currentTimeMillis(); for (ScheduleId scheduleId : scheduleIds) { ProgramSchedule schedule = store.getSchedule(scheduleId); deleteScheduleInScheduler(schedule); queue.markJobsForDeletion(scheduleId, deleteTime); adminEventPublisher.publishScheduleDeletion(scheduleId, schedule); // if the deleted schedule has properties with profile assignment, remove the assignment Optional<ProfileId> profileId = SystemArguments.getProfileIdFromArgs(scheduleId.getNamespaceId(), schedule.getProperties()); if (profileId.isPresent()) { try { profileDataset.removeProfileAssignment(profileId.get(), scheduleId); } catch (NotFoundException e) { // this should not happen since the profile cannot be deleted if there is a schedule who is using it LOG.warn("Unable to find the profile {} when deleting schedule {}, " + "skipping assignment deletion.", profileId.get(), scheduleId); } } } store.deleteSchedules(scheduleIds); return null; }, NotFoundException.class); }
Map<String, String> newProperties = new HashMap<>(schedule.getProperties()); newProperties.putAll(additionalProperties);
timeSchedulerService.getAllScheduledRunTimes(programId, programId.getType().getSchedulableType(), startTimeSecs, endTimeSecs); String userId = schedule.getProperties().get(ProgramOptionConstants.USER_ID); String artifactId = schedule.getProperties().get(ProgramOptionConstants.ARTIFACT_ID); ArtifactSummary artifactSummary = artifactId == null ? null : ArtifactSummary.from(GSON.fromJson(artifactId, ArtifactId.class));
@Override public void deleteSchedules(Iterable<? extends ScheduleId> scheduleIds) throws NotFoundException { checkStarted(); execute((StoreQueueAndProfileTxRunnable<Void, NotFoundException>) (store, queue, profileDataset) -> { long deleteTime = System.currentTimeMillis(); for (ScheduleId scheduleId : scheduleIds) { ProgramSchedule schedule = store.getSchedule(scheduleId); deleteScheduleInScheduler(schedule); queue.markJobsForDeletion(scheduleId, deleteTime); adminEventPublisher.publishScheduleDeletion(scheduleId, schedule); // if the deleted schedule has properties with profile assignment, remove the assignment Optional<ProfileId> profileId = SystemArguments.getProfileIdFromArgs(scheduleId.getNamespaceId(), schedule.getProperties()); if (profileId.isPresent()) { try { profileDataset.removeProfileAssignment(profileId.get(), scheduleId); } catch (NotFoundException e) { // this should not happen since the profile cannot be deleted if there is a schedule who is using it LOG.warn("Unable to find the profile {} when deleting schedule {}, " + "skipping assignment deletion.", profileId.get(), scheduleId); } } } store.deleteSchedules(scheduleIds); return null; }, NotFoundException.class); }
@Override public void deleteSchedules(ProgramId programId) { checkStarted(); execute((StoreQueueAndProfileTxRunnable<Void, RuntimeException>) (store, queue, profileDataset) -> { long deleteTime = System.currentTimeMillis(); List<ProgramSchedule> schedules = store.listSchedules(programId); deleteSchedulesInScheduler(schedules); List<ScheduleId> deleted = store.deleteSchedules(programId); for (ScheduleId scheduleId : deleted) { queue.markJobsForDeletion(scheduleId, deleteTime); } for (ProgramSchedule programSchedule : schedules) { ScheduleId scheduleId = programSchedule.getScheduleId(); adminEventPublisher.publishScheduleDeletion(scheduleId, programSchedule); // if the deleted schedule has properties with profile assignment, remove the assignment Optional<ProfileId> profileId = SystemArguments.getProfileIdFromArgs(scheduleId.getNamespaceId(), programSchedule.getProperties()); if (profileId.isPresent()) { try { profileDataset.removeProfileAssignment(profileId.get(), scheduleId); } catch (NotFoundException e) { // this should not happen since the profile cannot be deleted if there is a schedule who is using it LOG.warn("Unable to find the profile {} when deleting schedule {}, " + "skipping assignment deletion.", profileId.get(), scheduleId); } } } return null; }, RuntimeException.class); }
@Override public void deleteSchedules(ApplicationId appId) { checkStarted(); execute((StoreQueueAndProfileTxRunnable<Void, RuntimeException>) (store, queue, profileDataset) -> { long deleteTime = System.currentTimeMillis(); List<ProgramSchedule> schedules = store.listSchedules(appId); deleteSchedulesInScheduler(schedules); List<ScheduleId> deleted = store.deleteSchedules(appId); for (ScheduleId scheduleId : deleted) { queue.markJobsForDeletion(scheduleId, deleteTime); } for (ProgramSchedule programSchedule : schedules) { ScheduleId scheduleId = programSchedule.getScheduleId(); adminEventPublisher.publishScheduleDeletion(scheduleId, programSchedule); // if the deleted schedule has properties with profile assignment, remove the assignment Optional<ProfileId> profileId = SystemArguments.getProfileIdFromArgs(scheduleId.getNamespaceId(), programSchedule.getProperties()); if (profileId.isPresent()) { try { profileDataset.removeProfileAssignment(profileId.get(), scheduleId); } catch (NotFoundException e) { // this should not happen since the profile cannot be deleted if there is a schedule who is using it LOG.warn("Unable to find the profile {} when deleting schedule {}, " + "skipping assignment deletion.", profileId.get(), scheduleId); } } } return null; }, RuntimeException.class); }
@Override public void deleteSchedules(ApplicationId appId) { checkStarted(); execute((StoreQueueAndProfileTxRunnable<Void, RuntimeException>) (store, queue, profileDataset) -> { long deleteTime = System.currentTimeMillis(); List<ProgramSchedule> schedules = store.listSchedules(appId); deleteSchedulesInScheduler(schedules); List<ScheduleId> deleted = store.deleteSchedules(appId); for (ScheduleId scheduleId : deleted) { queue.markJobsForDeletion(scheduleId, deleteTime); } for (ProgramSchedule programSchedule : schedules) { ScheduleId scheduleId = programSchedule.getScheduleId(); adminEventPublisher.publishScheduleDeletion(scheduleId, programSchedule); // if the deleted schedule has properties with profile assignment, remove the assignment Optional<ProfileId> profileId = SystemArguments.getProfileIdFromArgs(scheduleId.getNamespaceId(), programSchedule.getProperties()); if (profileId.isPresent()) { try { profileDataset.removeProfileAssignment(profileId.get(), scheduleId); } catch (NotFoundException e) { // this should not happen since the profile cannot be deleted if there is a schedule who is using it LOG.warn("Unable to find the profile {} when deleting schedule {}, " + "skipping assignment deletion.", profileId.get(), scheduleId); } } } return null; }, RuntimeException.class); }
@Override public void deleteSchedules(ProgramId programId) { checkStarted(); execute((StoreQueueAndProfileTxRunnable<Void, RuntimeException>) (store, queue, profileDataset) -> { long deleteTime = System.currentTimeMillis(); List<ProgramSchedule> schedules = store.listSchedules(programId); deleteSchedulesInScheduler(schedules); List<ScheduleId> deleted = store.deleteSchedules(programId); for (ScheduleId scheduleId : deleted) { queue.markJobsForDeletion(scheduleId, deleteTime); } for (ProgramSchedule programSchedule : schedules) { ScheduleId scheduleId = programSchedule.getScheduleId(); adminEventPublisher.publishScheduleDeletion(scheduleId, programSchedule); // if the deleted schedule has properties with profile assignment, remove the assignment Optional<ProfileId> profileId = SystemArguments.getProfileIdFromArgs(scheduleId.getNamespaceId(), programSchedule.getProperties()); if (profileId.isPresent()) { try { profileDataset.removeProfileAssignment(profileId.get(), scheduleId); } catch (NotFoundException e) { // this should not happen since the profile cannot be deleted if there is a schedule who is using it LOG.warn("Unable to find the profile {} when deleting schedule {}, " + "skipping assignment deletion.", profileId.get(), scheduleId); } } } return null; }, RuntimeException.class); }
private TriggeringScheduleInfo getTriggeringScheduleInfo(Job job) { TriggerInfoContext triggerInfoContext = new TriggerInfoContext(job, store); SatisfiableTrigger trigger = ((SatisfiableTrigger) job.getSchedule().getTrigger()); List<TriggerInfo> triggerInfo = trigger.getTriggerInfos(triggerInfoContext); ProgramSchedule schedule = job.getSchedule(); return new DefaultTriggeringScheduleInfo(schedule.getName(), schedule.getDescription(), triggerInfo, schedule.getProperties()); }
private TriggeringScheduleInfo getTriggeringScheduleInfo(Job job) { TriggerInfoContext triggerInfoContext = new TriggerInfoContext(job, store); SatisfiableTrigger trigger = ((SatisfiableTrigger) job.getSchedule().getTrigger()); List<TriggerInfo> triggerInfo = trigger.getTriggerInfos(triggerInfoContext); ProgramSchedule schedule = job.getSchedule(); return new DefaultTriggeringScheduleInfo(schedule.getName(), schedule.getDescription(), triggerInfo, schedule.getProperties()); }
existing.getName(), existing.getProgramId().toString())); Map<String, String> properties = Objects.firstNonNull(scheduleDetail.getProperties(), existing.getProperties()); Trigger trigger = Objects.firstNonNull(scheduleDetail.getTrigger(), existing.getTrigger()); List<? extends Constraint> constraints =
existing.getName(), existing.getProgramId().toString())); Map<String, String> properties = Objects.firstNonNull(scheduleDetail.getProperties(), existing.getProperties()); Trigger trigger = Objects.firstNonNull(scheduleDetail.getTrigger(), existing.getTrigger()); List<? extends Constraint> constraints =
public ScheduleDetail toScheduleDetail() { ScheduleProgramInfo programInfo = new ScheduleProgramInfo(schedule.getProgramId().getType().getSchedulableType(), schedule.getProgramId().getProgram()); ScheduleId scheduleId = schedule.getScheduleId(); return new ScheduleDetail(scheduleId.getNamespace(), scheduleId.getApplication(), scheduleId.getVersion(), scheduleId.getSchedule(), schedule.getDescription(), programInfo, schedule.getProperties(), schedule.getTrigger(), schedule.getConstraints(), schedule.getTimeoutMillis(), meta.getStatus().name()); } }
public ScheduleDetail toScheduleDetail() { ScheduleProgramInfo programInfo = new ScheduleProgramInfo(schedule.getProgramId().getType().getSchedulableType(), schedule.getProgramId().getProgram()); ScheduleId scheduleId = schedule.getScheduleId(); return new ScheduleDetail(scheduleId.getNamespace(), scheduleId.getApplication(), scheduleId.getVersion(), scheduleId.getSchedule(), schedule.getDescription(), programInfo, schedule.getProperties(), schedule.getTrigger(), schedule.getConstraints(), schedule.getTimeoutMillis(), meta.getStatus().name()); } }