diff --git a/CHANGELOG.md b/CHANGELOG.md index dd317720c5..af22580bac 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,7 +2,21 @@ ## [Unreleased](https://github.com/aklivity/zilla/tree/HEAD) -[Full Changelog](https://github.com/aklivity/zilla/compare/0.9.96...HEAD) +[Full Changelog](https://github.com/aklivity/zilla/compare/0.9.97...HEAD) + +**Fixed bugs:** + +- Propagate error code in risingwave binding that's coming either from pgsql-kafka or risingwave [\#1286](https://github.com/aklivity/zilla/issues/1286) +- Zilla get blocked when sending messages to kafka [\#1268](https://github.com/aklivity/zilla/issues/1268) + +**Merged pull requests:** + +- Propagate error code in risingwave binding that's coming either from pgsql-kafka or risingwave [\#1288](https://github.com/aklivity/zilla/pull/1288) ([akrambek](https://github.com/akrambek)) +- Increase write buffer size to accomidate longer path [\#1287](https://github.com/aklivity/zilla/pull/1287) ([akrambek](https://github.com/akrambek)) + +## [0.9.97](https://github.com/aklivity/zilla/tree/0.9.97) (2024-10-07) + +[Full Changelog](https://github.com/aklivity/zilla/compare/0.9.96...0.9.97) **Implemented enhancements:** diff --git a/build/flyweight-maven-plugin/pom.xml b/build/flyweight-maven-plugin/pom.xml index 5140899057..a4e179f998 100644 --- a/build/flyweight-maven-plugin/pom.xml +++ b/build/flyweight-maven-plugin/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla build - 0.9.97 + 0.9.98 ../pom.xml diff --git a/build/pom.xml b/build/pom.xml index a4359bad5f..7268b5777c 100644 --- a/build/pom.xml +++ b/build/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla zilla - 0.9.97 + 0.9.98 ../pom.xml diff --git a/cloud/docker-image/pom.xml b/cloud/docker-image/pom.xml index a2c2c42c56..0008880498 100644 --- a/cloud/docker-image/pom.xml +++ b/cloud/docker-image/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla cloud - 0.9.97 + 0.9.98 ../pom.xml diff --git a/cloud/helm-chart/pom.xml b/cloud/helm-chart/pom.xml index 115cd8cb0b..d1687d6448 100644 --- a/cloud/helm-chart/pom.xml +++ b/cloud/helm-chart/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla cloud - 0.9.97 + 0.9.98 ../pom.xml diff --git a/cloud/pom.xml b/cloud/pom.xml index 26b086946b..c858b8434f 100644 --- a/cloud/pom.xml +++ b/cloud/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla zilla - 0.9.97 + 0.9.98 ../pom.xml diff --git a/conf/pom.xml b/conf/pom.xml index 5fce2b92a4..05dda9ea84 100644 --- a/conf/pom.xml +++ b/conf/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla zilla - 0.9.97 + 0.9.98 ../pom.xml diff --git a/incubator/binding-amqp.spec/pom.xml b/incubator/binding-amqp.spec/pom.xml index afe79e85d9..6e9d25c045 100644 --- a/incubator/binding-amqp.spec/pom.xml +++ b/incubator/binding-amqp.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - 0.9.97 + 0.9.98 ../pom.xml diff --git a/incubator/binding-amqp/pom.xml b/incubator/binding-amqp/pom.xml index 6069e0f7ed..11b362eeb1 100644 --- a/incubator/binding-amqp/pom.xml +++ b/incubator/binding-amqp/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - 0.9.97 + 0.9.98 ../pom.xml diff --git a/incubator/binding-pgsql-kafka.spec/pom.xml b/incubator/binding-pgsql-kafka.spec/pom.xml index dbf159e5a9..db699d8d67 100644 --- a/incubator/binding-pgsql-kafka.spec/pom.xml +++ b/incubator/binding-pgsql-kafka.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - 0.9.97 + 0.9.98 ../pom.xml diff --git a/incubator/binding-pgsql-kafka/pom.xml b/incubator/binding-pgsql-kafka/pom.xml index d2f24cac6d..897a425ee9 100644 --- a/incubator/binding-pgsql-kafka/pom.xml +++ b/incubator/binding-pgsql-kafka/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - 0.9.97 + 0.9.98 ../pom.xml diff --git a/incubator/binding-pgsql.spec/pom.xml b/incubator/binding-pgsql.spec/pom.xml index 157dc07223..f41d1e88db 100644 --- a/incubator/binding-pgsql.spec/pom.xml +++ b/incubator/binding-pgsql.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - 0.9.97 + 0.9.98 ../pom.xml diff --git a/incubator/binding-pgsql.spec/src/main/java/io/aklivity/zilla/specs/binding/pgsql/PgsqlFunctions.java b/incubator/binding-pgsql.spec/src/main/java/io/aklivity/zilla/specs/binding/pgsql/PgsqlFunctions.java index ca46aa48c1..ec738bb33a 100644 --- a/incubator/binding-pgsql.spec/src/main/java/io/aklivity/zilla/specs/binding/pgsql/PgsqlFunctions.java +++ b/incubator/binding-pgsql.spec/src/main/java/io/aklivity/zilla/specs/binding/pgsql/PgsqlFunctions.java @@ -23,6 +23,7 @@ import io.aklivity.zilla.specs.binding.pgsql.internal.types.stream.PgsqlColumnInfoFW; import io.aklivity.zilla.specs.binding.pgsql.internal.types.stream.PgsqlCompletedFlushExFW; import io.aklivity.zilla.specs.binding.pgsql.internal.types.stream.PgsqlDataExFW; +import io.aklivity.zilla.specs.binding.pgsql.internal.types.stream.PgsqlErrorFlushExFW; import io.aklivity.zilla.specs.binding.pgsql.internal.types.stream.PgsqlFlushExFW; import io.aklivity.zilla.specs.binding.pgsql.internal.types.stream.PgsqlFormat; import io.aklivity.zilla.specs.binding.pgsql.internal.types.stream.PgsqlMessageType; @@ -215,6 +216,13 @@ public PgsqlCompletedFlushExBuilder completion() return new PgsqlCompletedFlushExBuilder(); } + public PgsqlErrorFlushExBuilder error() + { + flushExRW.kind(PgsqlMessageType.ERROR.value()); + + return new PgsqlErrorFlushExBuilder(); + } + public PgsqlReadyFlushExBuilder ready() { flushExRW.kind(PgsqlMessageType.READY.value()); @@ -351,6 +359,44 @@ public PgsqlFlushExBuilder build() } } + public final class PgsqlErrorFlushExBuilder + { + private final PgsqlErrorFlushExFW.Builder pgsqlErrorFlushExRW = new PgsqlErrorFlushExFW.Builder(); + + private PgsqlErrorFlushExBuilder() + { + pgsqlErrorFlushExRW.wrap(writeBuffer, PgsqlFlushExFW.FIELD_OFFSET_TYPE, writeBuffer.capacity()); + } + + public PgsqlErrorFlushExBuilder severity( + String severity) + { + pgsqlErrorFlushExRW.severity(String.format("%s\u0000", severity)); + return this; + } + + public PgsqlErrorFlushExBuilder code( + String code) + { + pgsqlErrorFlushExRW.code(String.format("%s\u0000", code)); + return this; + } + + public PgsqlErrorFlushExBuilder message( + String message) + { + pgsqlErrorFlushExRW.message(String.format("%s\u0000", message)); + return this; + } + + public PgsqlFlushExBuilder build() + { + final PgsqlErrorFlushExFW pgsqlErrorFlushEx = pgsqlErrorFlushExRW.build(); + flushExRO.wrap(writeBuffer, 0, pgsqlErrorFlushEx.limit()); + return PgsqlFlushExBuilder.this; + } + } + public final class PgsqlReadyFlushExBuilder { private final PgsqlReadyFlushExFW.Builder pgsqlReadyFlushExRW = new PgsqlReadyFlushExFW.Builder(); diff --git a/incubator/binding-pgsql.spec/src/main/resources/META-INF/zilla/pgsql.idl b/incubator/binding-pgsql.spec/src/main/resources/META-INF/zilla/pgsql.idl index 8e9de96273..245d83f062 100644 --- a/incubator/binding-pgsql.spec/src/main/resources/META-INF/zilla/pgsql.idl +++ b/incubator/binding-pgsql.spec/src/main/resources/META-INF/zilla/pgsql.idl @@ -33,6 +33,7 @@ scope pgsql ROW (68), TYPE (84), COMPLETION (67), + ERROR (69), READY (90) } @@ -56,6 +57,7 @@ scope pgsql { case 84: pgsql::stream::PgsqlTypeFlushEx type; case 67: pgsql::stream::PgsqlCompletedFlushEx completion; + case 69: pgsql::stream::PgsqlErrorFlushEx error; case 90: pgsql::stream::PgsqlReadyFlushEx ready; } @@ -86,6 +88,13 @@ scope pgsql string16 tag; } + struct PgsqlErrorFlushEx + { + string16 severity; + string16 code; + string16 message; + } + enum PgsqlStatus (uint8) { IDLE(73), diff --git a/incubator/binding-pgsql.spec/src/main/scripts/io/aklivity/zilla/specs/binding/pgsql/streams/application/select.table.with.error/client.rpt b/incubator/binding-pgsql.spec/src/main/scripts/io/aklivity/zilla/specs/binding/pgsql/streams/application/select.table.with.error/client.rpt new file mode 100644 index 0000000000..c86d425f2d --- /dev/null +++ b/incubator/binding-pgsql.spec/src/main/scripts/io/aklivity/zilla/specs/binding/pgsql/streams/application/select.table.with.error/client.rpt @@ -0,0 +1,56 @@ +# +# Copyright 2021-2023 Aklivity Inc +# +# Licensed under the Aklivity Community License (the "License"); you may not use +# this file except in compliance with the License. You may obtain a copy of the +# License at +# +# https://www.aklivity.io/aklivity-community-license/ +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. +# + +connect "zilla://streams/app0" + option zilla:window 8192 + option zilla:transmission "duplex" + +write zilla:begin.ext ${pgsql:beginEx() + .typeId(zilla:id("pgsql")) + .parameter("user", "root") + .parameter("database", "dev") + .parameter("application_name", "psql") + .parameter("client_encoding", "UTF8") + .build()} + +connected + +write zilla:data.ext ${pgsql:dataEx() + .typeId(zilla:id("pgsql")) + .query() + .build() + .build()} +write "SELECT * FROM unknown;" + [0x00] +write flush + +read advised zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .error() + .severity("ERROR") + .code("XX000") + .message("Failed to run the query.") + .build() + .build()} + +read advised zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .ready() + .status("IDLE") + .build() + .build()} + +read closed +write close diff --git a/incubator/binding-pgsql.spec/src/main/scripts/io/aklivity/zilla/specs/binding/pgsql/streams/application/select.table.with.error/server.rpt b/incubator/binding-pgsql.spec/src/main/scripts/io/aklivity/zilla/specs/binding/pgsql/streams/application/select.table.with.error/server.rpt new file mode 100644 index 0000000000..c7b8188f31 --- /dev/null +++ b/incubator/binding-pgsql.spec/src/main/scripts/io/aklivity/zilla/specs/binding/pgsql/streams/application/select.table.with.error/server.rpt @@ -0,0 +1,59 @@ +# +# Copyright 2021-2023 Aklivity Inc +# +# Licensed under the Aklivity Community License (the "License"); you may not use +# this file except in compliance with the License. You may obtain a copy of the +# License at +# +# https://www.aklivity.io/aklivity-community-license/ +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. +# + +property serverAddress "zilla://streams/app0" + +accept ${serverAddress} + option zilla:window 8192 + option zilla:transmission "duplex" + +accepted + +read zilla:begin.ext ${pgsql:beginEx() + .typeId(zilla:id("pgsql")) + .parameter("user", "root") + .parameter("database", "dev") + .parameter("application_name", "psql") + .parameter("client_encoding", "UTF8") + .build()} + +connected + +read zilla:data.ext ${pgsql:dataEx() + .typeId(zilla:id("pgsql")) + .query() + .build() + .build()} +read "SELECT * FROM unknown;" + [0x00] + +write advise zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .error() + .severity("ERROR") + .code("XX000") + .message("Failed to run the query.") + .build() + .build()} + +write advise zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .ready() + .status("IDLE") + .build() + .build()} + +write close +read closed diff --git a/incubator/binding-pgsql.spec/src/main/scripts/io/aklivity/zilla/specs/binding/pgsql/streams/network/select.table.with.error/client.rpt b/incubator/binding-pgsql.spec/src/main/scripts/io/aklivity/zilla/specs/binding/pgsql/streams/network/select.table.with.error/client.rpt new file mode 100644 index 0000000000..451d246e87 --- /dev/null +++ b/incubator/binding-pgsql.spec/src/main/scripts/io/aklivity/zilla/specs/binding/pgsql/streams/network/select.table.with.error/client.rpt @@ -0,0 +1,93 @@ +# +# Copyright 2021-2023 Aklivity Inc +# +# Licensed under the Aklivity Community License (the "License"); you may not use +# this file except in compliance with the License. You may obtain a copy of the +# License at +# +# https://www.aklivity.io/aklivity-community-license/ +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. +# + +property networkConnectWindow 8192 + +connect "zilla://streams/net0" + option zilla:window ${networkConnectWindow} + option zilla:transmission "duplex" + option zilla:byteorder "network" + +connected + +write 75 # length + 3s # major version + 0s # minor version + "user" [0x00] # name + "root" [0x00] # value + "database" [0x00] # name + "dev" [0x00] # value + "application_name" [0x00] # name + "psql" [0x00] # value + "client_encoding" [0x00] # name + "UTF8" [0x00] # value + [0x00] # end of parameters + +read [0x52] # type R + 8 # length + 0 # authentication type + +read [0x4b] # type K + 12 # length + 0 # pid + 0 # key + +read [0x53] # type S + 25 # length + "client_encoding" [0x00] # name + "UTF8" [0x00] # value + +read [0x53] # type S + 35 # length + "standard_conforming_strings" [0x00] # name + [0x6f 0x6e 0x00] # value + +read [0x53] # type S + 25 # length + "server_version" [0x00] # name + "1.0.0" [0x00] # value + +read [0x53] # type S + 27 # length + "application_name" [0x00] # name + "zilla" [0x00] # value + +read [0x5a] # type Z + 5 # length + [0x49] # status + +write [0x51] # type Q + 27 # length + "SELECT * FROM unknown;" + [0x00] + +read [0x45] # type E + 41 # length + "ERROR" # severity + [0x00] # end of string + "XX000" # code + [0x00] # end of string + "Failed to run the query." # code + [0x00] # end of string + +read [0x5a] # type Z + 5 # length + [0x49] # status + +read [0x58] # type X + 4 # length + +read closed +write close diff --git a/incubator/binding-pgsql.spec/src/main/scripts/io/aklivity/zilla/specs/binding/pgsql/streams/network/select.table.with.error/server.rpt b/incubator/binding-pgsql.spec/src/main/scripts/io/aklivity/zilla/specs/binding/pgsql/streams/network/select.table.with.error/server.rpt new file mode 100644 index 0000000000..d26df720d0 --- /dev/null +++ b/incubator/binding-pgsql.spec/src/main/scripts/io/aklivity/zilla/specs/binding/pgsql/streams/network/select.table.with.error/server.rpt @@ -0,0 +1,95 @@ +# +# Copyright 2021-2023 Aklivity Inc +# +# Licensed under the Aklivity Community License (the "License"); you may not use +# this file except in compliance with the License. You may obtain a copy of the +# License at +# +# https://www.aklivity.io/aklivity-community-license/ +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. +# + +property networkAcceptWindow 8192 + +accept "zilla://streams/net0" + option zilla:window ${networkAcceptWindow} + option zilla:transmission "duplex" + option zilla:byteorder "network" + +accepted + +connected + +read 75 # length + 3s # major version + 0s # minor version + "user" [0x00] # name + "root" [0x00] # value + "database" [0x00] # name + "dev" [0x00] # value + "application_name" [0x00] # name + "psql" [0x00] # value + "client_encoding" [0x00] # name + "UTF8" [0x00] # value + [0x00] # end of parameters + +write [0x52] # type R + 8 # length + 0 # authentication type + +write [0x4b] # type K + 12 # length + 0 # pid + 0 # key + +write [0x53] # type S + 25 # length + "client_encoding" [0x00] # name + "UTF8" [0x00] # value + +write [0x53] # type S + 35 # length + "standard_conforming_strings" [0x00] # name + [0x6f 0x6e 0x00] # value + +write [0x53] # type S + 25 # length + "server_version" [0x00] # name + "1.0.0" [0x00] # value + +write [0x53] # type S + 27 # length + "application_name" [0x00] # name + "zilla" [0x00] # value + +write [0x5a] # type Z + 5 # length + [0x49] # status + +read [0x51] # type Q + 27 # length + "SELECT * FROM unknown;" + [0x00] + +write [0x45] # type E + 41 # length + "ERROR" # severity + [0x00] # end of string + "XX000" # code + [0x00] # end of string + "Failed to run the query." # code + [0x00] # end of string + +write [0x5a] # type Z + 5 # length + [0x49] # status + +write [0x58] # type X + 4 # length + +write close +read closed diff --git a/incubator/binding-pgsql.spec/src/main/scripts/io/aklivity/zilla/specs/binding/pgsql/streams/network/select.table/server.rpt b/incubator/binding-pgsql.spec/src/main/scripts/io/aklivity/zilla/specs/binding/pgsql/streams/network/select.table/server.rpt index bdd4c46b05..aa383cd613 100644 --- a/incubator/binding-pgsql.spec/src/main/scripts/io/aklivity/zilla/specs/binding/pgsql/streams/network/select.table/server.rpt +++ b/incubator/binding-pgsql.spec/src/main/scripts/io/aklivity/zilla/specs/binding/pgsql/streams/network/select.table/server.rpt @@ -117,7 +117,7 @@ write [0x44] # type D write [0x43] # type C 13 # length "SELECT 1" # tag - [0x00] # End of string + [0x00] # End of string write [0x5a] # type Z 5 # length diff --git a/incubator/binding-pgsql.spec/src/test/java/io/aklivity/zilla/specs/binding/pgsql/streams/ApplicationIT.java b/incubator/binding-pgsql.spec/src/test/java/io/aklivity/zilla/specs/binding/pgsql/streams/ApplicationIT.java index 7f88a05062..1464e0b1f1 100644 --- a/incubator/binding-pgsql.spec/src/test/java/io/aklivity/zilla/specs/binding/pgsql/streams/ApplicationIT.java +++ b/incubator/binding-pgsql.spec/src/test/java/io/aklivity/zilla/specs/binding/pgsql/streams/ApplicationIT.java @@ -55,6 +55,15 @@ public void shouldSelectTable() throws Exception k3po.finish(); } + @Test + @Specification({ + "${app}/select.table.with.error/client", + "${app}/select.table.with.error/server" }) + public void shouldSelectTableWithError() throws Exception + { + k3po.finish(); + } + @Test @Specification({ "${app}/client.sent.write.abort/client", diff --git a/incubator/binding-pgsql.spec/src/test/java/io/aklivity/zilla/specs/binding/pgsql/streams/NetworkIT.java b/incubator/binding-pgsql.spec/src/test/java/io/aklivity/zilla/specs/binding/pgsql/streams/NetworkIT.java index 89eed98a61..5f90553206 100644 --- a/incubator/binding-pgsql.spec/src/test/java/io/aklivity/zilla/specs/binding/pgsql/streams/NetworkIT.java +++ b/incubator/binding-pgsql.spec/src/test/java/io/aklivity/zilla/specs/binding/pgsql/streams/NetworkIT.java @@ -55,6 +55,15 @@ public void shouldSelectTable() throws Exception k3po.finish(); } + @Test + @Specification({ + "${net}/select.table.with.error/client", + "${net}/select.table.with.error/server" }) + public void shouldSelectTableWithError() throws Exception + { + k3po.finish(); + } + @Test @Specification({ "${net}/ssl.request/client", diff --git a/incubator/binding-pgsql.spec/src/test/java/io/aklivity/zilla/specs/binding/pgsql/streams/internal/PgsqlFunctionsTest.java b/incubator/binding-pgsql.spec/src/test/java/io/aklivity/zilla/specs/binding/pgsql/streams/internal/PgsqlFunctionsTest.java index 0367fe9dbc..b30378bf22 100644 --- a/incubator/binding-pgsql.spec/src/test/java/io/aklivity/zilla/specs/binding/pgsql/streams/internal/PgsqlFunctionsTest.java +++ b/incubator/binding-pgsql.spec/src/test/java/io/aklivity/zilla/specs/binding/pgsql/streams/internal/PgsqlFunctionsTest.java @@ -154,6 +154,27 @@ public void shouldEncodePgsqlFlushCompletionExtension() assertEquals("CREATE_TABLE\u0000", flushEx.completion().tag().asString()); } + @Test + public void shouldEncodePgsqlFlushErrorExtension() + { + final byte[] build = flushEx() + .typeId(0x01) + .error() + .severity("ERROR") + .code("XX000") + .message("Failed to run the query.") + .build() + .build(); + + DirectBuffer buffer = new UnsafeBuffer(build); + PgsqlFlushExFW flushEx = new PgsqlFlushExFW().wrap(buffer, 0, buffer.capacity()); + + assertEquals(0x01, flushEx.typeId()); + assertEquals("ERROR\u0000", flushEx.error().severity().asString()); + assertEquals("XX000\u0000", flushEx.error().code().asString()); + assertEquals("Failed to run the query.\u0000", flushEx.error().message().asString()); + } + @Test public void shouldEncodePgsqlFlushReadyExtension() { diff --git a/incubator/binding-pgsql/pom.xml b/incubator/binding-pgsql/pom.xml index 08d7d298a0..d08aa40ad0 100644 --- a/incubator/binding-pgsql/pom.xml +++ b/incubator/binding-pgsql/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - 0.9.97 + 0.9.98 ../pom.xml diff --git a/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/internal/stream/PgsqlClientFactory.java b/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/internal/stream/PgsqlClientFactory.java index bbc5ff36fa..6da148efbb 100644 --- a/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/internal/stream/PgsqlClientFactory.java +++ b/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/internal/stream/PgsqlClientFactory.java @@ -51,6 +51,7 @@ import io.aklivity.zilla.runtime.binding.pgsql.internal.types.stream.PgsqlBeginExFW; import io.aklivity.zilla.runtime.binding.pgsql.internal.types.stream.PgsqlColumnInfoFW; import io.aklivity.zilla.runtime.binding.pgsql.internal.types.stream.PgsqlDataExFW; +import io.aklivity.zilla.runtime.binding.pgsql.internal.types.stream.PgsqlErrorFlushExFW; import io.aklivity.zilla.runtime.binding.pgsql.internal.types.stream.PgsqlFlushExFW; import io.aklivity.zilla.runtime.binding.pgsql.internal.types.stream.PgsqlFormat; import io.aklivity.zilla.runtime.binding.pgsql.internal.types.stream.PgsqlQueryDataExFW; @@ -75,6 +76,7 @@ public final class PgsqlClientFactory implements PgsqlStreamFactory private static final Byte MESSAGE_TYPE_COMPLETION = 'C'; private static final Byte MESSAGE_TYPE_READY = 'Z'; private static final Byte MESSAGE_TYPE_TERMINATION = 'X'; + private static final Byte MESSAGE_TYPE_ERROR = 'E'; private static final int AUTHENTICATION_SUCCESS_CODE = 0; private static final int END_OF_FIELD = 0x00; @@ -113,6 +115,7 @@ public final class PgsqlClientFactory implements PgsqlStreamFactory private final PgsqlDataExFW.Builder dataExRW = new PgsqlDataExFW.Builder(); private final PgsqlFlushExFW.Builder flushExRW = new PgsqlFlushExFW.Builder(); + private final PgsqlErrorFlushExFW.Builder flushErrorExRW = new PgsqlErrorFlushExFW.Builder(); private final Array32FW.Builder columnsRW = new Array32FW.Builder<>(new PgsqlColumnInfoFW.Builder(), new PgsqlColumnInfoFW()); @@ -127,6 +130,7 @@ public final class PgsqlClientFactory implements PgsqlStreamFactory private final BufferPool bufferPool; private final MutableDirectBuffer writeBuffer; private final MutableDirectBuffer messageBuffer; + private final MutableDirectBuffer extBuffer; private final LongUnaryOperator supplyInitialId; private final LongUnaryOperator supplyReplyId; private final BindingHandler streamFactory; @@ -146,6 +150,7 @@ public final class PgsqlClientFactory implements PgsqlStreamFactory private final PgsqlClientDecoder decodePgsqlReady = this::decodePgsqlMessageReady; private final PgsqlClientDecoder decodePgsqlTermination = this::decodePgsqlMessageTerminator; private final PgsqlClientDecoder decodePgsqlPayload = this::decodePgsqlMessagePayload; + private final PgsqlClientDecoder decodePgsqlError = this::decodePgsqlMessageError; private final PgsqlClientDecoder decodePgsqlIgnoreOne = this::decodePgsqlIgnoreOne; private final PgsqlClientDecoder decodePgsqlIgnoreAll = this::decodePgsqlIgnoreAll; @@ -161,6 +166,7 @@ public final class PgsqlClientFactory implements PgsqlStreamFactory decodersByType.put(MESSAGE_TYPE_COMPLETION, decodePgsqlCompletion); decodersByType.put(MESSAGE_TYPE_READY, decodePgsqlReady); decodersByType.put(MESSAGE_TYPE_TERMINATION, decodePgsqlTermination); + decodersByType.put(MESSAGE_TYPE_ERROR, decodePgsqlError); this.decodersByType = decodersByType; } @@ -170,6 +176,7 @@ public PgsqlClientFactory( { this.writeBuffer = requireNonNull(context.writeBuffer()); this.messageBuffer = new UnsafeBuffer(new byte[writeBuffer.capacity()]); + this.extBuffer = new UnsafeBuffer(new byte[writeBuffer.capacity()]); this.supplyInitialId = context::supplyInitialId; this.supplyReplyId = context::supplyReplyId; this.streamFactory = context.streamFactory(); @@ -702,6 +709,39 @@ private void onDecodeMessageCompletion( stream.doApplicationFlush(traceId, authorization, decodeSlotReserved, completionEx); } + private void onDecodeMessageError( + long traceId, + long authorization, + DirectBuffer buffer, + int offset, + int length) + { + int progressOffset = offset; + + PgsqlErrorFlushExFW.Builder error = flushErrorExRW.wrap(extBuffer, 0, extBuffer.capacity()); + + final int severityLength = getLengthOfString(buffer, progressOffset); + error.severity(buffer, progressOffset, severityLength); + progressOffset += severityLength; + + final int codeLength = getLengthOfString(buffer, progressOffset); + error.code(buffer, progressOffset, codeLength); + progressOffset += codeLength; + + final int messageLength = getLengthOfString(buffer, progressOffset); + error.message(buffer, progressOffset, messageLength); + progressOffset += messageLength; + + assert offset + length == progressOffset; + + Consumer completionEx = e -> e.set((b, o, l) -> flushExRW.wrap(b, o, l) + .typeId(pgsqlTypeId) + .error(c -> c.set(error.build())) + .build().sizeof()); + + stream.doApplicationFlush(traceId, authorization, decodeSlotReserved, completionEx); + } + private void onDecodeMessageReady( long traceId, long authorization, @@ -1521,23 +1561,47 @@ private int decodePgsqlMessageCompletion( final PgsqlMessageFW pgsqlCompletion = messageRO.tryWrap(buffer, offset, limit); - if (pgsqlCompletion != null) + if (pgsqlCompletion != null && + limit - offset >= pgsqlCompletion.length() + Integer.BYTES) { progressOffset = pgsqlCompletion.limit(); - final int completionSize = pgsqlCompletion.length() - Integer.BYTES; - payloadRemaining.set(completionSize); - final int length = Math.min(payloadRemaining.value, limit - progressOffset); - + int length = pgsqlCompletion.length() - Integer.BYTES; client.onDecodeMessageCompletion(traceId, authorization, buffer, progressOffset, length); + progressOffset += length; - payloadRemaining.set(completionSize - length); - client.decoder = completionSize == length - ? decodePgsqlMessage - : decodePgsqlPayload; + client.decoder = decodePgsqlMessage; } + return progressOffset; + } + + private int decodePgsqlMessageError( + PgsqlClient client, + long traceId, + long authorization, + long budgetId, + DirectBuffer buffer, + int offset, + int limit) + { + int progressOffset = offset; + + final PgsqlMessageFW pgsqlError = messageRO.tryWrap(buffer, offset, limit); + + if (pgsqlError != null && + limit - offset >= pgsqlError.length() + Integer.BYTES) + { + progressOffset = pgsqlError.limit(); + + int length = pgsqlError.length() - Integer.BYTES; + client.onDecodeMessageError(traceId, authorization, buffer, progressOffset, length); + + progressOffset += length; + + client.decoder = decodePgsqlMessage; + } return progressOffset; } diff --git a/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/internal/stream/PgsqlServerFactory.java b/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/internal/stream/PgsqlServerFactory.java index 163b5cc7fe..060a79b2f4 100644 --- a/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/internal/stream/PgsqlServerFactory.java +++ b/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/internal/stream/PgsqlServerFactory.java @@ -51,6 +51,7 @@ import io.aklivity.zilla.runtime.binding.pgsql.internal.types.stream.PgsqlBeginExFW; import io.aklivity.zilla.runtime.binding.pgsql.internal.types.stream.PgsqlCompletedFlushExFW; import io.aklivity.zilla.runtime.binding.pgsql.internal.types.stream.PgsqlDataExFW; +import io.aklivity.zilla.runtime.binding.pgsql.internal.types.stream.PgsqlErrorFlushExFW; import io.aklivity.zilla.runtime.binding.pgsql.internal.types.stream.PgsqlFlushExFW; import io.aklivity.zilla.runtime.binding.pgsql.internal.types.stream.PgsqlParameterFW; import io.aklivity.zilla.runtime.binding.pgsql.internal.types.stream.PgsqlReadyFlushExFW; @@ -70,6 +71,7 @@ public final class PgsqlServerFactory implements PgsqlStreamFactory private static final Byte MESSAGE_TYPE_QUERY = 'Q'; private static final Byte MESSAGE_TYPE_DATA_ROW = 'D'; private static final Byte MESSAGE_TYPE_COMPLETION = 'C'; + private static final Byte MESSAGE_TYPE_ERROR = 'E'; private static final Byte MESSAGE_TYPE_READY = 'Z'; private static final Byte MESSAGE_TYPE_TERMINATE = 'X'; private static final Byte MESSAGE_TYPE_PARAMETER_STATUS = 'S'; @@ -888,6 +890,9 @@ private void onApplicationFlush( case PgsqlFlushExFW.KIND_COMPLETION: doEncodeCompletion(traceId, authorization, pgsqlFlushEx.completion()); break; + case PgsqlFlushExFW.KIND_ERROR: + doEncodeError(traceId, authorization, pgsqlFlushEx.error()); + break; case PgsqlFlushExFW.KIND_READY: doEncodeReady(traceId, authorization, pgsqlFlushEx.ready()); break; @@ -1154,6 +1159,32 @@ private void doEncodeCompletion( server.doNetworkData(traceId, authorization, FLAGS_COMP, 0L, messageBuffer, 0, completionOffset); } + private void doEncodeError( + long traceId, + long authorization, + PgsqlErrorFlushExFW error) + { + int errorOffset = 0; + final int severityLength = error.severity().value().capacity(); + final int codeLength = error.code().value().capacity(); + final int messageLength = error.message().value().capacity(); + + PgsqlMessageFW messageCompleted = messageRW.wrap(messageBuffer, 0, messageBuffer.capacity()) + .type(MESSAGE_TYPE_ERROR) + .length(Integer.BYTES + severityLength + codeLength + messageLength) + .build(); + errorOffset += messageCompleted.limit(); + + messageBuffer.putBytes(errorOffset, error.severity().value(), 0, severityLength); + errorOffset += severityLength; + messageBuffer.putBytes(errorOffset, error.code().value(), 0, codeLength); + errorOffset += codeLength; + messageBuffer.putBytes(errorOffset, error.message().value(), 0, messageLength); + errorOffset += messageLength; + + server.doNetworkData(traceId, authorization, FLAGS_COMP, 0L, messageBuffer, 0, errorOffset); + } + private void doEncodeReady( long traceId, long authorization, diff --git a/incubator/binding-pgsql/src/test/java/io/aklivity/zilla/runtime/binding/pgsql/internal/stream/ClientIT.java b/incubator/binding-pgsql/src/test/java/io/aklivity/zilla/runtime/binding/pgsql/internal/stream/ClientIT.java index d309166c54..45ce97869f 100644 --- a/incubator/binding-pgsql/src/test/java/io/aklivity/zilla/runtime/binding/pgsql/internal/stream/ClientIT.java +++ b/incubator/binding-pgsql/src/test/java/io/aklivity/zilla/runtime/binding/pgsql/internal/stream/ClientIT.java @@ -78,6 +78,16 @@ public void shouldSelectTable() throws Exception k3po.finish(); } + @Test + @Configuration("client.yaml") + @Specification({ + "${app}/select.table.with.error/client", + "${net}/select.table.with.error/server" }) + public void shouldSelectTableWithError() throws Exception + { + k3po.finish(); + } + @Test @Configuration("client.yaml") @Specification({ diff --git a/incubator/binding-pgsql/src/test/java/io/aklivity/zilla/runtime/binding/pgsql/internal/stream/ServerIT.java b/incubator/binding-pgsql/src/test/java/io/aklivity/zilla/runtime/binding/pgsql/internal/stream/ServerIT.java index 6bcfdc2b64..eefad57802 100644 --- a/incubator/binding-pgsql/src/test/java/io/aklivity/zilla/runtime/binding/pgsql/internal/stream/ServerIT.java +++ b/incubator/binding-pgsql/src/test/java/io/aklivity/zilla/runtime/binding/pgsql/internal/stream/ServerIT.java @@ -117,4 +117,14 @@ public void shouldHandleFragmentedCreateTable() throws Exception { k3po.finish(); } + + @Test + @Configuration("server.yaml") + @Specification({ + "${net}/select.table.with.error/client", + "${app}/select.table.with.error/server" }) + public void shouldSelectTableWithError() throws Exception + { + k3po.finish(); + } } diff --git a/incubator/binding-risingwave.spec/pom.xml b/incubator/binding-risingwave.spec/pom.xml index de0d42a726..8c3b7ca403 100644 --- a/incubator/binding-risingwave.spec/pom.xml +++ b/incubator/binding-risingwave.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - 0.9.97 + 0.9.98 ../pom.xml diff --git a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/query.with.multiple.statements.errored/client.rpt b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/query.with.multiple.statements.errored/client.rpt new file mode 100644 index 0000000000..ff87c92325 --- /dev/null +++ b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/query.with.multiple.statements.errored/client.rpt @@ -0,0 +1,125 @@ +# +# Copyright 2021-2023 Aklivity Inc +# +# Licensed under the Aklivity Community License (the "License"); you may not use +# this file except in compliance with the License. You may obtain a copy of the +# License at +# +# https://www.aklivity.io/aklivity-community-license/ +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. +# + +connect "zilla://streams/app1" + option zilla:window 8192 + option zilla:transmission "duplex" + +write zilla:begin.ext ${pgsql:beginEx() + .typeId(zilla:id("pgsql")) + .parameter("user", "root") + .parameter("database", "dev") + .parameter("application_name", "psql") + .parameter("client_encoding", "UTF8") + .build()} + +connected + +write zilla:data.ext ${pgsql:dataEx() + .typeId(zilla:id("pgsql")) + .query() + .build() + .build()} +write "CREATE SOURCE IF NOT EXISTS cities (*)\n" + "WITH (\n" + " connector='kafka',\n" + " properties.bootstrap.server='localhost:9092',\n" + " topic='dev.cities',\n" + " scan.startup.mode='latest',\n" + " scan.startup.timestamp.millis='140000000'\n" + ") FORMAT PLAIN ENCODE AVRO (\n" + " schema.registry = 'http://localhost:8081'\n" + ");" + [0x00] +write flush + +read advised zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .error() + .severity("ERROR") + .code("XX000") + .message("Failed to run the query. Source already exists") + .build() + .build()} + +read advised zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .ready() + .status("IDLE") + .build() + .build()} + +write zilla:data.ext ${pgsql:dataEx() + .typeId(zilla:id("pgsql")) + .query() + .build() + .build()} +write "UPDATE weather SET id = 'SF';" + [0x00] +write flush + +read advised zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .completion() + .tag("UPDATE 1") + .build() + .build()} + +read advised zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .ready() + .status("IDLE") + .build() + .build()} + +connect "zilla://streams/app2" + option zilla:window 8192 + option zilla:transmission "duplex" + +write zilla:begin.ext ${pgsql:beginEx() + .typeId(zilla:id("pgsql")) + .parameter("user", "root") + .parameter("database", "dev") + .parameter("application_name", "psql") + .parameter("client_encoding", "UTF8") + .build()} + +connected + +write zilla:data.ext ${pgsql:dataEx() + .typeId(zilla:id("pgsql")) + .query() + .build() + .build()} +write "CREATE TOPIC IF NOT EXISTS cities " + "(id VARCHAR, name VARCHAR, description VARCHAR);" + [0x00] + +write flush + +read advised zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .completion() + .tag("CREATE_TOPIC") + .build() + .build()} + +read advised zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .ready() + .status("IDLE") + .build() + .build()} + diff --git a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/query.with.multiple.statements.errored/server.rpt b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/query.with.multiple.statements.errored/server.rpt new file mode 100644 index 0000000000..6eba9cbf52 --- /dev/null +++ b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/query.with.multiple.statements.errored/server.rpt @@ -0,0 +1,128 @@ +# +# Copyright 2021-2023 Aklivity Inc +# +# Licensed under the Aklivity Community License (the "License"); you may not use +# this file except in compliance with the License. You may obtain a copy of the +# License at +# +# https://www.aklivity.io/aklivity-community-license/ +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. +# + +accept "zilla://streams/app1" + option zilla:window 8192 + option zilla:transmission "duplex" + +accepted + +read zilla:begin.ext ${pgsql:beginEx() + .typeId(zilla:id("pgsql")) + .parameter("user", "root") + .parameter("database", "dev") + .parameter("application_name", "psql") + .parameter("client_encoding", "UTF8") + .build()} + +connected + +read await CREATE_TOPIC_COMPLETED + +read zilla:data.ext ${pgsql:dataEx() + .typeId(zilla:id("pgsql")) + .query() + .build() + .build()} +read "CREATE SOURCE IF NOT EXISTS cities (*)\n" + "WITH (\n" + " connector='kafka',\n" + " properties.bootstrap.server='localhost:9092',\n" + " topic='dev.cities',\n" + " scan.startup.mode='latest',\n" + " scan.startup.timestamp.millis='140000000'\n" + ") FORMAT PLAIN ENCODE AVRO (\n" + " schema.registry = 'http://localhost:8081'\n" + ");" + [0x00] + +write advise zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .error() + .severity("ERROR") + .code("XX000") + .message("Failed to run the query. Source already exists") + .build() + .build()} + +write advise zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .ready() + .status("IDLE") + .build() + .build()} + +read zilla:data.ext ${pgsql:dataEx() + .typeId(zilla:id("pgsql")) + .query() + .build() + .build()} +read "UPDATE weather SET id = 'SF';" + [0x00] + +write advise zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .completion() + .tag("UPDATE 1") + .build() + .build()} + +write advise zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .ready() + .status("IDLE") + .build() + .build()} + +accept "zilla://streams/app2" + option zilla:window 8192 + option zilla:transmission "duplex" + +accepted + +read zilla:begin.ext ${pgsql:beginEx() + .typeId(zilla:id("pgsql")) + .parameter("user", "root") + .parameter("database", "dev") + .parameter("application_name", "psql") + .parameter("client_encoding", "UTF8") + .build()} + +connected + +read zilla:data.ext ${pgsql:dataEx() + .typeId(zilla:id("pgsql")) + .query() + .build() + .build()} +read "CREATE TOPIC IF NOT EXISTS cities " + "(id VARCHAR, name VARCHAR, description VARCHAR);" + [0x00] + +write advise zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .completion() + .tag("CREATE_TOPIC") + .build() + .build()} + +write notify CREATE_TOPIC_COMPLETED + +write advise zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .ready() + .status("IDLE") + .build() + .build()} diff --git a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/pgsql/query.with.multiple.statements.errored/client.rpt b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/pgsql/query.with.multiple.statements.errored/client.rpt new file mode 100644 index 0000000000..3b8932a870 --- /dev/null +++ b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/pgsql/query.with.multiple.statements.errored/client.rpt @@ -0,0 +1,62 @@ +# +# Copyright 2021-2023 Aklivity Inc +# +# Licensed under the Aklivity Community License (the "License"); you may not use +# this file except in compliance with the License. You may obtain a copy of the +# License at +# +# https://www.aklivity.io/aklivity-community-license/ +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. +# + +connect "zilla://streams/app0" + option zilla:window 8192 + option zilla:transmission "duplex" + +write zilla:begin.ext ${pgsql:beginEx() + .typeId(zilla:id("pgsql")) + .parameter("user", "root") + .parameter("database", "dev") + .parameter("application_name", "psql") + .parameter("client_encoding", "UTF8") + .build()} + +connected + +write zilla:data.ext ${pgsql:dataEx() + .typeId(zilla:id("pgsql")) + .query() + .build() + .build()} +write "CREATE STREAM cities " + "(id VARCHAR, name VARCHAR, description VARCHAR);" + "UPDATE weather SET id = 'SF';" + [0x00] +write flush + +read advised zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .error() + .severity("ERROR") + .code("XX000") + .message("Failed to run the query. Source already exists") + .build() + .build()} + +read advised zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .completion() + .tag("UPDATE 1") + .build() + .build()} + +read advised zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .ready() + .status("IDLE") + .build() + .build()} diff --git a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/pgsql/query.with.multiple.statements.errored/server.rpt b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/pgsql/query.with.multiple.statements.errored/server.rpt new file mode 100644 index 0000000000..c71c654e58 --- /dev/null +++ b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/pgsql/query.with.multiple.statements.errored/server.rpt @@ -0,0 +1,66 @@ +# +# Copyright 2021-2023 Aklivity Inc +# +# Licensed under the Aklivity Community License (the "License"); you may not use +# this file except in compliance with the License. You may obtain a copy of the +# License at +# +# https://www.aklivity.io/aklivity-community-license/ +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +# WARRANTIES OF ANY KIND, either express or implied. See the License for the +# specific language governing permissions and limitations under the License. +# + +property serverAddress "zilla://streams/app0" + +accept ${serverAddress} + option zilla:window 8192 + option zilla:transmission "duplex" + +accepted + +read zilla:begin.ext ${pgsql:beginEx() + .typeId(zilla:id("pgsql")) + .parameter("user", "root") + .parameter("database", "dev") + .parameter("application_name", "psql") + .parameter("client_encoding", "UTF8") + .build()} + +connected + +read zilla:data.ext ${pgsql:dataEx() + .typeId(zilla:id("pgsql")) + .query() + .build() + .build()} +read "CREATE STREAM cities " + "(id VARCHAR, name VARCHAR, description VARCHAR);" + "UPDATE weather SET id = 'SF';" + [0x00] + +write advise zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .error() + .severity("ERROR") + .code("XX000") + .message("Failed to run the query. Source already exists") + .build() + .build()} + +write advise zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .completion() + .tag("UPDATE 1") + .build() + .build()} + +write advise zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .ready() + .status("IDLE") + .build() + .build()} + diff --git a/incubator/binding-risingwave.spec/src/test/java/io/aklivity/zilla/specs/binding/risingwave/streams/EffectiveIT.java b/incubator/binding-risingwave.spec/src/test/java/io/aklivity/zilla/specs/binding/risingwave/streams/EffectiveIT.java index 96cd3a4e70..f60e0d1d04 100644 --- a/incubator/binding-risingwave.spec/src/test/java/io/aklivity/zilla/specs/binding/risingwave/streams/EffectiveIT.java +++ b/incubator/binding-risingwave.spec/src/test/java/io/aklivity/zilla/specs/binding/risingwave/streams/EffectiveIT.java @@ -169,4 +169,14 @@ public void shouldCreateStreams() throws Exception { k3po.finish(); } + + @Test + @Specification({ + "${app}/query.with.multiple.statements.errored/client", + "${app}/query.with.multiple.statements.errored/server" + }) + public void shouldHandleQueryWithMultiStatementsThatErrored() throws Exception + { + k3po.finish(); + } } diff --git a/incubator/binding-risingwave.spec/src/test/java/io/aklivity/zilla/specs/binding/risingwave/streams/PgsqlIT.java b/incubator/binding-risingwave.spec/src/test/java/io/aklivity/zilla/specs/binding/risingwave/streams/PgsqlIT.java index da1f54436f..d2783aa029 100644 --- a/incubator/binding-risingwave.spec/src/test/java/io/aklivity/zilla/specs/binding/risingwave/streams/PgsqlIT.java +++ b/incubator/binding-risingwave.spec/src/test/java/io/aklivity/zilla/specs/binding/risingwave/streams/PgsqlIT.java @@ -169,4 +169,14 @@ public void shouldCreateTables() throws Exception { k3po.finish(); } + + @Test + @Specification({ + "${app}/query.with.multiple.statements.errored/client", + "${app}/query.with.multiple.statements.errored/server" + }) + public void shouldHandleQueryWithMultiStatementsThatErrored() throws Exception + { + k3po.finish(); + } } diff --git a/incubator/binding-risingwave/pom.xml b/incubator/binding-risingwave/pom.xml index 56beda2030..f50ad4a401 100644 --- a/incubator/binding-risingwave/pom.xml +++ b/incubator/binding-risingwave/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - 0.9.97 + 0.9.98 ../pom.xml diff --git a/incubator/binding-risingwave/src/main/java/io/aklivity/zilla/runtime/binding/risingwave/internal/stream/RisingwaveProxyFactory.java b/incubator/binding-risingwave/src/main/java/io/aklivity/zilla/runtime/binding/risingwave/internal/stream/RisingwaveProxyFactory.java index a4e1a31aee..97fd355d6e 100644 --- a/incubator/binding-risingwave/src/main/java/io/aklivity/zilla/runtime/binding/risingwave/internal/stream/RisingwaveProxyFactory.java +++ b/incubator/binding-risingwave/src/main/java/io/aklivity/zilla/runtime/binding/risingwave/internal/stream/RisingwaveProxyFactory.java @@ -79,6 +79,9 @@ public final class RisingwaveProxyFactory implements RisingwaveStreamFactory private static final int FLAGS_FIN = 0x01; private static final int FLAGS_COMP = 0x03; + private static final int COMMAND_PROCESSED_ERRORED = -1; + private static final int COMMAND_PROCESSED_NONE = 0; + private static final DirectBuffer EMPTY_BUFFER = new UnsafeBuffer(new byte[0]); private static final OctetsFW EMPTY_OCTETS = new OctetsFW().wrap(EMPTY_BUFFER, 0, 0); private static final Consumer EMPTY_EXTENSION = ex -> {}; @@ -263,7 +266,7 @@ private final class PgsqlServer private int state; - private int commandsProcessed = 0; + private int commandsProcessed = COMMAND_PROCESSED_NONE; private int queryProgressOffset; private PgsqlServer( @@ -498,17 +501,20 @@ private void onAppWindow( } private void onCommandCompleted( - long traceId, - long authorization, - int progress, - RisingwaveCompletionCommand command) + long traceId, + long authorization, + int progress, + RisingwaveCompletionCommand command) { final MutableDirectBuffer parserBuffer = bufferPool.buffer(parserSlot); - commandsProcessed = 0; - parserSlotOffset -= progress; + if (commandsProcessed != COMMAND_PROCESSED_ERRORED) + { + doCommandCompletion(traceId, authorization, command); + } - doCommandCompletion(traceId, authorization, command); + parserSlotOffset -= progress; + commandsProcessed = COMMAND_PROCESSED_NONE; parserBuffer.putBytes(0, parserBuffer, progress, parserSlotOffset); @@ -541,7 +547,9 @@ private void onQueryReady( PgsqlStatus pgsqlStatus = pgsqlFlushEx.ready().status().get(); if (pgsqlStatus == PgsqlStatus.IDLE) { - commandsProcessed++; + commandsProcessed = commandsProcessed != COMMAND_PROCESSED_ERRORED + ? commandsProcessed + 1 + : COMMAND_PROCESSED_ERRORED; doParseQuery(traceId, authorization); } else @@ -921,6 +929,9 @@ private void onAppFlush( case PgsqlFlushExFW.KIND_COMPLETION: onAppCompletionFlush(traceId, authorization, pgsqlFlushEx); break; + case PgsqlFlushExFW.KIND_ERROR: + onAppErrorFlush(traceId, authorization, pgsqlFlushEx); + break; case PgsqlFlushExFW.KIND_READY: onAppReadyFlush(traceId, authorization, pgsqlFlushEx); break; @@ -1007,6 +1018,16 @@ private void onAppCompletionFlush( completionCommand.handle(server, traceId, authorization, pgsqlFlushEx); } + private void onAppErrorFlush( + long traceId, + long authorization, + PgsqlFlushExFW pgsqlFlushEx) + { + messageOffset = 0; + server.doAppFlush(traceId, authorization, pgsqlFlushEx); + server.commandsProcessed = COMMAND_PROCESSED_ERRORED; + } + private void onAppReadyFlush( long traceId, long authorization, @@ -1467,7 +1488,8 @@ private void decodeCreateTableCommand( int offset, int length) { - if (server.commandsProcessed == 6) + if (server.commandsProcessed == 6 || + server.commandsProcessed == COMMAND_PROCESSED_ERRORED) { server.onCommandCompleted(traceId, authorization, length, RisingwaveCompletionCommand.CREATE_TABLE_COMMAND); } @@ -1525,7 +1547,8 @@ private void decodeCreateStreamCommand( int offset, int length) { - if (server.commandsProcessed == 2) + if (server.commandsProcessed == 2 || + server.commandsProcessed == COMMAND_PROCESSED_ERRORED) { server.onCommandCompleted(traceId, authorization, length, RisingwaveCompletionCommand.CREATE_STREAM_COMMAND); } @@ -1566,7 +1589,8 @@ private void decodeCreateMaterializedViewCommand( int offset, int length) { - if (server.commandsProcessed == 4) + if (server.commandsProcessed == 4 || + server.commandsProcessed == COMMAND_PROCESSED_ERRORED) { server.onCommandCompleted(traceId, authorization, length, RisingwaveCompletionCommand.CREATE_MATERIALIZED_VIEW_COMMAND); @@ -1623,7 +1647,8 @@ private void decodeCreateFunctionCommand( int offset, int length) { - if (server.commandsProcessed == 1) + if (server.commandsProcessed == 1 || + server.commandsProcessed == COMMAND_PROCESSED_ERRORED) { server.onCommandCompleted(traceId, authorization, length, RisingwaveCompletionCommand.CREATE_FUNCTION_COMMAND); } @@ -1660,7 +1685,8 @@ private void decodeUnknownCommand( int offset, int length) { - if (server.commandsProcessed == 1) + if (server.commandsProcessed == 1 || + server.commandsProcessed == COMMAND_PROCESSED_ERRORED) { server.onCommandCompleted(traceId, authorization, length, RisingwaveCompletionCommand.UNKNOWN_COMMAND); } diff --git a/incubator/binding-risingwave/src/test/java/io/aklivity/zilla/runtime/binding/risingwave/internal/stream/ProxyIT.java b/incubator/binding-risingwave/src/test/java/io/aklivity/zilla/runtime/binding/risingwave/internal/stream/ProxyIT.java index 0be2a80f18..97ea8bb3b2 100644 --- a/incubator/binding-risingwave/src/test/java/io/aklivity/zilla/runtime/binding/risingwave/internal/stream/ProxyIT.java +++ b/incubator/binding-risingwave/src/test/java/io/aklivity/zilla/runtime/binding/risingwave/internal/stream/ProxyIT.java @@ -100,6 +100,17 @@ public void shouldHandleQueryWithMultiStatements() throws Exception k3po.finish(); } + @Test + @Configuration("proxy.yaml") + @Specification({ + "${pgsql}/query.with.multiple.statements.errored/client", + "${effective}/query.with.multiple.statements.errored/server" + }) + public void shouldHandleQueryWithMultiStatementsThatErrored() throws Exception + { + k3po.finish(); + } + @Test @Configuration("proxy.yaml") @Specification({ diff --git a/incubator/command-dump/pom.xml b/incubator/command-dump/pom.xml index 08a8a9b735..ef8d02c3da 100644 --- a/incubator/command-dump/pom.xml +++ b/incubator/command-dump/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - 0.9.97 + 0.9.98 ../pom.xml diff --git a/incubator/command-log/pom.xml b/incubator/command-log/pom.xml index 89a50e343f..b8cb36f3c7 100644 --- a/incubator/command-log/pom.xml +++ b/incubator/command-log/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - 0.9.97 + 0.9.98 ../pom.xml diff --git a/incubator/command-tune/pom.xml b/incubator/command-tune/pom.xml index 353d43a934..d3b35679df 100644 --- a/incubator/command-tune/pom.xml +++ b/incubator/command-tune/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - 0.9.97 + 0.9.98 ../pom.xml diff --git a/incubator/pom.xml b/incubator/pom.xml index c694066601..12fcd58f5c 100644 --- a/incubator/pom.xml +++ b/incubator/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla zilla - 0.9.97 + 0.9.98 ../pom.xml diff --git a/manager/pom.xml b/manager/pom.xml index 962b99d0b0..e797120421 100644 --- a/manager/pom.xml +++ b/manager/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla zilla - 0.9.97 + 0.9.98 ../pom.xml diff --git a/pom.xml b/pom.xml index ec5a7d6ce3..21e534be00 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ 4.0.0 io.aklivity.zilla zilla - 0.9.97 + 0.9.98 pom zilla https://github.com/aklivity/zilla @@ -58,7 +58,7 @@ 1.21.1 1.7.36 5.10.2 - 4.0.22 + 4.0.23 2.6.0 5.8.0 3.3.0 diff --git a/runtime/binding-asyncapi/pom.xml b/runtime/binding-asyncapi/pom.xml index 4982cb11cb..bee2455c7c 100644 --- a/runtime/binding-asyncapi/pom.xml +++ b/runtime/binding-asyncapi/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/binding-echo/pom.xml b/runtime/binding-echo/pom.xml index b44df689f6..95463b61c5 100644 --- a/runtime/binding-echo/pom.xml +++ b/runtime/binding-echo/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/binding-fan/pom.xml b/runtime/binding-fan/pom.xml index b35557702d..6f8325a4a9 100644 --- a/runtime/binding-fan/pom.xml +++ b/runtime/binding-fan/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/binding-filesystem/pom.xml b/runtime/binding-filesystem/pom.xml index 1012986a92..58a1848671 100644 --- a/runtime/binding-filesystem/pom.xml +++ b/runtime/binding-filesystem/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/binding-grpc-kafka/pom.xml b/runtime/binding-grpc-kafka/pom.xml index 703e99ea19..dfb94df94d 100644 --- a/runtime/binding-grpc-kafka/pom.xml +++ b/runtime/binding-grpc-kafka/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/binding-grpc/pom.xml b/runtime/binding-grpc/pom.xml index 2b86700ead..7d2b99526a 100644 --- a/runtime/binding-grpc/pom.xml +++ b/runtime/binding-grpc/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/binding-http-filesystem/pom.xml b/runtime/binding-http-filesystem/pom.xml index 714e9425fa..f23b9fe396 100644 --- a/runtime/binding-http-filesystem/pom.xml +++ b/runtime/binding-http-filesystem/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/binding-http-kafka/pom.xml b/runtime/binding-http-kafka/pom.xml index 522860ce6f..738159e6be 100644 --- a/runtime/binding-http-kafka/pom.xml +++ b/runtime/binding-http-kafka/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/binding-http/pom.xml b/runtime/binding-http/pom.xml index b18a1b2393..6ec757e318 100644 --- a/runtime/binding-http/pom.xml +++ b/runtime/binding-http/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/binding-http/src/main/java/io/aklivity/zilla/runtime/binding/http/internal/HttpEventContext.java b/runtime/binding-http/src/main/java/io/aklivity/zilla/runtime/binding/http/internal/HttpEventContext.java index 45007d7bf9..ca751603e7 100644 --- a/runtime/binding-http/src/main/java/io/aklivity/zilla/runtime/binding/http/internal/HttpEventContext.java +++ b/runtime/binding-http/src/main/java/io/aklivity/zilla/runtime/binding/http/internal/HttpEventContext.java @@ -35,7 +35,7 @@ public class HttpEventContext { - private static final int EVENT_BUFFER_CAPACITY = 2048; + private static final int EVENT_BUFFER_CAPACITY = 8192; private static final String8FW HEADER_SCHEME = new String8FW(":scheme"); private static final String8FW HEADER_METHOD = new String8FW(":method"); private static final String8FW HEADER_AUTHORITY = new String8FW(":authority"); diff --git a/runtime/binding-kafka-grpc/pom.xml b/runtime/binding-kafka-grpc/pom.xml index 16ab43d0f0..78175098ad 100644 --- a/runtime/binding-kafka-grpc/pom.xml +++ b/runtime/binding-kafka-grpc/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/binding-kafka/pom.xml b/runtime/binding-kafka/pom.xml index 86aba12931..bf1b04b1a1 100644 --- a/runtime/binding-kafka/pom.xml +++ b/runtime/binding-kafka/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/binding-mqtt-kafka/pom.xml b/runtime/binding-mqtt-kafka/pom.xml index 23360ce1f4..8b1489b36e 100644 --- a/runtime/binding-mqtt-kafka/pom.xml +++ b/runtime/binding-mqtt-kafka/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/binding-mqtt/pom.xml b/runtime/binding-mqtt/pom.xml index f909c47a48..10e88c874d 100644 --- a/runtime/binding-mqtt/pom.xml +++ b/runtime/binding-mqtt/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/binding-openapi-asyncapi/pom.xml b/runtime/binding-openapi-asyncapi/pom.xml index ab32ca681e..cac0c44cac 100644 --- a/runtime/binding-openapi-asyncapi/pom.xml +++ b/runtime/binding-openapi-asyncapi/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/binding-openapi/pom.xml b/runtime/binding-openapi/pom.xml index 40ba244303..ffb35fe30b 100644 --- a/runtime/binding-openapi/pom.xml +++ b/runtime/binding-openapi/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/binding-proxy/pom.xml b/runtime/binding-proxy/pom.xml index 690ff6cf2a..3262b104e7 100644 --- a/runtime/binding-proxy/pom.xml +++ b/runtime/binding-proxy/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/binding-sse-kafka/pom.xml b/runtime/binding-sse-kafka/pom.xml index 040dd67b82..41f19c4887 100644 --- a/runtime/binding-sse-kafka/pom.xml +++ b/runtime/binding-sse-kafka/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/binding-sse/pom.xml b/runtime/binding-sse/pom.xml index d95b35d641..1e743548e0 100644 --- a/runtime/binding-sse/pom.xml +++ b/runtime/binding-sse/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/binding-tcp/pom.xml b/runtime/binding-tcp/pom.xml index be696937b9..805414f530 100644 --- a/runtime/binding-tcp/pom.xml +++ b/runtime/binding-tcp/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/binding-tls/pom.xml b/runtime/binding-tls/pom.xml index b34236e70d..23194aefe7 100644 --- a/runtime/binding-tls/pom.xml +++ b/runtime/binding-tls/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/binding-ws/pom.xml b/runtime/binding-ws/pom.xml index 84f190e598..88849eff22 100644 --- a/runtime/binding-ws/pom.xml +++ b/runtime/binding-ws/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/catalog-apicurio/pom.xml b/runtime/catalog-apicurio/pom.xml index 22a4144c16..6f134f710c 100644 --- a/runtime/catalog-apicurio/pom.xml +++ b/runtime/catalog-apicurio/pom.xml @@ -6,7 +6,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/catalog-filesystem/pom.xml b/runtime/catalog-filesystem/pom.xml index b84133156a..a6d5ba1185 100644 --- a/runtime/catalog-filesystem/pom.xml +++ b/runtime/catalog-filesystem/pom.xml @@ -6,7 +6,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/catalog-inline/pom.xml b/runtime/catalog-inline/pom.xml index ee7b222959..5bb2abc8ea 100644 --- a/runtime/catalog-inline/pom.xml +++ b/runtime/catalog-inline/pom.xml @@ -6,7 +6,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/catalog-karapace/pom.xml b/runtime/catalog-karapace/pom.xml index 97e6ae27ae..4f1bc2a0cc 100644 --- a/runtime/catalog-karapace/pom.xml +++ b/runtime/catalog-karapace/pom.xml @@ -6,7 +6,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/catalog-schema-registry/pom.xml b/runtime/catalog-schema-registry/pom.xml index 319b69c774..90caa6f0db 100644 --- a/runtime/catalog-schema-registry/pom.xml +++ b/runtime/catalog-schema-registry/pom.xml @@ -6,7 +6,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/command-metrics/pom.xml b/runtime/command-metrics/pom.xml index 04f7864263..4e5c871912 100644 --- a/runtime/command-metrics/pom.xml +++ b/runtime/command-metrics/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/command-start/pom.xml b/runtime/command-start/pom.xml index 8b98acdfc8..ec791471f9 100644 --- a/runtime/command-start/pom.xml +++ b/runtime/command-start/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/command-stop/pom.xml b/runtime/command-stop/pom.xml index 2686e756c5..f9b6fc78a5 100644 --- a/runtime/command-stop/pom.xml +++ b/runtime/command-stop/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/command-version/pom.xml b/runtime/command-version/pom.xml index b7b31f2153..25f5d3840f 100644 --- a/runtime/command-version/pom.xml +++ b/runtime/command-version/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/command/pom.xml b/runtime/command/pom.xml index e673eae8a6..9038b1a46a 100644 --- a/runtime/command/pom.xml +++ b/runtime/command/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/common/pom.xml b/runtime/common/pom.xml index 628d3162c7..8811466d87 100644 --- a/runtime/common/pom.xml +++ b/runtime/common/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/engine/pom.xml b/runtime/engine/pom.xml index 6048017d99..948bedcc03 100644 --- a/runtime/engine/pom.xml +++ b/runtime/engine/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/exporter-otlp/pom.xml b/runtime/exporter-otlp/pom.xml index 12a0544f6e..395d3389b8 100644 --- a/runtime/exporter-otlp/pom.xml +++ b/runtime/exporter-otlp/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/exporter-prometheus/pom.xml b/runtime/exporter-prometheus/pom.xml index 6be180e600..92b7ffaa9d 100644 --- a/runtime/exporter-prometheus/pom.xml +++ b/runtime/exporter-prometheus/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/exporter-stdout/pom.xml b/runtime/exporter-stdout/pom.xml index 29c29b8aa3..3d7a5a654d 100644 --- a/runtime/exporter-stdout/pom.xml +++ b/runtime/exporter-stdout/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/filesystem-http/pom.xml b/runtime/filesystem-http/pom.xml index 9bab57bdb5..88e1f62671 100644 --- a/runtime/filesystem-http/pom.xml +++ b/runtime/filesystem-http/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/guard-jwt/pom.xml b/runtime/guard-jwt/pom.xml index afc9802559..4908833d4d 100644 --- a/runtime/guard-jwt/pom.xml +++ b/runtime/guard-jwt/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/metrics-grpc/pom.xml b/runtime/metrics-grpc/pom.xml index cc76d4ffd3..bb896b0daf 100644 --- a/runtime/metrics-grpc/pom.xml +++ b/runtime/metrics-grpc/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/metrics-http/pom.xml b/runtime/metrics-http/pom.xml index 5e54ddd369..dfb6cf3dc9 100644 --- a/runtime/metrics-http/pom.xml +++ b/runtime/metrics-http/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/metrics-stream/pom.xml b/runtime/metrics-stream/pom.xml index 3797a07cf3..e6afd9f9b7 100644 --- a/runtime/metrics-stream/pom.xml +++ b/runtime/metrics-stream/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/model-avro/pom.xml b/runtime/model-avro/pom.xml index 87bf728b91..80153b67dd 100644 --- a/runtime/model-avro/pom.xml +++ b/runtime/model-avro/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/model-core/pom.xml b/runtime/model-core/pom.xml index a339c058f6..df261a6626 100644 --- a/runtime/model-core/pom.xml +++ b/runtime/model-core/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/model-json/pom.xml b/runtime/model-json/pom.xml index e160617d55..b613949e66 100644 --- a/runtime/model-json/pom.xml +++ b/runtime/model-json/pom.xml @@ -6,7 +6,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/model-protobuf/pom.xml b/runtime/model-protobuf/pom.xml index 12ca2db469..6735ddfb4e 100644 --- a/runtime/model-protobuf/pom.xml +++ b/runtime/model-protobuf/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/pom.xml b/runtime/pom.xml index 5ffe088ab2..e0e5c0d4f7 100644 --- a/runtime/pom.xml +++ b/runtime/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla zilla - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/resolver-env/pom.xml b/runtime/resolver-env/pom.xml index f1c0282e9e..073fea227a 100644 --- a/runtime/resolver-env/pom.xml +++ b/runtime/resolver-env/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/runtime/vault-filesystem/pom.xml b/runtime/vault-filesystem/pom.xml index 692d3d47c7..65c886f00c 100644 --- a/runtime/vault-filesystem/pom.xml +++ b/runtime/vault-filesystem/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-asyncapi.spec/pom.xml b/specs/binding-asyncapi.spec/pom.xml index d06094f8b0..c74bcf97b9 100644 --- a/specs/binding-asyncapi.spec/pom.xml +++ b/specs/binding-asyncapi.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-echo.spec/pom.xml b/specs/binding-echo.spec/pom.xml index 1d670cb207..496a252c15 100644 --- a/specs/binding-echo.spec/pom.xml +++ b/specs/binding-echo.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-fan.spec/pom.xml b/specs/binding-fan.spec/pom.xml index e958766e7c..ba54ba9945 100644 --- a/specs/binding-fan.spec/pom.xml +++ b/specs/binding-fan.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-filesystem.spec/pom.xml b/specs/binding-filesystem.spec/pom.xml index 658acdc779..3e1a875cdf 100644 --- a/specs/binding-filesystem.spec/pom.xml +++ b/specs/binding-filesystem.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-grpc-kafka.spec/pom.xml b/specs/binding-grpc-kafka.spec/pom.xml index 03dbcf18aa..2eddc537fc 100644 --- a/specs/binding-grpc-kafka.spec/pom.xml +++ b/specs/binding-grpc-kafka.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-grpc.spec/pom.xml b/specs/binding-grpc.spec/pom.xml index caedaf2765..12cab7a480 100644 --- a/specs/binding-grpc.spec/pom.xml +++ b/specs/binding-grpc.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-http-filesystem.spec/pom.xml b/specs/binding-http-filesystem.spec/pom.xml index f913b91f87..d039f7349a 100644 --- a/specs/binding-http-filesystem.spec/pom.xml +++ b/specs/binding-http-filesystem.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-http-kafka.spec/pom.xml b/specs/binding-http-kafka.spec/pom.xml index 871e81f544..fc888b9872 100644 --- a/specs/binding-http-kafka.spec/pom.xml +++ b/specs/binding-http-kafka.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-http.spec/pom.xml b/specs/binding-http.spec/pom.xml index 6cecaabc2d..ddd804dd06 100644 --- a/specs/binding-http.spec/pom.xml +++ b/specs/binding-http.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-kafka-grpc.spec/pom.xml b/specs/binding-kafka-grpc.spec/pom.xml index 96e689aa78..8f4c4cfbd6 100644 --- a/specs/binding-kafka-grpc.spec/pom.xml +++ b/specs/binding-kafka-grpc.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-kafka.spec/pom.xml b/specs/binding-kafka.spec/pom.xml index 21e53f8b6c..104641141b 100644 --- a/specs/binding-kafka.spec/pom.xml +++ b/specs/binding-kafka.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-mqtt-kafka.spec/pom.xml b/specs/binding-mqtt-kafka.spec/pom.xml index 1ee013e8ae..228504dc40 100644 --- a/specs/binding-mqtt-kafka.spec/pom.xml +++ b/specs/binding-mqtt-kafka.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-mqtt.spec/pom.xml b/specs/binding-mqtt.spec/pom.xml index d265d955b7..1c0658c32e 100644 --- a/specs/binding-mqtt.spec/pom.xml +++ b/specs/binding-mqtt.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-openapi-asyncapi.spec/pom.xml b/specs/binding-openapi-asyncapi.spec/pom.xml index 94f3d851f2..94be41daad 100644 --- a/specs/binding-openapi-asyncapi.spec/pom.xml +++ b/specs/binding-openapi-asyncapi.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-openapi.spec/pom.xml b/specs/binding-openapi.spec/pom.xml index 6d846b2711..f88af0391f 100644 --- a/specs/binding-openapi.spec/pom.xml +++ b/specs/binding-openapi.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-proxy.spec/pom.xml b/specs/binding-proxy.spec/pom.xml index a7b1b2885a..399938ebaf 100644 --- a/specs/binding-proxy.spec/pom.xml +++ b/specs/binding-proxy.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-sse-kafka.spec/pom.xml b/specs/binding-sse-kafka.spec/pom.xml index 45d3893762..d0de638417 100644 --- a/specs/binding-sse-kafka.spec/pom.xml +++ b/specs/binding-sse-kafka.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-sse.spec/pom.xml b/specs/binding-sse.spec/pom.xml index c0325cbb59..8389712f46 100644 --- a/specs/binding-sse.spec/pom.xml +++ b/specs/binding-sse.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-tcp.spec/pom.xml b/specs/binding-tcp.spec/pom.xml index 9b648b6f3f..d5941636e1 100644 --- a/specs/binding-tcp.spec/pom.xml +++ b/specs/binding-tcp.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-tls.spec/pom.xml b/specs/binding-tls.spec/pom.xml index c6f545ee78..6fc8882a15 100644 --- a/specs/binding-tls.spec/pom.xml +++ b/specs/binding-tls.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/binding-ws.spec/pom.xml b/specs/binding-ws.spec/pom.xml index b48c19c8fb..5b8d0f0803 100644 --- a/specs/binding-ws.spec/pom.xml +++ b/specs/binding-ws.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/catalog-apicurio.spec/pom.xml b/specs/catalog-apicurio.spec/pom.xml index 00def73d78..b4f9758232 100644 --- a/specs/catalog-apicurio.spec/pom.xml +++ b/specs/catalog-apicurio.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/catalog-filesystem.spec/pom.xml b/specs/catalog-filesystem.spec/pom.xml index a1eababef0..2a5079a8ec 100644 --- a/specs/catalog-filesystem.spec/pom.xml +++ b/specs/catalog-filesystem.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/catalog-inline.spec/pom.xml b/specs/catalog-inline.spec/pom.xml index 7660cdc502..bb6d73e82d 100644 --- a/specs/catalog-inline.spec/pom.xml +++ b/specs/catalog-inline.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/catalog-karapace.spec/pom.xml b/specs/catalog-karapace.spec/pom.xml index 181f306deb..392413f2ad 100644 --- a/specs/catalog-karapace.spec/pom.xml +++ b/specs/catalog-karapace.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/catalog-schema-registry.spec/pom.xml b/specs/catalog-schema-registry.spec/pom.xml index 9a8a541641..fd2bcb98a3 100644 --- a/specs/catalog-schema-registry.spec/pom.xml +++ b/specs/catalog-schema-registry.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/engine.spec/pom.xml b/specs/engine.spec/pom.xml index b32017696e..6aa323d0ba 100644 --- a/specs/engine.spec/pom.xml +++ b/specs/engine.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/exporter-otlp.spec/pom.xml b/specs/exporter-otlp.spec/pom.xml index 3de4da33e8..50f6150cd0 100644 --- a/specs/exporter-otlp.spec/pom.xml +++ b/specs/exporter-otlp.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/exporter-prometheus.spec/pom.xml b/specs/exporter-prometheus.spec/pom.xml index d1a2fbc17c..ccf6e1d48b 100644 --- a/specs/exporter-prometheus.spec/pom.xml +++ b/specs/exporter-prometheus.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/exporter-stdout.spec/pom.xml b/specs/exporter-stdout.spec/pom.xml index 18b1557673..ff68ca390e 100644 --- a/specs/exporter-stdout.spec/pom.xml +++ b/specs/exporter-stdout.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/filesystem-http.spec/pom.xml b/specs/filesystem-http.spec/pom.xml index d3791991be..e243ac8287 100644 --- a/specs/filesystem-http.spec/pom.xml +++ b/specs/filesystem-http.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/guard-jwt.spec/pom.xml b/specs/guard-jwt.spec/pom.xml index 92ddafd962..818922a8e8 100644 --- a/specs/guard-jwt.spec/pom.xml +++ b/specs/guard-jwt.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/metrics-grpc.spec/pom.xml b/specs/metrics-grpc.spec/pom.xml index 3b61460c34..684a2b1eef 100644 --- a/specs/metrics-grpc.spec/pom.xml +++ b/specs/metrics-grpc.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/metrics-http.spec/pom.xml b/specs/metrics-http.spec/pom.xml index c167c0d929..9257c325f5 100644 --- a/specs/metrics-http.spec/pom.xml +++ b/specs/metrics-http.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/metrics-stream.spec/pom.xml b/specs/metrics-stream.spec/pom.xml index 4b8c5a824b..3af1212c9f 100644 --- a/specs/metrics-stream.spec/pom.xml +++ b/specs/metrics-stream.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/model-avro.spec/pom.xml b/specs/model-avro.spec/pom.xml index fd73e029b7..7ce0cc78bb 100644 --- a/specs/model-avro.spec/pom.xml +++ b/specs/model-avro.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/model-core.spec/pom.xml b/specs/model-core.spec/pom.xml index 0ad8c3c55a..c25c332734 100644 --- a/specs/model-core.spec/pom.xml +++ b/specs/model-core.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/model-json.spec/pom.xml b/specs/model-json.spec/pom.xml index 10c8ce9306..bca6097721 100644 --- a/specs/model-json.spec/pom.xml +++ b/specs/model-json.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/model-protobuf.spec/pom.xml b/specs/model-protobuf.spec/pom.xml index eeec3f4b7b..ec399153be 100644 --- a/specs/model-protobuf.spec/pom.xml +++ b/specs/model-protobuf.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/pom.xml b/specs/pom.xml index fd64db3db4..bd2386f3e9 100644 --- a/specs/pom.xml +++ b/specs/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla zilla - 0.9.97 + 0.9.98 ../pom.xml diff --git a/specs/vault-filesystem.spec/pom.xml b/specs/vault-filesystem.spec/pom.xml index cf14664e05..09bd8a7b86 100644 --- a/specs/vault-filesystem.spec/pom.xml +++ b/specs/vault-filesystem.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - 0.9.97 + 0.9.98 ../pom.xml