private ConstraintContext createConstraintContext(Job job, long checkTime) { // should be fine to pass in null as the Store parameter, since its not used in this test return new ConstraintContext(job, checkTime, null); }
private ConstraintResult.SatisfiedState constraintsSatisfied(Job job, long now) { ConstraintResult.SatisfiedState satisfiedState = ConstraintResult.SatisfiedState.SATISFIED; ConstraintContext constraintContext = new ConstraintContext(job, now, store); for (Constraint constraint : job.getSchedule().getConstraints()) { if (!(constraint instanceof CheckableConstraint)) { // this shouldn't happen, since implementation of Constraint in ProgramSchedule // should implement CheckableConstraint throw new IllegalArgumentException("Implementation of Constraint in ProgramSchedule" + " must implement CheckableConstraint"); } CheckableConstraint abstractConstraint = (CheckableConstraint) constraint; ConstraintResult result = abstractConstraint.check(job.getSchedule(), constraintContext); if (result.getSatisfiedState() == ConstraintResult.NEVER_SATISFIED.getSatisfiedState()) { // if any of the constraints are NEVER_SATISFIED, return NEVER_SATISFIED return ConstraintResult.NEVER_SATISFIED.getSatisfiedState(); } if (result.getSatisfiedState() == ConstraintResult.SatisfiedState.NOT_SATISFIED) { satisfiedState = ConstraintResult.SatisfiedState.NOT_SATISFIED; } } return satisfiedState; }
private ConstraintResult.SatisfiedState constraintsSatisfied(Job job, long now) { ConstraintResult.SatisfiedState satisfiedState = ConstraintResult.SatisfiedState.SATISFIED; ConstraintContext constraintContext = new ConstraintContext(job, now, store); for (Constraint constraint : job.getSchedule().getConstraints()) { if (!(constraint instanceof CheckableConstraint)) { // this shouldn't happen, since implementation of Constraint in ProgramSchedule // should implement CheckableConstraint throw new IllegalArgumentException("Implementation of Constraint in ProgramSchedule" + " must implement CheckableConstraint"); } CheckableConstraint abstractConstraint = (CheckableConstraint) constraint; ConstraintResult result = abstractConstraint.check(job.getSchedule(), constraintContext); if (result.getSatisfiedState() == ConstraintResult.NEVER_SATISFIED.getSatisfiedState()) { // if any of the constraints are NEVER_SATISFIED, return NEVER_SATISFIED return ConstraintResult.NEVER_SATISFIED.getSatisfiedState(); } if (result.getSatisfiedState() == ConstraintResult.SatisfiedState.NOT_SATISFIED) { satisfiedState = ConstraintResult.SatisfiedState.NOT_SATISFIED; } } return satisfiedState; }
@Test public void testDelayConstraint() { long now = System.currentTimeMillis(); ProgramSchedule schedule = new ProgramSchedule("SCHED1", "one partition schedule", WORKFLOW_ID, ImmutableMap.of("prop3", "abc"), new PartitionTrigger(DATASET_ID, 1), ImmutableList.<Constraint>of()); SimpleJob job = new SimpleJob(schedule, now, Collections.<Notification>emptyList(), Job.State.PENDING_TRIGGER, 0L); // test with 10 minute delay DelayConstraint tenMinuteDelayConstraint = new DelayConstraint(10, TimeUnit.MINUTES); // a check against 12 minutes after 'now' will return SATISFIED ConstraintContext constraintContext = new ConstraintContext(job, now + TimeUnit.MINUTES.toMillis(12), null); ConstraintResult result = tenMinuteDelayConstraint.check(schedule, constraintContext); Assert.assertEquals(ConstraintResult.SATISFIED, result); // a check against 9 minutes after 'now' will return NOT_SATISFIED, with 1 minute to wait until next retry constraintContext = new ConstraintContext(job, now + TimeUnit.MINUTES.toMillis(9), null); result = tenMinuteDelayConstraint.check(schedule, constraintContext); Assert.assertEquals(ConstraintResult.SatisfiedState.NOT_SATISFIED, result.getSatisfiedState()); Assert.assertEquals(constraintContext.getCheckTimeMillis() + TimeUnit.MINUTES.toMillis(1), (long) result.getNextCheckTime()); }
ConstraintContext constraintContext = new ConstraintContext(job, now, store);
ConstraintContext constraintContext = new ConstraintContext(job, now, store);