From e15884a9fc495bf65dba82cfd65fbd2e2e5b1018 Mon Sep 17 00:00:00 2001 From: Matt Dailis Date: Sun, 19 Dec 2021 17:36:48 -0800 Subject: [PATCH] Include effect model return value in SimulatedActivity --- .../jpl/aerie/merlin/driver/SimulatedActivity.java | 5 ++++- .../aerie/merlin/driver/engine/SimulationEngine.java | 11 ++++++++++- .../postgres/PostgresResultsCellRepository.java | 3 ++- .../merlin/server/mocks/StubMissionModelService.java | 1 - .../aerie/merlin/server/models/MissionModelTest.java | 5 ++--- 5 files changed, 18 insertions(+), 7 deletions(-) diff --git a/merlin-driver/src/main/java/gov/nasa/jpl/aerie/merlin/driver/SimulatedActivity.java b/merlin-driver/src/main/java/gov/nasa/jpl/aerie/merlin/driver/SimulatedActivity.java index c46819b6b6..1ac234be82 100644 --- a/merlin-driver/src/main/java/gov/nasa/jpl/aerie/merlin/driver/SimulatedActivity.java +++ b/merlin-driver/src/main/java/gov/nasa/jpl/aerie/merlin/driver/SimulatedActivity.java @@ -16,6 +16,7 @@ public final class SimulatedActivity { public final ActivityInstanceId parentId; public final List childIds; public final Optional directiveId; + public final SerializedValue returnValue; public SimulatedActivity( final String type, @@ -24,7 +25,8 @@ public SimulatedActivity( final Duration duration, final ActivityInstanceId parentId, final List childIds, - final Optional directiveId + final Optional directiveId, + final SerializedValue returnValue ) { this.type = type; this.arguments = arguments; @@ -33,6 +35,7 @@ public SimulatedActivity( this.parentId = parentId; this.childIds = childIds; this.directiveId = directiveId; + this.returnValue = returnValue; } @Override diff --git a/merlin-driver/src/main/java/gov/nasa/jpl/aerie/merlin/driver/engine/SimulationEngine.java b/merlin-driver/src/main/java/gov/nasa/jpl/aerie/merlin/driver/engine/SimulationEngine.java index 4a8667ccd4..214e607f8c 100644 --- a/merlin-driver/src/main/java/gov/nasa/jpl/aerie/merlin/driver/engine/SimulationEngine.java +++ b/merlin-driver/src/main/java/gov/nasa/jpl/aerie/merlin/driver/engine/SimulationEngine.java @@ -453,7 +453,8 @@ public SimulationResults computeResults( e.joinOffset().minus(e.startOffset()), activityParents.get(activityId), activityChildren.getOrDefault(activityId, Collections.emptyList()), - (activityParents.containsKey(activityId)) ? Optional.empty() : Optional.of(activityId) + (activityParents.containsKey(activityId)) ? Optional.empty() : Optional.of(activityId), + e.returnValue().map(taskReturn -> SimulationEngine.serializeReturnValue(directive, taskReturn.returnValue())).orElse(SerializedValue.UNIT) )); } else { unsimulatedActivities.put(activityId, new SerializedActivity( @@ -504,6 +505,14 @@ public SimulationResults computeResults( serializedTimeline); } + @SuppressWarnings("unchecked") + private static SerializedValue serializeReturnValue( + final Directive directive, + final TaskReturn returnValue) { + // SAFETY: Tasks always return the same type as the TaskSpecType that declares them + return directive.directiveType().serializeReturnValue((DirectiveReturn) returnValue); + } + private Optional trySerializeEvent(Event event, MissionModel.SerializableTopic serializableTopic) { return event.extract(topicOfSerializableTopic(serializableTopic), serializableTopic.serializer()); } diff --git a/merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/remotes/postgres/PostgresResultsCellRepository.java b/merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/remotes/postgres/PostgresResultsCellRepository.java index c031cf8414..29215b8244 100644 --- a/merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/remotes/postgres/PostgresResultsCellRepository.java +++ b/merlin-server/src/main/java/gov/nasa/jpl/aerie/merlin/server/remotes/postgres/PostgresResultsCellRepository.java @@ -293,7 +293,8 @@ final var record = entry.getValue(); record.duration(), record.parentId().map(pgIdToSimId::get).orElse(null), record.childIds().stream().map(pgIdToSimId::get).collect(Collectors.toList()), - record.directiveId() + record.directiveId(), + SerializedValue.UNIT // TODO retrieve return value from database )); } diff --git a/merlin-server/src/test/java/gov/nasa/jpl/aerie/merlin/server/mocks/StubMissionModelService.java b/merlin-server/src/test/java/gov/nasa/jpl/aerie/merlin/server/mocks/StubMissionModelService.java index efc4c26dbf..723a03f847 100644 --- a/merlin-server/src/test/java/gov/nasa/jpl/aerie/merlin/server/mocks/StubMissionModelService.java +++ b/merlin-server/src/test/java/gov/nasa/jpl/aerie/merlin/server/mocks/StubMissionModelService.java @@ -17,7 +17,6 @@ import java.util.List; import java.util.Map; import java.util.Objects; -import java.util.Optional; import java.util.TreeMap; public final class StubMissionModelService implements MissionModelService { diff --git a/merlin-server/src/test/java/gov/nasa/jpl/aerie/merlin/server/models/MissionModelTest.java b/merlin-server/src/test/java/gov/nasa/jpl/aerie/merlin/server/models/MissionModelTest.java index 97a11b6af9..fae771ca6f 100644 --- a/merlin-server/src/test/java/gov/nasa/jpl/aerie/merlin/server/models/MissionModelTest.java +++ b/merlin-server/src/test/java/gov/nasa/jpl/aerie/merlin/server/models/MissionModelTest.java @@ -14,7 +14,6 @@ import java.util.HashMap; import java.util.List; import java.util.Map; -import java.util.Optional; import static org.assertj.core.api.Assertions.assertThat; import static org.assertj.core.api.Assertions.catchThrowable; @@ -46,7 +45,7 @@ public void teardown() { @Test public void shouldGetActivityTypeList() throws MissionModelFacade.MissionModelContractException { // GIVEN - final Map expectedTypes = Map.of( + final Map expectedTypes = Map.of( "foo", new ActivityType( "foo", List.of( @@ -67,7 +66,7 @@ public void shouldGetActivityTypeList() throws MissionModelFacade.MissionModelCo @Test public void shouldGetActivityType() throws MissionModelFacade.NoSuchActivityTypeException, MissionModelFacade.MissionModelContractException { // GIVEN - final ActivityType expectedType = new ActivityType( + final ActivityType expectedType = new ActivityType( "foo", List.of( new Parameter("x", ValueSchema.INT),