Skip to content

Commit 0268390

Browse files
__temporal_workflow_metadata query responses should use "RawValue" (#2551)
1 parent 746d3c3 commit 0268390

File tree

3 files changed

+29
-7
lines changed

3 files changed

+29
-7
lines changed

temporal-sdk/src/main/java/io/temporal/internal/sync/SyncWorkflow.java

Lines changed: 8 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
package io.temporal.internal.sync;
22

3-
import io.temporal.api.common.v1.Header;
4-
import io.temporal.api.common.v1.Payloads;
5-
import io.temporal.api.common.v1.WorkflowExecution;
6-
import io.temporal.api.common.v1.WorkflowType;
3+
import io.temporal.api.common.v1.*;
74
import io.temporal.api.enums.v1.EventType;
85
import io.temporal.api.history.v1.HistoryEvent;
96
import io.temporal.api.history.v1.WorkflowExecutionStartedEventAttributes;
@@ -12,6 +9,7 @@
129
import io.temporal.common.context.ContextPropagator;
1310
import io.temporal.common.converter.DataConverter;
1411
import io.temporal.common.converter.DefaultDataConverter;
12+
import io.temporal.common.converter.RawValue;
1513
import io.temporal.internal.logging.LoggerTag;
1614
import io.temporal.internal.replay.ReplayWorkflow;
1715
import io.temporal.internal.replay.ReplayWorkflowContext;
@@ -225,7 +223,12 @@ public Optional<Payloads> query(WorkflowQuery query) {
225223
return DefaultDataConverter.STANDARD_INSTANCE.toPayloads(runner.stackTrace());
226224
}
227225
if (WorkflowClient.QUERY_TYPE_WORKFLOW_METADATA.equals(query.getQueryType())) {
228-
return dataConverterWithWorkflowContext.toPayloads(workflowContext.getWorkflowMetadata());
226+
// metadata should be readable independent of user DataConverter settings
227+
Payload payload =
228+
DefaultDataConverter.STANDARD_INSTANCE
229+
.toPayload(workflowContext.getWorkflowMetadata())
230+
.orElseThrow(() -> new IllegalStateException("Failed to serialize metadata"));
231+
return dataConverterWithWorkflowContext.toPayloads(new RawValue(payload));
229232
}
230233
Optional<Payloads> args =
231234
query.hasQueryArgs() ? Optional.of(query.getQueryArgs()) : Optional.empty();

temporal-sdk/src/test/java/io/temporal/common/converter/CodecDataConverterTest.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ static boolean isEncoded(Payload payload) {
123123
return payload.getData().startsWith(PrefixPayloadCodec.PREFIX);
124124
}
125125

126-
private static final class PrefixPayloadCodec implements PayloadCodec {
126+
public static final class PrefixPayloadCodec implements PayloadCodec {
127127
public static final ByteString PREFIX = ByteString.copyFromUtf8("ENCODED: ");
128128

129129
@Override

temporal-sdk/src/test/java/io/temporal/workflow/WorkflowMetadataTest.java

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,17 +4,36 @@
44
import io.temporal.api.sdk.v1.WorkflowInteractionDefinition;
55
import io.temporal.api.sdk.v1.WorkflowMetadata;
66
import io.temporal.client.WorkflowClient;
7+
import io.temporal.client.WorkflowClientOptions;
78
import io.temporal.client.WorkflowStub;
9+
import io.temporal.common.converter.CodecDataConverter;
10+
import io.temporal.common.converter.CodecDataConverterTest;
11+
import io.temporal.common.converter.DataConverter;
12+
import io.temporal.common.converter.DefaultDataConverter;
813
import io.temporal.testing.internal.SDKTestWorkflowRule;
14+
import java.util.Collections;
915
import org.junit.Assert;
1016
import org.junit.Rule;
1117
import org.junit.Test;
1218

1319
public class WorkflowMetadataTest {
1420

21+
CodecDataConverterTest.PrefixPayloadCodec prefixPayloadCodec =
22+
new CodecDataConverterTest.PrefixPayloadCodec();
23+
24+
DataConverter dataConverter =
25+
new CodecDataConverter(
26+
DefaultDataConverter.newDefaultInstance(),
27+
Collections.singletonList(prefixPayloadCodec),
28+
true);
29+
1530
@Rule
1631
public SDKTestWorkflowRule testWorkflowRule =
17-
SDKTestWorkflowRule.newBuilder().setWorkflowTypes(TestWorkflowWithMetadataImpl.class).build();
32+
SDKTestWorkflowRule.newBuilder()
33+
.setWorkflowClientOptions(
34+
WorkflowClientOptions.newBuilder().setDataConverter(dataConverter).build())
35+
.setWorkflowTypes(TestWorkflowWithMetadataImpl.class)
36+
.build();
1837

1938
@Test
2039
public void testGetMetadata() {

0 commit comments

Comments
 (0)