From 1830d793c24f665d18bcf6d562ccd16acbd1b617 Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Thu, 13 Jun 2024 21:33:24 +0530 Subject: [PATCH 01/14] grpc custom metadata passthrough implementation --- .../bidi.stream.rpc.write.abort/client.rpt | 4 ++ .../bidi.stream.rpc.write.abort/server.rpt | 4 ++ .../grpc/produce/bidi.stream.rpc/client.rpt | 5 +++ .../grpc/produce/bidi.stream.rpc/server.rpt | 5 +++ .../grpc/produce/client.stream.rpc/client.rpt | 5 +++ .../grpc/produce/client.stream.rpc/server.rpt | 5 +++ .../grpc/produce/server.stream.rpc/client.rpt | 5 +++ .../grpc/produce/server.stream.rpc/server.rpt | 5 +++ .../unary.rpc.message.value.100k/client.rpt | 5 +++ .../unary.rpc.message.value.100k/server.rpt | 7 ++++ .../streams/grpc/produce/unary.rpc/client.rpt | 5 +++ .../streams/grpc/produce/unary.rpc/server.rpt | 5 +++ .../bidi.stream.rpc.write.abort/client.rpt | 3 ++ .../bidi.stream.rpc.write.abort/server.rpt | 3 ++ .../kafka/produce/bidi.stream.rpc/client.rpt | 3 ++ .../kafka/produce/bidi.stream.rpc/server.rpt | 3 ++ .../client.stream.rpc.write.abort/client.rpt | 2 + .../client.stream.rpc.write.abort/server.rpt | 2 + .../produce/client.stream.rpc/client.rpt | 3 ++ .../produce/client.stream.rpc/server.rpt | 3 ++ .../server.stream.rpc.read.aborted/client.rpt | 2 + .../server.stream.rpc.read.aborted/server.rpt | 2 + .../produce/server.stream.rpc/client.rpt | 3 ++ .../produce/server.stream.rpc/server.rpt | 3 ++ .../kafka/produce/unary.rpc.error/client.rpt | 3 ++ .../kafka/produce/unary.rpc.error/server.rpt | 3 ++ .../unary.rpc.message.value.100k/client.rpt | 3 ++ .../unary.rpc.message.value.100k/server.rpt | 3 ++ .../unary.rpc.sent.write.abort/client.rpt | 2 + .../unary.rpc.sent.write.abort/server.rpt | 2 + .../kafka/produce/unary.rpc/client.rpt | 3 ++ .../kafka/produce/unary.rpc/server.rpt | 3 ++ .../binding/grpc/internal/GrpcFunctions.java | 10 ++--- .../main/resources/META-INF/zilla/grpc.idl | 8 ++-- .../grpc/internal/GrpcFunctionsTest.java | 39 +++++++++++++++++++ 35 files changed, 162 insertions(+), 9 deletions(-) diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc.write.abort/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc.write.abort/client.rpt index ea5baa610b..2dacff6b67 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc.write.abort/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc.write.abort/client.rpt @@ -33,6 +33,10 @@ write ${grpc:protobuf() .build()} write flush +read zilla:begin.ext ${grpc:matchBeginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} read ${grpc:protobuf() .string(1, "Hello World1") diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc.write.abort/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc.write.abort/server.rpt index 5419111648..bf5f00379d 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc.write.abort/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc.write.abort/server.rpt @@ -33,6 +33,10 @@ read ${grpc:protobuf() .string(1, "Hello World1") .build()} +write zilla:begin.ext ${grpc:beginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} write ${grpc:protobuf() .string(1, "Hello World1") diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/client.rpt index 3a5aa74d54..974a76c5fe 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/client.rpt @@ -38,6 +38,11 @@ write ${grpc:protobuf() .build()} write flush +read zilla:begin.ext ${grpc:matchBeginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} + read ${grpc:protobuf() .string(1, "Hello World1") .build()} diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/server.rpt index 72d1d3cdf5..e15ed15896 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/server.rpt @@ -37,6 +37,11 @@ read ${grpc:protobuf() .string(1, "Hello World2") .build()} +write zilla:begin.ext ${grpc:beginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} + write ${grpc:protobuf() .string(1, "Hello World1") .build()} diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/client.rpt index 4e05a7c568..284273f53b 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/client.rpt @@ -40,6 +40,11 @@ write flush write close +read zilla:begin.ext ${grpc:matchBeginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} + read ${grpc:protobuf() .string(1, "Hello World") .build()} diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/server.rpt index 22048338e9..ca33d408ef 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/server.rpt @@ -39,6 +39,11 @@ read ${grpc:protobuf() read closed +write zilla:begin.ext ${grpc:beginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} + write ${grpc:protobuf() .string(1, "Hello World") .build()} diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/client.rpt index a570d1a3b2..83a40f64d8 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/client.rpt @@ -36,6 +36,11 @@ write flush write close +read zilla:begin.ext ${grpc:matchBeginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} + read ${grpc:protobuf() .string(1, "Hello World1") .build()} diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/server.rpt index 8758f82dee..754f916b04 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/server.rpt @@ -35,6 +35,11 @@ read ${grpc:protobuf() read closed +write zilla:begin.ext ${grpc:beginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} + write ${grpc:protobuf() .string(1, "Hello World1") .build()} diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.message.value.100k/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.message.value.100k/client.rpt index f8d64c29be..d28237b599 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.message.value.100k/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.message.value.100k/client.rpt @@ -42,6 +42,11 @@ write flush write close +read zilla:begin.ext ${grpc:matchBeginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} + read zilla:data.ext ${grpc:dataEx() .typeId(zilla:id("grpc")) .deferred(94217) diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.message.value.100k/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.message.value.100k/server.rpt index b91f68a5a2..0c4d775cc0 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.message.value.100k/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.message.value.100k/server.rpt @@ -39,6 +39,13 @@ read ${grpc:protobuf() read closed +write zilla:begin.ext ${grpc:beginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} + +write flush + write zilla:data.ext ${grpc:dataEx() .typeId(zilla:id("grpc")) .deferred(94217) diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/client.rpt index 47922b4509..a571ab37ca 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/client.rpt @@ -35,6 +35,11 @@ write flush write close +read zilla:begin.ext ${grpc:matchBeginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} + read ${grpc:protobuf() .string(1, "Hello World") .build()} diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/server.rpt index 310ef438f8..9ee3cde15c 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/server.rpt @@ -35,6 +35,11 @@ read ${grpc:protobuf() read closed +write zilla:begin.ext ${grpc:beginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} + write ${grpc:protobuf() .string(1, "Hello World") .build()} diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/client.rpt index 13097e848b..90700990d6 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/client.rpt @@ -41,6 +41,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoBidiStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-14f43bae85c2ce394c9bd81ff6fa9d77") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} write ${grpc:protobuf() @@ -97,6 +99,7 @@ read zilla:data.ext ${kafka:matchDataEx() .progress(0, 2) .progress(1, 1) .key("test") + .header("meta:custom", "value") .build() .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/server.rpt index bd89e7610f..883c701673 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/server.rpt @@ -43,6 +43,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoBidiStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-14f43bae85c2ce394c9bd81ff6fa9d77") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read ${grpc:protobuf() @@ -92,6 +94,7 @@ write zilla:data.ext ${kafka:dataEx() .progress(0, 2) .progress(1, 1) .key("test") + .header("meta:custom", "value") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/client.rpt index 089e230868..276d5910ce 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/client.rpt @@ -41,6 +41,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoBidiStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-14f43bae85c2ce394c9bd81ff6fa9d77") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} write ${grpc:protobuf() @@ -116,6 +118,7 @@ read zilla:data.ext ${kafka:matchDataEx() .progress(0, 2) .progress(1, 1) .key("test") + .header("meta:custom", "value") .build() .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/server.rpt index 96ed317970..7717f2109c 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/server.rpt @@ -43,6 +43,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoBidiStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-14f43bae85c2ce394c9bd81ff6fa9d77") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read ${grpc:protobuf() @@ -111,6 +113,7 @@ write zilla:data.ext ${kafka:dataEx() .progress(0, 2) .progress(1, 1) .key("test") + .header("meta:custom", "value") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc.write.abort/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc.write.abort/client.rpt index b6e9f89a71..69971cc903 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc.write.abort/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc.write.abort/client.rpt @@ -41,6 +41,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoClientStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-97e816c79fb6624b7d221026cc36107c") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc.write.abort/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc.write.abort/server.rpt index 1fa1fa669c..6a358aba99 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc.write.abort/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc.write.abort/server.rpt @@ -43,6 +43,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoClientStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-97e816c79fb6624b7d221026cc36107c") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/client.rpt index 2e86e4dec6..75628e28bc 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/client.rpt @@ -41,6 +41,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoClientStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-97e816c79fb6624b7d221026cc36107c") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} write ${grpc:protobuf() @@ -115,6 +117,7 @@ read zilla:data.ext ${kafka:matchDataEx() .progress(0, 2) .progress(1, 1) .key("test") + .header("meta:custom", "value") .build() .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/server.rpt index f0299d0558..5727f18ab7 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/server.rpt @@ -43,6 +43,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoClientStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-97e816c79fb6624b7d221026cc36107c") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read ${grpc:protobuf() @@ -111,6 +113,7 @@ write zilla:data.ext ${kafka:dataEx() .progress(0, 2) .progress(1, 1) .key("test") + .header("meta:custom", "value") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc.read.aborted/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc.read.aborted/client.rpt index 4a76d9f5f5..c390354af6 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc.read.aborted/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc.read.aborted/client.rpt @@ -42,6 +42,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoServerStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-08085616660359db13a42b81ed633c5d") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc.read.aborted/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc.read.aborted/server.rpt index c0f1cf9d6c..2170e7c34d 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc.read.aborted/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc.read.aborted/server.rpt @@ -43,6 +43,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoServerStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-08085616660359db13a42b81ed633c5d") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read zilla:data.null diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/client.rpt index 2b1dbe4598..f3f5726218 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/client.rpt @@ -41,6 +41,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoServerStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-08085616660359db13a42b81ed633c5d") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} write ${grpc:protobuf() @@ -96,6 +98,7 @@ read zilla:data.ext ${kafka:matchDataEx() .progress(0, 2) .progress(1, 1) .key("test") + .header("meta:custom", "value") .build() .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/server.rpt index 18f5e83aad..cb67aea7d8 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/server.rpt @@ -43,6 +43,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoServerStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-08085616660359db13a42b81ed633c5d") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read ${grpc:protobuf() @@ -93,6 +95,7 @@ write zilla:data.ext ${kafka:dataEx() .progress(0, 2) .progress(1, 1) .key("test") + .header("meta:custom", "value") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.error/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.error/client.rpt index 2e72214717..9da5392178 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.error/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.error/client.rpt @@ -41,6 +41,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-479f2c3fb58bc3f04bbe15440a657670") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} write ${grpc:protobuf() @@ -97,6 +99,7 @@ read zilla:data.ext ${kafka:matchDataEx() .progress(1, 1) .key("test") .header("zilla:status", "9") + .header("meta:custom", "value") .build() .build()} read zilla:data.null diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.error/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.error/server.rpt index ee7639472e..721e97af9e 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.error/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.error/server.rpt @@ -43,6 +43,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-479f2c3fb58bc3f04bbe15440a657670") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -95,6 +97,7 @@ write zilla:data.ext ${kafka:dataEx() .progress(1, 1) .key("test") .header("zilla:status", "9") + .header("meta:custom", "value") .build() .build()} diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.message.value.100k/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.message.value.100k/client.rpt index 6aa0fee10e..6754d64570 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.message.value.100k/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.message.value.100k/client.rpt @@ -43,6 +43,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-479f2c3fb58bc3f04bbe15440a657670") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} write ${grpc:protobuf() @@ -99,6 +101,7 @@ read zilla:data.ext ${kafka:matchDataEx() .progress(0, 2) .progress(1, 1) .key("test") + .header("meta:custom", "value") .build() .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.message.value.100k/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.message.value.100k/server.rpt index 4417660509..fc2610d846 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.message.value.100k/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.message.value.100k/server.rpt @@ -43,6 +43,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-479f2c3fb58bc3f04bbe15440a657670") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -95,6 +97,7 @@ write zilla:data.ext ${kafka:dataEx() .progress(0, 2) .progress(1, 1) .key("test") + .header("meta:custom", "value") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.sent.write.abort/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.sent.write.abort/client.rpt index 6c84ae591b..f71481de68 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.sent.write.abort/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.sent.write.abort/client.rpt @@ -41,6 +41,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-479f2c3fb58bc3f04bbe15440a657670") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.sent.write.abort/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.sent.write.abort/server.rpt index d76aa21ab0..d6d4fff808 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.sent.write.abort/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.sent.write.abort/server.rpt @@ -43,6 +43,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-479f2c3fb58bc3f04bbe15440a657670") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read zilla:data.null diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/client.rpt index 18487e21af..06b47e87af 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/client.rpt @@ -41,6 +41,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-479f2c3fb58bc3f04bbe15440a657670") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} write ${grpc:protobuf() @@ -96,6 +98,7 @@ read zilla:data.ext ${kafka:matchDataEx() .progress(0, 2) .progress(1, 1) .key("test") + .header("meta:custom", "value") .build() .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/server.rpt index 7040d097a8..20fe199b7a 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/server.rpt @@ -43,6 +43,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-479f2c3fb58bc3f04bbe15440a657670") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -94,6 +96,7 @@ write zilla:data.ext ${kafka:dataEx() .progress(0, 2) .progress(1, 1) .key("test") + .header("meta:custom", "value") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc.spec/src/main/java/io/aklivity/zilla/specs/binding/grpc/internal/GrpcFunctions.java b/specs/binding-grpc.spec/src/main/java/io/aklivity/zilla/specs/binding/grpc/internal/GrpcFunctions.java index f31186e95b..ad2a84c17d 100644 --- a/specs/binding-grpc.spec/src/main/java/io/aklivity/zilla/specs/binding/grpc/internal/GrpcFunctions.java +++ b/specs/binding-grpc.spec/src/main/java/io/aklivity/zilla/specs/binding/grpc/internal/GrpcFunctions.java @@ -239,7 +239,7 @@ public GrpcBeginExMatcherBuilder metadata( public BytesMatcher build() { - return method != null ? this::match : buf -> null; + return this::match; } private GrpcBeginExFW match( @@ -280,25 +280,25 @@ private boolean matchMetadata( private boolean matchMethod( GrpcBeginExFW beginEx) { - return method.equals(beginEx.method().asString()); + return method == null || method.equals(beginEx.method().asString()); } private boolean matchScheme( GrpcBeginExFW beginEx) { - return scheme.equals(beginEx.scheme().asString()); + return scheme == null || scheme.equals(beginEx.scheme().asString()); } private boolean matchAuthority( GrpcBeginExFW beginEx) { - return authority.equals(beginEx.authority().asString()); + return authority == null || authority.equals(beginEx.authority().asString()); } private boolean matchService( GrpcBeginExFW beginEx) { - return service.equals(beginEx.service().asString()); + return service == null || service.equals(beginEx.service().asString()); } private boolean matchTypeId( diff --git a/specs/binding-grpc.spec/src/main/resources/META-INF/zilla/grpc.idl b/specs/binding-grpc.spec/src/main/resources/META-INF/zilla/grpc.idl index 9d6ce62d4d..9f7471c7eb 100644 --- a/specs/binding-grpc.spec/src/main/resources/META-INF/zilla/grpc.idl +++ b/specs/binding-grpc.spec/src/main/resources/META-INF/zilla/grpc.idl @@ -33,10 +33,10 @@ scope grpc struct GrpcBeginEx extends core::stream::Extension { - string16 scheme; - string16 authority; - string16 service; - string16 method; + string16 scheme = null; + string16 authority = null; + string16 service = null; + string16 method = null; GrpcMetadata[] metadata; } diff --git a/specs/binding-grpc.spec/src/test/java/io/aklivity/zilla/specs/binding/grpc/internal/GrpcFunctionsTest.java b/specs/binding-grpc.spec/src/test/java/io/aklivity/zilla/specs/binding/grpc/internal/GrpcFunctionsTest.java index 5295818147..909475f72e 100644 --- a/specs/binding-grpc.spec/src/test/java/io/aklivity/zilla/specs/binding/grpc/internal/GrpcFunctionsTest.java +++ b/specs/binding-grpc.spec/src/test/java/io/aklivity/zilla/specs/binding/grpc/internal/GrpcFunctionsTest.java @@ -92,6 +92,23 @@ public void shouldGenerateBeginExtension() assertTrue(beginEx.metadata().sizeof() > 0); } + @Test + public void shouldGenerateBeginExtensionWithMetadata() + { + byte[] build = GrpcFunctions.beginEx() + .typeId(0x01) + .metadata("custom", "test") + .build(); + DirectBuffer buffer = new UnsafeBuffer(build); + GrpcBeginExFW beginEx = new GrpcBeginExFW().wrap(buffer, 0, buffer.capacity()); + beginEx.metadata().forEach(h -> + { + assertTrue(nameBuilder.set("custom".getBytes()).build().equals(h.name())); + assertTrue(valueBuilder.set("test".getBytes()).build().equals(h.value())); + }); + assertTrue(beginEx.metadata().sizeof() > 0); + } + @Test public void shouldMatchBeginExtension() throws Exception { @@ -122,6 +139,28 @@ public void shouldMatchBeginExtension() throws Exception assertNotNull(matcher.match(byteBuf)); } + @Test + public void shouldMatchBeginExtensionWithMetadata() throws Exception + { + String value = "value"; + String custom = "custom"; + BytesMatcher matcher = GrpcFunctions.matchBeginEx() + .typeId(0x01) + .metadata(custom, value) + .build(); + + ByteBuffer byteBuf = ByteBuffer.allocate(1024); + + new GrpcBeginExFW.Builder().wrap(new UnsafeBuffer(byteBuf), 0, byteBuf.capacity()) + .typeId(0x01) + .metadataItem(h -> h.type(t -> t.set(TEXT).build()).nameLen(custom.length()) + .name(nameBuilder.set(custom.getBytes()).build()) + .valueLen(value.length()).value(valueBuilder.set(value.getBytes()).build())) + .build(); + + assertNotNull(matcher.match(byteBuf)); + } + @Test public void shouldGenerateResetExtension() { From cf715fc3287a8ba5ce11e8e06227495791caa05a Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Tue, 25 Jun 2024 15:48:47 +0530 Subject: [PATCH 02/14] script update & extract and pass response metadata implementation update --- .../config/GrpcKafkaWithProduceResult.java | 27 +++++++++ .../config/GrpcKafkaWithResolver.java | 2 +- .../stream/GrpcKafkaProxyFactory.java | 59 +++++++++++++++++-- .../bidi.stream.rpc.write.abort/client.rpt | 1 + .../grpc/produce/bidi.stream.rpc/client.rpt | 1 + .../client.stream.rpc.write.abort/client.rpt | 1 + .../grpc/produce/client.stream.rpc/client.rpt | 1 + .../server.stream.rpc.read.aborted/client.rpt | 1 + .../grpc/produce/server.stream.rpc/client.rpt | 1 + .../grpc/produce/unary.rpc.error/client.rpt | 1 + .../unary.rpc.message.value.100k/client.rpt | 1 + .../produce/unary.rpc.rejected/client.rpt | 1 + .../unary.rpc.sent.write.abort/client.rpt | 1 + .../streams/grpc/produce/unary.rpc/client.rpt | 1 + .../bidi.stream.rpc.write.abort/client.rpt | 2 + .../bidi.stream.rpc.write.abort/server.rpt | 2 + .../kafka/produce/bidi.stream.rpc/client.rpt | 4 ++ .../kafka/produce/bidi.stream.rpc/server.rpt | 4 ++ .../client.stream.rpc.write.abort/client.rpt | 2 + .../client.stream.rpc.write.abort/server.rpt | 2 + .../produce/client.stream.rpc/client.rpt | 4 ++ .../produce/client.stream.rpc/server.rpt | 4 ++ .../produce/server.stream.rpc/client.rpt | 2 + .../produce/server.stream.rpc/server.rpt | 2 + .../kafka/produce/unary.rpc.error/client.rpt | 2 + .../kafka/produce/unary.rpc.error/server.rpt | 2 + .../unary.rpc.message.value.100k/client.rpt | 2 + .../unary.rpc.message.value.100k/server.rpt | 2 + .../kafka/produce/unary.rpc/client.rpt | 2 + .../kafka/produce/unary.rpc/server.rpt | 2 + 30 files changed, 132 insertions(+), 7 deletions(-) diff --git a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/config/GrpcKafkaWithProduceResult.java b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/config/GrpcKafkaWithProduceResult.java index a5ab3bbc68..fec2d33d71 100644 --- a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/config/GrpcKafkaWithProduceResult.java +++ b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/config/GrpcKafkaWithProduceResult.java @@ -18,6 +18,8 @@ import java.util.function.Supplier; import org.agrona.DirectBuffer; +import org.agrona.ExpandableDirectByteBuffer; +import org.agrona.MutableDirectBuffer; import org.agrona.concurrent.UnsafeBuffer; import io.aklivity.zilla.runtime.binding.grpc.kafka.config.GrpcKafkaCorrelationConfig; @@ -31,9 +33,12 @@ import io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.KafkaOffsetType; import io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.OctetsFW; import io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.String16FW; +import io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.stream.GrpcMetadataFW; public class GrpcKafkaWithProduceResult { + public static final String META_PREFIX = "meta:"; + private static final KafkaOffsetFW KAFKA_OFFSET_HISTORICAL = new KafkaOffsetFW.Builder() .wrap(new UnsafeBuffer(new byte[32]), 0, 32) @@ -50,10 +55,13 @@ public class GrpcKafkaWithProduceResult private final GrpcKafkaWithProduceHash hash; private final String16FW service; private final String16FW method; + private final Array32FW metadata; + private final ExpandableDirectByteBuffer buffer; GrpcKafkaWithProduceResult( String16FW service, String16FW method, + Array32FW metadata, String16FW topic, KafkaAckMode acks, Supplier keyRef, @@ -64,6 +72,7 @@ public class GrpcKafkaWithProduceResult { this.service = service; this.method = method; + this.metadata = metadata; this.overrides = overrides; this.replyTo = replyTo; this.correlation = correlation; @@ -71,6 +80,8 @@ public class GrpcKafkaWithProduceResult this.acks = acks; this.keyRef = keyRef; this.hash = hash; + this.buffer = new ExpandableDirectByteBuffer(); + this.buffer.putStringWithoutLengthAscii(0, META_PREFIX); hash.updateHash(correlation.service.value()); hash.updateHash(service.value()); @@ -140,6 +151,22 @@ public void headers( builder.item(this::method); builder.item(this::replyTo); builder.item(this::correlationId); + metadata.forEach(m -> builder.item(i -> metadata(i, m))); + } + + private void metadata( + KafkaHeaderFW.Builder builder, + GrpcMetadataFW metadata) + { + int nameLen = metadata.nameLen(); + int nameLenWithPrefix = nameLen + 5; + buffer.putBytes(5, metadata.name().value(), 0, nameLen); + + builder + .nameLen(nameLenWithPrefix) + .name(buffer, 0, nameLenWithPrefix) + .valueLen(metadata.valueLen()) + .value(metadata.value().value(), 0, metadata.valueLen()); } private void service( diff --git a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/config/GrpcKafkaWithResolver.java b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/config/GrpcKafkaWithResolver.java index dd84c6acf1..156cc954db 100644 --- a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/config/GrpcKafkaWithResolver.java +++ b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/config/GrpcKafkaWithResolver.java @@ -169,7 +169,7 @@ public GrpcKafkaWithProduceResult resolveProduce( String16FW replyTo = new String16FW(produce.replyTo); - return new GrpcKafkaWithProduceResult(service, method, topic, acks, keyRef, overrides, replyTo, + return new GrpcKafkaWithProduceResult(service, method, metadata, topic, acks, keyRef, overrides, replyTo, options.correlation, hash); } diff --git a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java index 5aa5fccb09..99f621e112 100644 --- a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java +++ b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java @@ -14,6 +14,7 @@ */ package io.aklivity.zilla.runtime.binding.grpc.kafka.internal.stream; +import static io.aklivity.zilla.runtime.binding.grpc.kafka.internal.config.GrpcKafkaWithProduceResult.META_PREFIX; import static io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.KafkaCapabilities.FETCH_ONLY; import static io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.KafkaCapabilities.PRODUCE_ONLY; import static java.time.Instant.now; @@ -46,7 +47,9 @@ import io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.stream.GrpcAbortExFW; import io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.stream.GrpcBeginExFW; import io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.stream.GrpcDataExFW; +import io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.stream.GrpcMetadataFW; import io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.stream.GrpcResetExFW; +import io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.stream.GrpcType; import io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.stream.KafkaBeginExFW; import io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.stream.KafkaDataExFW; import io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.stream.KafkaMergedBeginExFW; @@ -106,9 +109,12 @@ public final class GrpcKafkaProxyFactory implements GrpcKafkaStreamFactory private final KafkaBeginExFW kafkaBeginExRO = new KafkaBeginExFW(); private final KafkaDataExFW kafkaDataExRO = new KafkaDataExFW(); + private final GrpcBeginExFW.Builder grpcBeginExRW = new GrpcBeginExFW.Builder(); private final GrpcDataExFW.Builder grpcDataExRW = new GrpcDataExFW.Builder(); private final GrpcResetExFW.Builder grpcResetExRW = new GrpcResetExFW.Builder(); private final GrpcAbortExFW.Builder grpcAbortExRW = new GrpcAbortExFW.Builder(); + private final Array32FW.Builder grpcMetadataRW = + new Array32FW.Builder<>(new GrpcMetadataFW.Builder(), new GrpcMetadataFW()); private final KafkaBeginExFW.Builder kafkaBeginExRW = new KafkaBeginExFW.Builder(); private final KafkaDataExFW.Builder kafkaDataExRW = new KafkaDataExFW.Builder(); @@ -116,6 +122,7 @@ public final class GrpcKafkaProxyFactory implements GrpcKafkaStreamFactory private final MutableDirectBuffer writeBuffer; private final MutableDirectBuffer extBuffer; + private final MutableDirectBuffer metaBuffer; private final BindingHandler streamFactory; private final LongUnaryOperator supplyInitialId; private final LongUnaryOperator supplyReplyId; @@ -131,6 +138,7 @@ public GrpcKafkaProxyFactory( { this.writeBuffer = context.writeBuffer(); this.extBuffer = new UnsafeBuffer(new byte[context.writeBuffer().capacity()]); + this.metaBuffer = new UnsafeBuffer(new byte[context.writeBuffer().capacity()]); this.streamFactory = context.streamFactory(); this.supplyInitialId = context::supplyInitialId; this.supplyReplyId = context::supplyReplyId; @@ -847,8 +855,6 @@ private void onKafkaBegin( int lenSize = len.sizeof(); replyPad = result.fieldId().sizeof() + lenSize + partitions.sizeof(); } - - delegate.onKafkaBegin(traceId, authorization, extension); } private void onKafkaData( @@ -879,6 +885,8 @@ private void onKafkaData( final OctetsFW payload = data.payload(); final OctetsFW extension = data.extension(); + delegate.onKafkaBegin(traceId, authorization, extension); + final MutableDirectBuffer encodeBuffer = writeBuffer; final int encodeOffset = DataFW.FIELD_OFFSET_PAYLOAD; final int payloadSize = payload.sizeof(); @@ -1278,11 +1286,12 @@ protected void onKafkaAbort( @Override protected void onKafkaBegin( long traceId, - long authorization, OctetsFW extension) + long authorization, + OctetsFW extension) { if (!GrpcKafkaState.replyOpening(state)) { - doGrpcBegin(traceId, authorization, 0L, emptyRO); + doGrpcBegin(traceId, authorization, 0L, extension); } } @@ -1296,6 +1305,11 @@ protected void onKafkaData( OctetsFW payload, KafkaDataExFW kafkaDataEx) { + if (!GrpcKafkaState.replyOpening(state)) + { + doGrpcBegin(traceId, authorization, 0L, kafkaDataEx.merged().fetch().headers()); + } + if (GrpcKafkaState.replyClosing(state)) { replySeq += reserved; @@ -1388,6 +1402,39 @@ private void doGrpcBegin( traceId, authorization, affinity, extension); } + private void doGrpcBegin( + long traceId, + long authorization, + long affinity, + Array32FW headers) + { + state = GrpcKafkaState.openingReply(state); + + Array32FW.Builder builder = + grpcMetadataRW.wrap(metaBuffer, 0, metaBuffer.capacity()); + + headers.forEach(h -> + { + if (META_PREFIX.equals(h.name().value().getStringWithoutLengthUtf8(0, 5))) + { + builder.item(m -> m.type(t -> t.set(GrpcType.TEXT)) + .nameLen(h.nameLen() - 5) + .name(h.name().value(), 5, h.nameLen() - 5) + .valueLen(h.valueLen()) + .value(h.value())); + } + }); + + GrpcBeginExFW beginEx = grpcBeginExRW + .wrap(extBuffer, 0, extBuffer.capacity()) + .typeId(grpcTypeId) + .metadata(builder.build()) + .build(); + + doBegin(grpc, originId, routedId, replyId, replySeq, replyAck, replyMax, + traceId, authorization, affinity, beginEx); + } + private void doGrpcData( long traceId, long authorization, @@ -1637,7 +1684,7 @@ private void onKafkaBegin( assert replyAck <= replySeq; doKafkaWindow(traceId); - delegate.onKafkaBegin(traceId, authorization, extension); + //delegate.onKafkaBegin(traceId, authorization, extension); } private void onKafkaEnd( @@ -1923,7 +1970,7 @@ private void onKafkaBegin( assert replyAck <= replySeq; - delegate.onKafkaBegin(traceId, authorization, extension); + //delegate.onKafkaBegin(traceId, authorization, extension); doKafkaWindow(traceId); } diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc.write.abort/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc.write.abort/client.rpt index 2dacff6b67..c7d8671e78 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc.write.abort/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc.write.abort/client.rpt @@ -16,6 +16,7 @@ connect "zilla://streams/grpc0" option zilla:window 8192 option zilla:transmission "half-duplex" + option zilla:update "proactive" write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/client.rpt index 974a76c5fe..8b553fd68c 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/client.rpt @@ -16,6 +16,7 @@ connect "zilla://streams/grpc0" option zilla:window 8192 option zilla:transmission "half-duplex" + option zilla:update "proactive" write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc.write.abort/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc.write.abort/client.rpt index 4494bb5b59..8146acfe15 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc.write.abort/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc.write.abort/client.rpt @@ -16,6 +16,7 @@ connect "zilla://streams/grpc0" option zilla:window 8192 option zilla:transmission "half-duplex" + option zilla:update "proactive" write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/client.rpt index 284273f53b..b2d9ac6504 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/client.rpt @@ -16,6 +16,7 @@ connect "zilla://streams/grpc0" option zilla:window 8192 option zilla:transmission "half-duplex" + option zilla:update "proactive" write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc.read.aborted/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc.read.aborted/client.rpt index 6341916260..6a65a247fb 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc.read.aborted/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc.read.aborted/client.rpt @@ -16,6 +16,7 @@ connect "zilla://streams/grpc0" option zilla:window 8192 option zilla:transmission "half-duplex" + option zilla:update "proactive" write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/client.rpt index 83a40f64d8..edfc6fc9a3 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/client.rpt @@ -16,6 +16,7 @@ connect "zilla://streams/grpc0" option zilla:window 8192 option zilla:transmission "half-duplex" + option zilla:update "proactive" write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.error/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.error/client.rpt index dfc9f9f631..5b6c8329bd 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.error/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.error/client.rpt @@ -16,6 +16,7 @@ connect "zilla://streams/grpc0" option zilla:window 8192 option zilla:transmission "half-duplex" + option zilla:update "proactive" write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.message.value.100k/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.message.value.100k/client.rpt index d28237b599..a71806eda3 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.message.value.100k/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.message.value.100k/client.rpt @@ -18,6 +18,7 @@ property string100k ${core:randomString(102400)} connect "zilla://streams/grpc0" option zilla:window 8192 option zilla:transmission "half-duplex" + option zilla:update "proactive" write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.rejected/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.rejected/client.rpt index 5efc8097d0..ce806ae3ca 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.rejected/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.rejected/client.rpt @@ -16,6 +16,7 @@ connect "zilla://streams/grpc0" option zilla:window 8192 option zilla:transmission "half-duplex" + option zilla:update "proactive" write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.sent.write.abort/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.sent.write.abort/client.rpt index e1cdc161c4..8bd042680f 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.sent.write.abort/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc.sent.write.abort/client.rpt @@ -16,6 +16,7 @@ connect "zilla://streams/grpc0" option zilla:window 8192 option zilla:transmission "half-duplex" + option zilla:update "proactive" write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/client.rpt index a571ab37ca..2342c479a3 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/client.rpt @@ -16,6 +16,7 @@ connect "zilla://streams/grpc0" option zilla:window 8192 option zilla:transmission "half-duplex" + option zilla:update "proactive" write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/client.rpt index 90700990d6..b8f670c43b 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/client.rpt @@ -62,6 +62,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoBidiStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-14f43bae85c2ce394c9bd81ff6fa9d77") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/server.rpt index 883c701673..a185dfc1f6 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/server.rpt @@ -63,6 +63,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoBidiStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-14f43bae85c2ce394c9bd81ff6fa9d77") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read zilla:data.null diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/client.rpt index 276d5910ce..1076584e2b 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/client.rpt @@ -62,6 +62,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoBidiStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-14f43bae85c2ce394c9bd81ff6fa9d77") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} write ${grpc:protobuf() @@ -83,6 +85,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoBidiStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-14f43bae85c2ce394c9bd81ff6fa9d77") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/server.rpt index 7717f2109c..15e680621b 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/server.rpt @@ -63,6 +63,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoBidiStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-14f43bae85c2ce394c9bd81ff6fa9d77") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read ${grpc:protobuf() @@ -81,6 +83,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoBidiStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-14f43bae85c2ce394c9bd81ff6fa9d77") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read zilla:data.null diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc.write.abort/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc.write.abort/client.rpt index 69971cc903..0ea4b44a7f 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc.write.abort/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc.write.abort/client.rpt @@ -64,6 +64,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoClientStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-97e816c79fb6624b7d221026cc36107c") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc.write.abort/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc.write.abort/server.rpt index 6a358aba99..42f1e09858 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc.write.abort/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc.write.abort/server.rpt @@ -65,6 +65,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoClientStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-97e816c79fb6624b7d221026cc36107c") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read zilla:data.null diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/client.rpt index 75628e28bc..2751193b87 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/client.rpt @@ -62,6 +62,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoClientStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-97e816c79fb6624b7d221026cc36107c") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} write ${grpc:protobuf() @@ -81,6 +83,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoClientStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-97e816c79fb6624b7d221026cc36107c") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/server.rpt index 5727f18ab7..104e0fd5b1 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/server.rpt @@ -63,6 +63,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoClientStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-97e816c79fb6624b7d221026cc36107c") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read ${grpc:protobuf() @@ -81,6 +83,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoClientStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-97e816c79fb6624b7d221026cc36107c") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read zilla:data.null diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/client.rpt index f3f5726218..1e4bc6d0f2 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/client.rpt @@ -62,6 +62,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoServerStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-08085616660359db13a42b81ed633c5d") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/server.rpt index cb67aea7d8..bc2c2d3625 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/server.rpt @@ -63,6 +63,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoServerStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-08085616660359db13a42b81ed633c5d") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read zilla:data.null diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.error/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.error/client.rpt index 9da5392178..814ab190e1 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.error/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.error/client.rpt @@ -62,6 +62,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-479f2c3fb58bc3f04bbe15440a657670") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.error/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.error/server.rpt index 721e97af9e..d38e6b81b5 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.error/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.error/server.rpt @@ -64,6 +64,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-479f2c3fb58bc3f04bbe15440a657670") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read zilla:data.null diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.message.value.100k/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.message.value.100k/client.rpt index 6754d64570..2758f74348 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.message.value.100k/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.message.value.100k/client.rpt @@ -64,6 +64,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-479f2c3fb58bc3f04bbe15440a657670") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.message.value.100k/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.message.value.100k/server.rpt index fc2610d846..d1c7cbf242 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.message.value.100k/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc.message.value.100k/server.rpt @@ -64,6 +64,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-479f2c3fb58bc3f04bbe15440a657670") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read zilla:data.null diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/client.rpt index 06b47e87af..60a4113000 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/client.rpt @@ -62,6 +62,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-479f2c3fb58bc3f04bbe15440a657670") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/server.rpt index 20fe199b7a..9ae9090f6e 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/server.rpt @@ -64,6 +64,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-479f2c3fb58bc3f04bbe15440a657670") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read zilla:data.null From 94959b2b50bd605bb77e78188905c54edf0f1ab3 Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Wed, 26 Jun 2024 10:02:04 +0530 Subject: [PATCH 03/14] race condition fix --- .../kafka/produce/bidi.stream.rpc.write.abort/server.rpt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/server.rpt index a185dfc1f6..206185b23c 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/server.rpt @@ -69,6 +69,8 @@ read zilla:data.ext ${kafka:matchDataEx() .build()} read zilla:data.null +read notify DATA_RECEIVED + read aborted accepted @@ -87,6 +89,8 @@ read zilla:begin.ext ${kafka:beginEx() connected +read await DATA_RECEIVED + write zilla:data.ext ${kafka:dataEx() .typeId(zilla:id("kafka")) .merged() From ca5030aedf7b7bda9de057efd6a50907fd169731 Mon Sep 17 00:00:00 2001 From: Akram Yakubov Date: Wed, 26 Jun 2024 09:51:48 +0500 Subject: [PATCH 04/14] Make the scripts deterministic --- .../kafka/internal/config/GrpcKafkaWithProduceResult.java | 1 - .../grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java | 2 +- .../grpc/produce/bidi.stream.rpc.write.abort/client.rpt | 2 ++ .../kafka/produce/bidi.stream.rpc.write.abort/server.rpt | 6 ++---- 4 files changed, 5 insertions(+), 6 deletions(-) diff --git a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/config/GrpcKafkaWithProduceResult.java b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/config/GrpcKafkaWithProduceResult.java index fec2d33d71..fb1713bee9 100644 --- a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/config/GrpcKafkaWithProduceResult.java +++ b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/config/GrpcKafkaWithProduceResult.java @@ -19,7 +19,6 @@ import org.agrona.DirectBuffer; import org.agrona.ExpandableDirectByteBuffer; -import org.agrona.MutableDirectBuffer; import org.agrona.concurrent.UnsafeBuffer; import io.aklivity.zilla.runtime.binding.grpc.kafka.config.GrpcKafkaCorrelationConfig; diff --git a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java index 99f621e112..9639f42852 100644 --- a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java +++ b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java @@ -1147,7 +1147,7 @@ private void onGrpcData( assert acknowledge <= sequence; assert sequence >= initialSeq; - initialSeq = sequence; + initialSeq = sequence + reserved; assert initialAck <= initialSeq; diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc.write.abort/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc.write.abort/client.rpt index c7d8671e78..5a58bcbf4c 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc.write.abort/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc.write.abort/client.rpt @@ -43,6 +43,8 @@ read ${grpc:protobuf() .string(1, "Hello World1") .build()} +read notify DATA_RECEIVED + read zilla:reset.ext ${grpc:resetEx() .typeId(zilla:id("grpc")) .status("13") diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/server.rpt index 206185b23c..211298efee 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/server.rpt @@ -69,8 +69,6 @@ read zilla:data.ext ${kafka:matchDataEx() .build()} read zilla:data.null -read notify DATA_RECEIVED - read aborted accepted @@ -89,8 +87,6 @@ read zilla:begin.ext ${kafka:beginEx() connected -read await DATA_RECEIVED - write zilla:data.ext ${kafka:dataEx() .typeId(zilla:id("kafka")) .merged() @@ -108,6 +104,8 @@ write ${grpc:protobuf() .build()} write flush +write await DATA_RECEIVED + write abort read aborted From eae0881809c2fc27f41605d0ba095490eccc52e5 Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Wed, 26 Jun 2024 16:22:40 +0530 Subject: [PATCH 05/14] Produce IT fix --- .../internal/stream/GrpcKafkaProxyFactory.java | 18 +++++++++--------- .../bidi.stream.rpc.write.abort/client.rpt | 2 ++ 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java index 9639f42852..5da4e78183 100644 --- a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java +++ b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java @@ -539,7 +539,8 @@ protected void onKafkaAbort( @Override protected void onKafkaBegin( long traceId, - long authorization, OctetsFW extension) + long authorization, + OctetsFW extension) { if (!GrpcKafkaState.replyOpening(state)) { @@ -855,6 +856,8 @@ private void onKafkaBegin( int lenSize = len.sizeof(); replyPad = result.fieldId().sizeof() + lenSize + partitions.sizeof(); } + + delegate.onKafkaBegin(traceId, authorization, extension); } private void onKafkaData( @@ -885,8 +888,6 @@ private void onKafkaData( final OctetsFW payload = data.payload(); final OctetsFW extension = data.extension(); - delegate.onKafkaBegin(traceId, authorization, extension); - final MutableDirectBuffer encodeBuffer = writeBuffer; final int encodeOffset = DataFW.FIELD_OFFSET_PAYLOAD; final int payloadSize = payload.sizeof(); @@ -1280,6 +1281,11 @@ protected void onKafkaAbort( long traceId, long authorization) { + if (!GrpcKafkaState.replyOpening(state)) + { + doGrpcBegin(traceId, authorization, 0L, emptyRO); + } + cleanup(traceId, authorization); } @@ -1670,8 +1676,6 @@ private void onKafkaBegin( final long sequence = begin.sequence(); final long acknowledge = begin.acknowledge(); final long traceId = begin.traceId(); - final long authorization = begin.authorization(); - final OctetsFW extension = begin.extension(); assert acknowledge <= sequence; assert sequence >= replySeq; @@ -1684,7 +1688,6 @@ private void onKafkaBegin( assert replyAck <= replySeq; doKafkaWindow(traceId); - //delegate.onKafkaBegin(traceId, authorization, extension); } private void onKafkaEnd( @@ -1957,8 +1960,6 @@ private void onKafkaBegin( final long sequence = begin.sequence(); final long acknowledge = begin.acknowledge(); final long traceId = begin.traceId(); - final long authorization = begin.authorization(); - final OctetsFW extension = begin.extension(); assert acknowledge <= sequence; assert sequence >= replySeq; @@ -1970,7 +1971,6 @@ private void onKafkaBegin( assert replyAck <= replySeq; - //delegate.onKafkaBegin(traceId, authorization, extension); doKafkaWindow(traceId); } diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/client.rpt index b8f670c43b..b2f902879e 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc.write.abort/client.rpt @@ -108,6 +108,8 @@ read ${grpc:protobuf() .string(1, "Hello World1") .build()} +read notify DATA_RECEIVED + read aborted write abort From 609b18f9cb1ff9eb2da251eff970d685ba6d0293 Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Fri, 28 Jun 2024 22:37:49 +0530 Subject: [PATCH 06/14] kafka-grpc metadata pass through --- .../config/KafkaGrpcBindingConfig.java | 7 +- .../stream/KafkaGrpcFetchHeaderHelper.java | 41 ++++++++++- .../stream/KafkaGrpcRemoteServerFactory.java | 72 +++++++++++++++---- .../src/main/zilla/internal.idl | 2 + .../streams/grpc/bidi.stream.rpc/client.rpt | 5 ++ .../streams/grpc/bidi.stream.rpc/server.rpt | 8 +++ .../grpc/client.sent.write.abort/client.rpt | 6 ++ .../grpc/client.sent.write.abort/server.rpt | 8 +++ .../streams/grpc/client.stream.rpc/client.rpt | 7 ++ .../streams/grpc/client.stream.rpc/server.rpt | 8 +++ .../retry.on.unavailable.server/client.rpt | 7 ++ .../retry.on.unavailable.server/server.rpt | 8 +++ .../streams/grpc/server.stream.rpc/client.rpt | 7 ++ .../streams/grpc/server.stream.rpc/server.rpt | 8 +++ .../unary.rpc.message.value.100k/client.rpt | 7 ++ .../unary.rpc.message.value.100k/server.rpt | 8 +++ .../grpc/streams/grpc/unary.rpc/client.rpt | 7 ++ .../grpc/streams/grpc/unary.rpc/server.rpt | 8 +++ .../streams/kafka/bidi.stream.rpc/client.rpt | 4 ++ .../streams/kafka/bidi.stream.rpc/server.rpt | 4 ++ .../kafka/client.sent.write.abort/client.rpt | 3 + .../kafka/client.sent.write.abort/server.rpt | 3 + .../kafka/client.stream.rpc/client.rpt | 3 + .../kafka/client.stream.rpc/server.rpt | 3 + .../kafka/server.stream.rpc/client.rpt | 4 ++ .../kafka/server.stream.rpc/server.rpt | 4 ++ .../unary.rpc.message.value.100k/client.rpt | 3 + .../unary.rpc.message.value.100k/server.rpt | 3 + .../grpc/streams/kafka/unary.rpc/client.rpt | 3 + .../grpc/streams/kafka/unary.rpc/server.rpt | 3 + 30 files changed, 247 insertions(+), 17 deletions(-) diff --git a/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/config/KafkaGrpcBindingConfig.java b/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/config/KafkaGrpcBindingConfig.java index 791c449c42..e063528b74 100644 --- a/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/config/KafkaGrpcBindingConfig.java +++ b/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/config/KafkaGrpcBindingConfig.java @@ -20,6 +20,8 @@ import java.util.List; import java.util.Optional; +import org.agrona.MutableDirectBuffer; + import io.aklivity.zilla.runtime.binding.kafka.grpc.config.KafkaGrpcOptionsConfig; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.stream.KafkaGrpcFetchHeaderHelper; import io.aklivity.zilla.runtime.engine.config.BindingConfig; @@ -35,7 +37,8 @@ public final class KafkaGrpcBindingConfig public final List routes; public KafkaGrpcBindingConfig( - BindingConfig binding) + BindingConfig binding, + MutableDirectBuffer metaBuffer) { this.id = binding.id; this.entryId = binding.entryId; @@ -45,6 +48,6 @@ public KafkaGrpcBindingConfig( .orElse(DEFAULT); this.routes = binding.routes.stream().map(r -> new KafkaGrpcRouteConfig(options, r)) .collect(toList()); - this.helper = new KafkaGrpcFetchHeaderHelper(options.correlation); + this.helper = new KafkaGrpcFetchHeaderHelper(options.correlation, metaBuffer); } } diff --git a/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcFetchHeaderHelper.java b/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcFetchHeaderHelper.java index b09f45ef6a..8d80179457 100644 --- a/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcFetchHeaderHelper.java +++ b/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcFetchHeaderHelper.java @@ -14,25 +14,42 @@ */ package io.aklivity.zilla.runtime.binding.kafka.grpc.internal.stream; +import static io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.GrpcType.BASE64; +import static io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.GrpcType.TEXT; + +import java.util.Arrays; import java.util.HashMap; import java.util.Map; import java.util.function.Consumer; +import org.agrona.MutableDirectBuffer; + import io.aklivity.zilla.runtime.binding.kafka.grpc.config.KafkaGrpcCorrelationConfig; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.Array32FW; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.KafkaHeaderFW; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.KafkaOffsetFW; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.OctetsFW; +import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.GrpcMetadataFW; +import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.GrpcType; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.KafkaDataExFW; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.KafkaMergedFetchDataExFW; public final class KafkaGrpcFetchHeaderHelper { + private static final int META_PREFIX_LENGTH = 5; + private static final byte[] HEADER_META_PREFIX = new byte[5]; + private static final byte[] META_PREFIX = "meta:".getBytes(); + private static final byte[] HEADER_BIN_SUFFIX = new byte[4]; + private static final byte[] BIN_SUFFIX = "-bin".getBytes(); + private final Map> visitors; private final OctetsFW serviceRO = new OctetsFW(); private final OctetsFW methodRO = new OctetsFW(); private final OctetsFW replyToRO = new OctetsFW(); private final OctetsFW correlatedIdRO = new OctetsFW(); + private final Array32FW.Builder grpcMetadataRW = + new Array32FW.Builder<>(new GrpcMetadataFW.Builder(), new GrpcMetadataFW()); + private final MutableDirectBuffer metaBuffer; public int partitionId; public long partitionOffset; @@ -41,10 +58,13 @@ public final class KafkaGrpcFetchHeaderHelper public OctetsFW method; public OctetsFW replyTo; public OctetsFW correlationId; + public Array32FW metadata; public KafkaGrpcFetchHeaderHelper( - KafkaGrpcCorrelationConfig correlation) + KafkaGrpcCorrelationConfig correlation, + MutableDirectBuffer metaBuffer) { + this.metaBuffer = metaBuffer; Map> visitors = new HashMap<>(); visitors.put(new OctetsFW().wrap(correlation.service.value(), 0, correlation.service.length()), this::visitService); @@ -65,6 +85,8 @@ public void visit( replyTo = null; correlationId = null; + grpcMetadataRW.wrap(metaBuffer, 0, metaBuffer.capacity()); + if (dataEx != null) { final KafkaMergedFetchDataExFW kafkaMergedFetchDataEx = dataEx.merged().fetch(); @@ -76,6 +98,8 @@ public void visit( headers.forEach(this::dispatch); } + + metadata = grpcMetadataRW.build(); } public boolean resolved() @@ -90,11 +114,26 @@ private boolean dispatch( { final OctetsFW name = header.name(); final OctetsFW value = header.value(); + final int offset = name.offset(); + final int limit = name.limit(); + + name.buffer().getBytes(offset, HEADER_META_PREFIX); + name.buffer().getBytes(limit - BIN_SUFFIX.length, HEADER_BIN_SUFFIX); + final Consumer visitor = visitors.get(name); if (visitor != null) { visitor.accept(value); } + else if (Arrays.equals(META_PREFIX, HEADER_META_PREFIX)) + { + final GrpcType type = Arrays.equals(BIN_SUFFIX, HEADER_BIN_SUFFIX) ? BASE64 : TEXT; + grpcMetadataRW.item(m -> m.type(t -> t.set(type)) + .nameLen(header.nameLen() - META_PREFIX_LENGTH) + .name(name.value(), META_PREFIX_LENGTH, header.nameLen() - META_PREFIX_LENGTH) + .valueLen(header.valueLen()) + .value(value)); + } return service != null && method != null && diff --git a/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcRemoteServerFactory.java b/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcRemoteServerFactory.java index 8a0b5114f6..6a1d0f8869 100644 --- a/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcRemoteServerFactory.java +++ b/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcRemoteServerFactory.java @@ -33,6 +33,7 @@ import java.util.function.LongUnaryOperator; import org.agrona.DirectBuffer; +import org.agrona.ExpandableDirectByteBuffer; import org.agrona.MutableDirectBuffer; import org.agrona.collections.Long2ObjectHashMap; import org.agrona.collections.Object2ObjectHashMap; @@ -41,7 +42,9 @@ import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.KafkaGrpcConfiguration; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.config.KafkaGrpcBindingConfig; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.config.KafkaGrpcConditionResult; +import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.Array32FW; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.Flyweight; +import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.KafkaHeaderFW; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.OctetsFW; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.String16FW; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.queue.GrpcQueueMessageFW; @@ -54,6 +57,7 @@ import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.GrpcAbortExFW; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.GrpcBeginExFW; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.GrpcDataExFW; +import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.GrpcMetadataFW; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.GrpcResetExFW; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.KafkaBeginExFW; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.KafkaDataExFW; @@ -72,6 +76,7 @@ public final class KafkaGrpcRemoteServerFactory implements KafkaGrpcStreamFactor { private static final String GRPC_TYPE_NAME = "grpc"; private static final String KAFKA_TYPE_NAME = "kafka"; + private static final String META_PREFIX = "meta:"; private static final int SIGNAL_INITIATE_KAFKA_STREAM = 1; private static final int GRPC_QUEUE_MESSAGE_PADDING = 3 * 256 + 33; @@ -104,8 +109,10 @@ public final class KafkaGrpcRemoteServerFactory implements KafkaGrpcStreamFactor private final WindowFW.Builder windowRW = new WindowFW.Builder(); private final ResetFW.Builder resetRW = new ResetFW.Builder(); + private final GrpcBeginExFW grpcBeginExRO = new GrpcBeginExFW(); private final GrpcDataExFW grpcDataExRO = new GrpcDataExFW(); private final GrpcAbortExFW abortExRO = new GrpcAbortExFW(); + private final Array32FW metadataRO = new Array32FW<>(new GrpcMetadataFW()); private final ExtensionFW extensionRO = new ExtensionFW(); private final KafkaDataExFW kafkaDataExRO = new KafkaDataExFW(); @@ -126,6 +133,7 @@ public final class KafkaGrpcRemoteServerFactory implements KafkaGrpcStreamFactor private final BufferPool bufferPool; private final MutableDirectBuffer writeBuffer; private final MutableDirectBuffer extBuffer; + private final MutableDirectBuffer metaBuffer; private final BindingHandler streamFactory; private final LongUnaryOperator supplyInitialId; private final LongUnaryOperator supplyReplyId; @@ -150,6 +158,7 @@ public KafkaGrpcRemoteServerFactory( this.bufferPool = context.bufferPool(); this.writeBuffer = context.writeBuffer(); this.extBuffer = new UnsafeBuffer(new byte[context.writeBuffer().capacity()]); + this.metaBuffer = new UnsafeBuffer(new byte[context.writeBuffer().capacity()]); this.streamFactory = context.streamFactory(); this.supplyInitialId = context::supplyInitialId; this.supplyReplyId = context::supplyReplyId; @@ -182,7 +191,7 @@ public int routedTypeId() public void attach( BindingConfig binding) { - KafkaGrpcBindingConfig newBinding = new KafkaGrpcBindingConfig(binding); + KafkaGrpcBindingConfig newBinding = new KafkaGrpcBindingConfig(binding, metaBuffer); bindings.put(binding.id, newBinding); if (activate.test(binding.id)) @@ -415,6 +424,8 @@ private void onKafkaData( deferred = kafkaDataEx.merged().fetch().deferred(); } + Array32FW metadata = helper.metadata; + if ((flags & DATA_FLAG_INIT) != 0x00 && payload != null) { if (helper.resolved()) @@ -428,11 +439,11 @@ private void onKafkaData( .set(helper.correlationId) .build(); lastCorrelationId = newCorrelationId; - grpcClient = newGrpcClient(traceId, authorization, helper.service, helper.method, + grpcClient = newGrpcClient(traceId, authorization, helper.service, helper.method, metadata, helper.replyTo, newCorrelationId); } - flushGrpcClientData(grpcClient, traceId, authorization, helper.service, helper.method, + flushGrpcClientData(grpcClient, traceId, authorization, helper.service, helper.method, metadata, helper.partitionId, helper.partitionOffset, deferred, flags, reserved, payload); } else if (helper.correlationId != null) @@ -450,7 +461,7 @@ else if (helper.correlationId != null) } else { - flushGrpcClientData(grpcClient, traceId, authorization, null, null, + flushGrpcClientData(grpcClient, traceId, authorization, helper.service, helper.method, metadata, helper.partitionId, helper.partitionOffset, deferred, flags, reserved, payload); } } @@ -463,13 +474,14 @@ private GrpcClient newGrpcClient( long authorization, OctetsFW service, OctetsFW method, + Array32FW metadata, OctetsFW replyTo, OctetsFW correlationId) { final GrpcClient grpcClient = new GrpcClient(originId, entryId, routedId, correlationId, replyTo, this); grpcClients.put(correlationId, grpcClient); - grpcClient.doGrpcBegin(traceId, authorization, 0L, service, method); + grpcClient.doGrpcBegin(traceId, authorization, 0L, service, method, metadata); return grpcClient; } @@ -491,6 +503,7 @@ private void flushGrpcMessagesIfBuffered( final OctetsFW messageCorrelationId = queueMessage.correlationId(); final OctetsFW service = queueMessage.service(); final OctetsFW method = queueMessage.method(); + final OctetsFW metadata = queueMessage.metadata(); final long messageTraceId = queueMessage.traceId(); final long messageAuthorization = queueMessage.authorization(); final int partitionId = queueMessage.partitionId(); @@ -507,9 +520,10 @@ private void flushGrpcMessagesIfBuffered( if (correlationId.equals(messageCorrelationId)) { + Array32FW meta = metadataRO.wrap(metadata.buffer(), metadata.offset(), metadata.limit()); GrpcClient grpcClient = grpcClients.get(messageCorrelationId); grpcClient = grpcClient != null ? grpcClient : - newGrpcClient(traceId, authorization, service, method, helper.replyTo, messageCorrelationId); + newGrpcClient(traceId, authorization, service, method, meta, helper.replyTo, messageCorrelationId); final int progress = grpcClient.onKafkaData(messageTraceId, messageAuthorization, partitionId, partitionOffset, deferred, flags, payload); @@ -527,7 +541,7 @@ else if (progress > 0) { final int remainingPayload = queuedMessageSize - progress; queueGrpcMessage(traceId, authorization, partitionId, partitionOffset, messageCorrelationId, - service, method, deferred, flags, reserved, payload, remainingPayload); + service, method, meta, deferred, flags, reserved, payload, remainingPayload); final int remainingMessageOffset = grpcQueueSlotOffset - progressOffset; grpcQueueBuffer.putBytes(oldProgressOffset, grpcQueueBuffer, progressOffset, remainingMessageOffset); grpcQueueSlotOffset -= queuedMessageSize; @@ -551,6 +565,7 @@ private void flushGrpcClientData( long authorization, OctetsFW service, OctetsFW method, + Array32FW metadata, int partitionId, long partitionOffset, int deferred, @@ -574,7 +589,7 @@ private void flushGrpcClientData( { flags = progress == 0 ? flags : DATA_FLAG_CON; queueGrpcMessage(traceId, authorization, partitionId, partitionOffset, - grpcClient.correlationId, service, method, deferred, flags, reserved, payload, remaining); + grpcClient.correlationId, service, method, metadata, deferred, flags, reserved, payload, remaining); } } @@ -586,6 +601,7 @@ private void queueGrpcMessage( OctetsFW correlationId, OctetsFW service, OctetsFW method, + Array32FW metadata, int deferred, int flags, int reserved, @@ -603,6 +619,7 @@ private void queueGrpcMessage( .correlationId(correlationId) .service(service) .method(method) + .metadata(metadata.buffer(), metadata.offset(), metadata.sizeof()) .traceId(traceId) .authorization(authorization) .partitionId(partitionId) @@ -1314,6 +1331,7 @@ private final class GrpcClient private final KafkaRemoteServer server; private final KafkaCorrelateProxy correlater; private final OctetsFW correlationId; + private final ExpandableDirectByteBuffer buffer; private final long originId; private final long routedId; private final long initialId; @@ -1330,14 +1348,12 @@ private final class GrpcClient private BudgetDebitor initialDeb; private long initialDebIndex = NO_DEBITOR_INDEX; - private int state; private long replySeq; private long replyAck; private int replyMax; - private GrpcClient( long originId, long routedId, @@ -1353,6 +1369,8 @@ private GrpcClient( this.initialId = supplyInitialId.applyAsLong(routedId); this.replyId = supplyReplyId.applyAsLong(initialId); this.correlater = new KafkaCorrelateProxy(originId, resolveId, replyTo, server.condition, this); + this.buffer = new ExpandableDirectByteBuffer(); + this.buffer.putStringWithoutLengthAscii(0, META_PREFIX); } private int initialPendingAck() @@ -1408,6 +1426,7 @@ private void onGrpcBegin( final long traceId = begin.traceId(); final long authorization = begin.authorization(); final long affinity = begin.affinity(); + final OctetsFW extension = begin.extension(); assert acknowledge <= sequence; assert sequence >= replySeq; @@ -1419,6 +1438,8 @@ private void onGrpcBegin( assert replyAck <= replySeq; + extension.get(grpcBeginExRO::tryWrap); + correlater.doKafkaBegin(traceId, authorization, affinity); } @@ -1460,7 +1481,12 @@ private void onGrpcData( .timestamp(now().toEpochMilli()) .partition(p -> p.partitionId(-1).partitionOffset(-1)) .key(k -> server.condition.key(correlationId, k)) - .headers(h -> server.condition.headers(correlationId, h)))) + .headers(h -> + { + server.condition.headers(correlationId, h); + Array32FW metadata = grpcBeginExRO.metadata(); + metadata.forEach(md -> h.item(i -> metadata(i, md))); + }))) .build(); } @@ -1683,18 +1709,34 @@ private void cleanupBudgetIfNecessary() } } + private void metadata( + KafkaHeaderFW.Builder builder, + GrpcMetadataFW metadata) + { + int nameLen = metadata.nameLen(); + int nameLenWithPrefix = nameLen + 5; + buffer.putBytes(5, metadata.name().value(), 0, nameLen); + + builder + .nameLen(nameLenWithPrefix) + .name(buffer, 0, nameLenWithPrefix) + .valueLen(metadata.valueLen()) + .value(metadata.value().value(), 0, metadata.valueLen()); + } + private void doGrpcBegin( long traceId, long authorization, long affinity, OctetsFW service, - OctetsFW method) + OctetsFW method, + Array32FW metadata) { state = KafkaGrpcState.openingInitial(state); grpc = newGrpcStream(this::onGrpcMessage, originId, routedId, initialId, initialSeq, initialAck, initialMax, traceId, authorization, affinity, server.condition.scheme(), server.condition.authority(), - service, method); + service, method, metadata); } private void doGrpcData( @@ -2019,7 +2061,8 @@ private MessageConsumer newGrpcStream( String16FW scheme, String16FW authority, OctetsFW service, - OctetsFW method) + OctetsFW method, + Array32FW metadata) { final GrpcBeginExFW grpcBeginEx = grpcBeginExRW.wrap(extBuffer, 0, extBuffer.capacity()) @@ -2028,6 +2071,7 @@ private MessageConsumer newGrpcStream( .authority(authority) .service(service.buffer(), service.offset(), service.sizeof()) .method(method.buffer(), method.offset(), method.sizeof()) + .metadata(metadata) .build(); final BeginFW begin = beginRW.wrap(writeBuffer, 0, writeBuffer.capacity()) diff --git a/runtime/binding-kafka-grpc/src/main/zilla/internal.idl b/runtime/binding-kafka-grpc/src/main/zilla/internal.idl index dd32862ae4..bf25b87389 100644 --- a/runtime/binding-kafka-grpc/src/main/zilla/internal.idl +++ b/runtime/binding-kafka-grpc/src/main/zilla/internal.idl @@ -24,6 +24,8 @@ scope internal octets[serviceLength] service = null; int32 methodLength; octets[methodLength] method = null; + int32 metadataLength; + octets[metadataLength] metadata = null; int64 traceId; int64 authorization; int32 partitionId; diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/client.rpt index 5c68875bef..ed38d8eb6d 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/client.rpt @@ -38,6 +38,11 @@ write ${grpc:protobuf() .build()} write flush +read zilla:begin.ext ${grpc:matchBeginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} + read ${grpc:protobuf() .string(1, "Hello World1") .build()} diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/server.rpt index 3edecf506f..ef9d6738dc 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/server.rpt @@ -24,6 +24,8 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoBidiStream") + .metadata("custom", "test") + .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected @@ -35,6 +37,12 @@ read ${grpc:protobuf() .string(1, "Hello World2") .build()} +write zilla:begin.ext ${grpc:beginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} +write flush + write ${grpc:protobuf() .string(1, "Hello World1") .build()} diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.sent.write.abort/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.sent.write.abort/client.rpt index 625553053f..6ede234069 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.sent.write.abort/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.sent.write.abort/client.rpt @@ -23,6 +23,7 @@ write zilla:begin.ext ${grpc:beginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoUnary") + .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .metadata("custom", "test") .build()} connected @@ -34,6 +35,11 @@ write flush write close +read zilla:begin.ext ${grpc:matchBeginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} + read ${grpc:protobuf() .string(1, "Hello World") .build()} diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.sent.write.abort/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.sent.write.abort/server.rpt index 7ac5cde045..999c25ded6 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.sent.write.abort/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.sent.write.abort/server.rpt @@ -24,6 +24,8 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoUnary") + .metadata("custom", "test") + .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected @@ -32,6 +34,12 @@ read ${grpc:protobuf() .build()} read closed +write zilla:begin.ext ${grpc:beginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} +write flush + write ${grpc:protobuf() .string(1, "Hello World") .build()} diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/client.rpt index 113e5a2b48..6f99a13926 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/client.rpt @@ -23,6 +23,8 @@ write zilla:begin.ext ${grpc:beginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoClientStream") + .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") + .metadata("custom", "test") .build()} connected @@ -38,6 +40,11 @@ write flush write close +read zilla:begin.ext ${grpc:matchBeginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} + read ${grpc:protobuf() .string(1, "Hello World") .build()} diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/server.rpt index 80ecbd27bb..923f6a7c0f 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/server.rpt @@ -24,6 +24,8 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoClientStream") + .metadata("custom", "test") + .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected @@ -37,6 +39,12 @@ read ${grpc:protobuf() read closed +write zilla:begin.ext ${grpc:beginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} +write flush + write ${grpc:protobuf() .string(1, "Hello World") .build()} diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/client.rpt index 6ad4a356e1..d93c0a979e 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/client.rpt @@ -32,6 +32,8 @@ write zilla:begin.ext ${grpc:beginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoUnary") + .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") + .metadata("custom", "test") .build()} connected @@ -42,6 +44,11 @@ write flush write close +read zilla:begin.ext ${grpc:matchBeginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} + read ${grpc:protobuf() .string(1, "Hello World") .build()} diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/server.rpt index 175a5e3c7b..1c95ede186 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/server.rpt @@ -27,6 +27,8 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoUnary") + .metadata("custom", "test") + .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected @@ -36,6 +38,12 @@ read ${grpc:protobuf() read closed +write zilla:begin.ext ${grpc:beginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} +write flush + write ${grpc:protobuf() .string(1, "Hello World") .build()} diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/client.rpt index 79c8b6aa9c..f3fc77cf21 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/client.rpt @@ -23,6 +23,8 @@ write zilla:begin.ext ${grpc:beginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoServerStream") + .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") + .metadata("custom", "test") .build()} connected @@ -34,6 +36,11 @@ write flush write close +read zilla:begin.ext ${grpc:matchBeginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} + read ${grpc:protobuf() .string(1, "Hello World1") .build()} diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/server.rpt index 420481872a..cd51afd3a7 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/server.rpt @@ -24,6 +24,8 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoServerStream") + .metadata("custom", "test") + .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected @@ -33,6 +35,12 @@ read ${grpc:protobuf() read closed +write zilla:begin.ext ${grpc:beginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} +write flush + write ${grpc:protobuf() .string(1, "Hello World1") .build()} diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc.message.value.100k/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc.message.value.100k/client.rpt index 3698254892..88ed425829 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc.message.value.100k/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc.message.value.100k/client.rpt @@ -23,6 +23,8 @@ write zilla:begin.ext ${grpc:beginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoUnary") + .metadata("custom", "test") + .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected @@ -37,6 +39,11 @@ write flush write close +read zilla:begin.ext ${grpc:matchBeginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} + read zilla:data.ext ${grpc:dataEx() .typeId(zilla:id("grpc")) .deferred(94217) diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc.message.value.100k/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc.message.value.100k/server.rpt index b280d3bdd1..77fc7f0f2b 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc.message.value.100k/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc.message.value.100k/server.rpt @@ -26,6 +26,8 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoUnary") + .metadata("custom", "test") + .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected @@ -39,6 +41,12 @@ read ${grpc:protobuf() read closed +write zilla:begin.ext ${grpc:beginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} +write flush + write zilla:data.ext ${grpc:dataEx() .typeId(zilla:id("grpc")) .deferred(94217) diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/client.rpt index 667e3f0070..98d97b6899 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/client.rpt @@ -23,6 +23,8 @@ write zilla:begin.ext ${grpc:beginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoUnary") + .metadata("custom", "test") + .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected @@ -33,6 +35,11 @@ write flush write close +read zilla:begin.ext ${grpc:matchBeginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} + read ${grpc:protobuf() .string(1, "Hello World") .build()} diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/server.rpt index 035e65267e..e680e9a57b 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/server.rpt @@ -24,6 +24,8 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoUnary") + .metadata("custom", "test") + .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected @@ -33,6 +35,12 @@ read ${grpc:protobuf() read closed +write zilla:begin.ext ${grpc:beginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .build()} +write flush + write ${grpc:protobuf() .string(1, "Hello World") .build()} diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/bidi.stream.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/bidi.stream.rpc/client.rpt index a5d878ef13..4e79e02db3 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/bidi.stream.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/bidi.stream.rpc/client.rpt @@ -47,6 +47,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoBidiStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read ${grpc:protobuf() @@ -138,6 +140,7 @@ write zilla:data.ext ${kafka:dataEx() .deferred(0) .partition(-1, -1) .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "value") .build() .build()} write ${grpc:protobuf() @@ -152,6 +155,7 @@ write zilla:data.ext ${kafka:dataEx() .deferred(0) .partition(-1, -1) .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "value") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/bidi.stream.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/bidi.stream.rpc/server.rpt index 4f1fed4136..8f62fb804a 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/bidi.stream.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/bidi.stream.rpc/server.rpt @@ -50,6 +50,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoBidiStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} write ${grpc:protobuf() @@ -141,6 +143,7 @@ read zilla:data.ext ${kafka:matchDataEx() .deferred(0) .partition(-1, -1) .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "value") .build() .build()} @@ -155,6 +158,7 @@ read zilla:data.ext ${kafka:matchDataEx() .deferred(0) .partition(-1, -1) .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "value") .build() .build()} diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.sent.write.abort/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.sent.write.abort/client.rpt index 8299007a8e..6bb128e5d5 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.sent.write.abort/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.sent.write.abort/client.rpt @@ -47,6 +47,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read ${grpc:protobuf() @@ -113,6 +115,7 @@ write zilla:data.ext ${kafka:dataEx() .partition(-1, -1) .key("59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "value") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.sent.write.abort/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.sent.write.abort/server.rpt index 5d45201cdc..03b0286bb4 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.sent.write.abort/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.sent.write.abort/server.rpt @@ -50,6 +50,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} write ${grpc:protobuf() @@ -113,6 +115,7 @@ read zilla:data.ext ${kafka:matchDataEx() .partition(-1, -1) .key("59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "value") .build() .build()} diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.stream.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.stream.rpc/client.rpt index 40600f7621..05690277d6 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.stream.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.stream.rpc/client.rpt @@ -47,6 +47,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoClientStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read ${grpc:protobuf() @@ -139,6 +141,7 @@ write zilla:data.ext ${kafka:dataEx() .partition(-1, -1) .key("59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "value") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.stream.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.stream.rpc/server.rpt index 9555157a3c..bb599ff811 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.stream.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.stream.rpc/server.rpt @@ -50,6 +50,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoClientStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} write ${grpc:protobuf() @@ -142,6 +144,7 @@ read zilla:data.ext ${kafka:matchDataEx() .deferred(0) .partition(-1, -1) .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "value") .build() .build()} diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/server.stream.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/server.stream.rpc/client.rpt index af55281d58..16d2522bed 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/server.stream.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/server.stream.rpc/client.rpt @@ -47,6 +47,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoServerStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read ${grpc:protobuf() @@ -110,6 +112,7 @@ write zilla:data.ext ${kafka:dataEx() .deferred(0) .partition(-1, -1) .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "value") .build() .build()} write ${grpc:protobuf() @@ -124,6 +127,7 @@ write zilla:data.ext ${kafka:dataEx() .deferred(0) .partition(-1, -1) .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "value") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/server.stream.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/server.stream.rpc/server.rpt index 13130ecdb4..266518a500 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/server.stream.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/server.stream.rpc/server.rpt @@ -50,6 +50,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoServerStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} write ${grpc:protobuf() @@ -111,6 +113,7 @@ read zilla:data.ext ${kafka:matchDataEx() .deferred(0) .partition(-1, -1) .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "value") .build() .build()} @@ -125,6 +128,7 @@ read zilla:data.ext ${kafka:matchDataEx() .deferred(0) .partition(-1, -1) .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "value") .build() .build()} diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc.message.value.100k/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc.message.value.100k/client.rpt index 6ebe12df95..d3fe1402ea 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc.message.value.100k/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc.message.value.100k/client.rpt @@ -48,6 +48,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read ${grpc:protobuf() @@ -113,6 +115,7 @@ write zilla:data.ext ${kafka:dataEx() .partition(-1, -1) .key("59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "value") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc.message.value.100k/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc.message.value.100k/server.rpt index 43a83ee736..c40e88821b 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc.message.value.100k/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc.message.value.100k/server.rpt @@ -53,6 +53,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} write ${grpc:protobuf() @@ -118,6 +120,7 @@ read zilla:data.ext ${kafka:matchDataEx() .partition(-1, -1) .key("59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "value") .build() .build()} diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc/client.rpt index 710f3a4cf7..2c74b21e9b 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc/client.rpt @@ -47,6 +47,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} read ${grpc:protobuf() @@ -112,6 +114,7 @@ write zilla:data.ext ${kafka:dataEx() .partition(-1, -1) .key("59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "value") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc/server.rpt index 19af1d1734..8bfff62af3 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc/server.rpt @@ -50,6 +50,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "test") + .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} write ${grpc:protobuf() @@ -115,6 +117,7 @@ read zilla:data.ext ${kafka:matchDataEx() .partition(-1, -1) .key("59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") + .header("meta:custom", "value") .build() .build()} From 50a36d83a721381e7e912da481062dd064163284 Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Sat, 29 Jun 2024 16:14:40 +0530 Subject: [PATCH 07/14] addressing review comment --- .../stream/GrpcKafkaProxyFactory.java | 25 ++++++++++++++++--- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java index 5da4e78183..4fdef3d9f8 100644 --- a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java +++ b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java @@ -17,8 +17,11 @@ import static io.aklivity.zilla.runtime.binding.grpc.kafka.internal.config.GrpcKafkaWithProduceResult.META_PREFIX; import static io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.KafkaCapabilities.FETCH_ONLY; import static io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.KafkaCapabilities.PRODUCE_ONLY; +import static io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.stream.GrpcType.BASE64; +import static io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.stream.GrpcType.TEXT; import static java.time.Instant.now; +import java.util.Arrays; import java.util.function.LongUnaryOperator; import org.agrona.DirectBuffer; @@ -67,6 +70,11 @@ public final class GrpcKafkaProxyFactory implements GrpcKafkaStreamFactory { private static final String GRPC_TYPE_NAME = "grpc"; private static final String KAFKA_TYPE_NAME = "kafka"; + private static final int META_PREFIX_LENGTH = 5; + private static final byte[] HEADER_META_PREFIX = new byte[5]; + private static final byte[] META_PREFIX = "meta:".getBytes(); + private static final byte[] HEADER_BIN_SUFFIX = new byte[4]; + private static final byte[] BIN_SUFFIX = "-bin".getBytes(); private static final int DATA_FLAG_INIT = 0x02; private static final int DATA_FLAG_FIN = 0x01; @@ -1421,11 +1429,20 @@ private void doGrpcBegin( headers.forEach(h -> { - if (META_PREFIX.equals(h.name().value().getStringWithoutLengthUtf8(0, 5))) + final OctetsFW name = h.name(); + final int offset = name.offset(); + final int limit = name.limit(); + + name.buffer().getBytes(offset, HEADER_META_PREFIX); + name.buffer().getBytes(limit - BIN_SUFFIX.length, HEADER_BIN_SUFFIX); + + if (Arrays.equals(META_PREFIX, HEADER_META_PREFIX)) { - builder.item(m -> m.type(t -> t.set(GrpcType.TEXT)) - .nameLen(h.nameLen() - 5) - .name(h.name().value(), 5, h.nameLen() - 5) + final GrpcType type = Arrays.equals(BIN_SUFFIX, HEADER_BIN_SUFFIX) ? BASE64 : TEXT; + + builder.item(m -> m.type(t -> t.set(type)) + .nameLen(h.nameLen() - META_PREFIX_LENGTH) + .name(h.name().value(), META_PREFIX_LENGTH, h.nameLen() - META_PREFIX_LENGTH) .valueLen(h.valueLen()) .value(h.value())); } From fbad7fa2fdbad02b6c93f8019c34524efc89399a Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Thu, 4 Jul 2024 21:10:25 +0530 Subject: [PATCH 08/14] GrpcFunctions matcher bug fix & binary metadata IT --- .../config/GrpcKafkaWithProduceResult.java | 15 ++++++++++++-- .../stream/GrpcKafkaProxyFactory.java | 20 ++++++++++--------- .../stream/KafkaGrpcFetchHeaderHelper.java | 18 +++++++++-------- .../stream/KafkaGrpcRemoteServerFactory.java | 14 +++++++++++-- .../grpc/produce/bidi.stream.rpc/client.rpt | 3 ++- .../grpc/produce/bidi.stream.rpc/server.rpt | 3 ++- .../grpc/produce/client.stream.rpc/client.rpt | 3 ++- .../grpc/produce/client.stream.rpc/server.rpt | 3 ++- .../grpc/produce/server.stream.rpc/client.rpt | 3 ++- .../grpc/produce/server.stream.rpc/server.rpt | 3 ++- .../streams/grpc/produce/unary.rpc/client.rpt | 3 ++- .../streams/grpc/produce/unary.rpc/server.rpt | 3 ++- .../kafka/produce/bidi.stream.rpc/client.rpt | 7 ++++--- .../kafka/produce/bidi.stream.rpc/server.rpt | 7 ++++--- .../produce/client.stream.rpc/client.rpt | 7 ++++--- .../produce/client.stream.rpc/server.rpt | 7 ++++--- .../produce/server.stream.rpc/client.rpt | 5 +++-- .../produce/server.stream.rpc/server.rpt | 5 +++-- .../kafka/produce/unary.rpc/client.rpt | 5 +++-- .../kafka/produce/unary.rpc/server.rpt | 5 +++-- .../binding/grpc/internal/GrpcFunctions.java | 20 ++++++++----------- .../streams/grpc/bidi.stream.rpc/client.rpt | 3 ++- .../streams/grpc/bidi.stream.rpc/server.rpt | 3 ++- .../streams/grpc/client.stream.rpc/client.rpt | 3 ++- .../streams/grpc/client.stream.rpc/server.rpt | 3 ++- .../retry.on.unavailable.server/client.rpt | 3 ++- .../retry.on.unavailable.server/server.rpt | 3 ++- .../streams/grpc/server.stream.rpc/client.rpt | 3 ++- .../streams/grpc/server.stream.rpc/server.rpt | 3 ++- .../grpc/streams/grpc/unary.rpc/client.rpt | 3 ++- .../grpc/streams/grpc/unary.rpc/server.rpt | 3 ++- .../streams/kafka/bidi.stream.rpc/client.rpt | 4 +++- .../streams/kafka/bidi.stream.rpc/server.rpt | 4 +++- .../kafka/client.stream.rpc/client.rpt | 3 ++- .../kafka/client.stream.rpc/server.rpt | 3 ++- .../kafka/server.stream.rpc/client.rpt | 4 +++- .../kafka/server.stream.rpc/server.rpt | 4 +++- .../grpc/streams/kafka/unary.rpc/client.rpt | 3 ++- .../grpc/streams/kafka/unary.rpc/server.rpt | 3 ++- 39 files changed, 138 insertions(+), 79 deletions(-) diff --git a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/config/GrpcKafkaWithProduceResult.java b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/config/GrpcKafkaWithProduceResult.java index fb1713bee9..8d5ba2ea71 100644 --- a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/config/GrpcKafkaWithProduceResult.java +++ b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/config/GrpcKafkaWithProduceResult.java @@ -14,6 +14,8 @@ */ package io.aklivity.zilla.runtime.binding.grpc.kafka.internal.config; +import static io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.stream.GrpcType.BASE64; + import java.util.List; import java.util.function.Supplier; @@ -37,6 +39,9 @@ public class GrpcKafkaWithProduceResult { public static final String META_PREFIX = "meta:"; + public static final String BIN_SUFFIX = "-bin"; + private static final int META_PREFIX_LENGTH = 5; + private static final int BIN_SUFFIX_LENGTH = 4; private static final KafkaOffsetFW KAFKA_OFFSET_HISTORICAL = new KafkaOffsetFW.Builder() @@ -158,8 +163,14 @@ private void metadata( GrpcMetadataFW metadata) { int nameLen = metadata.nameLen(); - int nameLenWithPrefix = nameLen + 5; - buffer.putBytes(5, metadata.name().value(), 0, nameLen); + int nameLenWithPrefix = nameLen + META_PREFIX_LENGTH; + buffer.putBytes(META_PREFIX_LENGTH, metadata.name().value(), 0, nameLen); + + if (metadata.type().get() == BASE64) + { + buffer.putStringWithoutLengthAscii(nameLenWithPrefix, BIN_SUFFIX); + nameLenWithPrefix += BIN_SUFFIX_LENGTH; + } builder .nameLen(nameLenWithPrefix) diff --git a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java index 4fdef3d9f8..5a1e402d2b 100644 --- a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java +++ b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java @@ -14,7 +14,6 @@ */ package io.aklivity.zilla.runtime.binding.grpc.kafka.internal.stream; -import static io.aklivity.zilla.runtime.binding.grpc.kafka.internal.config.GrpcKafkaWithProduceResult.META_PREFIX; import static io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.KafkaCapabilities.FETCH_ONLY; import static io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.KafkaCapabilities.PRODUCE_ONLY; import static io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.stream.GrpcType.BASE64; @@ -71,9 +70,7 @@ public final class GrpcKafkaProxyFactory implements GrpcKafkaStreamFactory private static final String GRPC_TYPE_NAME = "grpc"; private static final String KAFKA_TYPE_NAME = "kafka"; private static final int META_PREFIX_LENGTH = 5; - private static final byte[] HEADER_META_PREFIX = new byte[5]; private static final byte[] META_PREFIX = "meta:".getBytes(); - private static final byte[] HEADER_BIN_SUFFIX = new byte[4]; private static final byte[] BIN_SUFFIX = "-bin".getBytes(); private static final int DATA_FLAG_INIT = 0x02; @@ -85,6 +82,9 @@ public final class GrpcKafkaProxyFactory implements GrpcKafkaStreamFactory private static final String16FW HEADER_VALUE_GRPC_ABORTED = new String16FW("10"); private static final String16FW HEADER_VALUE_GRPC_INTERNAL_ERROR = new String16FW("13"); + private final byte[] headerPrefix = new byte[5]; + private final byte[] headerSuffix = new byte[4]; + private final Varuint32FW.Builder lenRW = new Varuint32FW.Builder().wrap(new UnsafeBuffer(new byte[1024 * 8]), 0, 1024 * 8);; @@ -1433,16 +1433,18 @@ private void doGrpcBegin( final int offset = name.offset(); final int limit = name.limit(); - name.buffer().getBytes(offset, HEADER_META_PREFIX); - name.buffer().getBytes(limit - BIN_SUFFIX.length, HEADER_BIN_SUFFIX); + name.buffer().getBytes(offset, headerPrefix); + name.buffer().getBytes(limit - BIN_SUFFIX.length, headerSuffix); - if (Arrays.equals(META_PREFIX, HEADER_META_PREFIX)) + if (Arrays.equals(META_PREFIX, headerPrefix)) { - final GrpcType type = Arrays.equals(BIN_SUFFIX, HEADER_BIN_SUFFIX) ? BASE64 : TEXT; + final GrpcType type = Arrays.equals(BIN_SUFFIX, headerSuffix) ? BASE64 : TEXT; + int length = h.nameLen() - META_PREFIX_LENGTH; + final int metadataNameLength = type == BASE64 ? length - BIN_SUFFIX.length : length; builder.item(m -> m.type(t -> t.set(type)) - .nameLen(h.nameLen() - META_PREFIX_LENGTH) - .name(h.name().value(), META_PREFIX_LENGTH, h.nameLen() - META_PREFIX_LENGTH) + .nameLen(metadataNameLength) + .name(h.name().value(), META_PREFIX_LENGTH, metadataNameLength) .valueLen(h.valueLen()) .value(h.value())); } diff --git a/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcFetchHeaderHelper.java b/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcFetchHeaderHelper.java index 8d80179457..f4c35885ce 100644 --- a/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcFetchHeaderHelper.java +++ b/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcFetchHeaderHelper.java @@ -37,9 +37,7 @@ public final class KafkaGrpcFetchHeaderHelper { private static final int META_PREFIX_LENGTH = 5; - private static final byte[] HEADER_META_PREFIX = new byte[5]; private static final byte[] META_PREFIX = "meta:".getBytes(); - private static final byte[] HEADER_BIN_SUFFIX = new byte[4]; private static final byte[] BIN_SUFFIX = "-bin".getBytes(); private final Map> visitors; @@ -50,6 +48,8 @@ public final class KafkaGrpcFetchHeaderHelper private final Array32FW.Builder grpcMetadataRW = new Array32FW.Builder<>(new GrpcMetadataFW.Builder(), new GrpcMetadataFW()); private final MutableDirectBuffer metaBuffer; + private final byte[] headerPrefix = new byte[5]; + private final byte[] headerSuffix = new byte[4]; public int partitionId; public long partitionOffset; @@ -117,20 +117,22 @@ private boolean dispatch( final int offset = name.offset(); final int limit = name.limit(); - name.buffer().getBytes(offset, HEADER_META_PREFIX); - name.buffer().getBytes(limit - BIN_SUFFIX.length, HEADER_BIN_SUFFIX); + name.buffer().getBytes(offset, headerPrefix); + name.buffer().getBytes(limit - BIN_SUFFIX.length, headerSuffix); final Consumer visitor = visitors.get(name); if (visitor != null) { visitor.accept(value); } - else if (Arrays.equals(META_PREFIX, HEADER_META_PREFIX)) + else if (Arrays.equals(META_PREFIX, headerPrefix)) { - final GrpcType type = Arrays.equals(BIN_SUFFIX, HEADER_BIN_SUFFIX) ? BASE64 : TEXT; + final GrpcType type = Arrays.equals(BIN_SUFFIX, headerSuffix) ? BASE64 : TEXT; + int length = header.nameLen() - META_PREFIX_LENGTH; + final int metadataNameLength = type == BASE64 ? length - BIN_SUFFIX.length : length; grpcMetadataRW.item(m -> m.type(t -> t.set(type)) - .nameLen(header.nameLen() - META_PREFIX_LENGTH) - .name(name.value(), META_PREFIX_LENGTH, header.nameLen() - META_PREFIX_LENGTH) + .nameLen(metadataNameLength) + .name(name.value(), META_PREFIX_LENGTH, metadataNameLength) .valueLen(header.valueLen()) .value(value)); } diff --git a/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcRemoteServerFactory.java b/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcRemoteServerFactory.java index 6a1d0f8869..006dd451fd 100644 --- a/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcRemoteServerFactory.java +++ b/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcRemoteServerFactory.java @@ -16,6 +16,7 @@ import static io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.KafkaCapabilities.FETCH_ONLY; import static io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.KafkaCapabilities.PRODUCE_ONLY; +import static io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.GrpcType.BASE64; import static io.aklivity.zilla.runtime.engine.budget.BudgetDebitor.NO_DEBITOR_INDEX; import static io.aklivity.zilla.runtime.engine.buffer.BufferPool.NO_SLOT; import static io.aklivity.zilla.runtime.engine.concurrent.Signaler.NO_CANCEL_ID; @@ -77,6 +78,9 @@ public final class KafkaGrpcRemoteServerFactory implements KafkaGrpcStreamFactor private static final String GRPC_TYPE_NAME = "grpc"; private static final String KAFKA_TYPE_NAME = "kafka"; private static final String META_PREFIX = "meta:"; + private static final String BIN_SUFFIX = "-bin"; + private static final int META_PREFIX_LENGTH = 5; + private static final int BIN_SUFFIX_LENGTH = 4; private static final int SIGNAL_INITIATE_KAFKA_STREAM = 1; private static final int GRPC_QUEUE_MESSAGE_PADDING = 3 * 256 + 33; @@ -1714,8 +1718,14 @@ private void metadata( GrpcMetadataFW metadata) { int nameLen = metadata.nameLen(); - int nameLenWithPrefix = nameLen + 5; - buffer.putBytes(5, metadata.name().value(), 0, nameLen); + int nameLenWithPrefix = nameLen + META_PREFIX_LENGTH; + buffer.putBytes(META_PREFIX_LENGTH, metadata.name().value(), 0, nameLen); + + if (metadata.type().get() == BASE64) + { + buffer.putStringWithoutLengthAscii(nameLenWithPrefix, BIN_SUFFIX); + nameLenWithPrefix += BIN_SUFFIX_LENGTH; + } builder .nameLen(nameLenWithPrefix) diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/client.rpt index 8b553fd68c..121aeb5b20 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/client.rpt @@ -24,7 +24,7 @@ write zilla:begin.ext ${grpc:beginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoBidiStream") - .metadata("custom", "test") + .metadata("BASE64", "custom", "dGVzdA==") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected @@ -42,6 +42,7 @@ write flush read zilla:begin.ext ${grpc:matchBeginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/server.rpt index e15ed15896..c7e95150e9 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/server.rpt @@ -24,7 +24,7 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoBidiStream") - .metadata("custom", "test") + .metadata("BASE64", "custom", "dGVzdA==") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected @@ -40,6 +40,7 @@ read ${grpc:protobuf() write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/client.rpt index b2d9ac6504..ddbbbf0317 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/client.rpt @@ -24,7 +24,7 @@ write zilla:begin.ext ${grpc:beginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoClientStream") - .metadata("custom", "test") + .metadata("BASE64", "custom", "dGVzdA==") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected @@ -44,6 +44,7 @@ write close read zilla:begin.ext ${grpc:matchBeginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/server.rpt index ca33d408ef..a2b12608e8 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/server.rpt @@ -24,7 +24,7 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoClientStream") - .metadata("custom", "test") + .metadata("BASE64", "custom", "dGVzdA==") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected @@ -42,6 +42,7 @@ read closed write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/client.rpt index edfc6fc9a3..f898ef9497 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/client.rpt @@ -24,7 +24,7 @@ write zilla:begin.ext ${grpc:beginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoServerStream") - .metadata("custom", "test") + .metadata("BASE64", "custom", "dGVzdA==") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} @@ -40,6 +40,7 @@ write close read zilla:begin.ext ${grpc:matchBeginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/server.rpt index 754f916b04..06af90cb51 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/server.rpt @@ -24,7 +24,7 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoServerStream") - .metadata("custom", "test") + .metadata("BASE64", "custom", "dGVzdA==") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected @@ -38,6 +38,7 @@ read closed write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/client.rpt index 2342c479a3..14bd961e56 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/client.rpt @@ -24,7 +24,7 @@ write zilla:begin.ext ${grpc:beginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoUnary") - .metadata("custom", "test") + .metadata("BASE64", "custom", "dGVzdA==") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected @@ -39,6 +39,7 @@ write close read zilla:begin.ext ${grpc:matchBeginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/server.rpt index 9ee3cde15c..1dca2a4bf8 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/server.rpt @@ -24,7 +24,7 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoUnary") - .metadata("custom", "test") + .metadata("BASE64", "custom", "dGVzdA==") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected @@ -38,6 +38,7 @@ read closed write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/client.rpt index 1076584e2b..37eddfa123 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/client.rpt @@ -41,7 +41,7 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoBidiStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-14f43bae85c2ce394c9bd81ff6fa9d77") - .header("meta:custom", "test") + .header("meta:custom-bin", "dGVzdA==") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -62,7 +62,7 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoBidiStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-14f43bae85c2ce394c9bd81ff6fa9d77") - .header("meta:custom", "test") + .header("meta:custom-bin", "dGVzdA==") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -85,7 +85,7 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoBidiStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-14f43bae85c2ce394c9bd81ff6fa9d77") - .header("meta:custom", "test") + .header("meta:custom-bin", "dGVzdA==") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -123,6 +123,7 @@ read zilla:data.ext ${kafka:matchDataEx() .progress(1, 1) .key("test") .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/server.rpt index 15e680621b..ea7d670785 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/bidi.stream.rpc/server.rpt @@ -43,7 +43,7 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoBidiStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-14f43bae85c2ce394c9bd81ff6fa9d77") - .header("meta:custom", "test") + .header("meta:custom-bin", "dGVzdA==") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -63,7 +63,7 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoBidiStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-14f43bae85c2ce394c9bd81ff6fa9d77") - .header("meta:custom", "test") + .header("meta:custom-bin", "dGVzdA==") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -83,7 +83,7 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoBidiStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-14f43bae85c2ce394c9bd81ff6fa9d77") - .header("meta:custom", "test") + .header("meta:custom-bin", "dGVzdA==") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -118,6 +118,7 @@ write zilla:data.ext ${kafka:dataEx() .progress(1, 1) .key("test") .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/client.rpt index 2751193b87..5589c0ccce 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/client.rpt @@ -41,7 +41,7 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoClientStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-97e816c79fb6624b7d221026cc36107c") - .header("meta:custom", "test") + .header("meta:custom-bin", "dGVzdA==") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -62,7 +62,7 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoClientStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-97e816c79fb6624b7d221026cc36107c") - .header("meta:custom", "test") + .header("meta:custom-bin", "dGVzdA==") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -83,7 +83,7 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoClientStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-97e816c79fb6624b7d221026cc36107c") - .header("meta:custom", "test") + .header("meta:custom-bin", "dGVzdA==") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -122,6 +122,7 @@ read zilla:data.ext ${kafka:matchDataEx() .progress(1, 1) .key("test") .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/server.rpt index 104e0fd5b1..be8c806b97 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/client.stream.rpc/server.rpt @@ -43,7 +43,7 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoClientStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-97e816c79fb6624b7d221026cc36107c") - .header("meta:custom", "test") + .header("meta:custom-bin", "dGVzdA==") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -63,7 +63,7 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoClientStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-97e816c79fb6624b7d221026cc36107c") - .header("meta:custom", "test") + .header("meta:custom-bin", "dGVzdA==") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -83,7 +83,7 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoClientStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-97e816c79fb6624b7d221026cc36107c") - .header("meta:custom", "test") + .header("meta:custom-bin", "dGVzdA==") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -118,6 +118,7 @@ write zilla:data.ext ${kafka:dataEx() .progress(1, 1) .key("test") .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/client.rpt index 1e4bc6d0f2..0ea7a40b70 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/client.rpt @@ -41,7 +41,7 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoServerStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-08085616660359db13a42b81ed633c5d") - .header("meta:custom", "test") + .header("meta:custom-bin", "dGVzdA==") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -62,7 +62,7 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoServerStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-08085616660359db13a42b81ed633c5d") - .header("meta:custom", "test") + .header("meta:custom-bin", "dGVzdA==") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -101,6 +101,7 @@ read zilla:data.ext ${kafka:matchDataEx() .progress(1, 1) .key("test") .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/server.rpt index bc2c2d3625..d31d73bdf3 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/server.stream.rpc/server.rpt @@ -43,7 +43,7 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoServerStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-08085616660359db13a42b81ed633c5d") - .header("meta:custom", "test") + .header("meta:custom-bin", "dGVzdA==") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -63,7 +63,7 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoServerStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-08085616660359db13a42b81ed633c5d") - .header("meta:custom", "test") + .header("meta:custom-bin", "dGVzdA==") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -98,6 +98,7 @@ write zilla:data.ext ${kafka:dataEx() .progress(1, 1) .key("test") .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/client.rpt index 60a4113000..2357a488d1 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/client.rpt @@ -41,7 +41,7 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-479f2c3fb58bc3f04bbe15440a657670") - .header("meta:custom", "test") + .header("meta:custom-bin", "dGVzdA==") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -62,7 +62,7 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-479f2c3fb58bc3f04bbe15440a657670") - .header("meta:custom", "test") + .header("meta:custom-bin", "dGVzdA==") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -101,6 +101,7 @@ read zilla:data.ext ${kafka:matchDataEx() .progress(1, 1) .key("test") .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/server.rpt index 9ae9090f6e..404987e85b 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/produce/unary.rpc/server.rpt @@ -43,7 +43,7 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-479f2c3fb58bc3f04bbe15440a657670") - .header("meta:custom", "test") + .header("meta:custom-bin", "dGVzdA==") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -64,7 +64,7 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-479f2c3fb58bc3f04bbe15440a657670") - .header("meta:custom", "test") + .header("meta:custom-bin", "dGVzdA==") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build() .build()} @@ -99,6 +99,7 @@ write zilla:data.ext ${kafka:dataEx() .progress(1, 1) .key("test") .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc.spec/src/main/java/io/aklivity/zilla/specs/binding/grpc/internal/GrpcFunctions.java b/specs/binding-grpc.spec/src/main/java/io/aklivity/zilla/specs/binding/grpc/internal/GrpcFunctions.java index ad2a84c17d..ab3692848e 100644 --- a/specs/binding-grpc.spec/src/main/java/io/aklivity/zilla/specs/binding/grpc/internal/GrpcFunctions.java +++ b/specs/binding-grpc.spec/src/main/java/io/aklivity/zilla/specs/binding/grpc/internal/GrpcFunctions.java @@ -92,13 +92,9 @@ public static GrpcDataExBuilder dataEx() public static final class GrpcBeginExBuilder { private final GrpcBeginExFW.Builder beginExRW; - private final OctetsFW.Builder nameBuilder; - private final OctetsFW.Builder valueBuilder; private GrpcBeginExBuilder() { - nameBuilder = new OctetsFW.Builder().wrap(new UnsafeBuffer(new byte[1024 * 8]), 0, 1024 * 8); - valueBuilder = new OctetsFW.Builder().wrap(new UnsafeBuffer(new byte[1024 * 8]), 0, 1024 * 8); MutableDirectBuffer writeBuffer = new UnsafeBuffer(new byte[1024 * 8]); this.beginExRW = new GrpcBeginExFW.Builder().wrap(writeBuffer, 0, writeBuffer.capacity()); } @@ -152,9 +148,11 @@ public GrpcBeginExBuilder metadata( { beginExRW.metadataItem(b -> b.type(t -> t.set(GrpcType.valueOf(type))) .nameLen(name.length()) - .name(nameBuilder.set(name.getBytes()).build()) + .name(new OctetsFW.Builder() + .wrap(new UnsafeBuffer(new byte[1024 * 8]), 0, 1024 * 8).set(name.getBytes()).build()) .valueLen(value.length()) - .value(valueBuilder.set(value.getBytes()).build())); + .value(new OctetsFW.Builder() + .wrap(new UnsafeBuffer(new byte[1024 * 8]), 0, 1024 * 8).set(value.getBytes()).build())); return this; } @@ -172,10 +170,6 @@ public static final class GrpcBeginExMatcherBuilder private final DirectBuffer bufferRO = new UnsafeBuffer(); private final GrpcBeginExFW beginExRO = new GrpcBeginExFW(); - private final OctetsFW.Builder nameBuilder = - new OctetsFW.Builder().wrap(new UnsafeBuffer(new byte[1024 * 8]), 0, 1024 * 8); - private final OctetsFW.Builder valueBuilder = - new OctetsFW.Builder().wrap(new UnsafeBuffer(new byte[1024 * 8]), 0, 1024 * 8); private final Map metadata = new LinkedHashMap<>(); @@ -232,8 +226,10 @@ public GrpcBeginExMatcherBuilder metadata( String name, String value) { - metadata.put(nameBuilder.set(name.getBytes()).build(), - new MetadataValue(GrpcType.valueOf(type), valueBuilder.set(value.getBytes()).build()::equals)); + metadata.put(new OctetsFW.Builder() + .wrap(new UnsafeBuffer(new byte[1024 * 8]), 0, 1024 * 8).set(name.getBytes()).build(), + new MetadataValue(GrpcType.valueOf(type), new OctetsFW.Builder() + .wrap(new UnsafeBuffer(new byte[1024 * 8]), 0, 1024 * 8).set(value.getBytes()).build()::equals)); return this; } diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/client.rpt index ed38d8eb6d..f06ef602a9 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/client.rpt @@ -23,8 +23,8 @@ write zilla:begin.ext ${grpc:beginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoBidiStream") - .metadata("custom", "test") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") + .metadata("BASE64", "custom", "dGVzdA==") .build()} connected @@ -41,6 +41,7 @@ write flush read zilla:begin.ext ${grpc:matchBeginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") .build()} read ${grpc:protobuf() diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/server.rpt index ef9d6738dc..4c3215a31e 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/server.rpt @@ -24,8 +24,8 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoBidiStream") - .metadata("custom", "test") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") + .metadata("BASE64", "custom", "dGVzdA==") .build()} connected @@ -40,6 +40,7 @@ read ${grpc:protobuf() write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") .build()} write flush diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/client.rpt index 6f99a13926..90c7bdbd1e 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/client.rpt @@ -24,7 +24,7 @@ write zilla:begin.ext ${grpc:beginEx() .service("example.EchoService") .method("EchoClientStream") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") - .metadata("custom", "test") + .metadata("BASE64", "custom", "dGVzdA==") .build()} connected @@ -43,6 +43,7 @@ write close read zilla:begin.ext ${grpc:matchBeginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") .build()} read ${grpc:protobuf() diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/server.rpt index 923f6a7c0f..572f1bb00e 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/server.rpt @@ -24,8 +24,8 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoClientStream") - .metadata("custom", "test") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") + .metadata("BASE64", "custom", "dGVzdA==") .build()} connected @@ -42,6 +42,7 @@ read closed write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") .build()} write flush diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/client.rpt index d93c0a979e..c1528c5d56 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/client.rpt @@ -33,7 +33,7 @@ write zilla:begin.ext ${grpc:beginEx() .service("example.EchoService") .method("EchoUnary") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") - .metadata("custom", "test") + .metadata("BASE64", "custom", "dGVzdA==") .build()} connected @@ -47,6 +47,7 @@ write close read zilla:begin.ext ${grpc:matchBeginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") .build()} read ${grpc:protobuf() diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/server.rpt index 1c95ede186..ad817eef64 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/server.rpt @@ -27,8 +27,8 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoUnary") - .metadata("custom", "test") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") + .metadata("BASE64", "custom", "dGVzdA==") .build()} connected @@ -41,6 +41,7 @@ read closed write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") .build()} write flush diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/client.rpt index f3fc77cf21..15c915e88d 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/client.rpt @@ -24,7 +24,7 @@ write zilla:begin.ext ${grpc:beginEx() .service("example.EchoService") .method("EchoServerStream") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") - .metadata("custom", "test") + .metadata("BASE64", "custom", "dGVzdA==") .build()} connected @@ -39,6 +39,7 @@ write close read zilla:begin.ext ${grpc:matchBeginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") .build()} read ${grpc:protobuf() diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/server.rpt index cd51afd3a7..ba9f3340e2 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/server.rpt @@ -24,8 +24,8 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoServerStream") - .metadata("custom", "test") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") + .metadata("BASE64", "custom", "dGVzdA==") .build()} connected @@ -38,6 +38,7 @@ read closed write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") .build()} write flush diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/client.rpt index 98d97b6899..c502c178ef 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/client.rpt @@ -23,8 +23,8 @@ write zilla:begin.ext ${grpc:beginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoUnary") - .metadata("custom", "test") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") + .metadata("BASE64", "custom", "dGVzdA==") .build()} connected @@ -38,6 +38,7 @@ write close read zilla:begin.ext ${grpc:matchBeginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") .build()} read ${grpc:protobuf() diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/server.rpt index e680e9a57b..f0321c4224 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/server.rpt @@ -24,8 +24,8 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoUnary") - .metadata("custom", "test") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") + .metadata("BASE64", "custom", "dGVzdA==") .build()} connected @@ -38,6 +38,7 @@ read closed write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") .build()} write flush diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/bidi.stream.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/bidi.stream.rpc/client.rpt index 4e79e02db3..703de00865 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/bidi.stream.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/bidi.stream.rpc/client.rpt @@ -47,8 +47,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoBidiStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") - .header("meta:custom", "test") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") + .header("meta:custom-bin", "dGVzdA==") .build() .build()} read ${grpc:protobuf() @@ -141,6 +141,7 @@ write zilla:data.ext ${kafka:dataEx() .partition(-1, -1) .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} write ${grpc:protobuf() @@ -156,6 +157,7 @@ write zilla:data.ext ${kafka:dataEx() .partition(-1, -1) .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/bidi.stream.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/bidi.stream.rpc/server.rpt index 8f62fb804a..bb68140864 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/bidi.stream.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/bidi.stream.rpc/server.rpt @@ -50,8 +50,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoBidiStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") - .header("meta:custom", "test") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") + .header("meta:custom-bin", "dGVzdA==") .build() .build()} write ${grpc:protobuf() @@ -144,6 +144,7 @@ read zilla:data.ext ${kafka:matchDataEx() .partition(-1, -1) .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} @@ -159,6 +160,7 @@ read zilla:data.ext ${kafka:matchDataEx() .partition(-1, -1) .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.stream.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.stream.rpc/client.rpt index 05690277d6..bb02da2dc3 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.stream.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.stream.rpc/client.rpt @@ -47,8 +47,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoClientStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") - .header("meta:custom", "test") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") + .header("meta:custom-bin", "dGVzdA==") .build() .build()} read ${grpc:protobuf() @@ -142,6 +142,7 @@ write zilla:data.ext ${kafka:dataEx() .key("59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.stream.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.stream.rpc/server.rpt index bb599ff811..5bd8e7aab8 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.stream.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/client.stream.rpc/server.rpt @@ -50,8 +50,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoClientStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") - .header("meta:custom", "test") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") + .header("meta:custom-bin", "dGVzdA==") .build() .build()} write ${grpc:protobuf() @@ -145,6 +145,7 @@ read zilla:data.ext ${kafka:matchDataEx() .partition(-1, -1) .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/server.stream.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/server.stream.rpc/client.rpt index 16d2522bed..4fdbd83f01 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/server.stream.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/server.stream.rpc/client.rpt @@ -47,8 +47,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoServerStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") - .header("meta:custom", "test") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") + .header("meta:custom-bin", "dGVzdA==") .build() .build()} read ${grpc:protobuf() @@ -113,6 +113,7 @@ write zilla:data.ext ${kafka:dataEx() .partition(-1, -1) .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} write ${grpc:protobuf() @@ -128,6 +129,7 @@ write zilla:data.ext ${kafka:dataEx() .partition(-1, -1) .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/server.stream.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/server.stream.rpc/server.rpt index 266518a500..6b7afef49c 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/server.stream.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/server.stream.rpc/server.rpt @@ -50,8 +50,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoServerStream") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") - .header("meta:custom", "test") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") + .header("meta:custom-bin", "dGVzdA==") .build() .build()} write ${grpc:protobuf() @@ -114,6 +114,7 @@ read zilla:data.ext ${kafka:matchDataEx() .partition(-1, -1) .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} @@ -129,6 +130,7 @@ read zilla:data.ext ${kafka:matchDataEx() .partition(-1, -1) .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc/client.rpt index 2c74b21e9b..9708ea0c01 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc/client.rpt @@ -47,8 +47,8 @@ read zilla:data.ext ${kafka:matchDataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") - .header("meta:custom", "test") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") + .header("meta:custom-bin", "dGVzdA==") .build() .build()} read ${grpc:protobuf() @@ -115,6 +115,7 @@ write zilla:data.ext ${kafka:dataEx() .key("59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc/server.rpt index 8bfff62af3..b8d38ad0b2 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/kafka/unary.rpc/server.rpt @@ -50,8 +50,8 @@ write zilla:data.ext ${kafka:dataEx() .header("zilla:method", "EchoUnary") .header("zilla:reply-to", "responses") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") - .header("meta:custom", "test") .header("meta:idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") + .header("meta:custom-bin", "dGVzdA==") .build() .build()} write ${grpc:protobuf() @@ -118,6 +118,7 @@ read zilla:data.ext ${kafka:matchDataEx() .key("59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("zilla:correlation-id", "59410e57-3e0f-4b61-9328-f645a7968ac8-d41d8cd98f00b204e9800998ecf8427e") .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} From 2cbff6c06ea56c3d48c88ec3dc6e1029b251d97a Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Tue, 9 Jul 2024 20:28:53 +0530 Subject: [PATCH 09/14] addressing review comments --- .../config/GrpcKafkaWithProduceResult.java | 31 +++++++++-------- .../stream/GrpcKafkaProxyFactory.java | 27 ++++++++------- .../stream/KafkaGrpcFetchHeaderHelper.java | 32 ++++++++++------- .../stream/KafkaGrpcRemoteServerFactory.java | 30 ++++++++-------- .../grpc/produce/bidi.stream.rpc/client.rpt | 2 +- .../grpc/produce/bidi.stream.rpc/server.rpt | 2 +- .../grpc/produce/client.stream.rpc/client.rpt | 2 +- .../grpc/produce/client.stream.rpc/server.rpt | 2 +- .../grpc/produce/server.stream.rpc/client.rpt | 2 +- .../grpc/produce/server.stream.rpc/server.rpt | 2 +- .../streams/grpc/produce/unary.rpc/client.rpt | 2 +- .../streams/grpc/produce/unary.rpc/server.rpt | 2 +- .../binding/grpc/internal/GrpcFunctions.java | 34 ++++++++++++++----- .../unary.rpc/binary.metadata/client.rpt | 2 +- .../unary.rpc/binary.metadata/server.rpt | 2 +- .../streams/grpc/bidi.stream.rpc/client.rpt | 2 +- .../streams/grpc/bidi.stream.rpc/server.rpt | 2 +- .../streams/grpc/client.stream.rpc/client.rpt | 2 +- .../streams/grpc/client.stream.rpc/server.rpt | 2 +- .../retry.on.unavailable.server/client.rpt | 2 +- .../retry.on.unavailable.server/server.rpt | 2 +- .../streams/grpc/server.stream.rpc/client.rpt | 2 +- .../streams/grpc/server.stream.rpc/server.rpt | 2 +- .../grpc/streams/grpc/unary.rpc/client.rpt | 2 +- .../grpc/streams/grpc/unary.rpc/server.rpt | 2 +- 25 files changed, 110 insertions(+), 84 deletions(-) diff --git a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/config/GrpcKafkaWithProduceResult.java b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/config/GrpcKafkaWithProduceResult.java index 8d5ba2ea71..dd6b47f852 100644 --- a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/config/GrpcKafkaWithProduceResult.java +++ b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/config/GrpcKafkaWithProduceResult.java @@ -35,13 +35,15 @@ import io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.OctetsFW; import io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.String16FW; import io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.stream.GrpcMetadataFW; +import io.aklivity.zilla.runtime.binding.grpc.kafka.internal.types.stream.GrpcType; public class GrpcKafkaWithProduceResult { public static final String META_PREFIX = "meta:"; public static final String BIN_SUFFIX = "-bin"; - private static final int META_PREFIX_LENGTH = 5; - private static final int BIN_SUFFIX_LENGTH = 4; + + private static final int META_PREFIX_LENGTH = META_PREFIX.length(); + private static final int BIN_SUFFIX_LENGTH = BIN_SUFFIX.length(); private static final KafkaOffsetFW KAFKA_OFFSET_HISTORICAL = new KafkaOffsetFW.Builder() @@ -60,7 +62,7 @@ public class GrpcKafkaWithProduceResult private final String16FW service; private final String16FW method; private final Array32FW metadata; - private final ExpandableDirectByteBuffer buffer; + private final ExpandableDirectByteBuffer nameBuffer; GrpcKafkaWithProduceResult( String16FW service, @@ -84,8 +86,8 @@ public class GrpcKafkaWithProduceResult this.acks = acks; this.keyRef = keyRef; this.hash = hash; - this.buffer = new ExpandableDirectByteBuffer(); - this.buffer.putStringWithoutLengthAscii(0, META_PREFIX); + this.nameBuffer = new ExpandableDirectByteBuffer(); + this.nameBuffer.putStringWithoutLengthAscii(0, META_PREFIX); hash.updateHash(correlation.service.value()); hash.updateHash(service.value()); @@ -162,19 +164,18 @@ private void metadata( KafkaHeaderFW.Builder builder, GrpcMetadataFW metadata) { - int nameLen = metadata.nameLen(); - int nameLenWithPrefix = nameLen + META_PREFIX_LENGTH; - buffer.putBytes(META_PREFIX_LENGTH, metadata.name().value(), 0, nameLen); - - if (metadata.type().get() == BASE64) + GrpcType type = metadata.type().get(); + DirectBuffer name = metadata.name().value(); + int nameLen = META_PREFIX_LENGTH + metadata.nameLen(); + nameBuffer.putBytes(META_PREFIX_LENGTH, name, 0, name.capacity()); + if (type == BASE64) { - buffer.putStringWithoutLengthAscii(nameLenWithPrefix, BIN_SUFFIX); - nameLenWithPrefix += BIN_SUFFIX_LENGTH; + nameBuffer.putStringWithoutLengthAscii(nameLen, BIN_SUFFIX); + nameLen += BIN_SUFFIX_LENGTH; } - builder - .nameLen(nameLenWithPrefix) - .name(buffer, 0, nameLenWithPrefix) + .nameLen(nameLen) + .name(nameBuffer, 0, nameLen) .valueLen(metadata.valueLen()) .value(metadata.value().value(), 0, metadata.valueLen()); } diff --git a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java index 5a1e402d2b..46aa5527f7 100644 --- a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java +++ b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java @@ -69,9 +69,10 @@ public final class GrpcKafkaProxyFactory implements GrpcKafkaStreamFactory { private static final String GRPC_TYPE_NAME = "grpc"; private static final String KAFKA_TYPE_NAME = "kafka"; - private static final int META_PREFIX_LENGTH = 5; private static final byte[] META_PREFIX = "meta:".getBytes(); private static final byte[] BIN_SUFFIX = "-bin".getBytes(); + private static final int META_PREFIX_LENGTH = META_PREFIX.length; + private static final int BIN_SUFFIX_LENGTH = BIN_SUFFIX.length; private static final int DATA_FLAG_INIT = 0x02; private static final int DATA_FLAG_FIN = 0x01; @@ -82,8 +83,8 @@ public final class GrpcKafkaProxyFactory implements GrpcKafkaStreamFactory private static final String16FW HEADER_VALUE_GRPC_ABORTED = new String16FW("10"); private static final String16FW HEADER_VALUE_GRPC_INTERNAL_ERROR = new String16FW("13"); - private final byte[] headerPrefix = new byte[5]; - private final byte[] headerSuffix = new byte[4]; + private final byte[] headerPrefix = new byte[META_PREFIX_LENGTH]; + private final byte[] headerSuffix = new byte[BIN_SUFFIX_LENGTH]; private final Varuint32FW.Builder lenRW = new Varuint32FW.Builder().wrap(new UnsafeBuffer(new byte[1024 * 8]), 0, 1024 * 8);; @@ -1430,21 +1431,21 @@ private void doGrpcBegin( headers.forEach(h -> { final OctetsFW name = h.name(); + final DirectBuffer buffer = name.buffer(); final int offset = name.offset(); final int limit = name.limit(); - - name.buffer().getBytes(offset, headerPrefix); - name.buffer().getBytes(limit - BIN_SUFFIX.length, headerSuffix); - + buffer.getBytes(offset, headerPrefix); + buffer.getBytes(limit - BIN_SUFFIX.length, headerSuffix); if (Arrays.equals(META_PREFIX, headerPrefix)) { final GrpcType type = Arrays.equals(BIN_SUFFIX, headerSuffix) ? BASE64 : TEXT; - int length = h.nameLen() - META_PREFIX_LENGTH; - final int metadataNameLength = type == BASE64 ? length - BIN_SUFFIX.length : length; - - builder.item(m -> m.type(t -> t.set(type)) - .nameLen(metadataNameLength) - .name(h.name().value(), META_PREFIX_LENGTH, metadataNameLength) + final int nameLen = type == BASE64 + ? h.nameLen() - META_PREFIX_LENGTH - BIN_SUFFIX_LENGTH + : h.nameLen() - META_PREFIX_LENGTH; + builder.item(m -> m + .type(t -> t.set(type)) + .nameLen(nameLen) + .name(name.value(), META_PREFIX_LENGTH, nameLen) .valueLen(h.valueLen()) .value(h.value())); } diff --git a/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcFetchHeaderHelper.java b/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcFetchHeaderHelper.java index f4c35885ce..f517b8a995 100644 --- a/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcFetchHeaderHelper.java +++ b/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcFetchHeaderHelper.java @@ -22,6 +22,7 @@ import java.util.Map; import java.util.function.Consumer; +import org.agrona.DirectBuffer; import org.agrona.MutableDirectBuffer; import io.aklivity.zilla.runtime.binding.kafka.grpc.config.KafkaGrpcCorrelationConfig; @@ -36,9 +37,10 @@ public final class KafkaGrpcFetchHeaderHelper { - private static final int META_PREFIX_LENGTH = 5; private static final byte[] META_PREFIX = "meta:".getBytes(); private static final byte[] BIN_SUFFIX = "-bin".getBytes(); + private static final int META_PREFIX_LENGTH = META_PREFIX.length; + private static final int BIN_SUFFIX_LENGTH = BIN_SUFFIX.length; private final Map> visitors; private final OctetsFW serviceRO = new OctetsFW(); @@ -48,8 +50,8 @@ public final class KafkaGrpcFetchHeaderHelper private final Array32FW.Builder grpcMetadataRW = new Array32FW.Builder<>(new GrpcMetadataFW.Builder(), new GrpcMetadataFW()); private final MutableDirectBuffer metaBuffer; - private final byte[] headerPrefix = new byte[5]; - private final byte[] headerSuffix = new byte[4]; + private final byte[] headerPrefix = new byte[META_PREFIX_LENGTH]; + private final byte[] headerSuffix = new byte[BIN_SUFFIX_LENGTH]; public int partitionId; public long partitionOffset; @@ -60,6 +62,8 @@ public final class KafkaGrpcFetchHeaderHelper public OctetsFW correlationId; public Array32FW metadata; + private Array32FW.Builder builder; + public KafkaGrpcFetchHeaderHelper( KafkaGrpcCorrelationConfig correlation, MutableDirectBuffer metaBuffer) @@ -85,7 +89,7 @@ public void visit( replyTo = null; correlationId = null; - grpcMetadataRW.wrap(metaBuffer, 0, metaBuffer.capacity()); + builder = grpcMetadataRW.wrap(metaBuffer, 0, metaBuffer.capacity()); if (dataEx != null) { @@ -114,11 +118,11 @@ private boolean dispatch( { final OctetsFW name = header.name(); final OctetsFW value = header.value(); + final DirectBuffer buffer = name.buffer(); final int offset = name.offset(); final int limit = name.limit(); - - name.buffer().getBytes(offset, headerPrefix); - name.buffer().getBytes(limit - BIN_SUFFIX.length, headerSuffix); + buffer.getBytes(offset, headerPrefix); + buffer.getBytes(limit - BIN_SUFFIX_LENGTH, headerSuffix); final Consumer visitor = visitors.get(name); if (visitor != null) @@ -128,13 +132,15 @@ private boolean dispatch( else if (Arrays.equals(META_PREFIX, headerPrefix)) { final GrpcType type = Arrays.equals(BIN_SUFFIX, headerSuffix) ? BASE64 : TEXT; - int length = header.nameLen() - META_PREFIX_LENGTH; - final int metadataNameLength = type == BASE64 ? length - BIN_SUFFIX.length : length; - grpcMetadataRW.item(m -> m.type(t -> t.set(type)) - .nameLen(metadataNameLength) - .name(name.value(), META_PREFIX_LENGTH, metadataNameLength) + final int nameLen = type == BASE64 + ? header.nameLen() - META_PREFIX_LENGTH - BIN_SUFFIX_LENGTH + : header.nameLen() - META_PREFIX_LENGTH; + builder.item(m -> m + .type(t -> t.set(type)) + .nameLen(nameLen) + .name(name.value(), META_PREFIX_LENGTH, nameLen) .valueLen(header.valueLen()) - .value(value)); + .value(header.value())); } return service != null && diff --git a/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcRemoteServerFactory.java b/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcRemoteServerFactory.java index 006dd451fd..2eb36c367a 100644 --- a/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcRemoteServerFactory.java +++ b/runtime/binding-kafka-grpc/src/main/java/io/aklivity/zilla/runtime/binding/kafka/grpc/internal/stream/KafkaGrpcRemoteServerFactory.java @@ -60,6 +60,7 @@ import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.GrpcDataExFW; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.GrpcMetadataFW; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.GrpcResetExFW; +import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.GrpcType; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.KafkaBeginExFW; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.KafkaDataExFW; import io.aklivity.zilla.runtime.binding.kafka.grpc.internal.types.stream.KafkaFlushExFW; @@ -79,8 +80,8 @@ public final class KafkaGrpcRemoteServerFactory implements KafkaGrpcStreamFactor private static final String KAFKA_TYPE_NAME = "kafka"; private static final String META_PREFIX = "meta:"; private static final String BIN_SUFFIX = "-bin"; - private static final int META_PREFIX_LENGTH = 5; - private static final int BIN_SUFFIX_LENGTH = 4; + private static final int META_PREFIX_LENGTH = META_PREFIX.length(); + private static final int BIN_SUFFIX_LENGTH = BIN_SUFFIX.length(); private static final int SIGNAL_INITIATE_KAFKA_STREAM = 1; private static final int GRPC_QUEUE_MESSAGE_PADDING = 3 * 256 + 33; @@ -138,6 +139,7 @@ public final class KafkaGrpcRemoteServerFactory implements KafkaGrpcStreamFactor private final MutableDirectBuffer writeBuffer; private final MutableDirectBuffer extBuffer; private final MutableDirectBuffer metaBuffer; + private final ExpandableDirectByteBuffer nameBuffer; private final BindingHandler streamFactory; private final LongUnaryOperator supplyInitialId; private final LongUnaryOperator supplyReplyId; @@ -177,6 +179,8 @@ public KafkaGrpcRemoteServerFactory( this.grpcTypeId = context.supplyTypeId(GRPC_TYPE_NAME); this.kafkaTypeId = context.supplyTypeId(KAFKA_TYPE_NAME); this.groupIdFormat = config.groupIdFormat(); + this.nameBuffer = new ExpandableDirectByteBuffer(); + this.nameBuffer.putStringWithoutLengthAscii(0, META_PREFIX); } @Override @@ -1335,7 +1339,6 @@ private final class GrpcClient private final KafkaRemoteServer server; private final KafkaCorrelateProxy correlater; private final OctetsFW correlationId; - private final ExpandableDirectByteBuffer buffer; private final long originId; private final long routedId; private final long initialId; @@ -1373,8 +1376,6 @@ private GrpcClient( this.initialId = supplyInitialId.applyAsLong(routedId); this.replyId = supplyReplyId.applyAsLong(initialId); this.correlater = new KafkaCorrelateProxy(originId, resolveId, replyTo, server.condition, this); - this.buffer = new ExpandableDirectByteBuffer(); - this.buffer.putStringWithoutLengthAscii(0, META_PREFIX); } private int initialPendingAck() @@ -1717,19 +1718,18 @@ private void metadata( KafkaHeaderFW.Builder builder, GrpcMetadataFW metadata) { - int nameLen = metadata.nameLen(); - int nameLenWithPrefix = nameLen + META_PREFIX_LENGTH; - buffer.putBytes(META_PREFIX_LENGTH, metadata.name().value(), 0, nameLen); - - if (metadata.type().get() == BASE64) + GrpcType type = metadata.type().get(); + DirectBuffer name = metadata.name().value(); + int nameLen = META_PREFIX_LENGTH + metadata.nameLen(); + nameBuffer.putBytes(META_PREFIX_LENGTH, name, 0, name.capacity()); + if (type == BASE64) { - buffer.putStringWithoutLengthAscii(nameLenWithPrefix, BIN_SUFFIX); - nameLenWithPrefix += BIN_SUFFIX_LENGTH; + nameBuffer.putStringWithoutLengthAscii(nameLen, BIN_SUFFIX); + nameLen += BIN_SUFFIX_LENGTH; } - builder - .nameLen(nameLenWithPrefix) - .name(buffer, 0, nameLenWithPrefix) + .nameLen(nameLen) + .name(nameBuffer, 0, nameLen) .valueLen(metadata.valueLen()) .value(metadata.value().value(), 0, metadata.valueLen()); } diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/client.rpt index 121aeb5b20..13f02f96b0 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/client.rpt @@ -24,7 +24,7 @@ write zilla:begin.ext ${grpc:beginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoBidiStream") - .metadata("BASE64", "custom", "dGVzdA==") + .metadataBase64("custom", "dGVzdA==") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/server.rpt index c7e95150e9..cd34c207a9 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/server.rpt @@ -24,7 +24,7 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoBidiStream") - .metadata("BASE64", "custom", "dGVzdA==") + .metadataBase64("custom", "dGVzdA==") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/client.rpt index ddbbbf0317..3d11c42455 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/client.rpt @@ -24,7 +24,7 @@ write zilla:begin.ext ${grpc:beginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoClientStream") - .metadata("BASE64", "custom", "dGVzdA==") + .metadataBase64("custom", "dGVzdA==") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/server.rpt index a2b12608e8..ef0d3e28a9 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/server.rpt @@ -24,7 +24,7 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoClientStream") - .metadata("BASE64", "custom", "dGVzdA==") + .metadataBase64("custom", "dGVzdA==") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/client.rpt index f898ef9497..86089faf54 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/client.rpt @@ -24,7 +24,7 @@ write zilla:begin.ext ${grpc:beginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoServerStream") - .metadata("BASE64", "custom", "dGVzdA==") + .metadataBase64("custom", "dGVzdA==") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/server.rpt index 06af90cb51..2c0c838ab5 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/server.rpt @@ -24,7 +24,7 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoServerStream") - .metadata("BASE64", "custom", "dGVzdA==") + .metadataBase64("custom", "dGVzdA==") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/client.rpt index 14bd961e56..8f58371201 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/client.rpt @@ -24,7 +24,7 @@ write zilla:begin.ext ${grpc:beginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoUnary") - .metadata("BASE64", "custom", "dGVzdA==") + .metadataBase64("custom", "dGVzdA==") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/server.rpt index 1dca2a4bf8..67c748a6f3 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/server.rpt @@ -24,7 +24,7 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoUnary") - .metadata("BASE64", "custom", "dGVzdA==") + .metadataBase64("custom", "dGVzdA==") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") .build()} connected diff --git a/specs/binding-grpc.spec/src/main/java/io/aklivity/zilla/specs/binding/grpc/internal/GrpcFunctions.java b/specs/binding-grpc.spec/src/main/java/io/aklivity/zilla/specs/binding/grpc/internal/GrpcFunctions.java index ab3692848e..ae019ef819 100644 --- a/specs/binding-grpc.spec/src/main/java/io/aklivity/zilla/specs/binding/grpc/internal/GrpcFunctions.java +++ b/specs/binding-grpc.spec/src/main/java/io/aklivity/zilla/specs/binding/grpc/internal/GrpcFunctions.java @@ -141,18 +141,28 @@ public GrpcBeginExBuilder metadata( return metadata("TEXT", name, value); } + public GrpcBeginExBuilder metadataBase64( + String name, + String value) + { + return metadata("BASE64", name, value); + } + public GrpcBeginExBuilder metadata( String type, String name, String value) { + DirectBuffer nameBuffer = new UnsafeBuffer(name.getBytes()); + OctetsFW nameOctets = new OctetsFW().wrap(nameBuffer, 0, nameBuffer.capacity()); + DirectBuffer valueBuffer = new UnsafeBuffer(value.getBytes()); + OctetsFW valueOctets = new OctetsFW().wrap(valueBuffer, 0, valueBuffer.capacity()); + beginExRW.metadataItem(b -> b.type(t -> t.set(GrpcType.valueOf(type))) .nameLen(name.length()) - .name(new OctetsFW.Builder() - .wrap(new UnsafeBuffer(new byte[1024 * 8]), 0, 1024 * 8).set(name.getBytes()).build()) + .name(nameOctets) .valueLen(value.length()) - .value(new OctetsFW.Builder() - .wrap(new UnsafeBuffer(new byte[1024 * 8]), 0, 1024 * 8).set(value.getBytes()).build())); + .value(valueOctets)); return this; } @@ -221,15 +231,23 @@ public GrpcBeginExMatcherBuilder metadata( return metadata("TEXT", name, value); } + public GrpcBeginExMatcherBuilder metadataBase64( + String name, + String value) + { + return metadata("BASE64", name, value); + } + public GrpcBeginExMatcherBuilder metadata( String type, String name, String value) { - metadata.put(new OctetsFW.Builder() - .wrap(new UnsafeBuffer(new byte[1024 * 8]), 0, 1024 * 8).set(name.getBytes()).build(), - new MetadataValue(GrpcType.valueOf(type), new OctetsFW.Builder() - .wrap(new UnsafeBuffer(new byte[1024 * 8]), 0, 1024 * 8).set(value.getBytes()).build()::equals)); + DirectBuffer nameBuffer = new UnsafeBuffer(name.getBytes()); + OctetsFW nameOctets = new OctetsFW().wrap(nameBuffer, 0, nameBuffer.capacity()); + DirectBuffer valueBuffer = new UnsafeBuffer(value.getBytes()); + OctetsFW valueOctets = new OctetsFW().wrap(valueBuffer, 0, valueBuffer.capacity()); + metadata.put(nameOctets, new MetadataValue(GrpcType.valueOf(type), valueOctets::equals)); return this; } diff --git a/specs/binding-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/streams/application/unary.rpc/binary.metadata/client.rpt b/specs/binding-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/streams/application/unary.rpc/binary.metadata/client.rpt index 48a87dcdd5..d4c4b41bd3 100644 --- a/specs/binding-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/streams/application/unary.rpc/binary.metadata/client.rpt +++ b/specs/binding-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/streams/application/unary.rpc/binary.metadata/client.rpt @@ -23,7 +23,7 @@ write zilla:begin.ext ${grpc:beginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoUnary") - .metadata("BASE64", "custom", "dGVzdA==") + .metadataBase64("custom", "dGVzdA==") .build()} connected diff --git a/specs/binding-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/streams/application/unary.rpc/binary.metadata/server.rpt b/specs/binding-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/streams/application/unary.rpc/binary.metadata/server.rpt index a6d0681938..7f23d80391 100644 --- a/specs/binding-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/streams/application/unary.rpc/binary.metadata/server.rpt +++ b/specs/binding-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/streams/application/unary.rpc/binary.metadata/server.rpt @@ -24,7 +24,7 @@ read zilla:begin.ext ${grpc:matchBeginEx() .authority("localhost:8080") .service("example.EchoService") .method("EchoUnary") - .metadata("BASE64", "custom", "dGVzdA==") + .metadataBase64("custom", "dGVzdA==") .build()} connected diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/client.rpt index f06ef602a9..bad44f0862 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/client.rpt @@ -24,7 +24,7 @@ write zilla:begin.ext ${grpc:beginEx() .service("example.EchoService") .method("EchoBidiStream") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") - .metadata("BASE64", "custom", "dGVzdA==") + .metadataBase64("custom", "dGVzdA==") .build()} connected diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/server.rpt index 4c3215a31e..f10e8647f6 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/server.rpt @@ -25,7 +25,7 @@ read zilla:begin.ext ${grpc:matchBeginEx() .service("example.EchoService") .method("EchoBidiStream") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") - .metadata("BASE64", "custom", "dGVzdA==") + .metadataBase64("custom", "dGVzdA==") .build()} connected diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/client.rpt index 90c7bdbd1e..2c7bbe8e82 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/client.rpt @@ -24,7 +24,7 @@ write zilla:begin.ext ${grpc:beginEx() .service("example.EchoService") .method("EchoClientStream") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") - .metadata("BASE64", "custom", "dGVzdA==") + .metadataBase64("custom", "dGVzdA==") .build()} connected diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/server.rpt index 572f1bb00e..d9a31e180b 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/server.rpt @@ -25,7 +25,7 @@ read zilla:begin.ext ${grpc:matchBeginEx() .service("example.EchoService") .method("EchoClientStream") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") - .metadata("BASE64", "custom", "dGVzdA==") + .metadataBase64("custom", "dGVzdA==") .build()} connected diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/client.rpt index c1528c5d56..7ae36109a2 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/client.rpt @@ -33,7 +33,7 @@ write zilla:begin.ext ${grpc:beginEx() .service("example.EchoService") .method("EchoUnary") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") - .metadata("BASE64", "custom", "dGVzdA==") + .metadataBase64("custom", "dGVzdA==") .build()} connected diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/server.rpt index ad817eef64..3634914ab4 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/server.rpt @@ -28,7 +28,7 @@ read zilla:begin.ext ${grpc:matchBeginEx() .service("example.EchoService") .method("EchoUnary") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") - .metadata("BASE64", "custom", "dGVzdA==") + .metadataBase64("custom", "dGVzdA==") .build()} connected diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/client.rpt index 15c915e88d..96635a060e 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/client.rpt @@ -24,7 +24,7 @@ write zilla:begin.ext ${grpc:beginEx() .service("example.EchoService") .method("EchoServerStream") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") - .metadata("BASE64", "custom", "dGVzdA==") + .metadataBase64("custom", "dGVzdA==") .build()} connected diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/server.rpt index ba9f3340e2..c7f0816844 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/server.rpt @@ -25,7 +25,7 @@ read zilla:begin.ext ${grpc:matchBeginEx() .service("example.EchoService") .method("EchoServerStream") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") - .metadata("BASE64", "custom", "dGVzdA==") + .metadataBase64("custom", "dGVzdA==") .build()} connected diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/client.rpt index c502c178ef..29cfeb893d 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/client.rpt @@ -24,7 +24,7 @@ write zilla:begin.ext ${grpc:beginEx() .service("example.EchoService") .method("EchoUnary") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") - .metadata("BASE64", "custom", "dGVzdA==") + .metadataBase64("custom", "dGVzdA==") .build()} connected diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/server.rpt index f0321c4224..c26f56c982 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/server.rpt @@ -25,7 +25,7 @@ read zilla:begin.ext ${grpc:matchBeginEx() .service("example.EchoService") .method("EchoUnary") .metadata("idempotency-key", "59410e57-3e0f-4b61-9328-f645a7968ac8") - .metadata("BASE64", "custom", "dGVzdA==") + .metadataBase64("custom", "dGVzdA==") .build()} connected From 0d7af5b2b8a6fa3176e5ecf61ba81fe375f2e45c Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Wed, 10 Jul 2024 20:33:38 +0530 Subject: [PATCH 10/14] `grpc-kafka` fetch changes --- .../stream/GrpcKafkaProxyFactory.java | 62 ++++++++++++++++++- .../client.rpt | 1 + .../client.rpt | 1 + .../reject.request.body.unary.rpc/client.rpt | 1 + .../grpc/fetch/reliable.unary.rpc/client.rpt | 7 +++ .../grpc/fetch/reliable.unary.rpc/server.rpt | 6 ++ .../fetch/unreliable.unary.rpc/client.rpt | 7 +++ .../fetch/unreliable.unary.rpc/server.rpt | 6 ++ .../kafka/fetch/reliable.unary.rpc/client.rpt | 2 + .../kafka/fetch/reliable.unary.rpc/server.rpt | 2 + .../fetch/unreliable.unary.rpc/client.rpt | 2 + .../fetch/unreliable.unary.rpc/server.rpt | 2 + 12 files changed, 96 insertions(+), 3 deletions(-) diff --git a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java index 46aa5527f7..e10f53be96 100644 --- a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java +++ b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java @@ -542,6 +542,11 @@ protected void onKafkaAbort( long traceId, long authorization) { + if (!GrpcKafkaState.replyOpening(state)) + { + doGrpcBegin(traceId, authorization, 0L, emptyRO); + } + cleanup(traceId, authorization); } @@ -569,6 +574,15 @@ protected void onKafkaData( int length, OctetsFW extension) { + if (!GrpcKafkaState.replyOpening(state)) + { + final ExtensionFW dataEx = extension.get(extensionRO::tryWrap); + final KafkaDataExFW kafkaDataEx = + dataEx != null && dataEx.typeId() == kafkaTypeId ? extension.get(kafkaDataExRO::tryWrap) : null; + + doGrpcBegin(traceId, authorization, 0L, kafkaDataEx.merged().fetch().headers()); + } + doGrpcData(traceId, authorization, budgetId, reserved, flags, buffer, offset, length); } @@ -623,6 +637,50 @@ private void doGrpcBegin( traceId, authorization, affinity, extension); } + private void doGrpcBegin( + long traceId, + long authorization, + long affinity, + Array32FW headers) + { + state = GrpcKafkaState.openingReply(state); + + Array32FW.Builder builder = + grpcMetadataRW.wrap(metaBuffer, 0, metaBuffer.capacity()); + + headers.forEach(h -> + { + final OctetsFW name = h.name(); + final DirectBuffer buffer = name.buffer(); + final int offset = name.offset(); + final int limit = name.limit(); + buffer.getBytes(offset, headerPrefix); + buffer.getBytes(limit - BIN_SUFFIX.length, headerSuffix); + if (Arrays.equals(META_PREFIX, headerPrefix)) + { + final GrpcType type = Arrays.equals(BIN_SUFFIX, headerSuffix) ? BASE64 : TEXT; + final int nameLen = type == BASE64 + ? h.nameLen() - META_PREFIX_LENGTH - BIN_SUFFIX_LENGTH + : h.nameLen() - META_PREFIX_LENGTH; + builder.item(m -> m + .type(t -> t.set(type)) + .nameLen(nameLen) + .name(name.value(), META_PREFIX_LENGTH, nameLen) + .valueLen(h.valueLen()) + .value(h.value())); + } + }); + + GrpcBeginExFW beginEx = grpcBeginExRW + .wrap(extBuffer, 0, extBuffer.capacity()) + .typeId(grpcTypeId) + .metadata(builder.build()) + .build(); + + doBegin(grpc, originId, routedId, replyId, replySeq, replyAck, replyMax, + traceId, authorization, affinity, beginEx); + } + private void doGrpcData( long traceId, long authorization, @@ -865,8 +923,6 @@ private void onKafkaBegin( int lenSize = len.sizeof(); replyPad = result.fieldId().sizeof() + lenSize + partitions.sizeof(); } - - delegate.onKafkaBegin(traceId, authorization, extension); } private void onKafkaData( @@ -939,7 +995,7 @@ private void onKafkaData( } int length = encodeProgress - encodeOffset; - delegate.onKafkaData(traceId, authorization, budgetId, reserved, flags, + delegate.onKafkaData(traceId, authorization, budgetId, reserved + length, flags, encodeBuffer, encodeOffset, length, extension); } } diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/client.sent.read.abort.unary.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/client.sent.read.abort.unary.rpc/client.rpt index 6ed757bbad..87c007d8b6 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/client.sent.read.abort.unary.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/client.sent.read.abort.unary.rpc/client.rpt @@ -16,6 +16,7 @@ connect "zilla://streams/grpc0" option zilla:window 8192 option zilla:transmission "half-duplex" + option zilla:update "proactive" write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/client.sent.write.abort.unary.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/client.sent.write.abort.unary.rpc/client.rpt index e6263d2148..4b87c4bedd 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/client.sent.write.abort.unary.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/client.sent.write.abort.unary.rpc/client.rpt @@ -16,6 +16,7 @@ connect "zilla://streams/grpc0" option zilla:window 8192 option zilla:transmission "half-duplex" + option zilla:update "proactive" write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/reject.request.body.unary.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/reject.request.body.unary.rpc/client.rpt index 78c0060785..fe2e93d712 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/reject.request.body.unary.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/reject.request.body.unary.rpc/client.rpt @@ -16,6 +16,7 @@ connect "zilla://streams/grpc0" option zilla:window 8192 option zilla:transmission "half-duplex" + option zilla:update "proactive" write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/reliable.unary.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/reliable.unary.rpc/client.rpt index e24b17835e..636e51145f 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/reliable.unary.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/reliable.unary.rpc/client.rpt @@ -16,6 +16,7 @@ connect "zilla://streams/grpc0" option zilla:window 8192 option zilla:transmission "half-duplex" + option zilla:update "proactive" write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) @@ -32,6 +33,12 @@ write flush write close +read zilla:begin.ext ${grpc:matchBeginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") + .build()} + read ${grpc:protobuf() .string(1, "Hello World") .bytes(32767, grpc_kafka:messageId() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/reliable.unary.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/reliable.unary.rpc/server.rpt index b67d93cef2..daa901a867 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/reliable.unary.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/reliable.unary.rpc/server.rpt @@ -32,6 +32,12 @@ read zilla:data.empty read closed +write zilla:begin.ext ${grpc:beginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") + .build()} + write ${grpc:protobuf() .string(1, "Hello World") .bytes(32767, grpc_kafka:messageId() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/unreliable.unary.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/unreliable.unary.rpc/client.rpt index be3fe6ff52..ae4bea46e8 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/unreliable.unary.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/unreliable.unary.rpc/client.rpt @@ -16,6 +16,7 @@ connect "zilla://streams/grpc0" option zilla:window 8192 option zilla:transmission "half-duplex" + option zilla:update "proactive" write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) @@ -31,6 +32,12 @@ write flush write close +read zilla:begin.ext ${grpc:matchBeginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") + .build()} + read ${grpc:protobuf() .string(1, "Hello World") .bytes(32767, grpc_kafka:messageId() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/unreliable.unary.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/unreliable.unary.rpc/server.rpt index c788bae4f8..9d4907c483 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/unreliable.unary.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/unreliable.unary.rpc/server.rpt @@ -31,6 +31,12 @@ read zilla:data.empty read closed +write zilla:begin.ext ${grpc:beginEx() + .typeId(zilla:id("grpc")) + .metadata("custom", "value") + .metadata("BASE64", "customProperty", "dGVzdA==") + .build()} + write ${grpc:protobuf() .string(1, "Hello World") .bytes(32767, grpc_kafka:messageId() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/fetch/reliable.unary.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/fetch/reliable.unary.rpc/client.rpt index 28d30e4817..bb6d038f00 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/fetch/reliable.unary.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/fetch/reliable.unary.rpc/client.rpt @@ -51,6 +51,8 @@ read zilla:data.ext ${kafka:matchDataEx() .progress(0, 2) .progress(1, 1) .key("test") + .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/fetch/reliable.unary.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/fetch/reliable.unary.rpc/server.rpt index 8d6b0bee95..32e2767c5e 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/fetch/reliable.unary.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/fetch/reliable.unary.rpc/server.rpt @@ -54,6 +54,8 @@ write zilla:data.ext ${kafka:dataEx() .progress(0, 2) .progress(1, 1) .key("test") + .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/fetch/unreliable.unary.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/fetch/unreliable.unary.rpc/client.rpt index 06175c7086..c6df09dca7 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/fetch/unreliable.unary.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/fetch/unreliable.unary.rpc/client.rpt @@ -51,6 +51,8 @@ read zilla:data.ext ${kafka:matchDataEx() .progress(0, 2) .progress(1, 1) .key("test") + .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/fetch/unreliable.unary.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/fetch/unreliable.unary.rpc/server.rpt index 766dc240c3..85feb51170 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/fetch/unreliable.unary.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/kafka/fetch/unreliable.unary.rpc/server.rpt @@ -53,6 +53,8 @@ write zilla:data.ext ${kafka:dataEx() .progress(0, 2) .progress(1, 1) .key("test") + .header("meta:custom", "value") + .header("meta:customProperty-bin", "dGVzdA==") .build() .build()} write ${grpc:protobuf() From 44e97f4c15d5ada3a19625fd0f17f5cf71afeb7e Mon Sep 17 00:00:00 2001 From: John Fallows Date: Mon, 15 Jul 2024 17:36:05 -0700 Subject: [PATCH 11/14] Prevent overwrite of write buffer when encoding progress --- .../grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java index e10f53be96..2c437d1bf4 100644 --- a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java +++ b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java @@ -130,6 +130,7 @@ public final class GrpcKafkaProxyFactory implements GrpcKafkaStreamFactory private final GrpcKafkaIdHelper messageFieldHelper = new GrpcKafkaIdHelper(); private final MutableDirectBuffer writeBuffer; + private final MutableDirectBuffer progressBuffer; private final MutableDirectBuffer extBuffer; private final MutableDirectBuffer metaBuffer; private final BindingHandler streamFactory; @@ -146,6 +147,7 @@ public GrpcKafkaProxyFactory( EngineContext context) { this.writeBuffer = context.writeBuffer(); + this.progressBuffer = new UnsafeBuffer(new byte[context.writeBuffer().capacity()]); this.extBuffer = new UnsafeBuffer(new byte[context.writeBuffer().capacity()]); this.metaBuffer = new UnsafeBuffer(new byte[context.writeBuffer().capacity()]); this.streamFactory = context.streamFactory(); @@ -953,7 +955,7 @@ private void onKafkaData( final OctetsFW payload = data.payload(); final OctetsFW extension = data.extension(); - final MutableDirectBuffer encodeBuffer = writeBuffer; + final MutableDirectBuffer encodeBuffer = progressBuffer; final int encodeOffset = DataFW.FIELD_OFFSET_PAYLOAD; final int payloadSize = payload.sizeof(); From 6ff7bc0c913a7fa500f52c1c1eb4b55e378d1ef9 Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Tue, 16 Jul 2024 10:02:12 +0530 Subject: [PATCH 12/14] addressing review comments --- .../stream/GrpcKafkaProxyFactory.java | 25 +++++++++++++++++-- .../grpc/fetch/reliable.unary.rpc/client.rpt | 2 +- .../grpc/fetch/reliable.unary.rpc/server.rpt | 2 +- .../fetch/unreliable.unary.rpc/client.rpt | 2 +- .../fetch/unreliable.unary.rpc/server.rpt | 2 +- .../grpc/produce/bidi.stream.rpc/client.rpt | 2 +- .../grpc/produce/bidi.stream.rpc/server.rpt | 2 +- .../grpc/produce/client.stream.rpc/client.rpt | 2 +- .../grpc/produce/client.stream.rpc/server.rpt | 2 +- .../grpc/produce/server.stream.rpc/client.rpt | 2 +- .../grpc/produce/server.stream.rpc/server.rpt | 2 +- .../streams/grpc/produce/unary.rpc/client.rpt | 2 +- .../streams/grpc/produce/unary.rpc/server.rpt | 2 +- .../binding/grpc/internal/GrpcFunctions.java | 4 +-- .../streams/grpc/bidi.stream.rpc/client.rpt | 2 +- .../streams/grpc/bidi.stream.rpc/server.rpt | 2 +- .../streams/grpc/client.stream.rpc/client.rpt | 2 +- .../streams/grpc/client.stream.rpc/server.rpt | 2 +- .../retry.on.unavailable.server/client.rpt | 2 +- .../retry.on.unavailable.server/server.rpt | 2 +- .../streams/grpc/server.stream.rpc/client.rpt | 2 +- .../streams/grpc/server.stream.rpc/server.rpt | 2 +- .../grpc/streams/grpc/unary.rpc/client.rpt | 2 +- .../grpc/streams/grpc/unary.rpc/server.rpt | 2 +- 24 files changed, 47 insertions(+), 26 deletions(-) diff --git a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java index 2c437d1bf4..e833714401 100644 --- a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java +++ b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java @@ -90,6 +90,7 @@ public final class GrpcKafkaProxyFactory implements GrpcKafkaStreamFactory new Varuint32FW.Builder().wrap(new UnsafeBuffer(new byte[1024 * 8]), 0, 1024 * 8);; private final OctetsFW emptyRO = new OctetsFW().wrap(new UnsafeBuffer(0L, 0), 0, 0); + private final Array32FW emptyHeaderRO = new Array32FW<>(new KafkaHeaderFW()); private final BeginFW beginRO = new BeginFW(); private final DataFW dataRO = new DataFW(); @@ -582,7 +583,17 @@ protected void onKafkaData( final KafkaDataExFW kafkaDataEx = dataEx != null && dataEx.typeId() == kafkaTypeId ? extension.get(kafkaDataExRO::tryWrap) : null; - doGrpcBegin(traceId, authorization, 0L, kafkaDataEx.merged().fetch().headers()); + if (kafkaDataEx != null && + kafkaDataEx.merged() != null && + kafkaDataEx.merged().fetch() != null && + kafkaDataEx.merged().fetch().headers() != null) + { + doGrpcBegin(traceId, authorization, 0L, kafkaDataEx.merged().fetch().headers()); + } + else + { + doGrpcBegin(traceId, authorization, 0L, emptyHeaderRO); + } } doGrpcData(traceId, authorization, budgetId, reserved, flags, buffer, offset, length); @@ -1380,7 +1391,17 @@ protected void onKafkaData( { if (!GrpcKafkaState.replyOpening(state)) { - doGrpcBegin(traceId, authorization, 0L, kafkaDataEx.merged().fetch().headers()); + if (kafkaDataEx != null && + kafkaDataEx.merged() != null && + kafkaDataEx.merged().fetch() != null && + kafkaDataEx.merged().fetch().headers() != null) + { + doGrpcBegin(traceId, authorization, 0L, kafkaDataEx.merged().fetch().headers()); + } + else + { + doGrpcBegin(traceId, authorization, 0L, emptyHeaderRO); + } } if (GrpcKafkaState.replyClosing(state)) diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/reliable.unary.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/reliable.unary.rpc/client.rpt index 636e51145f..409450f6d0 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/reliable.unary.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/reliable.unary.rpc/client.rpt @@ -36,7 +36,7 @@ write close read zilla:begin.ext ${grpc:matchBeginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/reliable.unary.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/reliable.unary.rpc/server.rpt index daa901a867..7972b740e6 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/reliable.unary.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/reliable.unary.rpc/server.rpt @@ -35,7 +35,7 @@ read closed write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/unreliable.unary.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/unreliable.unary.rpc/client.rpt index ae4bea46e8..8397925f18 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/unreliable.unary.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/unreliable.unary.rpc/client.rpt @@ -35,7 +35,7 @@ write close read zilla:begin.ext ${grpc:matchBeginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/unreliable.unary.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/unreliable.unary.rpc/server.rpt index 9d4907c483..395d491021 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/unreliable.unary.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/fetch/unreliable.unary.rpc/server.rpt @@ -34,7 +34,7 @@ read closed write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/client.rpt index 13f02f96b0..b37d938ff7 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/client.rpt @@ -42,7 +42,7 @@ write flush read zilla:begin.ext ${grpc:matchBeginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/server.rpt index cd34c207a9..90355cddda 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/bidi.stream.rpc/server.rpt @@ -40,7 +40,7 @@ read ${grpc:protobuf() write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/client.rpt index 3d11c42455..a959a8b036 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/client.rpt @@ -44,7 +44,7 @@ write close read zilla:begin.ext ${grpc:matchBeginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/server.rpt index ef0d3e28a9..b19e659496 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/client.stream.rpc/server.rpt @@ -42,7 +42,7 @@ read closed write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/client.rpt index 86089faf54..473b43f5c9 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/client.rpt @@ -40,7 +40,7 @@ write close read zilla:begin.ext ${grpc:matchBeginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/server.rpt index 2c0c838ab5..108abbabd5 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/server.stream.rpc/server.rpt @@ -38,7 +38,7 @@ read closed write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/client.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/client.rpt index 8f58371201..5cfe61ef71 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/client.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/client.rpt @@ -39,7 +39,7 @@ write close read zilla:begin.ext ${grpc:matchBeginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} read ${grpc:protobuf() diff --git a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/server.rpt b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/server.rpt index 67c748a6f3..aa3ab812e6 100644 --- a/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/server.rpt +++ b/specs/binding-grpc-kafka.spec/src/main/scripts/io/aklivity/zilla/specs/binding/grpc/kafka/streams/grpc/produce/unary.rpc/server.rpt @@ -38,7 +38,7 @@ read closed write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} write ${grpc:protobuf() diff --git a/specs/binding-grpc.spec/src/main/java/io/aklivity/zilla/specs/binding/grpc/internal/GrpcFunctions.java b/specs/binding-grpc.spec/src/main/java/io/aklivity/zilla/specs/binding/grpc/internal/GrpcFunctions.java index ae019ef819..bffa60a0b2 100644 --- a/specs/binding-grpc.spec/src/main/java/io/aklivity/zilla/specs/binding/grpc/internal/GrpcFunctions.java +++ b/specs/binding-grpc.spec/src/main/java/io/aklivity/zilla/specs/binding/grpc/internal/GrpcFunctions.java @@ -148,7 +148,7 @@ public GrpcBeginExBuilder metadataBase64( return metadata("BASE64", name, value); } - public GrpcBeginExBuilder metadata( + private GrpcBeginExBuilder metadata( String type, String name, String value) @@ -238,7 +238,7 @@ public GrpcBeginExMatcherBuilder metadataBase64( return metadata("BASE64", name, value); } - public GrpcBeginExMatcherBuilder metadata( + private GrpcBeginExMatcherBuilder metadata( String type, String name, String value) diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/client.rpt index bad44f0862..1526309cd2 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/client.rpt @@ -41,7 +41,7 @@ write flush read zilla:begin.ext ${grpc:matchBeginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} read ${grpc:protobuf() diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/server.rpt index f10e8647f6..d5c3d17ad7 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/bidi.stream.rpc/server.rpt @@ -40,7 +40,7 @@ read ${grpc:protobuf() write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} write flush diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/client.rpt index 2c7bbe8e82..61319aa562 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/client.rpt @@ -43,7 +43,7 @@ write close read zilla:begin.ext ${grpc:matchBeginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} read ${grpc:protobuf() diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/server.rpt index d9a31e180b..e45f74cbbc 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/client.stream.rpc/server.rpt @@ -42,7 +42,7 @@ read closed write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} write flush diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/client.rpt index 7ae36109a2..ba2d5bf73e 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/client.rpt @@ -47,7 +47,7 @@ write close read zilla:begin.ext ${grpc:matchBeginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} read ${grpc:protobuf() diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/server.rpt index 3634914ab4..0bd20d226d 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/retry.on.unavailable.server/server.rpt @@ -41,7 +41,7 @@ read closed write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} write flush diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/client.rpt index 96635a060e..75592c73f0 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/client.rpt @@ -39,7 +39,7 @@ write close read zilla:begin.ext ${grpc:matchBeginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} read ${grpc:protobuf() diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/server.rpt index c7f0816844..cbc435aff7 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/server.stream.rpc/server.rpt @@ -38,7 +38,7 @@ read closed write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} write flush diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/client.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/client.rpt index 29cfeb893d..fe37ab077a 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/client.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/client.rpt @@ -38,7 +38,7 @@ write close read zilla:begin.ext ${grpc:matchBeginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} read ${grpc:protobuf() diff --git a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/server.rpt b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/server.rpt index c26f56c982..08ceffd283 100644 --- a/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/server.rpt +++ b/specs/binding-kafka-grpc.spec/src/main/scripts/io/aklivity/zilla/specs/binding/kafka/grpc/streams/grpc/unary.rpc/server.rpt @@ -38,7 +38,7 @@ read closed write zilla:begin.ext ${grpc:beginEx() .typeId(zilla:id("grpc")) .metadata("custom", "value") - .metadata("BASE64", "customProperty", "dGVzdA==") + .metadataBase64("customProperty", "dGVzdA==") .build()} write flush From 9b85d7fb018cea73356e571ce597edc02676de71 Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Tue, 16 Jul 2024 10:15:47 +0530 Subject: [PATCH 13/14] adding EMPTY_HEADERS constant --- .../kafka/internal/stream/GrpcKafkaProxyFactory.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java index e833714401..19e3cd1c42 100644 --- a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java +++ b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java @@ -82,6 +82,10 @@ public final class GrpcKafkaProxyFactory implements GrpcKafkaStreamFactory private static final String16FW HEADER_VALUE_GRPC_OK = new String16FW("0"); private static final String16FW HEADER_VALUE_GRPC_ABORTED = new String16FW("10"); private static final String16FW HEADER_VALUE_GRPC_INTERNAL_ERROR = new String16FW("13"); + private static final Array32FW EMPTY_HEADERS = + new Array32FW.Builder<>(new KafkaHeaderFW.Builder(), new KafkaHeaderFW()) + .wrap(new UnsafeBuffer(0L, 0), 0, 0) + .build(); private final byte[] headerPrefix = new byte[META_PREFIX_LENGTH]; private final byte[] headerSuffix = new byte[BIN_SUFFIX_LENGTH]; @@ -90,7 +94,6 @@ public final class GrpcKafkaProxyFactory implements GrpcKafkaStreamFactory new Varuint32FW.Builder().wrap(new UnsafeBuffer(new byte[1024 * 8]), 0, 1024 * 8);; private final OctetsFW emptyRO = new OctetsFW().wrap(new UnsafeBuffer(0L, 0), 0, 0); - private final Array32FW emptyHeaderRO = new Array32FW<>(new KafkaHeaderFW()); private final BeginFW beginRO = new BeginFW(); private final DataFW dataRO = new DataFW(); @@ -592,7 +595,7 @@ protected void onKafkaData( } else { - doGrpcBegin(traceId, authorization, 0L, emptyHeaderRO); + doGrpcBegin(traceId, authorization, 0L, EMPTY_HEADERS); } } @@ -1400,7 +1403,7 @@ protected void onKafkaData( } else { - doGrpcBegin(traceId, authorization, 0L, emptyHeaderRO); + doGrpcBegin(traceId, authorization, 0L, EMPTY_HEADERS); } } From 7f42557d30da48dba9e6941a08d12c2c26074d41 Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Tue, 16 Jul 2024 10:36:01 +0530 Subject: [PATCH 14/14] build fix --- .../grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java index 19e3cd1c42..eb44a9cea2 100644 --- a/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java +++ b/runtime/binding-grpc-kafka/src/main/java/io/aklivity/zilla/runtime/binding/grpc/kafka/internal/stream/GrpcKafkaProxyFactory.java @@ -84,7 +84,7 @@ public final class GrpcKafkaProxyFactory implements GrpcKafkaStreamFactory private static final String16FW HEADER_VALUE_GRPC_INTERNAL_ERROR = new String16FW("13"); private static final Array32FW EMPTY_HEADERS = new Array32FW.Builder<>(new KafkaHeaderFW.Builder(), new KafkaHeaderFW()) - .wrap(new UnsafeBuffer(0L, 0), 0, 0) + .wrap(new UnsafeBuffer(new byte[8]), 0, 8) .build(); private final byte[] headerPrefix = new byte[META_PREFIX_LENGTH];