From 81f23aa3ba9ba6fdb9be2e3987ef4ee6dd82b276 Mon Sep 17 00:00:00 2001 From: JoelCourtney Date: Mon, 3 Feb 2025 15:01:56 -0800 Subject: [PATCH] Remove schedulingActivity.isNew() --- .../jpl/aerie/scheduler/goals/Procedure.java | 2 +- .../scheduler/model/SchedulingActivity.java | 15 +----- .../simulation/SimulationFacadeUtils.java | 3 +- .../scheduler/solver/PrioritySolver.java | 4 -- .../plan/SchedulerPlanEditAdapter.kt | 5 +- .../aerie/scheduler/LongDurationPlanTest.java | 8 +-- .../aerie/scheduler/PrioritySolverTest.java | 16 +++--- .../scheduler/SchedulingGrounderTest.java | 18 +++---- .../aerie/scheduler/SimulationFacadeTest.java | 14 ++--- .../jpl/aerie/scheduler/TestApplyWhen.java | 54 +++++++++---------- .../aerie/scheduler/TestPersistentAnchor.java | 18 +++---- .../scheduler/TestRecurrenceGoalExtended.java | 16 +++--- .../TestUnsatisfiableCompositeGoals.java | 4 +- .../scheduler/UncontrollableDurationTest.java | 2 +- .../CheckpointSimulationFacadeTest.java | 8 +-- .../GraphQLMerlinDatabaseService.java | 17 ++++-- 16 files changed, 97 insertions(+), 107 deletions(-) diff --git a/scheduler-driver/src/main/java/gov/nasa/jpl/aerie/scheduler/goals/Procedure.java b/scheduler-driver/src/main/java/gov/nasa/jpl/aerie/scheduler/goals/Procedure.java index 79df3b8eb8..b219c8053c 100644 --- a/scheduler-driver/src/main/java/gov/nasa/jpl/aerie/scheduler/goals/Procedure.java +++ b/scheduler-driver/src/main/java/gov/nasa/jpl/aerie/scheduler/goals/Procedure.java @@ -82,7 +82,7 @@ public void run( } for (final var edit : editablePlan.getTotalDiff()) { if (edit instanceof Edit.Create c) { - newActivities.add(toSchedulingActivity(c.getDirective(), lookupActivityType::apply, true)); + newActivities.add(toSchedulingActivity(c.getDirective(), lookupActivityType::apply)); } else if (!(edit instanceof Edit.Delete)) { throw new IllegalStateException("Unexpected edit type: " + edit); } diff --git a/scheduler-driver/src/main/java/gov/nasa/jpl/aerie/scheduler/model/SchedulingActivity.java b/scheduler-driver/src/main/java/gov/nasa/jpl/aerie/scheduler/model/SchedulingActivity.java index b756022cac..364fb6be59 100644 --- a/scheduler-driver/src/main/java/gov/nasa/jpl/aerie/scheduler/model/SchedulingActivity.java +++ b/scheduler-driver/src/main/java/gov/nasa/jpl/aerie/scheduler/model/SchedulingActivity.java @@ -30,7 +30,6 @@ * @param duration the length of time this activity instances lasts for after its start * @param arguments arguments are stored in a String/SerializedValue hashmap. * @param topParent the parent activity if any - * @param isNew whether this activity was created in this scheduling run, or already existed in the plan */ public record SchedulingActivity( ActivityDirectiveId id, @@ -41,7 +40,6 @@ public record SchedulingActivity( ActivityDirectiveId topParent, ActivityDirectiveId anchorId, boolean anchoredToStart, - boolean isNew, String name ) { @@ -51,8 +49,7 @@ public static SchedulingActivity of( Duration startOffset, Duration duration, ActivityDirectiveId anchorId, - boolean anchoredToStart, - boolean isNew + boolean anchoredToStart ) { return new SchedulingActivity( id, @@ -63,7 +60,6 @@ public static SchedulingActivity of( null, anchorId, anchoredToStart, - isNew, null ); } @@ -76,8 +72,7 @@ public static SchedulingActivity of( Map parameters, ActivityDirectiveId topParent, ActivityDirectiveId anchorId, - boolean anchoredToStart, - boolean isNew + boolean anchoredToStart ) { return new SchedulingActivity( id, @@ -88,7 +83,6 @@ public static SchedulingActivity of( topParent, anchorId, anchoredToStart, - isNew, null ); } @@ -103,7 +97,6 @@ public SchedulingActivity withNewDuration(Duration duration){ this.topParent, this.anchorId, this.anchoredToStart, - this.isNew(), this.name ); } @@ -118,7 +111,6 @@ public SchedulingActivity withNewAnchor(ActivityDirectiveId anchorId, boolean an this.topParent, anchorId, anchoredToStart, - this.isNew, this.name ); } @@ -133,7 +125,6 @@ public SchedulingActivity withNewDirectiveId(ActivityDirectiveId id) { this.topParent, this.anchorId, this.anchoredToStart, - this.isNew, this.name ); } @@ -148,7 +139,6 @@ public SchedulingActivity withNewTopParent(ActivityDirectiveId topParent) { topParent, this.anchorId, this.anchoredToStart, - this.isNew, this.name ); } @@ -163,7 +153,6 @@ public static SchedulingActivity fromExistingActivityDirective(ActivityDirective null, activity.anchorId(), activity.anchoredToStart(), - false, null ); } diff --git a/scheduler-driver/src/main/java/gov/nasa/jpl/aerie/scheduler/simulation/SimulationFacadeUtils.java b/scheduler-driver/src/main/java/gov/nasa/jpl/aerie/scheduler/simulation/SimulationFacadeUtils.java index 377dd09300..d18134deff 100644 --- a/scheduler-driver/src/main/java/gov/nasa/jpl/aerie/scheduler/simulation/SimulationFacadeUtils.java +++ b/scheduler-driver/src/main/java/gov/nasa/jpl/aerie/scheduler/simulation/SimulationFacadeUtils.java @@ -98,8 +98,7 @@ public static void updatePlanWithChildActivities( activity.arguments(), rootParent.get(), null, - true, - false + true ); plan.add(activityInstance); } diff --git a/scheduler-driver/src/main/java/gov/nasa/jpl/aerie/scheduler/solver/PrioritySolver.java b/scheduler-driver/src/main/java/gov/nasa/jpl/aerie/scheduler/solver/PrioritySolver.java index a6629d3182..2f1eaee8ef 100644 --- a/scheduler-driver/src/main/java/gov/nasa/jpl/aerie/scheduler/solver/PrioritySolver.java +++ b/scheduler-driver/src/main/java/gov/nasa/jpl/aerie/scheduler/solver/PrioritySolver.java @@ -1238,7 +1238,6 @@ public Duration valueAt(Duration start, final EquationSolvingAlgorithms.History< null, null, true, - true, null ); Duration computedDuration = null; @@ -1299,7 +1298,6 @@ public Duration valueAt(Duration start, final EquationSolvingAlgorithms.History< instantiatedArguments, null, null, - true, true )); } else if (activityExpression.type().getDurationType() instanceof DurationType.Fixed dt) { @@ -1323,7 +1321,6 @@ public Duration valueAt(Duration start, final EquationSolvingAlgorithms.History< activityExpression.type()), null, null, - true, true )); } else if (activityExpression.type().getDurationType() instanceof DurationType.Parametric dt) { @@ -1349,7 +1346,6 @@ public Duration valueAt(final Duration start, final EquationSolvingAlgorithms.Hi instantiatedArgs, null, null, - true, true ); history.add(new EquationSolvingAlgorithms.FunctionCoordinate<>(start, start.plus(duration)), new ActivityMetadata(activity)); diff --git a/scheduler-driver/src/main/kotlin/gov/nasa/jpl/aerie/scheduler/plan/SchedulerPlanEditAdapter.kt b/scheduler-driver/src/main/kotlin/gov/nasa/jpl/aerie/scheduler/plan/SchedulerPlanEditAdapter.kt index aa942396bf..6528bcac1f 100644 --- a/scheduler-driver/src/main/kotlin/gov/nasa/jpl/aerie/scheduler/plan/SchedulerPlanEditAdapter.kt +++ b/scheduler-driver/src/main/kotlin/gov/nasa/jpl/aerie/scheduler/plan/SchedulerPlanEditAdapter.kt @@ -36,7 +36,7 @@ data class SchedulerPlanEditAdapter( } override fun create(directive: Directive) { - plan.add(directive.toSchedulingActivity(lookupActivityType, true)) + plan.add(directive.toSchedulingActivity(lookupActivityType)) } override fun delete(id: ActivityDirectiveId) { @@ -53,7 +53,7 @@ data class SchedulerPlanEditAdapter( } companion object { - @JvmStatic fun Directive.toSchedulingActivity(lookupActivityType: (String) -> ActivityType, isNew: Boolean) = SchedulingActivity( + @JvmStatic fun Directive.toSchedulingActivity(lookupActivityType: (String) -> ActivityType) = SchedulingActivity( id, lookupActivityType(type), when (val s = start) { @@ -82,7 +82,6 @@ data class SchedulerPlanEditAdapter( is DirectiveStart.Absolute -> true is DirectiveStart.Anchor -> s.anchorPoint == DirectiveStart.Anchor.AnchorPoint.Start }, - isNew, name ) } diff --git a/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/LongDurationPlanTest.java b/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/LongDurationPlanTest.java index 13cb2f985c..4ed3375a56 100644 --- a/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/LongDurationPlanTest.java +++ b/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/LongDurationPlanTest.java @@ -41,10 +41,10 @@ private static PlanInMemory makePlanA012(Problem problem) { final var plan = new PlanInMemory(); final var actTypeA = problem.getActivityType("GrowBanana"); final var idGenerator = new DirectiveIdGenerator(0); - plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t0, d1min, null, true, false)); - plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t1year, d1min, null, true, false)); - plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t2year, d1min, null, true, false)); - plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t3year, d1min, null, true, false)); + plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t0, d1min, null, true)); + plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t1year, d1min, null, true)); + plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t2year, d1min, null, true)); + plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t3year, d1min, null, true)); return plan; } diff --git a/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/PrioritySolverTest.java b/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/PrioritySolverTest.java index 6272b58c81..9b0f5308b9 100644 --- a/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/PrioritySolverTest.java +++ b/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/PrioritySolverTest.java @@ -107,26 +107,26 @@ private static Problem makeTestMissionAB() { private static PlanInMemory makePlanA012(Problem problem) { final var plan = new PlanInMemory(); final var actTypeA = problem.getActivityType("ControllableDurationActivity"); - plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t0, d1min, null, true, false)); - plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t1hr, d1min, null, true, false)); - plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t2hr, d1min, null, true, false)); + plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t0, d1min, null, true)); + plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t1hr, d1min, null, true)); + plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t2hr, d1min, null, true)); return plan; } private static PlanInMemory makePlanA12(Problem problem) { final var plan = new PlanInMemory(); final var actTypeA = problem.getActivityType("ControllableDurationActivity"); - plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t1hr, d1min, null, true, false)); - plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t2hr, d1min, null, true, false)); + plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t1hr, d1min, null, true)); + plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t2hr, d1min, null, true)); return plan; } private static PlanInMemory makePlanAB012(Problem problem) { final var plan = makePlanA012(problem); final var actTypeB = problem.getActivityType("OtherControllableDurationActivity"); - plan.add(SchedulingActivity.of(idGenerator.next(), actTypeB, t0, d1min, null, true, false)); - plan.add(SchedulingActivity.of(idGenerator.next(), actTypeB, t1hr, d1min, null, true, false)); - plan.add(SchedulingActivity.of(idGenerator.next(), actTypeB, t2hr, d1min, null, true, false)); + plan.add(SchedulingActivity.of(idGenerator.next(), actTypeB, t0, d1min, null, true)); + plan.add(SchedulingActivity.of(idGenerator.next(), actTypeB, t1hr, d1min, null, true)); + plan.add(SchedulingActivity.of(idGenerator.next(), actTypeB, t2hr, d1min, null, true)); return plan; } diff --git a/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/SchedulingGrounderTest.java b/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/SchedulingGrounderTest.java index 6d5e425ab4..8e2915516f 100644 --- a/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/SchedulingGrounderTest.java +++ b/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/SchedulingGrounderTest.java @@ -31,9 +31,9 @@ public void testChainAnchors(){ final var id1 = new ActivityDirectiveId(1); final var id2 = new ActivityDirectiveId(2); final var id3 = new ActivityDirectiveId(3); - final var act1 = SchedulingActivity.of(id1, at, t0, d1min, null, true, false); - final var act2 = SchedulingActivity.of(id2, at, t1hr, d1min, act1.id(), false, false); - final var act3 = SchedulingActivity.of(id3, at, t2hr, d1min, act2.id(), false, false); + final var act1 = SchedulingActivity.of(id1, at, t0, d1min, null, true); + final var act2 = SchedulingActivity.of(id2, at, t1hr, d1min, act1.id(), false); + final var act3 = SchedulingActivity.of(id3, at, t2hr, d1min, act2.id(), false); final var acts = List.of(act1, act3, act2); final var result = SchedulePlanGrounder.groundSchedule(acts, h.getEndAerie()); //act 1 should start at 0 min into the plan @@ -51,7 +51,7 @@ public void testChainAnchors(){ public void testEmptyDueToEmptyDuration(){ final var at = new ActivityType("at"); final var id1 = new ActivityDirectiveId(1); - final var act1 = SchedulingActivity.of(id1, at, t0, null, null, true, false); + final var act1 = SchedulingActivity.of(id1, at, t0, null, null, true); final var result = SchedulePlanGrounder.groundSchedule(List.of(act1), h.getEndAerie()); assertTrue(result.isEmpty()); } @@ -60,7 +60,7 @@ public void testEmptyDueToEmptyDuration(){ public void testAnchoredToPlanEnd(){ final var at = new ActivityType("at"); final var id1 = new ActivityDirectiveId(1); - final var act1 = SchedulingActivity.of(id1, at, Duration.negate(d1hr), d1min, null, false, false); + final var act1 = SchedulingActivity.of(id1, at, Duration.negate(d1hr), d1min, null, false); final var result = SchedulePlanGrounder.groundSchedule(List.of(act1), h.getEndAerie()); final var act1expt = new ActivityInstance(id1.id(), at.getName(), Map.of(), Interval.between(h.getEndAerie().minus(d1hr), h.getEndAerie().minus(d1hr).plus(d1min)), Optional.of(id1)); assertEquals(act1expt, result.get().get(0)); @@ -72,8 +72,8 @@ public void noAnchor(){ final var at = new ActivityType("at"); final var id1 = new ActivityDirectiveId(1); final var id2 = new ActivityDirectiveId(2); - final var act1 = SchedulingActivity.of(id1, at, t0, d1min, null, true, false); - final var act2 = SchedulingActivity.of(id2, at, t1hr, d1min, null, true, false); + final var act1 = SchedulingActivity.of(id1, at, t0, d1min, null, true); + final var act2 = SchedulingActivity.of(id2, at, t1hr, d1min, null, true); final var result = SchedulePlanGrounder.groundSchedule(List.of(act1, act2), h.getEndAerie()); final var act1expt = new ActivityInstance(id1.id(), at.getName(), Map.of(), Interval.between(t0, t0.plus(d1min)), Optional.of(id1)); final var act2expt = new ActivityInstance(id2.id(), at.getName(), Map.of(), Interval.between(t1hr, t1hr.plus(d1min)), Optional.of(id2)); @@ -86,8 +86,8 @@ public void startTimeAnchor(){ final var at = new ActivityType("at"); final var id1 = new ActivityDirectiveId(1); final var id2 = new ActivityDirectiveId(2); - final var act1 = SchedulingActivity.of(id1, at, t1hr, d1min, null, true, false); - final var act2 = SchedulingActivity.of(id2, at, t1hr, d1min, act1.id(), true, false); + final var act1 = SchedulingActivity.of(id1, at, t1hr, d1min, null, true); + final var act2 = SchedulingActivity.of(id2, at, t1hr, d1min, act1.id(), true); final var result = SchedulePlanGrounder.groundSchedule(List.of(act1, act2), h.getEndAerie()); final var act1expt = new ActivityInstance(id1.id(), at.getName(), Map.of(), Interval.between(t1hr, t1hr.plus(d1min)), Optional.of(id1)); final var act2expt = new ActivityInstance(id2.id(), at.getName(), Map.of(), Interval.between(t2hr, t2hr.plus(d1min)), Optional.of(id2)); diff --git a/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/SimulationFacadeTest.java b/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/SimulationFacadeTest.java index cccea1c0b2..211f27dbef 100644 --- a/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/SimulationFacadeTest.java +++ b/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/SimulationFacadeTest.java @@ -116,10 +116,10 @@ private PlanInMemory makeTestPlanP0B1() { final var actTypeBite = problem.getActivityType("BiteBanana"); final var actTypePeel = problem.getActivityType("PeelBanana"); - var act1 = SchedulingActivity.of(idGenerator.next(), actTypePeel, t1, null, Map.of("peelDirection", SerializedValue.of("fromStem")), null, null, true, false); + var act1 = SchedulingActivity.of(idGenerator.next(), actTypePeel, t1, null, Map.of("peelDirection", SerializedValue.of("fromStem")), null, null, true); plan.add(act1); - var act2 = SchedulingActivity.of(idGenerator.next(), actTypeBite, t2, null, Map.of("biteSize", SerializedValue.of(0.1)), null, null, true, false); + var act2 = SchedulingActivity.of(idGenerator.next(), actTypeBite, t2, null, Map.of("biteSize", SerializedValue.of(0.1)), null, null, true); plan.add(act2); return plan; @@ -131,7 +131,7 @@ public void associationToExistingSatisfyingActivity() throws SchedulingInterrupt final var actTypePeel = problem.getActivityType("PeelBanana"); final var actTypeBite = problem.getActivityType("BiteBanana"); - var act1 = SchedulingActivity.of(idGenerator.next(), actTypePeel, t1, t2, Map.of("peelDirection", SerializedValue.of("fromStem")), null, null, true, false); + var act1 = SchedulingActivity.of(idGenerator.next(), actTypePeel, t1, t2, Map.of("peelDirection", SerializedValue.of("fromStem")), null, null, true); plan.add(act1); final var goal = new CoexistenceGoal.Builder() @@ -284,10 +284,10 @@ public void testProceduralGoalWithResourceConstraint() throws SchedulingInterrup final var actTypePeel = problem.getActivityType("PeelBanana"); SchedulingActivity act1 = SchedulingActivity.of(idGenerator.next(), actTypePeel, - t0, Duration.ZERO, Map.of(), null, null, true, false); + t0, Duration.ZERO, Map.of(), null, null, true); SchedulingActivity act2 = SchedulingActivity.of(idGenerator.next(), actTypePeel, - t2, Duration.ZERO, Map.of(), null, null, true, false); + t2, Duration.ZERO, Map.of(), null, null, true); //create an "external tool" that insists on a few fixed activities final var externalActs = java.util.List.of( @@ -326,10 +326,10 @@ public void testActivityTypeWithResourceConstraint() throws SchedulingInterrupte actTypePeel.setResourceConstraint(constraint); SchedulingActivity act1 = SchedulingActivity.of(idGenerator.next(), actTypePeel, - t0, Duration.ZERO, Map.of(), null, null, true, false); + t0, Duration.ZERO, Map.of(), null, null, true); SchedulingActivity act2 = SchedulingActivity.of(idGenerator.next(), actTypePeel, - t2, Duration.ZERO, Map.of(), null, null, true, false); + t2, Duration.ZERO, Map.of(), null, null, true); //create an "external tool" that insists on a few fixed activities final var externalActs = java.util.List.of( diff --git a/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/TestApplyWhen.java b/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/TestApplyWhen.java index a3e0f4721f..5b25280f19 100644 --- a/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/TestApplyWhen.java +++ b/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/TestApplyWhen.java @@ -628,9 +628,9 @@ public void testCoexistenceWindowCutoff() throws SchedulingInterruptedException // create a PlanInMemory, add ActivityInstances PlanInMemory partialPlan = new PlanInMemory(); final var actTypeA = problem.getActivityType("ControllableDurationActivity"); - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie(), Duration.of(5, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, start at start - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(11, Duration.SECONDS)), Duration.of(5, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, 11s after start - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(16, Duration.SECONDS)), Duration.of(5, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, 16s after start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie(), Duration.of(5, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, start at start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(11, Duration.SECONDS)), Duration.of(5, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, 11s after start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(16, Duration.SECONDS)), Duration.of(5, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, 16s after start // pass this plan as initialPlan to Problem object problem.setInitialPlan(partialPlan); @@ -673,9 +673,9 @@ public void testCoexistenceJustFits() throws SchedulingInterruptedException { // create a PlanInMemory, add ActivityInstances PlanInMemory partialPlan = new PlanInMemory(); final var actTypeA = problem.getActivityType("ControllableDurationActivity"); - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie(), Duration.of(5, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, start at start - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(11, Duration.SECONDS)), Duration.of(5, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, 11s after start - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(16, Duration.SECONDS)), Duration.of(5, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, 16s after start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie(), Duration.of(5, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, start at start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(11, Duration.SECONDS)), Duration.of(5, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, 11s after start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(16, Duration.SECONDS)), Duration.of(5, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, 16s after start // pass this plan as initialPlan to Problem object problem.setInitialPlan(partialPlan); @@ -727,9 +727,9 @@ public void testCoexistenceUncontrollableCutoff() throws SchedulingInterruptedEx // create a PlanInMemory, add ActivityInstances PlanInMemory partialPlan = new PlanInMemory(); final var actTypeA = problem.getActivityType("ControllableDurationActivity"); - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie(), Duration.of(5, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, start at start - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(11, Duration.SECONDS)), Duration.of(5, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, 11s after start - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(16, Duration.SECONDS)), Duration.of(5, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, 16s after start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie(), Duration.of(5, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, start at start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(11, Duration.SECONDS)), Duration.of(5, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, 11s after start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(16, Duration.SECONDS)), Duration.of(5, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, 16s after start // pass this plan as initialPlan to Problem object problem.setInitialPlan(partialPlan); @@ -778,10 +778,10 @@ public void testCoexistenceWindows() throws SchedulingInterruptedException { // create a PlanInMemory, add ActivityInstances PlanInMemory partialPlan = new PlanInMemory(); final var actTypeA = problem.getActivityType("ControllableDurationActivity"); - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(1, Duration.SECONDS)), Duration.of(4, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, start at start. NOTE: must start at time=1, not time=0, else test fails. - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(8, Duration.SECONDS)), Duration.of(4, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, 11s after start - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(14, Duration.SECONDS)), Duration.of(4, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, 16s after start - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(19, Duration.SECONDS)), Duration.of(4, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, 16s after start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(1, Duration.SECONDS)), Duration.of(4, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, start at start. NOTE: must start at time=1, not time=0, else test fails. + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(8, Duration.SECONDS)), Duration.of(4, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, 11s after start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(14, Duration.SECONDS)), Duration.of(4, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, 16s after start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(19, Duration.SECONDS)), Duration.of(4, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, 16s after start // pass this plan as initialPlan to Problem object @@ -841,11 +841,11 @@ public void testCoexistenceWindowsCutoffMidActivity() throws SchedulingInterrupt // create a PlanInMemory, add ActivityInstances PlanInMemory partialPlan = new PlanInMemory(); final var actTypeA = problem.getActivityType("ControllableDurationActivity"); - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(1, Duration.SECONDS)), Duration.of(4, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, start at start - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(7, Duration.SECONDS)), Duration.of(4, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, 11s after start - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(14, Duration.SECONDS)), Duration.of(4, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, 16s after start - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(19, Duration.SECONDS)), Duration.of(4, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, 16s after start - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(25, Duration.SECONDS)), Duration.of(2, Duration.SECONDS), null, true, false)); //create an activity that's 2 seconds long, 25s after start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(1, Duration.SECONDS)), Duration.of(4, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, start at start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(7, Duration.SECONDS)), Duration.of(4, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, 11s after start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(14, Duration.SECONDS)), Duration.of(4, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, 16s after start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(19, Duration.SECONDS)), Duration.of(4, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, 16s after start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(25, Duration.SECONDS)), Duration.of(2, Duration.SECONDS), null, true)); //create an activity that's 2 seconds long, 25s after start // pass this plan as initialPlan to Problem object @@ -916,8 +916,8 @@ public void testCoexistenceWindowsBisect() throws SchedulingInterruptedException // create a PlanInMemory, add ActivityInstances PlanInMemory partialPlan = new PlanInMemory(); final var actTypeA = problem.getActivityType("ControllableDurationActivity"); - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie(), Duration.of(4, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, start at start - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(8, Duration.SECONDS)), Duration.of(3, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, 11s after start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie(), Duration.of(4, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, start at start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(8, Duration.SECONDS)), Duration.of(3, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, 11s after start // pass this plan as initialPlan to Problem object problem.setInitialPlan(partialPlan); @@ -980,7 +980,7 @@ public void testCoexistenceWindowsBisect2() throws SchedulingInterruptedExceptio // create a PlanInMemory, add ActivityInstances PlanInMemory partialPlan = new PlanInMemory(); final var actTypeA = problem.getActivityType("ControllableDurationActivity"); - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie(), Duration.of(13, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, start at start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie(), Duration.of(13, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, start at start // pass this plan as initialPlan to Problem object problem.setInitialPlan(partialPlan); @@ -1038,9 +1038,9 @@ public void testCoexistenceUncontrollableJustFits() throws SchedulingInterrupted // create a PlanInMemory, add ActivityInstances PlanInMemory partialPlan = new PlanInMemory(); final var actTypeA = problem.getActivityType("ControllableDurationActivity"); - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie(), Duration.of(5, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, start at start - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(11, Duration.SECONDS)), Duration.of(5, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, 11s after start - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(16, Duration.SECONDS)), Duration.of(5, Duration.SECONDS), null, true, false)); //create an activity that's 5 seconds long, 16s after start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie(), Duration.of(5, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, start at start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(11, Duration.SECONDS)), Duration.of(5, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, 11s after start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(16, Duration.SECONDS)), Duration.of(5, Duration.SECONDS), null, true)); //create an activity that's 5 seconds long, 16s after start // pass this plan as initialPlan to Problem object problem.setInitialPlan(partialPlan); @@ -1153,9 +1153,9 @@ public void testCoexistenceWithAnchors() throws SchedulingInterruptedException { final var partialPlan = new PlanInMemory(); final var actTypeA = problem.getActivityType("GrowBanana"); final var actTypeB = problem.getActivityType("PickBanana"); - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie(), Duration.of(3, Duration.HOURS), null, true, false)); - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(5, Duration.HOURS)), Duration.of(3, Duration.HOURS), null, true, false)); //create an activity that's 5 hours long, start 5 hours after start - partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(10, Duration.HOURS)), Duration.of(3, Duration.HOURS), null, true, false)); //create an activity that's 5 seconds long, starts 10 hours after start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie(), Duration.of(3, Duration.HOURS), null, true)); + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(5, Duration.HOURS)), Duration.of(3, Duration.HOURS), null, true)); //create an activity that's 5 hours long, start 5 hours after start + partialPlan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(10, Duration.HOURS)), Duration.of(3, Duration.HOURS), null, true)); //create an activity that's 5 seconds long, starts 10 hours after start // pass this plan as initialPlan to Problem object problem.setInitialPlan(partialPlan); diff --git a/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/TestPersistentAnchor.java b/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/TestPersistentAnchor.java index 2e022cfa57..1c984d04f8 100644 --- a/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/TestPersistentAnchor.java +++ b/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/TestPersistentAnchor.java @@ -458,21 +458,21 @@ public TestData createTestCaseStartsAt(final PersistentTimeAnchor persistentAnch SchedulingActivity act1 = SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie(), Duration.of(activityDurationHours, Duration.HOURS), Map.of( "quantity", SerializedValue.of(1), "growingDuration", SerializedValue.of(Duration.HOUR.times(activityDurationHours).in(Duration.HOURS)) - ), null, null, true, false); + ), null, null, true); partialPlan.add(act1); actsToBeAnchored.add(act1); SchedulingActivity act2 = SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(5, Duration.HOURS)), Duration.of(activityDurationHours, Duration.HOURS), Map.of( "quantity", SerializedValue.of(1), "growingDuration", SerializedValue.of(Duration.HOUR.times(activityDurationHours).in(Duration.HOURS)) - ), null, null, true, false); + ), null, null, true); partialPlan.add(act2); actsToBeAnchored.add(act2); SchedulingActivity act3 = SchedulingActivity.of(idGenerator.next(), actTypeA, planningHorizon.getStartAerie().plus(Duration.of(10, Duration.HOURS)), Duration.of(activityDurationHours, Duration.HOURS), Map.of( "quantity", SerializedValue.of(1), "growingDuration", SerializedValue.of(Duration.HOUR.times(activityDurationHours).in(Duration.HOURS)) - ), null, null, true, false); + ), null, null, true); partialPlan.add(act3); actsToBeAnchored.add(act3); @@ -499,17 +499,17 @@ public TestData createTestCaseStartsAt(final PersistentTimeAnchor persistentAnch if(missingActAssociationsWithAnchor){ // Activities with anchors SchedulingActivity act4 = SchedulingActivity.of(idGenerator.next(), actTypeB, relativeOffset, Duration.of(activityDurationHours, Duration.HOURS), Map.of( - "quantity", SerializedValue.of(1)), null, act1.id(), anchoredToStart, false); + "quantity", SerializedValue.of(1)), null, act1.id(), anchoredToStart); partialPlan.add(act4); templateActsAlreadyAnchor.add(act4); SchedulingActivity act5 = SchedulingActivity.of(idGenerator.next(), actTypeB, relativeOffset, Duration.of(activityDurationHours, Duration.HOURS), Map.of( - "quantity", SerializedValue.of(1)), null, act2.id(), anchoredToStart, false); + "quantity", SerializedValue.of(1)), null, act2.id(), anchoredToStart); partialPlan.add(act5); templateActsAlreadyAnchor.add(act5); SchedulingActivity act6 = SchedulingActivity.of(idGenerator.next(), actTypeB, relativeOffset, Duration.of(activityDurationHours, Duration.HOURS), Map.of( - "quantity", SerializedValue.of(1)), null, act3.id(), anchoredToStart, false); + "quantity", SerializedValue.of(1)), null, act3.id(), anchoredToStart); partialPlan.add(act6); templateActsAlreadyAnchor.add(act6); } @@ -517,15 +517,15 @@ public TestData createTestCaseStartsAt(final PersistentTimeAnchor persistentAnch if(missingActAssociationsWithoutAnchor){ // Activities without anchors SchedulingActivity act7 = SchedulingActivity.of(idGenerator.next(), actTypeB, planningHorizon.getStartAerie().plus(offsetWithDuration), Duration.of(activityDurationHours, Duration.HOURS), Map.of( - "quantity", SerializedValue.of(1)), null, null, anchoredToStart, false); + "quantity", SerializedValue.of(1)), null, null, anchoredToStart); partialPlan.add(act7); SchedulingActivity act8 = SchedulingActivity.of(idGenerator.next(), actTypeB, planningHorizon.getStartAerie().plus(Duration.of(5, Duration.HOURS)).plus(offsetWithDuration), Duration.of(activityDurationHours, Duration.HOURS), Map.of( - "quantity", SerializedValue.of(1)), null, null, anchoredToStart, false); + "quantity", SerializedValue.of(1)), null, null, anchoredToStart); partialPlan.add(act8); SchedulingActivity act9 = SchedulingActivity.of(idGenerator.next(), actTypeB, planningHorizon.getStartAerie().plus(Duration.of(10, Duration.HOURS)).plus(offsetWithDuration), Duration.of(activityDurationHours, Duration.HOURS), Map.of( - "quantity", SerializedValue.of(1)), null, null, anchoredToStart, false); + "quantity", SerializedValue.of(1)), null, null, anchoredToStart); partialPlan.add(act9); if (!persistentAnchor.equals(PersistentTimeAnchor.DISABLED) && !missingActAssociationsWithAnchor) { diff --git a/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/TestRecurrenceGoalExtended.java b/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/TestRecurrenceGoalExtended.java index b64fbdea98..0fe839ffc8 100644 --- a/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/TestRecurrenceGoalExtended.java +++ b/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/TestRecurrenceGoalExtended.java @@ -241,8 +241,8 @@ public void incompletePlan() throws SchedulingInterruptedException { .build(); problem.setGoals(List.of(goal)); final var initialPlan = new PlanInMemory(); - initialPlan.add(SchedulingActivity.of(idGenerator.next(), activityType, Duration.ZERO, Duration.of(2, SECONDS), null, true, false)); - initialPlan.add(SchedulingActivity.of(idGenerator.next(), activityType, SECONDS.times(10), Duration.of(2, SECONDS), null, true, false)); + initialPlan.add(SchedulingActivity.of(idGenerator.next(), activityType, Duration.ZERO, Duration.of(2, SECONDS), null, true)); + initialPlan.add(SchedulingActivity.of(idGenerator.next(), activityType, SECONDS.times(10), Duration.of(2, SECONDS), null, true)); problem.setInitialPlan(initialPlan); final var solver = new PrioritySolver(problem); var plan = solver.getNextSolution().orElseThrow(); @@ -271,9 +271,9 @@ public void incompletePlanWithMutex() throws SchedulingInterruptedException { .build(); problem.setGoals(List.of(goal)); final var initialPlan = new PlanInMemory(); - initialPlan.add(SchedulingActivity.of(idGenerator.next(), controllableActivity, Duration.ZERO, Duration.of(2, SECONDS), null, true, false)); - initialPlan.add(SchedulingActivity.of(idGenerator.next(), controllableActivity, SECONDS.times(10), Duration.of(2, SECONDS), null, true, false)); - initialPlan.add(SchedulingActivity.of(idGenerator.next(), basicActivity, SECONDS.times(5), Duration.of(2, SECONDS), null, true, false)); + initialPlan.add(SchedulingActivity.of(idGenerator.next(), controllableActivity, Duration.ZERO, Duration.of(2, SECONDS), null, true)); + initialPlan.add(SchedulingActivity.of(idGenerator.next(), controllableActivity, SECONDS.times(10), Duration.of(2, SECONDS), null, true)); + initialPlan.add(SchedulingActivity.of(idGenerator.next(), basicActivity, SECONDS.times(5), Duration.of(2, SECONDS), null, true)); problem.setInitialPlan(initialPlan); createMutex(controllableActivity, basicActivity).forEach(problem::add); final var solver = new PrioritySolver(problem); @@ -307,7 +307,7 @@ public void flexibilityWithMutex() throws SchedulingInterruptedException { .build(); problem.setGoals(List.of(goal)); final var initialPlan = new PlanInMemory(); - initialPlan.add(SchedulingActivity.of(idGenerator.next(), basicActivity, SECONDS.times(8), Duration.of(4, SECONDS), null, true, false)); + initialPlan.add(SchedulingActivity.of(idGenerator.next(), basicActivity, SECONDS.times(8), Duration.of(4, SECONDS), null, true)); problem.setInitialPlan(initialPlan); createMutex(controllableActivity, basicActivity).forEach(problem::add); final var solver = new PrioritySolver(problem); @@ -342,7 +342,7 @@ public void flexibilityWithMutex2() throws SchedulingInterruptedException { .build(); problem.setGoals(List.of(goal)); final var initialPlan = new PlanInMemory(); - initialPlan.add(SchedulingActivity.of(idGenerator.next(), basicActivity, SECONDS.times(13), Duration.of(3, SECONDS), null, true, false)); + initialPlan.add(SchedulingActivity.of(idGenerator.next(), basicActivity, SECONDS.times(13), Duration.of(3, SECONDS), null, true)); problem.setInitialPlan(initialPlan); createMutex(controllableActivity, basicActivity).forEach(problem::add); final var solver = new PrioritySolver(problem); @@ -377,7 +377,7 @@ public void unsolvableRecurrence() throws SchedulingInterruptedException { .build(); problem.setGoals(List.of(goal)); final var initialPlan = new PlanInMemory(); - initialPlan.add(SchedulingActivity.of(idGenerator.next(), basicActivity, SECONDS.times(7), Duration.of(7, SECONDS), null, true, false)); + initialPlan.add(SchedulingActivity.of(idGenerator.next(), basicActivity, SECONDS.times(7), Duration.of(7, SECONDS), null, true)); problem.setInitialPlan(initialPlan); createMutex(controllableActivity, basicActivity).forEach(problem::add); final var solver = new PrioritySolver(problem); diff --git a/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/TestUnsatisfiableCompositeGoals.java b/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/TestUnsatisfiableCompositeGoals.java index d2802cf614..eef3958101 100644 --- a/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/TestUnsatisfiableCompositeGoals.java +++ b/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/TestUnsatisfiableCompositeGoals.java @@ -57,8 +57,8 @@ private static Problem makeTestMissionABWithCache() { private static PlanInMemory makePlanA12(Problem problem) { final var plan = new PlanInMemory(); final var actTypeA = problem.getActivityType("ControllableDurationActivity"); - plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t1hr, d1min, null, true, false)); - plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t2hr, d1min, null, true, false)); + plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t1hr, d1min, null, true)); + plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t2hr, d1min, null, true)); return plan; } diff --git a/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/UncontrollableDurationTest.java b/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/UncontrollableDurationTest.java index 9487ebefd2..2881a84aa0 100644 --- a/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/UncontrollableDurationTest.java +++ b/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/UncontrollableDurationTest.java @@ -152,7 +152,7 @@ public void testTimeDependent() throws SchedulingInterruptedException { public void testBug() throws SchedulingInterruptedException { final var controllableDurationActivity = SchedulingActivity.of(idGenerator.next(), problem.getActivityType("ControllableDurationActivity"), Duration.of(1, Duration.MICROSECONDS), - Duration.of(3, Duration.MICROSECONDS), null, true, false); + Duration.of(3, Duration.MICROSECONDS), null, true); final var zeroDurationUncontrollableActivity = new ActivityExpression.Builder() .ofType(problem.getActivityType("ZeroDurationUncontrollableActivity")) diff --git a/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/simulation/CheckpointSimulationFacadeTest.java b/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/simulation/CheckpointSimulationFacadeTest.java index 92d213c63a..9a33e562e6 100644 --- a/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/simulation/CheckpointSimulationFacadeTest.java +++ b/scheduler-driver/src/test/java/gov/nasa/jpl/aerie/scheduler/simulation/CheckpointSimulationFacadeTest.java @@ -35,9 +35,9 @@ public class CheckpointSimulationFacadeTest { private static PlanInMemory makePlanA012(Map activityTypeMap) { final var plan = new PlanInMemory(); final var actTypeA = activityTypeMap.get("BasicActivity"); - plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t0, null, null, true, false)); - plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t1hr, null, null, true, false)); - plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t2hr, null, null, true, false)); + plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t0, null, null, true)); + plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t1hr, null, null, true)); + plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t2hr, null, null, true)); return plan; } @BeforeEach @@ -103,7 +103,7 @@ public void testStopsAtEndOfPlanningHorizon() { final var plan = new PlanInMemory(); final var actTypeA = activityTypes.get("ControllableDurationActivity"); - plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t0, HOUR.times(200), null, true, false)); + plan.add(SchedulingActivity.of(idGenerator.next(), actTypeA, t0, HOUR.times(200), null, true)); final var results = newSimulationFacade.simulateNoResultsAllActivities(plan).computeResults(); assertEquals(H.getEndAerie(), results.duration); assert(results.unfinishedActivities.size() == 1); diff --git a/scheduler-server/src/main/java/gov/nasa/jpl/aerie/scheduler/server/services/GraphQLMerlinDatabaseService.java b/scheduler-server/src/main/java/gov/nasa/jpl/aerie/scheduler/server/services/GraphQLMerlinDatabaseService.java index 7f0c30d2e0..230a308d6d 100644 --- a/scheduler-server/src/main/java/gov/nasa/jpl/aerie/scheduler/server/services/GraphQLMerlinDatabaseService.java +++ b/scheduler-server/src/main/java/gov/nasa/jpl/aerie/scheduler/server/services/GraphQLMerlinDatabaseService.java @@ -429,8 +429,9 @@ public Map updatePlanActivityDirective final var toModify = new ArrayList(); for (final var activity : plan.getActivities()) { if(activity.getParentActivity().isPresent()) continue; // Skip generated activities - if (!activity.isNew()) { - final var actFromInitialPlan = initialPlan.getActivityById(activity.id()).get(); + final var actFromInitialPlanOptional = initialPlan.getActivityById(activity.id()); + if (actFromInitialPlanOptional.isPresent()) { + final var actFromInitialPlan = actFromInitialPlanOptional.get(); //if act was present in initial plan final var activityDirectiveFromSchedulingDirective = new ActivityDirective( activity.startOffset(), @@ -505,9 +506,15 @@ private List generateModification(final ActivityDirective old } if (newState.anchorId() != oldState.anchorId()) { - operations.add( - $ -> $.add("anchor_id", newState.anchorId().id()) - ); + if (newState.anchorId() != null) { + operations.add( + $ -> $.add("anchor_id", newState.anchorId().id()) + ); + } else { + operations.add( + $ -> $.addNull("anchor_id") + ); + } } if (newState.anchoredToStart() != oldState.anchoredToStart()) {