Skip to content

Commit bd47d81

Browse files
committed
Return Constraint Results in Run Order
While the constraints are run according to their priority, because the results did not have that guarantee, causing flakiness in E2ETests
1 parent 5e1aadc commit bd47d81

3 files changed

Lines changed: 12 additions & 5 deletions

File tree

merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/http/ResponseSerializers.java

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
import java.util.Arrays;
3636
import java.util.List;
3737
import java.util.Map;
38+
import java.util.SortedMap;
3839
import java.util.function.Function;
3940
import java.util.stream.Collectors;
4041
import java.util.stream.IntStream;
@@ -287,7 +288,7 @@ public static JsonValue serializeResourceSamples(final Map<String, List<Pair<Dur
287288
.build();
288289
}
289290

290-
public static JsonValue serializeConstraintResults(final int requestId, final Map<ConstraintRecord, Fallible<ConstraintResult, List<? extends Exception>>> resultMap) {
291+
public static JsonValue serializeConstraintResults(final int requestId, final SortedMap<ConstraintRecord, Fallible<ConstraintResult, List<? extends Exception>>> resultMap) {
291292
var results = resultMap.entrySet().stream().map(entry -> {
292293

293294
final var constraint = entry.getKey();
@@ -323,7 +324,7 @@ public static JsonValue serializeConstraintResults(final int requestId, final Ma
323324
}
324325

325326
// successful runs
326-
var constraintResult = (ConstraintResult) fallible.getOptional().get();
327+
var constraintResult = fallible.getOptional().get();
327328
return Json.createObjectBuilder()
328329
.add("success", JsonValue.TRUE)
329330
.add("constraintId", constraint.constraintId())

merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/models/ConstraintRecord.java

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,4 +23,10 @@ public record ConstraintRecord(
2323
String description,
2424
ConstraintType type,
2525
Map<String, SerializedValue> arguments
26-
) {}
26+
) implements Comparable<ConstraintRecord> {
27+
28+
@Override
29+
public int compareTo(final ConstraintRecord o) {
30+
return Long.compare(this.priority, o.priority);
31+
}
32+
}

merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/services/ConstraintAction.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ public List<BulkConstraintEffectiveArgumentResponse> getConstraintProcedureEffec
8989
* @throws MissionModelService.NoSuchMissionModelException If the plan's mission model does not exist.
9090
* @throws SimulationDatasetMismatchException If the specified simulation is not a simulation of the specified plan.
9191
*/
92-
public Pair<Integer, Map<ConstraintRecord, Fallible<ConstraintResult, List<? extends Exception>>>> getViolations(
92+
public Pair<Integer, SortedMap<ConstraintRecord, Fallible<ConstraintResult, List<? extends Exception>>>> getViolations(
9393
final PlanId planId,
9494
final Optional<SimulationDatasetId> simulationDatasetId,
9595
final boolean force,
@@ -117,7 +117,7 @@ public Pair<Integer, Map<ConstraintRecord, Fallible<ConstraintResult, List<? ext
117117
final SimulationDatasetId simDatasetId = resultsHandle.getSimulationDatasetId();
118118

119119
final var constraints = new ArrayList<>(this.planService.getConstraintsForPlan(planId));
120-
final var constraintResultMap = new HashMap<ConstraintRecord, Fallible<ConstraintResult, List<? extends Exception>>>();
120+
final var constraintResultMap = new TreeMap<ConstraintRecord, Fallible<ConstraintResult, List<? extends Exception>>>();
121121

122122
// Load cached results if the force rerun flag is not set
123123
final var validConstraintRuns = force ? new HashMap<ConstraintRecord, ConstraintResult>() :

0 commit comments

Comments
 (0)