diff --git a/sdk/src/main/java/io/dapr/client/DaprClientGrpc.java b/sdk/src/main/java/io/dapr/client/DaprClientGrpc.java index 5e0ab7d288..79d455d7bc 100644 --- a/sdk/src/main/java/io/dapr/client/DaprClientGrpc.java +++ b/sdk/src/main/java/io/dapr/client/DaprClientGrpc.java @@ -283,6 +283,9 @@ public Mono>>> getBulkState(GetBulkStateRequest reque .setStoreName(stateStoreName) .addAllKeys(keys) .setParallelism(parallelism); + if (request.getMetadata() != null) { + builder.putAllMetadata(request.getMetadata()); + } DaprProtos.GetBulkStateRequest envelope = builder.build(); return Mono.fromCallable(wrap(context, () -> { diff --git a/sdk/src/main/java/io/dapr/client/domain/GetBulkStateRequest.java b/sdk/src/main/java/io/dapr/client/domain/GetBulkStateRequest.java index 402eee7731..e7acefd1a1 100644 --- a/sdk/src/main/java/io/dapr/client/domain/GetBulkStateRequest.java +++ b/sdk/src/main/java/io/dapr/client/domain/GetBulkStateRequest.java @@ -8,6 +8,7 @@ import io.opentelemetry.context.Context; import java.util.List; +import java.util.Map; /** * A request to get bulk state by keys. @@ -18,6 +19,8 @@ public class GetBulkStateRequest { private List keys; + private Map metadata; + private int parallelism; private Context context; @@ -53,4 +56,12 @@ public Context getContext() { void setContext(Context context) { this.context = context; } + + public Map getMetadata() { + return metadata; + } + + void setMetadata(Map metadata) { + this.metadata = metadata; + } } diff --git a/sdk/src/main/java/io/dapr/client/domain/GetBulkStateRequestBuilder.java b/sdk/src/main/java/io/dapr/client/domain/GetBulkStateRequestBuilder.java index 0a4ae94262..28b5100d7e 100644 --- a/sdk/src/main/java/io/dapr/client/domain/GetBulkStateRequestBuilder.java +++ b/sdk/src/main/java/io/dapr/client/domain/GetBulkStateRequestBuilder.java @@ -10,6 +10,7 @@ import java.util.Arrays; import java.util.Collections; import java.util.List; +import java.util.Map; /** * Builds a request to request states. @@ -20,6 +21,8 @@ public class GetBulkStateRequestBuilder { private final List keys; + private Map metadata; + private int parallelism = 1; private Context context; @@ -34,6 +37,11 @@ public GetBulkStateRequestBuilder(String storeName, String... keys) { this.keys = keys == null ? null : Collections.unmodifiableList(Arrays.asList(keys)); } + public GetBulkStateRequestBuilder withMetadata(Map metadata) { + this.metadata = metadata == null ? null : Collections.unmodifiableMap(metadata); + return this; + } + public GetBulkStateRequestBuilder withParallelism(int parallelism) { this.parallelism = parallelism; return this; @@ -52,6 +60,7 @@ public GetBulkStateRequest build() { GetBulkStateRequest request = new GetBulkStateRequest(); request.setStoreName(this.storeName); request.setKeys(this.keys); + request.setMetadata(this.metadata); request.setParallelism(this.parallelism); request.setContext(this.context); return request; diff --git a/sdk/src/test/java/io/dapr/client/DaprClientGrpcTest.java b/sdk/src/test/java/io/dapr/client/DaprClientGrpcTest.java index e1ed48e9c4..0a341480db 100644 --- a/sdk/src/test/java/io/dapr/client/DaprClientGrpcTest.java +++ b/sdk/src/test/java/io/dapr/client/DaprClientGrpcTest.java @@ -951,6 +951,7 @@ public void getStatesIllegalArgumentExceptionTest() { }); // negative parallelism GetBulkStateRequest req = new GetBulkStateRequestBuilder(STATE_STORE_NAME, Collections.singletonList("100")) + .withMetadata(new HashMap<>()) .withParallelism(-1) .build(); assertThrows(IllegalArgumentException.class, () -> adapter.getBulkState(req, TypeRef.BOOLEAN).block()); @@ -958,10 +959,14 @@ public void getStatesIllegalArgumentExceptionTest() { @Test public void getStatesString() throws IOException { + Map metadata = new HashMap<>(); + metadata.put("meta1", "value1"); + metadata.put("meta2", "value2"); DaprProtos.GetBulkStateResponse responseEnvelope = DaprProtos.GetBulkStateResponse.newBuilder() .addItems(DaprProtos.BulkStateItem.newBuilder() .setData(serialize("hello world")) .setKey("100") + .putAllMetadata(metadata) .setEtag("1") .build()) .addItems(DaprProtos.BulkStateItem.newBuilder() @@ -983,6 +988,7 @@ public void getStatesString() throws IOException { assertEquals(2, result.size()); assertEquals("100", result.stream().findFirst().get().getKey()); assertEquals("hello world", result.stream().findFirst().get().getValue()); + assertEquals(metadata, result.stream().findFirst().get().getMetadata()); assertEquals("1", result.stream().findFirst().get().getEtag()); assertNull(result.stream().findFirst().get().getError()); assertEquals("200", result.stream().skip(1).findFirst().get().getKey()); @@ -993,10 +999,13 @@ public void getStatesString() throws IOException { @Test public void getStatesInteger() throws IOException { + Map metadata = new HashMap<>(); + metadata.put("meta1", "value1"); DaprProtos.GetBulkStateResponse responseEnvelope = DaprProtos.GetBulkStateResponse.newBuilder() .addItems(DaprProtos.BulkStateItem.newBuilder() .setData(serialize(1234)) .setKey("100") + .putAllMetadata(metadata) .setEtag("1") .build()) .addItems(DaprProtos.BulkStateItem.newBuilder() @@ -1018,6 +1027,7 @@ public void getStatesInteger() throws IOException { assertEquals(2, result.size()); assertEquals("100", result.stream().findFirst().get().getKey()); assertEquals(1234, (int)result.stream().findFirst().get().getValue()); + assertEquals(metadata, result.stream().findFirst().get().getMetadata()); assertEquals("1", result.stream().findFirst().get().getEtag()); assertNull(result.stream().findFirst().get().getError()); assertEquals("200", result.stream().skip(1).findFirst().get().getKey()); @@ -1028,10 +1038,13 @@ public void getStatesInteger() throws IOException { @Test public void getStatesBoolean() throws IOException { + Map metadata = new HashMap<>(); + metadata.put("meta1", "value1"); DaprProtos.GetBulkStateResponse responseEnvelope = DaprProtos.GetBulkStateResponse.newBuilder() .addItems(DaprProtos.BulkStateItem.newBuilder() .setData(serialize(true)) .setKey("100") + .putAllMetadata(metadata) .setEtag("1") .build()) .addItems(DaprProtos.BulkStateItem.newBuilder() @@ -1053,6 +1066,7 @@ public void getStatesBoolean() throws IOException { assertEquals(2, result.size()); assertEquals("100", result.stream().findFirst().get().getKey()); assertEquals(true, result.stream().findFirst().get().getValue()); + assertEquals(metadata, result.stream().findFirst().get().getMetadata()); assertEquals("1", result.stream().findFirst().get().getEtag()); assertNull(result.stream().findFirst().get().getError()); assertEquals("200", result.stream().skip(1).findFirst().get().getKey()); @@ -1063,10 +1077,12 @@ public void getStatesBoolean() throws IOException { @Test public void getStatesByteArray() throws IOException { + Map metadata = new HashMap<>(); DaprProtos.GetBulkStateResponse responseEnvelope = DaprProtos.GetBulkStateResponse.newBuilder() .addItems(DaprProtos.BulkStateItem.newBuilder() .setData(serialize(new byte[]{1, 2, 3})) .setKey("100") + .putAllMetadata(metadata) .setEtag("1") .build()) .addItems(DaprProtos.BulkStateItem.newBuilder() @@ -1088,6 +1104,7 @@ public void getStatesByteArray() throws IOException { assertEquals(2, result.size()); assertEquals("100", result.stream().findFirst().get().getKey()); assertArrayEquals(new byte[]{1, 2, 3}, result.stream().findFirst().get().getValue()); + assertEquals(0, result.stream().findFirst().get().getMetadata().size()); assertEquals("1", result.stream().findFirst().get().getEtag()); assertNull(result.stream().findFirst().get().getError()); assertEquals("200", result.stream().skip(1).findFirst().get().getKey()); @@ -1124,6 +1141,7 @@ public void getStatesObject() throws IOException { assertEquals(2, result.size()); assertEquals("100", result.stream().findFirst().get().getKey()); assertEquals(object, result.stream().findFirst().get().getValue()); + assertEquals(0, result.stream().findFirst().get().getMetadata().size()); assertEquals("1", result.stream().findFirst().get().getEtag()); assertNull(result.stream().findFirst().get().getError()); assertEquals("200", result.stream().skip(1).findFirst().get().getKey());