From fc4cf2ed248dc9f5b90eac37950788bc3c42598d Mon Sep 17 00:00:00 2001 From: Yury Brigadirenko Date: Wed, 7 Dec 2022 04:14:42 +0100 Subject: [PATCH] runtime-v2: fix entryPoint in effective yaml (#685) --- it/server/pom.xml | 5 ++++ .../concord/it/server/ProcessIT.java | 25 +++++++++++++++++++ .../it/server/effectiveYaml/concord.yml | 9 +++++++ .../concord/process/loader/model/Options.java | 2 ++ .../EffectiveProcessDefinitionProviderV2.java | 1 + .../EffectiveProcessDefinitionProcessor.java | 1 + .../processors/EntryPointProcessor.java | 3 ++- 7 files changed, 45 insertions(+), 1 deletion(-) create mode 100644 it/server/src/test/resources/com/walmartlabs/concord/it/server/effectiveYaml/concord.yml diff --git a/it/server/pom.xml b/it/server/pom.xml index 089a825706..3b58492c52 100644 --- a/it/server/pom.xml +++ b/it/server/pom.xml @@ -192,6 +192,11 @@ jackson-datatype-jsr310 test + + com.fasterxml.jackson.dataformat + jackson-dataformat-yaml + test + com.squareup.okhttp okhttp diff --git a/it/server/src/test/java/com/walmartlabs/concord/it/server/ProcessIT.java b/it/server/src/test/java/com/walmartlabs/concord/it/server/ProcessIT.java index a232e2ab5b..671b022b21 100644 --- a/it/server/src/test/java/com/walmartlabs/concord/it/server/ProcessIT.java +++ b/it/server/src/test/java/com/walmartlabs/concord/it/server/ProcessIT.java @@ -20,13 +20,17 @@ * ===== */ +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.dataformat.yaml.YAMLFactory; import com.walmartlabs.concord.ApiException; import com.walmartlabs.concord.client.*; import com.walmartlabs.concord.client.ProcessEntry.StatusEnum; +import com.walmartlabs.concord.common.ConfigurationUtils; import com.walmartlabs.concord.common.IOUtils; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import java.io.File; import java.nio.file.Files; import java.nio.file.Path; import java.nio.file.Paths; @@ -289,4 +293,25 @@ public void testForkInitiatorFromApiKey() throws Exception { assertLog(".*initiator: .*" + userAName.toLowerCase() + ".*", ab); } } + + @Test + @SuppressWarnings("unchecked") + public void testEffectiveYaml() throws Exception { + byte[] payload = archive(ProcessIT.class.getResource("effectiveYaml").toURI()); + + ProcessApi processApi = new ProcessApi(getApiClient()); + StartProcessResponse spr = start("test", payload); + + // --- + + ProcessEntry pir = waitForCompletion(processApi, spr.getInstanceId()); + assertEquals(ProcessEntry.StatusEnum.FINISHED, pir.getStatus()); + + File effectiveYaml = processApi.downloadStateFile(pir.getInstanceId(), ".concord/effective.concord.yml"); + assertNotNull(effectiveYaml); + + Map m = new ObjectMapper(new YAMLFactory()).readValue(effectiveYaml, Map.class); + String entryPoint = (String) ConfigurationUtils.get(m, "configuration", "entryPoint"); + assertEquals("test", entryPoint); + } } diff --git a/it/server/src/test/resources/com/walmartlabs/concord/it/server/effectiveYaml/concord.yml b/it/server/src/test/resources/com/walmartlabs/concord/it/server/effectiveYaml/concord.yml new file mode 100644 index 0000000000..7660b1cae1 --- /dev/null +++ b/it/server/src/test/resources/com/walmartlabs/concord/it/server/effectiveYaml/concord.yml @@ -0,0 +1,9 @@ +configuration: + runtime: concord-v2 + +flows: + default: + - log: "default" + + test: + - log: "test" diff --git a/runtime/loader/src/main/java/com/walmartlabs/concord/process/loader/model/Options.java b/runtime/loader/src/main/java/com/walmartlabs/concord/process/loader/model/Options.java index 8cf1d75d86..f855e31093 100644 --- a/runtime/loader/src/main/java/com/walmartlabs/concord/process/loader/model/Options.java +++ b/runtime/loader/src/main/java/com/walmartlabs/concord/process/loader/model/Options.java @@ -35,6 +35,8 @@ public interface Options { @Nullable UUID parentInstanceId(); + String entryPoint(); + @Value.Default @AllowNulls default Map configuration() { diff --git a/runtime/loader/src/main/java/com/walmartlabs/concord/process/loader/v2/EffectiveProcessDefinitionProviderV2.java b/runtime/loader/src/main/java/com/walmartlabs/concord/process/loader/v2/EffectiveProcessDefinitionProviderV2.java index 2292fad4e9..8886fe2072 100644 --- a/runtime/loader/src/main/java/com/walmartlabs/concord/process/loader/v2/EffectiveProcessDefinitionProviderV2.java +++ b/runtime/loader/src/main/java/com/walmartlabs/concord/process/loader/v2/EffectiveProcessDefinitionProviderV2.java @@ -61,6 +61,7 @@ public void serialize(Options options, OutputStream out) throws Exception { ProcessDefinition pd = ProcessDefinition.builder().from(delegate) .configuration(ProcessDefinitionConfiguration.builder().from(delegate.configuration()) + .entryPoint(options.entryPoint()) .arguments(arguments) .build()) .flows(flows) diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/process/pipelines/processors/EffectiveProcessDefinitionProcessor.java b/server/impl/src/main/java/com/walmartlabs/concord/server/process/pipelines/processors/EffectiveProcessDefinitionProcessor.java index ac8a5aee8e..2ca5a35bd7 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/process/pipelines/processors/EffectiveProcessDefinitionProcessor.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/process/pipelines/processors/EffectiveProcessDefinitionProcessor.java @@ -62,6 +62,7 @@ public Payload process(Chain chain, Payload payload) { Options opts = Options.builder() .instanceId(payload.getProcessKey().getInstanceId()) + .entryPoint(payload.getHeader(Payload.ENTRY_POINT)) .parentInstanceId(payload.getHeader(Payload.PARENT_INSTANCE_ID)) .configuration(sanitizeConfiguration(payload.getHeader(Payload.CONFIGURATION, Collections.emptyMap()))) .activeProfiles(payload.getHeader(Payload.ACTIVE_PROFILES, Collections.emptyList())) diff --git a/server/impl/src/main/java/com/walmartlabs/concord/server/process/pipelines/processors/EntryPointProcessor.java b/server/impl/src/main/java/com/walmartlabs/concord/server/process/pipelines/processors/EntryPointProcessor.java index 12d2910f3d..af5689aec9 100644 --- a/server/impl/src/main/java/com/walmartlabs/concord/server/process/pipelines/processors/EntryPointProcessor.java +++ b/server/impl/src/main/java/com/walmartlabs/concord/server/process/pipelines/processors/EntryPointProcessor.java @@ -66,7 +66,8 @@ public Payload process(Chain chain, Payload payload) { } cfg.put(Constants.Request.ENTRY_POINT_KEY, s); - payload = payload.putHeader(Payload.CONFIGURATION, cfg); + payload = payload.putHeader(Payload.CONFIGURATION, cfg) + .putHeader(Payload.ENTRY_POINT, s); logManager.info(payload.getProcessKey(), "Using entry point: {}", s);