From c1bc8a03e334d051a9918c51b8c71bcb0c230a8a Mon Sep 17 00:00:00 2001 From: John Fallows Date: Wed, 5 Feb 2025 10:57:47 -0800 Subject: [PATCH 01/13] Update CHANGELOG.md --- CHANGELOG.md | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 68c5b1bf22..fcb343780a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,27 @@ # Changelog +## [0.9.125](https://github.com/aklivity/zilla/tree/0.9.125) (2025-02-05) + +[Full Changelog](https://github.com/aklivity/zilla/compare/0.9.124...0.9.125) + +**Implemented enhancements:** + +- Support gRPC client streaming to Kafka directly [\#642](https://github.com/aklivity/zilla/issues/642) + +**Fixed bugs:** + +- Zilla Crashes on invalid request payload [\#1394](https://github.com/aklivity/zilla/issues/1394) +- Schema Retrieval Failure Causes Validation Error in Zilla [\#1391](https://github.com/aklivity/zilla/issues/1391) +- Connection refused for MQTT Kafka broker after setting up TLS on the Kafka client [\#1389](https://github.com/aklivity/zilla/issues/1389) +- Zilla Validation not working correctly [\#1385](https://github.com/aklivity/zilla/issues/1385) + +**Merged pull requests:** + +- Use `OpenapiView` and `AsyncapiView` to generate composite namespaces [\#1396](https://github.com/aklivity/zilla/pull/1396) ([jfallows](https://github.com/jfallows)) +- fix: Zilla Crashes on invalid request payload [\#1395](https://github.com/aklivity/zilla/pull/1395) ([ankitk-me](https://github.com/ankitk-me)) +- fix: locale-specific formatting due to `MessageFormat.format()` [\#1390](https://github.com/aklivity/zilla/pull/1390) ([ankitk-me](https://github.com/ankitk-me)) +- Support gRPC client stream/unary oneway [\#1384](https://github.com/aklivity/zilla/pull/1384) ([ankitk-me](https://github.com/ankitk-me)) + ## [0.9.124](https://github.com/aklivity/zilla/tree/0.9.124) (2025-01-30) [Full Changelog](https://github.com/aklivity/zilla/compare/0.9.123...0.9.124) From 1e87b39857bf903169ff3cd87173f0d021cf364c Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Feb 2025 12:12:12 -0800 Subject: [PATCH 02/13] Bump ubuntu in /cloud/docker-image/src/main/docker (#1393) Bumps ubuntu from jammy-20240808 to jammy-20250126. --- updated-dependencies: - dependency-name: ubuntu dependency-type: direct:production ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- cloud/docker-image/src/main/docker/Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloud/docker-image/src/main/docker/Dockerfile b/cloud/docker-image/src/main/docker/Dockerfile index ad7d5a3a32..3356cccea1 100644 --- a/cloud/docker-image/src/main/docker/Dockerfile +++ b/cloud/docker-image/src/main/docker/Dockerfile @@ -25,7 +25,7 @@ RUN cat zpm.json.template | sed "s/\${VERSION}/${project.version}/g" | tee zpm.j RUN ./zpmw install --debug --instrument --exclude-remote-repositories RUN ./zpmw clean --keep-image -FROM ubuntu:jammy-20240808 +FROM ubuntu:jammy-20250126 ENV ZILLA_VERSION ${project.version} From e87d282e7d2d709ec0e7a6edd4974651967cdc03 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 5 Feb 2025 12:12:34 -0800 Subject: [PATCH 03/13] Bump lycheeverse/lychee-action from 2.2.0 to 2.3.0 (#1397) Bumps [lycheeverse/lychee-action](https://github.com/lycheeverse/lychee-action) from 2.2.0 to 2.3.0. - [Release notes](https://github.com/lycheeverse/lychee-action/releases) - [Commits](https://github.com/lycheeverse/lychee-action/compare/v2.2.0...v2.3.0) --- updated-dependencies: - dependency-name: lycheeverse/lychee-action dependency-type: direct:production update-type: version-update:semver-minor ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- .github/workflows/links-check.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/links-check.yml b/.github/workflows/links-check.yml index 730493234d..7a4621deb7 100644 --- a/.github/workflows/links-check.yml +++ b/.github/workflows/links-check.yml @@ -13,7 +13,7 @@ jobs: - uses: actions/checkout@v4 - name: Link Checker - uses: lycheeverse/lychee-action@v2.2.0 + uses: lycheeverse/lychee-action@v2.3.0 with: fail: true args: --exclude-mail --exclude .+localhost.+ README.md From ad8d9e35b85f7d891f3881c8a9a57aad657cda20 Mon Sep 17 00:00:00 2001 From: Akram Yakubov Date: Fri, 7 Feb 2025 23:37:15 +0500 Subject: [PATCH 04/13] Append missing system schema to avoid exposing it in show command (#1398) --- .../effective/create.ztable.with.generated.as/client.rpt | 4 ++-- .../effective/create.ztable.with.generated.as/server.rpt | 4 ++-- .../effective/create.ztable.with.primary.key/client.rpt | 4 ++-- .../effective/create.ztable.with.primary.key/server.rpt | 4 ++-- .../risingwave/streams/effective/drop.ztable/client.rpt | 2 +- .../risingwave/streams/effective/drop.ztable/server.rpt | 2 +- .../effective/query.with.multiple.statements/client.rpt | 4 ++-- .../effective/query.with.multiple.statements/server.rpt | 4 ++-- .../internal/macro/RisingwaveCreateZtableMacro.java | 6 +++--- .../internal/macro/RisingwaveDropZtableMacro.java | 4 ++-- 10 files changed, 19 insertions(+), 19 deletions(-) diff --git a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.generated.as/client.rpt b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.generated.as/client.rpt index 52b32d6449..a2dbaa08c3 100644 --- a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.generated.as/client.rpt +++ b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.generated.as/client.rpt @@ -66,7 +66,7 @@ write zilla:data.ext ${pgsql:dataEx() .query() .build() .build()} -write "CREATE MATERIALIZED VIEW IF NOT EXISTS cities_view" +write "CREATE MATERIALIZED VIEW IF NOT EXISTS zb_catalog.cities_view" " AS SELECT id, name, description," " COALESCE(owner_id, owner_id_header::varchar) as owner_id," " COALESCE(created_at, created_at_timestamp::timestamp) as created_at" @@ -142,7 +142,7 @@ write zilla:data.ext ${pgsql:dataEx() .query() .build() .build()} -write "CREATE SINK zb_catalog.cities_view_sink INTO cities FROM cities_view;" +write "CREATE SINK zb_catalog.cities_view_sink INTO cities FROM zb_catalog.cities_view;" [0x00] write flush diff --git a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.generated.as/server.rpt b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.generated.as/server.rpt index bbcf29657a..e25ddc9255 100644 --- a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.generated.as/server.rpt +++ b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.generated.as/server.rpt @@ -69,7 +69,7 @@ read zilla:data.ext ${pgsql:dataEx() .query() .build() .build()} -read "CREATE MATERIALIZED VIEW IF NOT EXISTS cities_view" +read "CREATE MATERIALIZED VIEW IF NOT EXISTS zb_catalog.cities_view" " AS SELECT id, name, description," " COALESCE(owner_id, owner_id_header::varchar) as owner_id," " COALESCE(created_at, created_at_timestamp::timestamp) as created_at" @@ -142,7 +142,7 @@ read zilla:data.ext ${pgsql:dataEx() .query() .build() .build()} -read "CREATE SINK zb_catalog.cities_view_sink INTO cities FROM cities_view;" +read "CREATE SINK zb_catalog.cities_view_sink INTO cities FROM zb_catalog.cities_view;" [0x00] write advise zilla:flush ${pgsql:flushEx() diff --git a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.primary.key/client.rpt b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.primary.key/client.rpt index 4943ea8eb9..9ef7ea5680 100644 --- a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.primary.key/client.rpt +++ b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.primary.key/client.rpt @@ -64,7 +64,7 @@ write zilla:data.ext ${pgsql:dataEx() .query() .build() .build()} -write "CREATE MATERIALIZED VIEW IF NOT EXISTS cities_view AS SELECT * FROM cities_source;" +write "CREATE MATERIALIZED VIEW IF NOT EXISTS zb_catalog.cities_view AS SELECT * FROM cities_source;" [0x00] write flush @@ -134,7 +134,7 @@ write zilla:data.ext ${pgsql:dataEx() .query() .build() .build()} -write "CREATE SINK zb_catalog.cities_view_sink INTO cities FROM cities_view;" +write "CREATE SINK zb_catalog.cities_view_sink INTO cities FROM zb_catalog.cities_view;" [0x00] write flush diff --git a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.primary.key/server.rpt b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.primary.key/server.rpt index cff56e6277..450dc08d43 100644 --- a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.primary.key/server.rpt +++ b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.primary.key/server.rpt @@ -67,7 +67,7 @@ read zilla:data.ext ${pgsql:dataEx() .query() .build() .build()} -read "CREATE MATERIALIZED VIEW IF NOT EXISTS cities_view AS SELECT * FROM cities_source;" +read "CREATE MATERIALIZED VIEW IF NOT EXISTS zb_catalog.cities_view AS SELECT * FROM cities_source;" [0x00] write advise zilla:flush ${pgsql:flushEx() @@ -134,7 +134,7 @@ read zilla:data.ext ${pgsql:dataEx() .query() .build() .build()} -read "CREATE SINK zb_catalog.cities_view_sink INTO cities FROM cities_view;" +read "CREATE SINK zb_catalog.cities_view_sink INTO cities FROM zb_catalog.cities_view;" [0x00] write advise zilla:flush ${pgsql:flushEx() diff --git a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/drop.ztable/client.rpt b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/drop.ztable/client.rpt index 081bbf5bc7..56e5216100 100644 --- a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/drop.ztable/client.rpt +++ b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/drop.ztable/client.rpt @@ -124,7 +124,7 @@ write zilla:data.ext ${pgsql:dataEx() .query() .build() .build()} -write "DROP MATERIALIZED VIEW weather_view;" +write "DROP MATERIALIZED VIEW zb_catalog.weather_view;" [0x00] write flush diff --git a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/drop.ztable/server.rpt b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/drop.ztable/server.rpt index e9a7bb2eff..b5f9145c26 100644 --- a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/drop.ztable/server.rpt +++ b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/drop.ztable/server.rpt @@ -124,7 +124,7 @@ read zilla:data.ext ${pgsql:dataEx() .query() .build() .build()} -read "DROP MATERIALIZED VIEW weather_view;" +read "DROP MATERIALIZED VIEW zb_catalog.weather_view;" [0x00] write advise zilla:flush ${pgsql:flushEx() diff --git a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/query.with.multiple.statements/client.rpt b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/query.with.multiple.statements/client.rpt index 96a790603a..c73666bd4e 100644 --- a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/query.with.multiple.statements/client.rpt +++ b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/query.with.multiple.statements/client.rpt @@ -64,7 +64,7 @@ write zilla:data.ext ${pgsql:dataEx() .query() .build() .build()} -write "CREATE MATERIALIZED VIEW IF NOT EXISTS cities_view AS SELECT * FROM cities_source;" +write "CREATE MATERIALIZED VIEW IF NOT EXISTS zb_catalog.cities_view AS SELECT * FROM cities_source;" [0x00] write flush @@ -134,7 +134,7 @@ write zilla:data.ext ${pgsql:dataEx() .query() .build() .build()} -write "CREATE SINK zb_catalog.cities_view_sink INTO cities FROM cities_view;" +write "CREATE SINK zb_catalog.cities_view_sink INTO cities FROM zb_catalog.cities_view;" [0x00] write flush diff --git a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/query.with.multiple.statements/server.rpt b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/query.with.multiple.statements/server.rpt index 81923bfa3b..aebe40ce01 100644 --- a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/query.with.multiple.statements/server.rpt +++ b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/query.with.multiple.statements/server.rpt @@ -67,7 +67,7 @@ read zilla:data.ext ${pgsql:dataEx() .query() .build() .build()} -read "CREATE MATERIALIZED VIEW IF NOT EXISTS cities_view AS SELECT * FROM cities_source;" +read "CREATE MATERIALIZED VIEW IF NOT EXISTS zb_catalog.cities_view AS SELECT * FROM cities_source;" [0x00] write advise zilla:flush ${pgsql:flushEx() @@ -134,7 +134,7 @@ read zilla:data.ext ${pgsql:dataEx() .query() .build() .build()} -read "CREATE SINK zb_catalog.cities_view_sink INTO cities FROM cities_view;" +read "CREATE SINK zb_catalog.cities_view_sink INTO cities FROM zb_catalog.cities_view;" [0x00] write advise zilla:flush ${pgsql:flushEx() diff --git a/incubator/binding-risingwave/src/main/java/io/aklivity/zilla/runtime/binding/risingwave/internal/macro/RisingwaveCreateZtableMacro.java b/incubator/binding-risingwave/src/main/java/io/aklivity/zilla/runtime/binding/risingwave/internal/macro/RisingwaveCreateZtableMacro.java index 0700b90d45..db624cf55c 100644 --- a/incubator/binding-risingwave/src/main/java/io/aklivity/zilla/runtime/binding/risingwave/internal/macro/RisingwaveCreateZtableMacro.java +++ b/incubator/binding-risingwave/src/main/java/io/aklivity/zilla/runtime/binding/risingwave/internal/macro/RisingwaveCreateZtableMacro.java @@ -282,7 +282,7 @@ public void onStarted( select = fieldBuilder.toString(); } - String sqlQuery = String.format(sqlFormat, "%s_view".formatted(name), + String sqlQuery = String.format(sqlFormat, "%s.%s_view".formatted(systemSchema, name), "SELECT %s FROM %s_source".formatted(select, name)); handler.doExecuteSystemClient(traceId, authorization, sqlQuery); @@ -404,7 +404,7 @@ public RisingwaveMacroState onError( private final class CreateSinkIntoState implements RisingwaveMacroState { private final String sqlFormat = """ - CREATE SINK %s.%s_view_sink INTO %s FROM %s_view;\u0000"""; + CREATE SINK %s.%s_view_sink INTO %s FROM %s.%s_view;\u0000"""; @Override public void onStarted( @@ -412,7 +412,7 @@ public void onStarted( long authorization) { String name = command.name(); - String sqlQuery = String.format(sqlFormat, systemSchema, name, name, name); + String sqlQuery = String.format(sqlFormat, systemSchema, name, name, systemSchema, name); handler.doExecuteSystemClient(traceId, authorization, sqlQuery); } diff --git a/incubator/binding-risingwave/src/main/java/io/aklivity/zilla/runtime/binding/risingwave/internal/macro/RisingwaveDropZtableMacro.java b/incubator/binding-risingwave/src/main/java/io/aklivity/zilla/runtime/binding/risingwave/internal/macro/RisingwaveDropZtableMacro.java index 4a4e16523e..e101056751 100644 --- a/incubator/binding-risingwave/src/main/java/io/aklivity/zilla/runtime/binding/risingwave/internal/macro/RisingwaveDropZtableMacro.java +++ b/incubator/binding-risingwave/src/main/java/io/aklivity/zilla/runtime/binding/risingwave/internal/macro/RisingwaveDropZtableMacro.java @@ -228,14 +228,14 @@ public RisingwaveMacroState onError( private final class DropMaterializedViewState implements RisingwaveMacroState { private final String sqlFormat = """ - DROP MATERIALIZED VIEW %s_view;\u0000"""; + DROP MATERIALIZED VIEW %s.%s_view;\u0000"""; @Override public void onStarted( long traceId, long authorization) { - String sqlQuery = String.format(sqlFormat, command.name()); + String sqlQuery = String.format(sqlFormat, systemSchema, command.name()); handler.doExecuteSystemClient(traceId, authorization, sqlQuery); } From fa4260b8d3abdd8a41f121c2016a5d427a2a9378 Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Thu, 13 Feb 2025 03:08:44 +0530 Subject: [PATCH 05/13] fix: NPE due to empty Inline Catalog (#1399) --- .../inline/internal/InlineCatalogHandler.java | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/runtime/catalog-inline/src/main/java/io/aklivity/zilla/runtime/catalog/inline/internal/InlineCatalogHandler.java b/runtime/catalog-inline/src/main/java/io/aklivity/zilla/runtime/catalog/inline/internal/InlineCatalogHandler.java index a81d2b4d84..34c87c7aab 100644 --- a/runtime/catalog-inline/src/main/java/io/aklivity/zilla/runtime/catalog/inline/internal/InlineCatalogHandler.java +++ b/runtime/catalog-inline/src/main/java/io/aklivity/zilla/runtime/catalog/inline/internal/InlineCatalogHandler.java @@ -63,14 +63,18 @@ private int generateCRC32C( return (int) crc32c.getValue(); } - private void registerSchema(List configs) + private void registerSchema( + List configs) { - for (InlineSchemaConfig config : configs) + if (configs != null) { - String schema = config.schema; - int schemaId = generateCRC32C(schema); - schemas.put(schemaId, schema); - schemaIds.put(config.subject + config.version, schemaId); + for (InlineSchemaConfig config : configs) + { + String schema = config.schema; + int schemaId = generateCRC32C(schema); + schemas.put(schemaId, schema); + schemaIds.put(config.subject + config.version, schemaId); + } } } } From 29de7f594e94622ec7c1c5e7937bd220c32e7119 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 12 Feb 2025 13:41:11 -0800 Subject: [PATCH 06/13] Bump alpine from 3.21.0 to 3.21.2 in /cloud/docker-image/src/main/docker (#1367) Bumps alpine from 3.21.0 to 3.21.2. --- updated-dependencies: - dependency-name: alpine dependency-type: direct:production update-type: version-update:semver-patch ... Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> --- cloud/docker-image/src/main/docker/alpine.Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cloud/docker-image/src/main/docker/alpine.Dockerfile b/cloud/docker-image/src/main/docker/alpine.Dockerfile index 14783cbd7d..0f49151008 100644 --- a/cloud/docker-image/src/main/docker/alpine.Dockerfile +++ b/cloud/docker-image/src/main/docker/alpine.Dockerfile @@ -27,7 +27,7 @@ RUN apk add --no-cache wget RUN ./zpmw install --debug --exclude-remote-repositories RUN ./zpmw clean --keep-image -FROM alpine:3.21.0 +FROM alpine:3.21.2 ENV ZILLA_VERSION ${project.version} From 2ecc506f101eeacf79bdb74891199d2ffc683b24 Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Sat, 15 Feb 2025 01:04:25 +0530 Subject: [PATCH 07/13] fix: mqtt-kafka routing fix (#1402) --- .../internal/stream/AsyncapiProxyFactory.java | 2 +- .../stream/MqttKafkaSessionFactory.java | 22 ++++++++----------- 2 files changed, 10 insertions(+), 14 deletions(-) diff --git a/runtime/binding-asyncapi/src/main/java/io/aklivity/zilla/runtime/binding/asyncapi/internal/stream/AsyncapiProxyFactory.java b/runtime/binding-asyncapi/src/main/java/io/aklivity/zilla/runtime/binding/asyncapi/internal/stream/AsyncapiProxyFactory.java index d8e817dddb..06633bf65c 100644 --- a/runtime/binding-asyncapi/src/main/java/io/aklivity/zilla/runtime/binding/asyncapi/internal/stream/AsyncapiProxyFactory.java +++ b/runtime/binding-asyncapi/src/main/java/io/aklivity/zilla/runtime/binding/asyncapi/internal/stream/AsyncapiProxyFactory.java @@ -192,7 +192,7 @@ public MessageConsumer newStream( } else { - // JRF: can we remove this? current used by will stream which arrives proactively, so no affinity + // JRF: can we remove this? current used by will stream which arrives proactively, so no compositeId Optional routeRef = binding.routes.stream().findFirst(); final long resolvedId = routeRef.map(r -> r.id).orElse(0L); final long resolvedApiId = routeRef.map(r -> composite.resolveApiId(r.with.apiId)).orElse(0L); diff --git a/runtime/binding-mqtt-kafka/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/stream/MqttKafkaSessionFactory.java b/runtime/binding-mqtt-kafka/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/stream/MqttKafkaSessionFactory.java index 47ffb13180..f1cae2f4c3 100644 --- a/runtime/binding-mqtt-kafka/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/stream/MqttKafkaSessionFactory.java +++ b/runtime/binding-mqtt-kafka/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/stream/MqttKafkaSessionFactory.java @@ -475,7 +475,7 @@ private MqttSessionProxy( this.resolvedId = resolvedId; this.initialId = initialId; this.replyId = supplyReplyId.applyAsLong(initialId); - this.session = new KafkaFetchWillSignalStream(originId, resolvedId, this); + this.session = new KafkaFetchWillSignalStream(routedId, resolvedId, this); this.sessionsTopic = sessionsTopic; this.sessionId = new String16FW(sessionIds.get(bindingId)); this.leaderEpochs = new Long2LongHashMap(-2); @@ -570,8 +570,7 @@ private void onMqttBegin( if (!isSetWillFlag(sessionFlags) || isSetCleanStart(sessionFlags)) { - final long routedId = session.routedId; - session = new KafkaSessionSignalStream(originId, routedId, this); + session = new KafkaSessionSignalStream(routedId, resolvedId, this); } if (isSetWillFlag(sessionFlags)) { @@ -1145,13 +1144,13 @@ private void openMetaStreams( messagesTopics.forEach(t -> { final KafkaMetaStream meta = - new KafkaMetaStream(originId, resolvedId, this, t, false); + new KafkaMetaStream(routedId, resolvedId, this, t, false); metas.add(meta); meta.doKafkaBegin(traceId, authorization, 0); }); final KafkaMetaStream retainedMeta = - new KafkaMetaStream(originId, resolvedId, this, retainedTopic, true); + new KafkaMetaStream(routedId, resolvedId, this, retainedTopic, true); metas.add(retainedMeta); retainedMeta.doKafkaBegin(traceId, authorization, 0); } @@ -1198,8 +1197,7 @@ private void onSessionBecomesLeader( if (publishQosMax < 2) { - final long routedId = session.routedId; - session = new KafkaSessionStateProxy(originId, routedId, this); + session = new KafkaSessionStateProxy(routedId, resolvedId, this); session.doKafkaBeginIfNecessary(traceId, authorization, 0); } else @@ -1266,8 +1264,7 @@ private void onOffsetFetched( if (unfetchedKafkaTopics == 0 && initProducer) { - final long routedId = session.routedId; - producerInit = new KafkaInitProducerStream(originId, routedId, this); + producerInit = new KafkaInitProducerStream(routedId, resolvedId, this); producerInit.doKafkaBegin(traceId, authorization, 0); } else if (unfetchedKafkaTopics == 0) @@ -1308,8 +1305,7 @@ private void onProducerInit( long traceId, long authorization) { - final long routedId = session.routedId; - offsetCommit = new KafkaOffsetCommitStream(originId, routedId, this, groupHost, groupPort); + offsetCommit = new KafkaOffsetCommitStream(routedId, resolvedId, this, groupHost, groupPort); offsetCommit.doKafkaBegin(traceId, authorization, 0); } @@ -1388,7 +1384,7 @@ private void doFetchOffsetMetadata( final String topic0 = topic.asString(); final KafkaOffsetFetchStream offsetFetch = - new KafkaOffsetFetchStream(originId, resolvedId, this, groupHost, groupPort, topic0, partitions); + new KafkaOffsetFetchStream(routedId, resolvedId, this, groupHost, groupPort, topic0, partitions); offsetFetches.add(offsetFetch); offsetFetch.doKafkaBegin(traceId, authorization, 0); } @@ -1473,7 +1469,7 @@ private void doCreateSessionStream( }).build(); doMqttBegin(traceId, authorization, 0, mqttBeginEx); - session = new KafkaSessionStateProxy(originId, resolvedId, this); + session = new KafkaSessionStateProxy(routedId, resolvedId, this); session.doKafkaBeginIfNecessary(traceId, authorization, 0); } } From f49c9d48642bca7167f494b97252ef6e9221d0c0 Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Mon, 17 Feb 2025 23:04:31 +0530 Subject: [PATCH 08/13] fix: MQTT subscribe routing (#1403) --- .../kafka/internal/stream/MqttKafkaSubscribeFactory.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/runtime/binding-mqtt-kafka/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/stream/MqttKafkaSubscribeFactory.java b/runtime/binding-mqtt-kafka/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/stream/MqttKafkaSubscribeFactory.java index aaf843df7b..3f231e451b 100644 --- a/runtime/binding-mqtt-kafka/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/stream/MqttKafkaSubscribeFactory.java +++ b/runtime/binding-mqtt-kafka/src/main/java/io/aklivity/zilla/runtime/binding/mqtt/kafka/internal/stream/MqttKafkaSubscribeFactory.java @@ -337,12 +337,12 @@ private MqttSubscribeProxy( this.messages = new Long2ObjectHashMap<>(); routes.forEach(r -> { - KafkaMessagesProxy messagesProxy = new KafkaMessagesProxy(originId, r, this); + KafkaMessagesProxy messagesProxy = new KafkaMessagesProxy(routedId, r, this); messages.put(r.order, messagesProxy); messagesPerTopicKey.put(messagesProxy.topicKey, r.order); }); final MqttKafkaRouteConfig retainedRoute = routes.get(0); - this.retained = new KafkaRetainedProxy(originId, retainedRoute.id, retainedRoute.retained, this); + this.retained = new KafkaRetainedProxy(routedId, retainedRoute.id, retainedRoute.retained, this); } private void onMqttMessage( @@ -533,7 +533,7 @@ private void onFiltersChanged( final long routeOrder = r.order; if (!messages.containsKey(routeOrder)) { - KafkaMessagesProxy messagesProxy = new KafkaMessagesProxy(originId, r, this); + KafkaMessagesProxy messagesProxy = new KafkaMessagesProxy(routedId, r, this); messages.put(routeOrder, messagesProxy); messagesPerTopicKey.put(messagesProxy.topicKey, r.order); messagesProxy.doKafkaBegin(traceId, authorization, 0, filters); From 19067d0f9616d3caa44ac86ef5704eaa48559afa Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Wed, 19 Feb 2025 23:02:04 +0530 Subject: [PATCH 09/13] fix: resolveKind flow for composite binding (#1407) --- .../echo/internal/bench/EchoWorker.java | 10 ++++ .../binding/tls/internal/bench/TlsWorker.java | 10 ++++ .../zilla/runtime/engine/EngineContext.java | 6 ++ .../internal/registry/EngineRegistry.java | 2 +- .../internal/registry/EngineWorker.java | 17 +++--- .../internal/registry/NamespaceRegistry.java | 12 +++- .../internal/binding/TestBindingFactory.java | 20 ++++++- .../config/TestBindingOptionsConfig.java | 20 +++++++ .../TestBindingOptionsConfigAdapter.java | 20 +++++++ .../TestBindingOptionsConfigBuilder.java | 16 +++++- .../exporter/otlp/internal/MetricsIT.java | 57 ------------------- .../schema/binding/test.schema.patch.json | 28 +++++++++ .../config/metrics.with.service.name.yaml | 14 +++++ .../specs/exporter/otlp/config/metrics.yaml | 44 ++++++++++---- 14 files changed, 194 insertions(+), 82 deletions(-) diff --git a/runtime/binding-echo/src/test/java/io/aklivity/zilla/runtime/binding/echo/internal/bench/EchoWorker.java b/runtime/binding-echo/src/test/java/io/aklivity/zilla/runtime/binding/echo/internal/bench/EchoWorker.java index aa997b0be5..0ef4b86779 100644 --- a/runtime/binding-echo/src/test/java/io/aklivity/zilla/runtime/binding/echo/internal/bench/EchoWorker.java +++ b/runtime/binding-echo/src/test/java/io/aklivity/zilla/runtime/binding/echo/internal/bench/EchoWorker.java @@ -19,6 +19,7 @@ import java.nio.channels.SelectableChannel; import java.nio.file.Path; import java.time.Clock; +import java.util.function.LongConsumer; import java.util.function.LongSupplier; import org.agrona.MutableDirectBuffer; @@ -352,6 +353,15 @@ public void onExporterDetached( } + @Override + public LongConsumer supplyMetricWriter( + Metric.Kind kind, + long bindingId, + long metricId) + { + return null; + } + @Override public MessageConsumer supplyEventWriter() { diff --git a/runtime/binding-tls/src/test/java/io/aklivity/zilla/runtime/binding/tls/internal/bench/TlsWorker.java b/runtime/binding-tls/src/test/java/io/aklivity/zilla/runtime/binding/tls/internal/bench/TlsWorker.java index 3409b6abc5..1c59591591 100644 --- a/runtime/binding-tls/src/test/java/io/aklivity/zilla/runtime/binding/tls/internal/bench/TlsWorker.java +++ b/runtime/binding-tls/src/test/java/io/aklivity/zilla/runtime/binding/tls/internal/bench/TlsWorker.java @@ -24,6 +24,7 @@ import java.nio.file.Path; import java.time.Clock; import java.util.function.IntConsumer; +import java.util.function.LongConsumer; import java.util.function.LongSupplier; import java.util.zip.CRC32C; @@ -418,6 +419,15 @@ public void onExporterDetached( } + @Override + public LongConsumer supplyMetricWriter( + Metric.Kind kind, + long bindingId, + long metricId) + { + return null; + } + @Override public MessageConsumer supplyEventWriter() { diff --git a/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/EngineContext.java b/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/EngineContext.java index 517b0124d1..1fac875102 100644 --- a/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/EngineContext.java +++ b/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/EngineContext.java @@ -19,6 +19,7 @@ import java.nio.channels.SelectableChannel; import java.nio.file.Path; import java.time.Clock; +import java.util.function.LongConsumer; import java.util.function.LongSupplier; import org.agrona.MutableDirectBuffer; @@ -172,6 +173,11 @@ void onExporterAttached( void onExporterDetached( long exporterId); + LongConsumer supplyMetricWriter( + Metric.Kind kind, + long bindingId, + long metricId); + MessageConsumer supplyEventWriter(); MessageReader supplyEventReader(); diff --git a/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/internal/registry/EngineRegistry.java b/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/internal/registry/EngineRegistry.java index 2eaa8a16d4..edf88be778 100644 --- a/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/internal/registry/EngineRegistry.java +++ b/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/internal/registry/EngineRegistry.java @@ -194,7 +194,7 @@ private void attachNamespace( NamespaceConfig namespace) { NamespaceRegistry registry = - new NamespaceRegistry(namespace, bindingsByType, guardsByType, vaultsByType, catalogsByType, + new NamespaceRegistry(namespace, this::findNamespace, bindingsByType, guardsByType, vaultsByType, catalogsByType, metricsByName, exportersByType, supplyLabelId, this::resolveMetric, exporterAttached, exporterDetached, supplyMetricRecorder, detachBinding, collector); namespacesById.put(registry.namespaceId(), registry); diff --git a/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/internal/registry/EngineWorker.java b/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/internal/registry/EngineWorker.java index f09a793cf2..97d657efaa 100644 --- a/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/internal/registry/EngineWorker.java +++ b/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/internal/registry/EngineWorker.java @@ -1757,6 +1757,15 @@ public MessageConsumer supplyReceiver( return writersByIndex.computeIfAbsent(remoteIndex, supplyWriter); } + @Override + public LongConsumer supplyMetricWriter( + Metric.Kind kind, + long bindingId, + long metricId) + { + return metricWriterSuppliers.get(kind).apply(bindingId, metricId); + } + public EventsLayout.EventAccessor createEventAccessor() { return eventsLayout.createEventAccessor(); @@ -1790,14 +1799,6 @@ private Target supplyTarget( return targetsByIndex.computeIfAbsent(index, newTarget); } - private LongConsumer supplyMetricWriter( - Metric.Kind kind, - long bindingId, - long metricId) - { - return metricWriterSuppliers.get(kind).apply(bindingId, metricId); - } - private MessageConsumer supplyMetricRecorder( long bindingId, MetricHandlerKind kind, diff --git a/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/internal/registry/NamespaceRegistry.java b/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/internal/registry/NamespaceRegistry.java index 30e7cfbc69..db8f9a0463 100644 --- a/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/internal/registry/NamespaceRegistry.java +++ b/runtime/engine/src/main/java/io/aklivity/zilla/runtime/engine/internal/registry/NamespaceRegistry.java @@ -23,6 +23,7 @@ import java.util.Collection; import java.util.function.Function; +import java.util.function.IntFunction; import java.util.function.LongConsumer; import java.util.function.LongFunction; import java.util.function.ToIntFunction; @@ -74,9 +75,11 @@ public class NamespaceRegistry private final ObjectLongLongFunction supplyMetricRecorder; private final LongConsumer detachBinding; private final Collector collector; + private final IntFunction findNamespace; public NamespaceRegistry( NamespaceConfig namespace, + IntFunction findNamespace, Function bindingsByType, Function guardsByType, Function vaultsByType, @@ -92,6 +95,7 @@ public NamespaceRegistry( Collector collector) { this.namespace = namespace; + this.findNamespace = findNamespace; this.bindingsByType = bindingsByType; this.guardsByType = guardsByType; this.vaultsByType = vaultsByType; @@ -370,10 +374,12 @@ BindingRegistry findBinding( } public KindConfig resolveKind( - long namespacedBindingId) + long bindingId) { - int bindingId = NamespacedId.localId(namespacedBindingId); - BindingRegistry binding = findBinding(bindingId); + int namespaceId = NamespacedId.namespaceId(bindingId); + NamespaceRegistry namespace = findNamespace.apply(namespaceId); + int localId = NamespacedId.localId(bindingId); + BindingRegistry binding = namespace.findBinding(localId); return binding == null ? null : binding.kind(); } diff --git a/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/binding/TestBindingFactory.java b/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/binding/TestBindingFactory.java index 3596c41c76..d9429fdee7 100644 --- a/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/binding/TestBindingFactory.java +++ b/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/binding/TestBindingFactory.java @@ -21,6 +21,7 @@ import java.util.LinkedList; import java.util.List; import java.util.Objects; +import java.util.function.LongConsumer; import org.agrona.DirectBuffer; import org.agrona.MutableDirectBuffer; @@ -34,6 +35,7 @@ import io.aklivity.zilla.runtime.engine.config.CatalogedConfig; import io.aklivity.zilla.runtime.engine.config.SchemaConfig; import io.aklivity.zilla.runtime.engine.guard.GuardHandler; +import io.aklivity.zilla.runtime.engine.metrics.Metric; import io.aklivity.zilla.runtime.engine.model.ConverterHandler; import io.aklivity.zilla.runtime.engine.model.function.ValueConsumer; import io.aklivity.zilla.runtime.engine.namespace.NamespacedId; @@ -113,6 +115,8 @@ public void attach( TestBindingOptionsConfig options = (TestBindingOptionsConfig) binding.options; if (options != null) { + int namespaceId = NamespacedId.namespaceId(binding.id); + if (options.value != null) { this.valueType = context.supplyWriteConverter(options.value); @@ -126,7 +130,6 @@ public void attach( this.catalogs = new LinkedList<>(); for (CatalogedConfig catalog : options.cataloged) { - int namespaceId = context.supplyTypeId(binding.namespace); int catalogId = context.supplyTypeId(catalog.name); final CatalogHandler handler = context.supplyCatalog(NamespacedId.id(namespaceId, catalogId)); catalogs.add(handler); @@ -137,7 +140,6 @@ public void attach( if (options.authorization != null) { - int namespaceId = context.supplyTypeId(binding.namespace); int guardId = context.supplyTypeId(options.authorization.name); this.guard = context.supplyGuard(NamespacedId.id(namespaceId, guardId)); this.credentials = options.authorization.credentials; @@ -150,6 +152,20 @@ public void attach( this.vault = context.supplyVault(binding.vaultId); this.vaultAssertion = options.vaultAssertion; } + + if (options.metrics != null && !options.metrics.isEmpty()) + { + for (TestBindingOptionsConfig.Metric metric : options.metrics) + { + long metricId = NamespacedId.id(namespaceId, context.supplyTypeId(metric.name)); + + LongConsumer writer = context.supplyMetricWriter(Metric.Kind.valueOf(metric.kind.toUpperCase()), + binding.id, metricId); + + writer.accept(metric.values[context.index()]); + } + } + } } diff --git a/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/binding/config/TestBindingOptionsConfig.java b/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/binding/config/TestBindingOptionsConfig.java index c1ee5691fb..dd7ee0e118 100644 --- a/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/binding/config/TestBindingOptionsConfig.java +++ b/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/binding/config/TestBindingOptionsConfig.java @@ -30,6 +30,7 @@ public final class TestBindingOptionsConfig extends OptionsConfig public final TestAuthorizationConfig authorization; public final List cataloged; public final List events; + public final List metrics; public final List catalogAssertions; public final VaultAssertion vaultAssertion; @@ -51,6 +52,7 @@ public static TestBindingOptionsConfigBuilder builder( TestAuthorizationConfig authorization, List cataloged, List events, + List metrics, List catalogAssertions, VaultAssertion vaultAssertion) { @@ -61,6 +63,7 @@ public static TestBindingOptionsConfigBuilder builder( this.authorization = authorization; this.cataloged = cataloged; this.events = events; + this.metrics = metrics; this.catalogAssertions = catalogAssertions; this.vaultAssertion = vaultAssertion; } @@ -79,6 +82,23 @@ public Event( } } + public static final class Metric + { + public final String name; + public final String kind; + public final long[] values; + + public Metric( + String name, + String kind, + long[] values) + { + this.name = name; + this.kind = kind; + this.values = values; + } + } + public static final class VaultAssertion { public final String key; diff --git a/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/binding/config/TestBindingOptionsConfigAdapter.java b/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/binding/config/TestBindingOptionsConfigAdapter.java index d60b3fcdeb..0706e636c8 100644 --- a/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/binding/config/TestBindingOptionsConfigAdapter.java +++ b/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/binding/config/TestBindingOptionsConfigAdapter.java @@ -21,6 +21,7 @@ import jakarta.json.Json; import jakarta.json.JsonArray; import jakarta.json.JsonArrayBuilder; +import jakarta.json.JsonNumber; import jakarta.json.JsonObject; import jakarta.json.JsonObjectBuilder; import jakarta.json.JsonValue; @@ -53,6 +54,10 @@ public final class TestBindingOptionsConfigAdapter implements OptionsConfigAdapt private static final String VAULT_KEY_NAME = "key"; private static final String VAULT_SIGNER_NAME = "signer"; private static final String VAULT_TRUST_NAME = "trust"; + private static final String METRICS_NAME = "metrics"; + private static final String NAME_NAME = "name"; + private static final String KIND_NAME = "kind"; + private static final String VALUES_NAME = "values"; private final ModelConfigAdapter model = new ModelConfigAdapter(); @@ -269,6 +274,21 @@ public OptionsConfig adaptFromJson( } } } + + if (object.containsKey(METRICS_NAME)) + { + JsonArray metrics = object.getJsonArray(METRICS_NAME); + for (JsonValue m : metrics) + { + JsonObject m0 = m.asJsonObject(); + + long[] values = m0.getJsonArray(VALUES_NAME).stream() + .mapToLong(v -> ((JsonNumber) v).longValue()) + .toArray(); + + testOptions.metric(m0.getString(NAME_NAME), m0.getString(KIND_NAME), values); + } + } } return testOptions.build(); diff --git a/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/binding/config/TestBindingOptionsConfigBuilder.java b/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/binding/config/TestBindingOptionsConfigBuilder.java index aa2f61b1c1..49df9e7153 100644 --- a/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/binding/config/TestBindingOptionsConfigBuilder.java +++ b/runtime/engine/src/test/java/io/aklivity/zilla/runtime/engine/test/internal/binding/config/TestBindingOptionsConfigBuilder.java @@ -35,6 +35,7 @@ public final class TestBindingOptionsConfigBuilder extends ConfigBuilder catalogs; private List events; + private List metrics; private List catalogAssertions; private VaultAssertion vaultAssertion; @@ -99,6 +100,19 @@ public TestBindingOptionsConfigBuilder event( return this; } + public TestBindingOptionsConfigBuilder metric( + String name, + String kind, + long[] values) + { + if (this.metrics == null) + { + this.metrics = new LinkedList<>(); + } + this.metrics.add(new TestBindingOptionsConfig.Metric(name, kind, values)); + return this; + } + public TestBindingOptionsConfigBuilder catalogAssertions( String name, List assertions) @@ -122,6 +136,6 @@ public TestBindingOptionsConfigBuilder vaultAssertion( public T build() { return mapper.apply(new TestBindingOptionsConfig(value, mode, schema, authorization, catalogs, events, - catalogAssertions, vaultAssertion)); + metrics, catalogAssertions, vaultAssertion)); } } diff --git a/runtime/exporter-otlp/src/test/java/io/aklivity/zilla/runtime/exporter/otlp/internal/MetricsIT.java b/runtime/exporter-otlp/src/test/java/io/aklivity/zilla/runtime/exporter/otlp/internal/MetricsIT.java index 9034e193ba..a3c006f36e 100644 --- a/runtime/exporter-otlp/src/test/java/io/aklivity/zilla/runtime/exporter/otlp/internal/MetricsIT.java +++ b/runtime/exporter-otlp/src/test/java/io/aklivity/zilla/runtime/exporter/otlp/internal/MetricsIT.java @@ -18,8 +18,6 @@ import static java.util.concurrent.TimeUnit.SECONDS; import static org.junit.rules.RuleChain.outerRule; -import java.util.function.LongConsumer; - import org.junit.Rule; import org.junit.Test; import org.junit.rules.DisableOnDebug; @@ -28,7 +26,6 @@ import io.aklivity.k3po.runtime.junit.annotation.Specification; import io.aklivity.k3po.runtime.junit.rules.K3poRule; -import io.aklivity.zilla.runtime.engine.namespace.NamespacedId; import io.aklivity.zilla.runtime.engine.test.EngineRule; import io.aklivity.zilla.runtime.engine.test.annotation.Configuration; @@ -57,13 +54,6 @@ public class MetricsIT }) public void shouldPostMetricsToOtlpCollector() throws Exception { - // GIVEN - writeMetrics(); - - // WHEN - // the exporter publishes the metric data to the collector in json format - - // THEN k3po.finish(); } @@ -74,53 +64,6 @@ public void shouldPostMetricsToOtlpCollector() throws Exception }) public void shouldPostMetricsWithServiceNameToOtlpCollector() throws Exception { - // GIVEN - writeMetrics(); - - // WHEN - // the exporter publishes the metric data to the collector in json format - - // THEN k3po.finish(); } - - private void writeMetrics() - { - int namespaceId = engine.supplyLabelId("test"); - int bindingId = engine.supplyLabelId("net0"); - int counterId = engine.supplyLabelId("test.counter"); - int gaugeId = engine.supplyLabelId("test.gauge"); - int histogramId = engine.supplyLabelId("test.histogram"); - - long nsBindingId = NamespacedId.id(namespaceId, bindingId); - long nsCounterId = NamespacedId.id(namespaceId, counterId); - long nsGaugeId = NamespacedId.id(namespaceId, gaugeId); - long nsHistogramId = NamespacedId.id(namespaceId, histogramId); - - LongConsumer counterWriter0 = engine.counterWriter(nsBindingId, nsCounterId, 0); - LongConsumer counterWriter1 = engine.counterWriter(nsBindingId, nsCounterId, 1); - LongConsumer counterWriter2 = engine.counterWriter(nsBindingId, nsCounterId, 2); - counterWriter0.accept(42L); - counterWriter1.accept(21L); - counterWriter2.accept(14L); - // the aggregated counter value across the 3 cores should be 42 + 21 + 14 = 77 - - LongConsumer gaugeWriter0 = engine.gaugeWriter(nsBindingId, nsGaugeId, 0); - LongConsumer gaugeWriter1 = engine.gaugeWriter(nsBindingId, nsGaugeId, 1); - LongConsumer gaugeWriter2 = engine.gaugeWriter(nsBindingId, nsGaugeId, 2); - gaugeWriter0.accept(11L); - gaugeWriter1.accept(22L); - gaugeWriter2.accept(33L); - // the aggregated gauge value across the 3 cores should be 11 + 22 + 33 = 66 - - LongConsumer histogramWriter0 = engine.histogramWriter(nsBindingId, nsHistogramId, 0); - LongConsumer histogramWriter1 = engine.histogramWriter(nsBindingId, nsHistogramId, 1); - LongConsumer histogramWriter2 = engine.histogramWriter(nsBindingId, nsHistogramId, 2); - // values 0..1 (2^0..2^1-1) go to bucket #0 - histogramWriter0.accept(1L); - // values 16..31 (2^4..2^5-1) go to bucket #4 - histogramWriter1.accept(17L); - histogramWriter2.accept(18L); - // 1 value goes to bucket #0 and 2 values go to bucket #4 - } } diff --git a/specs/engine.spec/src/main/scripts/io/aklivity/zilla/specs/engine/schema/binding/test.schema.patch.json b/specs/engine.spec/src/main/scripts/io/aklivity/zilla/specs/engine/schema/binding/test.schema.patch.json index 97afab76be..21bb743018 100644 --- a/specs/engine.spec/src/main/scripts/io/aklivity/zilla/specs/engine/schema/binding/test.schema.patch.json +++ b/specs/engine.spec/src/main/scripts/io/aklivity/zilla/specs/engine/schema/binding/test.schema.patch.json @@ -190,6 +190,34 @@ } } } + }, + "metrics": + { + "type": "array", + "items": + { + "type": "object", + "properties": + { + "name": + { + "type": "string" + }, + "kind": + { + "type": "string" + }, + "values": + { + "type": "array", + "items": + { + "type": "number" + } + } + }, + "additionalProperties": false + } } }, "additionalProperties": false diff --git a/specs/exporter-otlp.spec/src/main/scripts/io/aklivity/zilla/specs/exporter/otlp/config/metrics.with.service.name.yaml b/specs/exporter-otlp.spec/src/main/scripts/io/aklivity/zilla/specs/exporter/otlp/config/metrics.with.service.name.yaml index dfe6051409..dd2dc28318 100644 --- a/specs/exporter-otlp.spec/src/main/scripts/io/aklivity/zilla/specs/exporter/otlp/config/metrics.with.service.name.yaml +++ b/specs/exporter-otlp.spec/src/main/scripts/io/aklivity/zilla/specs/exporter/otlp/config/metrics.with.service.name.yaml @@ -37,6 +37,20 @@ bindings: net0: type: test kind: server + options: + metrics: + - name: test.counter + kind: counter + values: + - 42 + - 21 + - 14 + - name: test.gauge + kind: gauge + values: + - 11 + - 22 + - 33 exit: app0 telemetry: metrics: diff --git a/specs/exporter-otlp.spec/src/main/scripts/io/aklivity/zilla/specs/exporter/otlp/config/metrics.yaml b/specs/exporter-otlp.spec/src/main/scripts/io/aklivity/zilla/specs/exporter/otlp/config/metrics.yaml index e566ef3bab..4bbefe116d 100644 --- a/specs/exporter-otlp.spec/src/main/scripts/io/aklivity/zilla/specs/exporter/otlp/config/metrics.yaml +++ b/specs/exporter-otlp.spec/src/main/scripts/io/aklivity/zilla/specs/exporter/otlp/config/metrics.yaml @@ -16,12 +16,44 @@ --- name: test telemetry: - attributes: - service.namespace: example metrics: - test.counter - test.gauge - test.histogram +bindings: + net0: + type: test + kind: server + options: + metrics: + - name: test.counter + kind: counter + values: + - 42 + - 21 + - 14 + - name: test.gauge + kind: gauge + values: + - 11 + - 22 + - 33 + - name: test.histogram + kind: histogram + values: + - 1 + - 17 + - 18 + exit: app0 + telemetry: + metrics: + - test.* + +--- +name: telemetry +telemetry: + attributes: + service.namespace: example exporters: test0: type: otlp @@ -33,11 +65,3 @@ telemetry: location: http://localhost:4318 overrides: metrics: /v1/metrics -bindings: - net0: - type: test - kind: server - exit: app0 - telemetry: - metrics: - - test.* From 4771c67911eba5001b47962a8ab2b22b0f96a694 Mon Sep 17 00:00:00 2001 From: Ankit Kumar Date: Fri, 21 Feb 2025 11:46:54 +0530 Subject: [PATCH 10/13] support boolean model (#1409) --- .../composite/AsyncapiCompositeGenerator.java | 39 +++++----- .../composite/OpenapiCompositeGenerator.java | 2 + .../model/core/config/BooleanModelConfig.java | 40 ++++++++++ .../config/BooleanModelConfigBuilder.java | 43 +++++++++++ .../internal/BooleanConverterHandler.java | 50 +++++++++++++ .../model/core/internal/BooleanModel.java | 45 +++++++++++ .../core/internal/BooleanModelContext.java | 59 +++++++++++++++ .../core/internal/BooleanModelFactorySpi.java | 45 +++++++++++ .../internal/BooleanValidatorHandler.java | 61 +++++++++++++++ .../config/BooleanModelConfigAdapter.java | 48 ++++++++++++ .../src/main/moditect/module-info.java | 6 +- ...untime.engine.config.ModelConfigAdapterSpi | 1 + ...zilla.runtime.engine.model.ModelFactorySpi | 1 + .../internal/BooleanModelFactoryTest.java | 49 ++++++++++++ .../core/internal/BooleanValidatorTest.java | 62 +++++++++++++++ .../config/BooleanModelConfigAdapterTest.java | 75 +++++++++++++++++++ .../model/core/config/boolean.model.yaml | 25 +++++++ .../core/schema/boolean.schema.patch.json | 68 +++++++++++++++++ .../model/core/config/BooleanSchemaTest.java | 43 +++++++++++ 19 files changed, 742 insertions(+), 20 deletions(-) create mode 100644 runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/config/BooleanModelConfig.java create mode 100644 runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/config/BooleanModelConfigBuilder.java create mode 100644 runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/BooleanConverterHandler.java create mode 100644 runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/BooleanModel.java create mode 100644 runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/BooleanModelContext.java create mode 100644 runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/BooleanModelFactorySpi.java create mode 100644 runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/BooleanValidatorHandler.java create mode 100644 runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/config/BooleanModelConfigAdapter.java create mode 100644 runtime/model-core/src/test/java/io/aklivity/zilla/runtime/model/core/internal/BooleanModelFactoryTest.java create mode 100644 runtime/model-core/src/test/java/io/aklivity/zilla/runtime/model/core/internal/BooleanValidatorTest.java create mode 100644 runtime/model-core/src/test/java/io/aklivity/zilla/runtime/model/core/internal/config/BooleanModelConfigAdapterTest.java create mode 100644 specs/model-core.spec/src/main/scripts/io/aklivity/zilla/specs/model/core/config/boolean.model.yaml create mode 100644 specs/model-core.spec/src/main/scripts/io/aklivity/zilla/specs/model/core/schema/boolean.schema.patch.json create mode 100644 specs/model-core.spec/src/test/java/io/aklivity/zilla/specs/model/core/config/BooleanSchemaTest.java diff --git a/runtime/binding-asyncapi/src/main/java/io/aklivity/zilla/runtime/binding/asyncapi/internal/config/composite/AsyncapiCompositeGenerator.java b/runtime/binding-asyncapi/src/main/java/io/aklivity/zilla/runtime/binding/asyncapi/internal/config/composite/AsyncapiCompositeGenerator.java index 0c14bec9e8..c90a188111 100644 --- a/runtime/binding-asyncapi/src/main/java/io/aklivity/zilla/runtime/binding/asyncapi/internal/config/composite/AsyncapiCompositeGenerator.java +++ b/runtime/binding-asyncapi/src/main/java/io/aklivity/zilla/runtime/binding/asyncapi/internal/config/composite/AsyncapiCompositeGenerator.java @@ -14,6 +14,7 @@ */ package io.aklivity.zilla.runtime.binding.asyncapi.internal.config.composite; +import static java.util.Map.entry; import static org.agrona.LangUtil.rethrowUnchecked; import java.io.StringReader; @@ -60,6 +61,7 @@ import io.aklivity.zilla.runtime.engine.config.ModelConfig; import io.aklivity.zilla.runtime.engine.config.NamespaceConfigBuilder; import io.aklivity.zilla.runtime.model.avro.config.AvroModelConfig; +import io.aklivity.zilla.runtime.model.core.config.BooleanModelConfig; import io.aklivity.zilla.runtime.model.core.config.DoubleModelConfig; import io.aklivity.zilla.runtime.model.core.config.FloatModelConfig; import io.aklivity.zilla.runtime.model.core.config.Int32ModelConfig; @@ -71,30 +73,31 @@ public abstract class AsyncapiCompositeGenerator { - public static final Map MODELS = Map.of( - "string", StringModelConfig.builder().build(), - "string:%s".formatted(StringPattern.DATE.format), + public static final Map MODELS = Map.ofEntries( + entry("boolean", BooleanModelConfig.builder().build()), + entry("integer", Int32ModelConfig.builder().build()), + entry("integer:%s".formatted(Int32ModelConfig.INT_32), + Int32ModelConfig.builder().build()), + entry("integer:%s".formatted(Int64ModelConfig.INT_64), + Int64ModelConfig.builder().build()), + entry("number", FloatModelConfig.builder().build()), + entry("number:%s".formatted(FloatModelConfig.FLOAT), + FloatModelConfig.builder().build()), + entry("number:%s".formatted(DoubleModelConfig.DOUBLE), + DoubleModelConfig.builder().build()), + entry("string", StringModelConfig.builder().build()), + entry("string:%s".formatted(StringPattern.DATE.format), StringModelConfig.builder() .pattern(StringPattern.DATE.pattern) - .build(), - "string:%s".formatted(StringPattern.DATE_TIME.format), + .build()), + entry("string:%s".formatted(StringPattern.DATE_TIME.format), StringModelConfig.builder() .pattern(StringPattern.DATE_TIME.pattern) - .build(), - "string:%s".formatted(StringPattern.EMAIL.format), + .build()), + entry("string:%s".formatted(StringPattern.EMAIL.format), StringModelConfig.builder() .pattern(StringPattern.EMAIL.pattern) - .build(), - "integer", Int32ModelConfig.builder().build(), - "integer:%s".formatted(Int32ModelConfig.INT_32), - Int32ModelConfig.builder().build(), - "integer:%s".formatted(Int64ModelConfig.INT_64), - Int64ModelConfig.builder().build(), - "number", FloatModelConfig.builder().build(), - "number:%s".formatted(FloatModelConfig.FLOAT), - FloatModelConfig.builder().build(), - "number:%s".formatted(DoubleModelConfig.DOUBLE), - DoubleModelConfig.builder().build() + .build()) ); public final AsyncapiCompositeConfig generate( diff --git a/runtime/binding-openapi/src/main/java/io/aklivity/zilla/runtime/binding/openapi/internal/config/composite/OpenapiCompositeGenerator.java b/runtime/binding-openapi/src/main/java/io/aklivity/zilla/runtime/binding/openapi/internal/config/composite/OpenapiCompositeGenerator.java index 994e3e5362..dfb123ddff 100644 --- a/runtime/binding-openapi/src/main/java/io/aklivity/zilla/runtime/binding/openapi/internal/config/composite/OpenapiCompositeGenerator.java +++ b/runtime/binding-openapi/src/main/java/io/aklivity/zilla/runtime/binding/openapi/internal/config/composite/OpenapiCompositeGenerator.java @@ -54,6 +54,7 @@ import io.aklivity.zilla.runtime.engine.config.GuardedConfigBuilder; import io.aklivity.zilla.runtime.engine.config.ModelConfig; import io.aklivity.zilla.runtime.engine.config.NamespaceConfigBuilder; +import io.aklivity.zilla.runtime.model.core.config.BooleanModelConfig; import io.aklivity.zilla.runtime.model.core.config.DoubleModelConfig; import io.aklivity.zilla.runtime.model.core.config.FloatModelConfig; import io.aklivity.zilla.runtime.model.core.config.Int32ModelConfig; @@ -487,6 +488,7 @@ private StringModelConfigBuilder injectStringPattern( } private static final Map MODELS = Map.of( + "boolean", BooleanModelConfig.builder().build(), "integer", Int32ModelConfig.builder().build(), "integer:int32", Int32ModelConfig.builder().build(), "integer:int64", Int64ModelConfig.builder().build(), diff --git a/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/config/BooleanModelConfig.java b/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/config/BooleanModelConfig.java new file mode 100644 index 0000000000..a01347653f --- /dev/null +++ b/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/config/BooleanModelConfig.java @@ -0,0 +1,40 @@ +/* + * Copyright 2021-2024 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. + */ +package io.aklivity.zilla.runtime.model.core.config; + +import java.util.function.Function; + +import io.aklivity.zilla.runtime.engine.config.ModelConfig; + +public class BooleanModelConfig extends ModelConfig +{ + public static final String BOOLEAN = "boolean"; + + public BooleanModelConfig() + { + super(BOOLEAN); + } + + public static BooleanModelConfigBuilder builder( + Function mapper) + { + return new BooleanModelConfigBuilder<>(mapper::apply); + } + + public static BooleanModelConfigBuilder builder() + { + return new BooleanModelConfigBuilder<>(BooleanModelConfig.class::cast); + } +} diff --git a/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/config/BooleanModelConfigBuilder.java b/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/config/BooleanModelConfigBuilder.java new file mode 100644 index 0000000000..3ba4769e78 --- /dev/null +++ b/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/config/BooleanModelConfigBuilder.java @@ -0,0 +1,43 @@ +/* + * Copyright 2021-2024 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. + */ +package io.aklivity.zilla.runtime.model.core.config; + +import java.util.function.Function; + +import io.aklivity.zilla.runtime.engine.config.ConfigBuilder; + +public class BooleanModelConfigBuilder extends ConfigBuilder> +{ + private final Function mapper; + + BooleanModelConfigBuilder( + Function mapper) + { + this.mapper = mapper; + } + + @Override + @SuppressWarnings("unchecked") + protected Class> thisType() + { + return (Class>) getClass(); + } + + @Override + public T build() + { + return mapper.apply(new BooleanModelConfig()); + } +} diff --git a/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/BooleanConverterHandler.java b/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/BooleanConverterHandler.java new file mode 100644 index 0000000000..d6905b13b1 --- /dev/null +++ b/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/BooleanConverterHandler.java @@ -0,0 +1,50 @@ +/* + * Copyright 2021-2024 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. + */ +package io.aklivity.zilla.runtime.model.core.internal; + +import org.agrona.DirectBuffer; + +import io.aklivity.zilla.runtime.engine.EngineContext; +import io.aklivity.zilla.runtime.engine.model.ConverterHandler; +import io.aklivity.zilla.runtime.engine.model.function.ValueConsumer; + +public class BooleanConverterHandler implements ConverterHandler +{ + private final BooleanValidatorHandler handler; + + public BooleanConverterHandler( + EngineContext context) + { + this.handler = new BooleanValidatorHandler(context); + } + + @Override + public int convert( + long traceId, + long bindingId, + DirectBuffer data, + int index, + int length, + ValueConsumer next) + { + boolean valid = handler.validate(traceId, bindingId, FLAGS_COMPLETE, data, index, length, next); + + if (valid) + { + next.accept(data, index, length); + } + return valid ? length : VALIDATION_FAILURE; + } +} diff --git a/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/BooleanModel.java b/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/BooleanModel.java new file mode 100644 index 0000000000..079d905d6e --- /dev/null +++ b/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/BooleanModel.java @@ -0,0 +1,45 @@ +/* + * Copyright 2021-2024 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. + */ +package io.aklivity.zilla.runtime.model.core.internal; + +import java.net.URL; + +import io.aklivity.zilla.runtime.engine.EngineContext; +import io.aklivity.zilla.runtime.engine.model.Model; +import io.aklivity.zilla.runtime.engine.model.ModelContext; + +public class BooleanModel implements Model +{ + public static final String NAME = "boolean"; + + @Override + public String name() + { + return NAME; + } + + @Override + public ModelContext supply( + EngineContext context) + { + return new BooleanModelContext(context); + } + + @Override + public URL type() + { + return getClass().getResource("schema/boolean.schema.patch.json"); + } +} diff --git a/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/BooleanModelContext.java b/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/BooleanModelContext.java new file mode 100644 index 0000000000..340208eb76 --- /dev/null +++ b/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/BooleanModelContext.java @@ -0,0 +1,59 @@ +/* + * Copyright 2021-2024 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. + */ +package io.aklivity.zilla.runtime.model.core.internal; + +import io.aklivity.zilla.runtime.engine.EngineContext; +import io.aklivity.zilla.runtime.engine.config.ModelConfig; +import io.aklivity.zilla.runtime.engine.model.ConverterHandler; +import io.aklivity.zilla.runtime.engine.model.ModelContext; +import io.aklivity.zilla.runtime.engine.model.ValidatorHandler; + +public class BooleanModelContext implements ModelContext +{ + private final EngineContext context; + + public BooleanModelContext( + EngineContext context) + { + this.context = context; + } + + @Override + public ConverterHandler supplyReadConverterHandler( + ModelConfig config) + { + return supply(config); + } + + @Override + public ConverterHandler supplyWriteConverterHandler( + ModelConfig config) + { + return supply(config); + } + + @Override + public ValidatorHandler supplyValidatorHandler( + ModelConfig config) + { + return new BooleanValidatorHandler(context); + } + + private BooleanConverterHandler supply( + ModelConfig config) + { + return new BooleanConverterHandler(context); + } +} diff --git a/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/BooleanModelFactorySpi.java b/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/BooleanModelFactorySpi.java new file mode 100644 index 0000000000..cf3644a56f --- /dev/null +++ b/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/BooleanModelFactorySpi.java @@ -0,0 +1,45 @@ +/* + * Copyright 2021-2024 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. + */ +package io.aklivity.zilla.runtime.model.core.internal; + +import static io.aklivity.zilla.runtime.model.core.internal.BooleanModel.NAME; + +import java.net.URL; + +import io.aklivity.zilla.runtime.engine.Configuration; +import io.aklivity.zilla.runtime.engine.model.Model; +import io.aklivity.zilla.runtime.engine.model.ModelFactorySpi; + +public class BooleanModelFactorySpi implements ModelFactorySpi +{ + @Override + public String type() + { + return NAME; + } + + @Override + public URL schema() + { + return getClass().getResource("schema/boolean.schema.patch.json"); + } + + @Override + public Model create( + Configuration config) + { + return new BooleanModel(); + } +} diff --git a/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/BooleanValidatorHandler.java b/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/BooleanValidatorHandler.java new file mode 100644 index 0000000000..64c0b5aec3 --- /dev/null +++ b/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/BooleanValidatorHandler.java @@ -0,0 +1,61 @@ +/* + * Copyright 2021-2024 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. + */ +package io.aklivity.zilla.runtime.model.core.internal; + +import org.agrona.DirectBuffer; + +import io.aklivity.zilla.runtime.engine.EngineContext; +import io.aklivity.zilla.runtime.engine.model.ValidatorHandler; +import io.aklivity.zilla.runtime.engine.model.function.ValueConsumer; + +public class BooleanValidatorHandler implements ValidatorHandler +{ + private static final byte TRUE = 0x01; + private static final byte FALSE = 0x00; + + private final CoreModelEventContext event; + + public BooleanValidatorHandler( + EngineContext context) + { + this.event = new CoreModelEventContext(context); + } + + @Override + public boolean validate( + long traceId, + long bindingId, + int flags, + DirectBuffer data, + int index, + int length, + ValueConsumer next) + { + boolean valid = false; + + if (length == 1 && (flags & FLAGS_COMPLETE) != 0x00) + { + byte value = data.getByte(index); + valid = value == TRUE || value == FALSE; + } + + if (!valid) + { + event.validationFailure(traceId, bindingId, BooleanModel.NAME); + } + + return valid; + } +} diff --git a/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/config/BooleanModelConfigAdapter.java b/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/config/BooleanModelConfigAdapter.java new file mode 100644 index 0000000000..1028020540 --- /dev/null +++ b/runtime/model-core/src/main/java/io/aklivity/zilla/runtime/model/core/internal/config/BooleanModelConfigAdapter.java @@ -0,0 +1,48 @@ +/* + * Copyright 2021-2024 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. + */ +package io.aklivity.zilla.runtime.model.core.internal.config; + +import static io.aklivity.zilla.runtime.model.core.config.BooleanModelConfig.BOOLEAN; + +import jakarta.json.Json; +import jakarta.json.JsonValue; +import jakarta.json.bind.adapter.JsonbAdapter; + +import io.aklivity.zilla.runtime.engine.config.ModelConfig; +import io.aklivity.zilla.runtime.engine.config.ModelConfigAdapterSpi; +import io.aklivity.zilla.runtime.model.core.config.BooleanModelConfig; + +public class BooleanModelConfigAdapter implements ModelConfigAdapterSpi, JsonbAdapter +{ + @Override + public String type() + { + return BOOLEAN; + } + + @Override + public JsonValue adaptToJson( + ModelConfig options) + { + return Json.createValue(type()); + } + + @Override + public ModelConfig adaptFromJson( + JsonValue value) + { + return BooleanModelConfig.builder().build(); + } +} diff --git a/runtime/model-core/src/main/moditect/module-info.java b/runtime/model-core/src/main/moditect/module-info.java index 47a6dbda5a..7b999af379 100644 --- a/runtime/model-core/src/main/moditect/module-info.java +++ b/runtime/model-core/src/main/moditect/module-info.java @@ -19,14 +19,16 @@ exports io.aklivity.zilla.runtime.model.core.config; provides io.aklivity.zilla.runtime.engine.config.ModelConfigAdapterSpi - with io.aklivity.zilla.runtime.model.core.internal.config.DoubleModelConfigAdapter, + with io.aklivity.zilla.runtime.model.core.internal.config.BooleanModelConfigAdapter, + io.aklivity.zilla.runtime.model.core.internal.config.DoubleModelConfigAdapter, io.aklivity.zilla.runtime.model.core.internal.config.FloatModelConfigAdapter, io.aklivity.zilla.runtime.model.core.internal.config.Int32ModelConfigAdapter, io.aklivity.zilla.runtime.model.core.internal.config.Int64ModelConfigAdapter, io.aklivity.zilla.runtime.model.core.internal.config.StringModelConfigAdapter; provides io.aklivity.zilla.runtime.engine.model.ModelFactorySpi - with io.aklivity.zilla.runtime.model.core.internal.DoubleModelFactorySpi, + with io.aklivity.zilla.runtime.model.core.internal.BooleanModelFactorySpi, + io.aklivity.zilla.runtime.model.core.internal.DoubleModelFactorySpi, io.aklivity.zilla.runtime.model.core.internal.FloatModelFactorySpi, io.aklivity.zilla.runtime.model.core.internal.Int32ModelFactorySpi, io.aklivity.zilla.runtime.model.core.internal.Int64ModelFactorySpi, diff --git a/runtime/model-core/src/main/resources/META-INF/services/io.aklivity.zilla.runtime.engine.config.ModelConfigAdapterSpi b/runtime/model-core/src/main/resources/META-INF/services/io.aklivity.zilla.runtime.engine.config.ModelConfigAdapterSpi index 0a87b2a200..d33ceda88b 100644 --- a/runtime/model-core/src/main/resources/META-INF/services/io.aklivity.zilla.runtime.engine.config.ModelConfigAdapterSpi +++ b/runtime/model-core/src/main/resources/META-INF/services/io.aklivity.zilla.runtime.engine.config.ModelConfigAdapterSpi @@ -1,3 +1,4 @@ +io.aklivity.zilla.runtime.model.core.internal.config.BooleanModelConfigAdapter io.aklivity.zilla.runtime.model.core.internal.config.DoubleModelConfigAdapter io.aklivity.zilla.runtime.model.core.internal.config.FloatModelConfigAdapter io.aklivity.zilla.runtime.model.core.internal.config.Int32ModelConfigAdapter diff --git a/runtime/model-core/src/main/resources/META-INF/services/io.aklivity.zilla.runtime.engine.model.ModelFactorySpi b/runtime/model-core/src/main/resources/META-INF/services/io.aklivity.zilla.runtime.engine.model.ModelFactorySpi index 0ad9443893..459f540dc2 100644 --- a/runtime/model-core/src/main/resources/META-INF/services/io.aklivity.zilla.runtime.engine.model.ModelFactorySpi +++ b/runtime/model-core/src/main/resources/META-INF/services/io.aklivity.zilla.runtime.engine.model.ModelFactorySpi @@ -1,3 +1,4 @@ +io.aklivity.zilla.runtime.model.core.internal.BooleanModelFactorySpi io.aklivity.zilla.runtime.model.core.internal.DoubleModelFactorySpi io.aklivity.zilla.runtime.model.core.internal.FloatModelFactorySpi io.aklivity.zilla.runtime.model.core.internal.Int32ModelFactorySpi diff --git a/runtime/model-core/src/test/java/io/aklivity/zilla/runtime/model/core/internal/BooleanModelFactoryTest.java b/runtime/model-core/src/test/java/io/aklivity/zilla/runtime/model/core/internal/BooleanModelFactoryTest.java new file mode 100644 index 0000000000..c5a79ce78a --- /dev/null +++ b/runtime/model-core/src/test/java/io/aklivity/zilla/runtime/model/core/internal/BooleanModelFactoryTest.java @@ -0,0 +1,49 @@ +/* + * Copyright 2021-2024 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. + */ +package io.aklivity.zilla.runtime.model.core.internal; + +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.Mockito.mock; + +import org.junit.Test; + +import io.aklivity.zilla.runtime.engine.Configuration; +import io.aklivity.zilla.runtime.engine.EngineContext; +import io.aklivity.zilla.runtime.engine.config.ModelConfig; +import io.aklivity.zilla.runtime.engine.model.Model; +import io.aklivity.zilla.runtime.engine.model.ModelContext; +import io.aklivity.zilla.runtime.engine.model.ModelFactory; +import io.aklivity.zilla.runtime.model.core.config.BooleanModelConfig; + +public class BooleanModelFactoryTest +{ + @Test + public void shouldCreateReader() + { + Configuration config = new Configuration(); + ModelFactory factory = ModelFactory.instantiate(); + Model model = factory.create("boolean", config); + + ModelContext context = new BooleanModelContext(mock(EngineContext.class)); + + ModelConfig modelConfig = BooleanModelConfig.builder().build(); + + assertThat(model, instanceOf(BooleanModel.class)); + assertThat(context.supplyReadConverterHandler(modelConfig), instanceOf(BooleanConverterHandler.class)); + assertThat(context.supplyWriteConverterHandler(modelConfig), instanceOf(BooleanConverterHandler.class)); + assertThat(context.supplyValidatorHandler(modelConfig), instanceOf(BooleanValidatorHandler.class)); + } +} diff --git a/runtime/model-core/src/test/java/io/aklivity/zilla/runtime/model/core/internal/BooleanValidatorTest.java b/runtime/model-core/src/test/java/io/aklivity/zilla/runtime/model/core/internal/BooleanValidatorTest.java new file mode 100644 index 0000000000..27b27f1d17 --- /dev/null +++ b/runtime/model-core/src/test/java/io/aklivity/zilla/runtime/model/core/internal/BooleanValidatorTest.java @@ -0,0 +1,62 @@ +/* + * Copyright 2021-2024 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. + */ +package io.aklivity.zilla.runtime.model.core.internal; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +import java.time.Clock; + +import org.agrona.DirectBuffer; +import org.agrona.concurrent.UnsafeBuffer; +import org.junit.Test; + +import io.aklivity.zilla.runtime.engine.EngineContext; +import io.aklivity.zilla.runtime.engine.binding.function.MessageConsumer; +import io.aklivity.zilla.runtime.engine.model.ValidatorHandler; +import io.aklivity.zilla.runtime.engine.model.function.ValueConsumer; + +public class BooleanValidatorTest +{ + private final EngineContext context = mock(EngineContext.class); + + @Test + public void shouldValidateBooleanMessage() + { + BooleanValidatorHandler handler = new BooleanValidatorHandler(context); + DirectBuffer data = new UnsafeBuffer(); + + byte[] bytes = {1}; + + data.wrap(bytes); + assertTrue(handler.validate(0L, 0L, ValidatorHandler.FLAGS_COMPLETE, data, 0, data.capacity(), ValueConsumer.NOP)); + } + + @Test + public void shouldRejectBooleanMessage() + { + when(context.clock()).thenReturn(Clock.systemUTC()); + when(context.supplyEventWriter()).thenReturn(mock(MessageConsumer.class)); + BooleanValidatorHandler handler = new BooleanValidatorHandler(context); + DirectBuffer data = new UnsafeBuffer(); + + byte[] bytes = {127, -17, 94, -95, -120, 23, -78, 63}; + + data.wrap(bytes); + assertFalse(handler.validate(0L, 0L, ValidatorHandler.FLAGS_COMPLETE, data, 0, data.capacity(), ValueConsumer.NOP)); + } +} diff --git a/runtime/model-core/src/test/java/io/aklivity/zilla/runtime/model/core/internal/config/BooleanModelConfigAdapterTest.java b/runtime/model-core/src/test/java/io/aklivity/zilla/runtime/model/core/internal/config/BooleanModelConfigAdapterTest.java new file mode 100644 index 0000000000..2e3c736c69 --- /dev/null +++ b/runtime/model-core/src/test/java/io/aklivity/zilla/runtime/model/core/internal/config/BooleanModelConfigAdapterTest.java @@ -0,0 +1,75 @@ +/* + * Copyright 2021-2024 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. + */ +package io.aklivity.zilla.runtime.model.core.internal.config; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.equalTo; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.nullValue; + +import jakarta.json.bind.Jsonb; +import jakarta.json.bind.JsonbBuilder; +import jakarta.json.bind.JsonbConfig; + +import org.junit.Before; +import org.junit.Test; + +import io.aklivity.zilla.runtime.model.core.config.BooleanModelConfig; + +public class BooleanModelConfigAdapterTest +{ + private Jsonb jsonb; + + @Before + public void initJson() + { + JsonbConfig config = new JsonbConfig() + .withAdapters(new BooleanModelConfigAdapter()); + jsonb = JsonbBuilder.create(config); + } + + @Test + public void shouldRead() + { + // GIVEN + String json = + "{" + + "\"model\":\"boolean\"" + + "}"; + + // WHEN + BooleanModelConfig model = jsonb.fromJson(json, BooleanModelConfig.class); + + // THEN + assertThat(model, not(nullValue())); + assertThat(model.model, equalTo("boolean")); + } + + @Test + public void shouldWriteDefault() + { + // GIVEN + String expected = "\"boolean\""; + + BooleanModelConfig model = BooleanModelConfig.builder().build(); + + // WHEN + String actual = jsonb.toJson(model); + + // THEN + assertThat(actual, not(nullValue())); + assertThat(actual, equalTo(expected)); + } +} diff --git a/specs/model-core.spec/src/main/scripts/io/aklivity/zilla/specs/model/core/config/boolean.model.yaml b/specs/model-core.spec/src/main/scripts/io/aklivity/zilla/specs/model/core/config/boolean.model.yaml new file mode 100644 index 0000000000..09ea5a4975 --- /dev/null +++ b/specs/model-core.spec/src/main/scripts/io/aklivity/zilla/specs/model/core/config/boolean.model.yaml @@ -0,0 +1,25 @@ +# +# Copyright 2021-2024 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. +# + +--- +name: test +bindings: + test: + kind: server + type: test + options: + value: + model: boolean + exit: test diff --git a/specs/model-core.spec/src/main/scripts/io/aklivity/zilla/specs/model/core/schema/boolean.schema.patch.json b/specs/model-core.spec/src/main/scripts/io/aklivity/zilla/specs/model/core/schema/boolean.schema.patch.json new file mode 100644 index 0000000000..e85e80d584 --- /dev/null +++ b/specs/model-core.spec/src/main/scripts/io/aklivity/zilla/specs/model/core/schema/boolean.schema.patch.json @@ -0,0 +1,68 @@ +[ + { + "op": "add", + "path": "/$defs/converter/types/enum/-", + "value": "boolean" + }, + { + "op": "add", + "path": "/$defs/converter/model/allOf/-", + "value": + { + "if": + { + "properties": + { + "model": + { + "const": "boolean" + } + } + }, + "then": + { + "properties": + { + "model": + { + "const": "boolean" + } + }, + "additionalProperties": false + } + } + }, + { + "op": "add", + "path": "/$defs/validator/types/enum/-", + "value": "boolean" + }, + { + "op": "add", + "path": "/$defs/validator/model/allOf/-", + "value": + { + "if": + { + "properties": + { + "model": + { + "const": "boolean" + } + } + }, + "then": + { + "properties": + { + "model": + { + "const": "boolean" + } + }, + "additionalProperties": false + } + } + } +] diff --git a/specs/model-core.spec/src/test/java/io/aklivity/zilla/specs/model/core/config/BooleanSchemaTest.java b/specs/model-core.spec/src/test/java/io/aklivity/zilla/specs/model/core/config/BooleanSchemaTest.java new file mode 100644 index 0000000000..952f4418a6 --- /dev/null +++ b/specs/model-core.spec/src/test/java/io/aklivity/zilla/specs/model/core/config/BooleanSchemaTest.java @@ -0,0 +1,43 @@ +/* + * Copyright 2021-2024 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. + */ +package io.aklivity.zilla.specs.model.core.config; + +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.not; +import static org.hamcrest.Matchers.nullValue; + +import jakarta.json.JsonObject; + +import org.junit.Rule; +import org.junit.Test; + +import io.aklivity.zilla.specs.engine.config.ConfigSchemaRule; + +public class BooleanSchemaTest +{ + @Rule + public final ConfigSchemaRule schema = new ConfigSchemaRule() + .schemaPatch("io/aklivity/zilla/specs/engine/schema/binding/test.schema.patch.json") + .schemaPatch("io/aklivity/zilla/specs/model/core/schema/boolean.schema.patch.json") + .configurationRoot("io/aklivity/zilla/specs/model/core/config"); + + @Test + public void shouldValidateCatalog() + { + JsonObject config = schema.validate("boolean.model.yaml"); + + assertThat(config, not(nullValue())); + } +} From bb9436edc26809531c5bf70b8fd296b633689723 Mon Sep 17 00:00:00 2001 From: John Fallows Date: Mon, 24 Feb 2025 08:44:09 -0800 Subject: [PATCH 11/13] Handle TLS Alert.USER_CANCELED then deferred Alert.CLOSE_NOTIFY (#1411) --- .../binding/tls/internal/stream/TlsClientFactory.java | 11 ++++++++--- .../binding/tls/internal/stream/TlsServerFactory.java | 9 +++++++-- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/runtime/binding-tls/src/main/java/io/aklivity/zilla/runtime/binding/tls/internal/stream/TlsClientFactory.java b/runtime/binding-tls/src/main/java/io/aklivity/zilla/runtime/binding/tls/internal/stream/TlsClientFactory.java index 75faf3f403..01dee24f81 100644 --- a/runtime/binding-tls/src/main/java/io/aklivity/zilla/runtime/binding/tls/internal/stream/TlsClientFactory.java +++ b/runtime/binding-tls/src/main/java/io/aklivity/zilla/runtime/binding/tls/internal/stream/TlsClientFactory.java @@ -1911,7 +1911,8 @@ private void encodeNet( { cleanupEncodeSlot(); - if (TlsState.initialClosing(state)) + if (TlsState.initialClosing(state) && + tlsEngine.isOutboundDone()) { doNetEnd(traceId); } @@ -1964,7 +1965,11 @@ private void decodeNet( if (!stream.isPresent()) { doEncodeCloseOutbound(traceId, budgetId); - doNetEnd(traceId); + + if (tlsEngine.isOutboundDone()) + { + doNetEnd(traceId); + } } decoder = decodeIgnoreAll; @@ -2107,7 +2112,7 @@ private void doEncodeWrap( case CLOSED: assert bytesProduced > 0; doAppReset(traceId); - state = TlsState.closingReply(state); + state = TlsState.closingInitial(state); break loop; case OK: assert bytesProduced > 0 || tlsEngine.isInboundDone(); diff --git a/runtime/binding-tls/src/main/java/io/aklivity/zilla/runtime/binding/tls/internal/stream/TlsServerFactory.java b/runtime/binding-tls/src/main/java/io/aklivity/zilla/runtime/binding/tls/internal/stream/TlsServerFactory.java index cd24a4f576..6ba53fb557 100644 --- a/runtime/binding-tls/src/main/java/io/aklivity/zilla/runtime/binding/tls/internal/stream/TlsServerFactory.java +++ b/runtime/binding-tls/src/main/java/io/aklivity/zilla/runtime/binding/tls/internal/stream/TlsServerFactory.java @@ -1565,7 +1565,8 @@ private void encodeNet( { cleanupEncodeSlot(); - if (TlsState.replyClosing(state)) + if (TlsState.replyClosing(state) && + tlsEngine.isOutboundDone()) { doNetEnd(traceId); } @@ -1618,7 +1619,11 @@ private void decodeNet( if (!stream.isPresent()) { doEncodeCloseOutbound(traceId, budgetId); - doNetEnd(traceId); + + if (tlsEngine.isOutboundDone()) + { + doNetEnd(traceId); + } } decoder = decodeIgnoreAll; From d5649db57f5250f488cc85bad374b72a83336f75 Mon Sep 17 00:00:00 2001 From: Akram Yakubov Date: Mon, 24 Feb 2025 21:46:49 +0500 Subject: [PATCH 12/13] Handle double quote in z prefix resources (#1412) --- .../PgsqlKafkaKeyAvroSchemaTemplate.java | 4 +- .../PgsqlKafkaValueAvroSchemaTemplate.java | 4 +- .../stream/PgsqlKafkaProxyFactory.java | 4 +- .../binding/pgsql/parser/PgsqlParser.java | 4 +- .../listener/SqlAlterZtableTopicListener.java | 2 +- .../listener/SqlCreateZfunctionListener.java | 2 +- .../SqlCreateZtableTopicListener.java | 14 +- .../listener/SqlCreateZviewListener.java | 2 +- .../parser/listener/SqlDropListener.java | 2 +- .../{CreateTable.java => CreateZtable.java} | 4 +- .../{TableColumn.java => ZtableColumn.java} | 2 +- .../binding/pgsql/parser/PgsqlParserTest.java | 119 ++++---- .../client.rpt | 261 ++++++++++++++++++ .../server.rpt | 259 +++++++++++++++++ .../client.rpt | 54 ++++ .../server.rpt | 56 ++++ .../risingwave/streams/EffectiveIT.java | 9 + .../binding/risingwave/streams/PgsqlIT.java | 9 + .../macro/RisingwaveCreateZtableMacro.java | 12 +- .../stream/RisingwaveProxyFactory.java | 4 +- .../risingwave/internal/stream/ProxyIT.java | 10 + 21 files changed, 758 insertions(+), 79 deletions(-) rename incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/model/{CreateTable.java => CreateZtable.java} (92%) rename incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/model/{TableColumn.java => ZtableColumn.java} (96%) create mode 100644 incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.double.quote.name/client.rpt create mode 100644 incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.double.quote.name/server.rpt create mode 100644 incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/pgsql/create.ztable.with.double.quote.name/client.rpt create mode 100644 incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/pgsql/create.ztable.with.double.quote.name/server.rpt diff --git a/incubator/binding-pgsql-kafka/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/kafka/internal/schema/PgsqlKafkaKeyAvroSchemaTemplate.java b/incubator/binding-pgsql-kafka/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/kafka/internal/schema/PgsqlKafkaKeyAvroSchemaTemplate.java index a20eeebfb0..56ae3bf9de 100644 --- a/incubator/binding-pgsql-kafka/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/kafka/internal/schema/PgsqlKafkaKeyAvroSchemaTemplate.java +++ b/incubator/binding-pgsql-kafka/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/kafka/internal/schema/PgsqlKafkaKeyAvroSchemaTemplate.java @@ -17,7 +17,7 @@ import java.util.List; import java.util.stream.Collectors; -import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateTable; +import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateZtable; public class PgsqlKafkaKeyAvroSchemaTemplate extends PgsqlKafkaAvroSchemaTemplate { @@ -31,7 +31,7 @@ public PgsqlKafkaKeyAvroSchemaTemplate( public String generate( String database, - CreateTable command) + CreateZtable command) { final String newNamespace = namespace.replace(DATABASE_PLACEHOLDER, database); diff --git a/incubator/binding-pgsql-kafka/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/kafka/internal/schema/PgsqlKafkaValueAvroSchemaTemplate.java b/incubator/binding-pgsql-kafka/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/kafka/internal/schema/PgsqlKafkaValueAvroSchemaTemplate.java index 4fed9421e9..0aea978840 100644 --- a/incubator/binding-pgsql-kafka/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/kafka/internal/schema/PgsqlKafkaValueAvroSchemaTemplate.java +++ b/incubator/binding-pgsql-kafka/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/kafka/internal/schema/PgsqlKafkaValueAvroSchemaTemplate.java @@ -26,7 +26,7 @@ import jakarta.json.JsonValue; import io.aklivity.zilla.runtime.binding.pgsql.parser.model.Alter; -import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateTable; +import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateZtable; public class PgsqlKafkaValueAvroSchemaTemplate extends PgsqlKafkaAvroSchemaTemplate { @@ -39,7 +39,7 @@ public PgsqlKafkaValueAvroSchemaTemplate( } public String generate( - CreateTable command) + CreateZtable command) { final String newNamespace = namespace.replace(DATABASE_PLACEHOLDER, command.schema()); diff --git a/incubator/binding-pgsql-kafka/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/kafka/internal/stream/PgsqlKafkaProxyFactory.java b/incubator/binding-pgsql-kafka/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/kafka/internal/stream/PgsqlKafkaProxyFactory.java index 3d6bbccc59..3314a7f357 100644 --- a/incubator/binding-pgsql-kafka/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/kafka/internal/stream/PgsqlKafkaProxyFactory.java +++ b/incubator/binding-pgsql-kafka/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/kafka/internal/stream/PgsqlKafkaProxyFactory.java @@ -55,7 +55,7 @@ import io.aklivity.zilla.runtime.binding.pgsql.kafka.internal.types.stream.WindowFW; import io.aklivity.zilla.runtime.binding.pgsql.parser.PgsqlParser; import io.aklivity.zilla.runtime.binding.pgsql.parser.model.Alter; -import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateTable; +import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateZtable; import io.aklivity.zilla.runtime.binding.pgsql.parser.model.Drop; import io.aklivity.zilla.runtime.engine.EngineContext; import io.aklivity.zilla.runtime.engine.binding.BindingHandler; @@ -1336,7 +1336,7 @@ private void decodeCreateTopicCommand( } else if (server.commandsProcessed == 0) { - final CreateTable createTopic = parser.parseCreateTable(statement); + final CreateZtable createTopic = parser.parseCreateTable(statement); final String schema = createTopic.schema(); final String topic = createTopic.name(); diff --git a/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/PgsqlParser.java b/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/PgsqlParser.java index 6d35805734..0d60d0078c 100644 --- a/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/PgsqlParser.java +++ b/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/PgsqlParser.java @@ -39,8 +39,8 @@ import io.aklivity.zilla.runtime.binding.pgsql.parser.listener.SqlShowListener; import io.aklivity.zilla.runtime.binding.pgsql.parser.model.Alter; import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateFunction; -import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateTable; import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateZfunction; +import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateZtable; import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateZview; import io.aklivity.zilla.runtime.binding.pgsql.parser.model.Drop; @@ -88,7 +88,7 @@ public String parseCommand( return commandListener.command(); } - public CreateTable parseCreateTable( + public CreateZtable parseCreateTable( String sql) { parser(sql, createTableListener); diff --git a/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/listener/SqlAlterZtableTopicListener.java b/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/listener/SqlAlterZtableTopicListener.java index a51ad3b0b7..565023aec7 100644 --- a/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/listener/SqlAlterZtableTopicListener.java +++ b/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/listener/SqlAlterZtableTopicListener.java @@ -61,7 +61,7 @@ public void enterRoot( public void enterQualified_name( PostgreSqlParser.Qualified_nameContext ctx) { - String text = ctx.getText(); + String text = ctx.getText().replace("\"", ""); String[] split = text.split(SCHEMA_PATTERN); schema = split.length > 1 ? split[0] : PUBLIC_SCHEMA_NAME; name = split.length > 1 ? split[1] : text; diff --git a/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/listener/SqlCreateZfunctionListener.java b/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/listener/SqlCreateZfunctionListener.java index d75c31b56b..fc942acdf9 100644 --- a/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/listener/SqlCreateZfunctionListener.java +++ b/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/listener/SqlCreateZfunctionListener.java @@ -99,7 +99,7 @@ public void enterRoot( public void enterCreatezfunctionstmt( PostgreSqlParser.CreatezfunctionstmtContext ctx) { - String text = ctx.func_name().getText(); + String text = ctx.func_name().getText().replace("\"", ""); String[] split = text.split(SCHEMA_PATTERN); schema = split.length > 1 ? split[0] : PUBLIC_SCHEMA_NAME; name = split.length > 1 ? split[1] : text; diff --git a/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/listener/SqlCreateZtableTopicListener.java b/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/listener/SqlCreateZtableTopicListener.java index 7b81eef3df..307ab446cc 100644 --- a/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/listener/SqlCreateZtableTopicListener.java +++ b/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/listener/SqlCreateZtableTopicListener.java @@ -23,15 +23,15 @@ import io.aklivity.zilla.runtime.binding.pgsql.parser.PostgreSqlParser; import io.aklivity.zilla.runtime.binding.pgsql.parser.PostgreSqlParserBaseListener; -import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateTable; -import io.aklivity.zilla.runtime.binding.pgsql.parser.model.TableColumn; +import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateZtable; +import io.aklivity.zilla.runtime.binding.pgsql.parser.model.ZtableColumn; public class SqlCreateZtableTopicListener extends PostgreSqlParserBaseListener { private static final String PUBLIC_SCHEMA_NAME = "public"; private static final String SCHEMA_PATTERN = "\\."; - private final List columns; + private final List columns; private final Set primaryKeys; private final TokenStream tokens; @@ -46,9 +46,9 @@ public SqlCreateZtableTopicListener( this.tokens = tokens; } - public CreateTable table() + public CreateZtable table() { - return new CreateTable(schema, name, columns, primaryKeys); + return new CreateZtable(schema, name, columns, primaryKeys); } @Override @@ -65,7 +65,7 @@ public void enterRoot( public void enterQualified_name( PostgreSqlParser.Qualified_nameContext ctx) { - String text = ctx.getText(); + String text = ctx.getText().replace("\"", ""); String[] split = text.split(SCHEMA_PATTERN); schema = split.length > 1 ? split[0] : PUBLIC_SCHEMA_NAME; name = split.length > 1 ? split[1] : text; @@ -112,7 +112,7 @@ private void addColumn( constraints.add(tokens.getText(constraint.colconstraintelem()).toUpperCase()); } } - columns.add(new TableColumn(columnName, dataType, constraints)); + columns.add(new ZtableColumn(columnName, dataType, constraints)); } private void addPrimaryKey( diff --git a/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/listener/SqlCreateZviewListener.java b/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/listener/SqlCreateZviewListener.java index 35fd02f513..81835c2de9 100644 --- a/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/listener/SqlCreateZviewListener.java +++ b/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/listener/SqlCreateZviewListener.java @@ -55,7 +55,7 @@ public void enterRoot( public void enterCreatezviewstmt( PostgreSqlParser.CreatezviewstmtContext ctx) { - String text = ctx.create_mv_target().qualified_name().getText(); + String text = ctx.create_mv_target().qualified_name().getText().replace("\"", ""); String[] split = text.split(SCHEMA_PATTERN); schema = split.length > 1 ? split[0] : PUBLIC_SCHEMA_NAME; name = split.length > 1 ? split[1] : text; diff --git a/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/listener/SqlDropListener.java b/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/listener/SqlDropListener.java index 9b736164f3..a9021a6157 100644 --- a/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/listener/SqlDropListener.java +++ b/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/listener/SqlDropListener.java @@ -50,7 +50,7 @@ public void enterDropstmt( { ctx.any_name_list().any_name().forEach(n -> { - String text = n.getText(); + String text = n.getText().replace("\"", ""); String[] split = text.split(SCHEMA_PATTERN); String schema = split.length > 1 ? split[0] : PUBLIC_SCHEMA_NAME; String name = split.length > 1 ? split[1] : text; diff --git a/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/model/CreateTable.java b/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/model/CreateZtable.java similarity index 92% rename from incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/model/CreateTable.java rename to incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/model/CreateZtable.java index 203599010f..1909b20081 100644 --- a/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/model/CreateTable.java +++ b/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/model/CreateZtable.java @@ -17,10 +17,10 @@ import java.util.List; import java.util.Set; -public record CreateTable( +public record CreateZtable( String schema, String name, - List columns, + List columns, Set primaryKeys) { } diff --git a/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/model/TableColumn.java b/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/model/ZtableColumn.java similarity index 96% rename from incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/model/TableColumn.java rename to incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/model/ZtableColumn.java index e4dd1a3ed7..04b96d8587 100644 --- a/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/model/TableColumn.java +++ b/incubator/binding-pgsql/src/main/java/io/aklivity/zilla/runtime/binding/pgsql/parser/model/ZtableColumn.java @@ -16,7 +16,7 @@ import java.util.List; -public record TableColumn( +public record ZtableColumn( String name, String type, List constraints) diff --git a/incubator/binding-pgsql/src/test/java/io/aklivity/zilla/runtime/binding/pgsql/parser/PgsqlParserTest.java b/incubator/binding-pgsql/src/test/java/io/aklivity/zilla/runtime/binding/pgsql/parser/PgsqlParserTest.java index bfcb952b4d..bef3b11dc6 100644 --- a/incubator/binding-pgsql/src/test/java/io/aklivity/zilla/runtime/binding/pgsql/parser/PgsqlParserTest.java +++ b/incubator/binding-pgsql/src/test/java/io/aklivity/zilla/runtime/binding/pgsql/parser/PgsqlParserTest.java @@ -26,8 +26,8 @@ import io.aklivity.zilla.runtime.binding.pgsql.parser.model.Alter; import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateFunction; -import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateTable; import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateZfunction; +import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateZtable; import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateZview; import io.aklivity.zilla.runtime.binding.pgsql.parser.model.Drop; import io.aklivity.zilla.runtime.binding.pgsql.parser.model.Operation; @@ -47,10 +47,10 @@ public void setUp() public void shouldCreateZtableWithPrimaryKey() { String sql = "CREATE ZTABLE test (id INT PRIMARY KEY, name VARCHAR(100));"; - CreateTable createTable = parser.parseCreateTable(sql); + CreateZtable createZtable = parser.parseCreateTable(sql); - assertNotNull(createTable); - assertTrue(createTable.primaryKeys().contains("id")); + assertNotNull(createZtable); + assertTrue(createZtable.primaryKeys().contains("id")); } @Test @@ -66,7 +66,7 @@ name VARCHAR(100), PRIMARY KEY (id, name) );"""; - CreateTable table = parser.parseCreateTable(sql); + CreateZtable table = parser.parseCreateTable(sql); assertNotNull(table); assertEquals(2, table.primaryKeys().size()); @@ -75,6 +75,27 @@ PRIMARY KEY (id, name) assertTrue(table.primaryKeys().contains("name")); } + @Test + public void shouldCreateZtableParseWithDoubleQuotedName() + { + String sql = """ + CREATE ZTABLE "example_table" ( + id INT, + name VARCHAR(100), + age INT, + PRIMARY KEY (id, name) + );"""; + + CreateZtable table = parser.parseCreateTable(sql); + + assertNotNull(table); + assertEquals("example_table", table.name()); + assertEquals(2, table.primaryKeys().size()); + assertEquals(3, table.columns().size()); + assertTrue(table.primaryKeys().contains("id")); + assertTrue(table.primaryKeys().contains("name")); + } + @Test public void shouldCreateZtableWithPrimaryKeyAsAggregate() { @@ -85,29 +106,29 @@ name VARCHAR(100), age INT, PRIMARY KEY (id, name) );"""; - CreateTable createTable = parser.parseCreateTable(sql); + CreateZtable createZtable = parser.parseCreateTable(sql); - assertNotNull(createTable); - assertEquals(2, createTable.primaryKeys().size()); - assertEquals(3, createTable.columns().size()); - assertTrue(createTable.primaryKeys().contains("id")); - assertTrue(createTable.primaryKeys().contains("name")); + assertNotNull(createZtable); + assertEquals(2, createZtable.primaryKeys().size()); + assertEquals(3, createZtable.columns().size()); + assertTrue(createZtable.primaryKeys().contains("id")); + assertTrue(createZtable.primaryKeys().contains("name")); } @Test public void shouldCreateTableName() { String sql = "CREATE ZTABLE test (id INT);"; - CreateTable createTable = parser.parseCreateTable(sql); + CreateZtable createZtable = parser.parseCreateTable(sql); - assertEquals("test", createTable.name()); + assertEquals("test", createZtable.name()); } @Test public void shouldCreateZtableNameWithDoublePrecisionTypeField() { String sql = "CREATE ZTABLE test (id DOUBLE PRECISION);"; - CreateTable table = parser.parseCreateTable(sql); + CreateZtable table = parser.parseCreateTable(sql); assertEquals("test", table.name()); assertEquals("DOUBLE PRECISION", table.columns().get(0).type()); } @@ -116,7 +137,7 @@ public void shouldCreateZtableNameWithDoublePrecisionTypeField() public void shouldCreateTableColumns() { String sql = "CREATE ZTABLE test (id INT, name VARCHAR(100));"; - CreateTable table = parser.parseCreateTable(sql); + CreateZtable table = parser.parseCreateTable(sql); assertEquals(2, table.columns().size()); assertEquals("INT", table.columns().get(0).type()); @@ -128,7 +149,7 @@ public void shouldCreateTableColumns() public void shouldParseCreateZtableCompositePrimaryKey() { String sql = "CREATE ZTABLE test (id INT, name VARCHAR(100), PRIMARY KEY (id, name));"; - CreateTable table = parser.parseCreateTable(sql); + CreateZtable table = parser.parseCreateTable(sql); assertEquals(2, table.primaryKeys().size()); assertTrue(table.primaryKeys().contains("id")); @@ -139,19 +160,19 @@ public void shouldParseCreateZtableCompositePrimaryKey() public void shouldHandleEmptyCreateZtable() { String sql = "CREATE ZTABLE test ();"; - CreateTable createTable = parser.parseCreateTable(sql); + CreateZtable createZtable = parser.parseCreateTable(sql); - assertEquals(0, createTable.columns().size()); - assertEquals(0, createTable.primaryKeys().size()); + assertEquals(0, createZtable.columns().size()); + assertEquals(0, createZtable.primaryKeys().size()); } @Test public void shouldHandleEmptySql() { String sql = ""; - CreateTable createTable = parser.parseCreateTable(sql); + CreateZtable createZtable = parser.parseCreateTable(sql); - assertNotNull(createTable); + assertNotNull(createZtable); } @Test @@ -188,9 +209,9 @@ public void shouldHandleInvalidCreateZView() public void shouldHandleInvalidZCreateZtable() { String sql = "CREATE ZTABLE test"; - CreateTable createTable = parser.parseCreateTable(sql); + CreateZtable createZtable = parser.parseCreateTable(sql); - assertNull(createTable.name()); + assertNull(createZtable.name()); } @Test @@ -286,24 +307,24 @@ public void shouldHandleInvalidCreateFunction() public void shouldCreateZtableWithUniqueConstraint() { String sql = "CREATE ZTABLE test (id INT UNIQUE, name VARCHAR(100));"; - CreateTable createTable = parser.parseCreateTable(sql); + CreateZtable createZtable = parser.parseCreateTable(sql); - assertNotNull(createTable); - assertEquals(2, createTable.columns().size()); - assertEquals("id", createTable.columns().get(0).name()); - assertEquals("name", createTable.columns().get(1).name()); + assertNotNull(createZtable); + assertEquals(2, createZtable.columns().size()); + assertEquals("id", createZtable.columns().get(0).name()); + assertEquals("name", createZtable.columns().get(1).name()); } @Test public void shouldParseCreateZtableWithCheckConstraint() { String sql = "CREATE ZTABLE test (id INT, name VARCHAR(100), CHECK (id > 0));"; - CreateTable createTable = parser.parseCreateTable(sql); + CreateZtable createZtable = parser.parseCreateTable(sql); - assertNotNull(createTable); - assertEquals(2, createTable.columns().size()); - assertEquals("id", createTable.columns().get(0).name()); - assertEquals("name", createTable.columns().get(1).name()); + assertNotNull(createZtable); + assertEquals(2, createZtable.columns().size()); + assertEquals("id", createZtable.columns().get(0).name()); + assertEquals("name", createZtable.columns().get(1).name()); } @Test @@ -317,37 +338,37 @@ public void shouldHandleInvalidCreateTableWithMissingColumns() public void shouldCreateZtableWithDefaultValues() { String sql = "CREATE ZTABLE test (id INT DEFAULT 0, name VARCHAR(100));"; - CreateTable createTable = parser.parseCreateTable(sql); + CreateZtable createZtable = parser.parseCreateTable(sql); - assertNotNull(createTable); - assertEquals(2, createTable.columns().size()); - assertEquals("INT", createTable.columns().get(0).type()); - assertEquals("VARCHAR(100)", createTable.columns().get(1).type()); + assertNotNull(createZtable); + assertEquals(2, createZtable.columns().size()); + assertEquals("INT", createZtable.columns().get(0).type()); + assertEquals("VARCHAR(100)", createZtable.columns().get(1).type()); } @Test public void shouldCreateZtableWithNotNullConstraint() { String sql = "CREATE ZTABLE test (id INT NOT NULL, name VARCHAR(100) NOT NULL);"; - CreateTable createTable = parser.parseCreateTable(sql); + CreateZtable createZtable = parser.parseCreateTable(sql); - assertNotNull(createTable); - assertEquals(2, createTable.columns().size()); - assertEquals("id", createTable.columns().get(0).name()); - assertEquals("name", createTable.columns().get(1).name()); + assertNotNull(createZtable); + assertEquals(2, createZtable.columns().size()); + assertEquals("id", createZtable.columns().get(0).name()); + assertEquals("name", createZtable.columns().get(1).name()); } @Test public void shouldCreateZtableWithMultipleConstraints() { String sql = "CREATE ZTABLE test (id INT PRIMARY KEY, name VARCHAR(100) UNIQUE, age INT CHECK (age > 0));"; - CreateTable createTable = parser.parseCreateTable(sql); + CreateZtable createZtable = parser.parseCreateTable(sql); - assertNotNull(createTable); - assertEquals(3, createTable.columns().size()); - assertTrue(createTable.primaryKeys().contains("id")); - assertEquals("name", createTable.columns().get(1).name()); - assertEquals("age", createTable.columns().get(2).name()); + assertNotNull(createZtable); + assertEquals(3, createZtable.columns().size()); + assertTrue(createZtable.primaryKeys().contains("id")); + assertEquals("name", createZtable.columns().get(1).name()); + assertEquals("age", createZtable.columns().get(2).name()); } @Test diff --git a/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.double.quote.name/client.rpt b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.double.quote.name/client.rpt new file mode 100644 index 0000000000..6687ebe106 --- /dev/null +++ b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.double.quote.name/client.rpt @@ -0,0 +1,261 @@ +# +# Copyright 2021-2024 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", "postgres") + .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_source (*)\n" + "WITH (\n" + " connector='kafka',\n" + " properties.bootstrap.server='localhost:9092',\n" + " topic='public.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")) + .completion() + .tag("CREATE_SOURCE") + .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 "CREATE MATERIALIZED VIEW IF NOT EXISTS zb_catalog.cities_view AS SELECT * FROM cities_source;" + [0x00] +write flush + +read advised zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .completion() + .tag("CREATE_MATERIALIZED_VIEW") + .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 "CREATE TABLE IF NOT EXISTS cities " + "(id VARCHAR, name VARCHAR, description VARCHAR, PRIMARY KEY (id));" + [0x00] +write flush + +read advised zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .completion() + .tag("CREATE_TABLE") + .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 "GRANT ALL PRIVILEGES ON TABLE public.cities TO zillabase;" + [0x00] +write flush + +read advised zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .completion() + .tag("GRANT_PRIVILEGES") + .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 "CREATE SINK zb_catalog.cities_view_sink INTO cities FROM zb_catalog.cities_view;" + [0x00] +write flush + +read advised zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .completion() + .tag("CREATE_SINK") + .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 "CREATE SINK zb_catalog.cities_sink\n" + "FROM cities\n" + "WITH (\n" + " connector='kafka',\n" + " properties.bootstrap.server='localhost:9092',\n" + " topic='public.cities',\n" + " primary_key='id'\n" + ") FORMAT UPSERT ENCODE AVRO (\n" + " schema.registry='http://localhost:8081'\n" + ") KEY ENCODE TEXT;" + [0x00] +write flush + +read advised zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .completion() + .tag("CREATE_SINK") + .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 "INSERT INTO zb_catalog.ztables (name, sql) VALUES " + "('cities', 'CREATE ZTABLE IF NOT EXISTS \"cities\" (id VARCHAR, name VARCHAR, description VARCHAR, PRIMARY KEY (id));');" + [0x00] +write flush + +read advised zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .completion() + .tag("INSERT 0 2") + .build() + .build()} + +read advised zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .ready() + .status("IDLE") + .build() + .build()} + +connect "zilla://streams/app1" + option zilla:window 8192 + option zilla:transmission "duplex" + +write zilla:begin.ext ${pgsql:beginEx() + .typeId(zilla:id("pgsql")) + .parameter("user", "zillabase") + .parameter("database", "dev") + .parameter("application_name", "psql") + .parameter("client_encoding", "UTF8") + .build()} + +connected + +connect "zilla://streams/app2" + option zilla:window 8192 + option zilla:transmission "duplex" + +write zilla:begin.ext ${pgsql:beginEx() + .typeId(zilla:id("pgsql")) + .parameter("user", "postgres") + .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, PRIMARY KEY (id));" + [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/create.ztable.with.double.quote.name/server.rpt b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.double.quote.name/server.rpt new file mode 100644 index 0000000000..2242dedbb9 --- /dev/null +++ b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/effective/create.ztable.with.double.quote.name/server.rpt @@ -0,0 +1,259 @@ +# +# Copyright 2021-2024 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", "postgres") + .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_source (*)\n" + "WITH (\n" + " connector='kafka',\n" + " properties.bootstrap.server='localhost:9092',\n" + " topic='public.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")) + .completion() + .tag("CREATE_SOURCE") + .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 "CREATE MATERIALIZED VIEW IF NOT EXISTS zb_catalog.cities_view AS SELECT * FROM cities_source;" + [0x00] + +write advise zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .completion() + .tag("CREATE_MATERIALIZED_VIEW") + .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 "CREATE TABLE IF NOT EXISTS cities " + "(id VARCHAR, name VARCHAR, description VARCHAR, PRIMARY KEY (id));" + [0x00] + +write advise zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .completion() + .tag("CREATE_TABLE") + .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 "GRANT ALL PRIVILEGES ON TABLE public.cities TO zillabase;" + [0x00] + +write advise zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .completion() + .tag("GRANT_PRIVILEGES") + .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 "CREATE SINK zb_catalog.cities_view_sink INTO cities FROM zb_catalog.cities_view;" + [0x00] + +write advise zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .completion() + .tag("CREATE_SINK") + .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 "CREATE SINK zb_catalog.cities_sink\n" + "FROM cities\n" + "WITH (\n" + " connector='kafka',\n" + " properties.bootstrap.server='localhost:9092',\n" + " topic='public.cities',\n" + " primary_key='id'\n" + ") FORMAT UPSERT ENCODE AVRO (\n" + " schema.registry='http://localhost:8081'\n" + ") KEY ENCODE TEXT;" + [0x00] + +write advise zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .completion() + .tag("CREATE_SINK") + .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 "INSERT INTO zb_catalog.ztables (name, sql) VALUES " + "('cities', 'CREATE ZTABLE IF NOT EXISTS \"cities\" (id VARCHAR, name VARCHAR, description VARCHAR, PRIMARY KEY (id));');" + [0x00] + +write advise zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .completion() + .tag("INSERT 0 2") + .build() + .build()} + +write advise zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .ready() + .status("IDLE") + .build() + .build()} + +accepted + +read zilla:begin.ext ${pgsql:beginEx() + .typeId(zilla:id("pgsql")) + .parameter("user", "zillabase") + .parameter("database", "dev") + .parameter("application_name", "psql") + .parameter("client_encoding", "UTF8") + .build()} + +connected + +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", "postgres") + .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, PRIMARY KEY (id));" + [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/create.ztable.with.double.quote.name/client.rpt b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/pgsql/create.ztable.with.double.quote.name/client.rpt new file mode 100644 index 0000000000..27b7739bac --- /dev/null +++ b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/pgsql/create.ztable.with.double.quote.name/client.rpt @@ -0,0 +1,54 @@ +# +# Copyright 2021-2024 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", "zillabase") + .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 ZTABLE IF NOT EXISTS \"cities\" " + "(id VARCHAR, name VARCHAR, description VARCHAR, PRIMARY KEY (id));" + [0x00] + +write flush + +read advised zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .completion() + .tag("CREATE_ZTABLE") + .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/create.ztable.with.double.quote.name/server.rpt b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/pgsql/create.ztable.with.double.quote.name/server.rpt new file mode 100644 index 0000000000..4a7e12b676 --- /dev/null +++ b/incubator/binding-risingwave.spec/src/main/scripts/io/aklivity/zilla/specs/binding/risingwave/streams/pgsql/create.ztable.with.double.quote.name/server.rpt @@ -0,0 +1,56 @@ +# +# Copyright 2021-2024 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", "zillabase") + .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 ZTABLE IF NOT EXISTS \"cities\" " + "(id VARCHAR, name VARCHAR, description VARCHAR, PRIMARY KEY (id));" + [0x00] + +write advise zilla:flush ${pgsql:flushEx() + .typeId(zilla:id("pgsql")) + .completion() + .tag("CREATE_ZTABLE") + .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 fb8aef9429..dc31c26406 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 @@ -46,6 +46,15 @@ public void shouldCreateZtableWithPrimaryKey() throws Exception k3po.finish(); } + @Test + @Specification({ + "${app}/create.ztable.with.double.quote.name/client", + "${app}/create.ztable.with.double.quote.name/server" }) + public void shouldCreateZtableWithDoubleQuoteName() throws Exception + { + k3po.finish(); + } + @Test @Specification({ "${app}/create.zview/client", 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 96b5d93902..d160dc098d 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 @@ -46,6 +46,15 @@ public void shouldCreateZtableWithPrimaryKey() throws Exception k3po.finish(); } + @Test + @Specification({ + "${app}/create.ztable.with.double.quote.name/client", + "${app}/create.ztable.with.double.quote.name/server" }) + public void shouldCreateZtableWithDoubleQuoteName() throws Exception + { + k3po.finish(); + } + @Test @Specification({ "${app}/create.zview/client", diff --git a/incubator/binding-risingwave/src/main/java/io/aklivity/zilla/runtime/binding/risingwave/internal/macro/RisingwaveCreateZtableMacro.java b/incubator/binding-risingwave/src/main/java/io/aklivity/zilla/runtime/binding/risingwave/internal/macro/RisingwaveCreateZtableMacro.java index db624cf55c..b2b7236541 100644 --- a/incubator/binding-risingwave/src/main/java/io/aklivity/zilla/runtime/binding/risingwave/internal/macro/RisingwaveCreateZtableMacro.java +++ b/incubator/binding-risingwave/src/main/java/io/aklivity/zilla/runtime/binding/risingwave/internal/macro/RisingwaveCreateZtableMacro.java @@ -22,8 +22,8 @@ import org.agrona.collections.Object2ObjectHashMap; -import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateTable; -import io.aklivity.zilla.runtime.binding.pgsql.parser.model.TableColumn; +import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateZtable; +import io.aklivity.zilla.runtime.binding.pgsql.parser.model.ZtableColumn; import io.aklivity.zilla.runtime.binding.risingwave.internal.stream.RisingwaveCompletionCommand; import io.aklivity.zilla.runtime.binding.risingwave.internal.types.stream.PgsqlFlushExFW; @@ -47,7 +47,7 @@ public class RisingwaveCreateZtableMacro extends RisingwaveMacroBase private final StringBuilder includeBuilder; private final String systemSchema; private final String user; - private final CreateTable command; + private final CreateZtable command; public RisingwaveCreateZtableMacro( String bootstrapServer, @@ -56,7 +56,7 @@ public RisingwaveCreateZtableMacro( String systemSchema, String user, String sql, - CreateTable command, + CreateZtable command, RisingwaveMacroHandler handler) { super(sql, handler); @@ -163,7 +163,7 @@ public void onStarted( String table = command.name(); includeBuilder.setLength(0); - List includes = command.columns().stream() + List includes = command.columns().stream() .filter(column -> column.constraints().stream() .anyMatch(ZILLA_MAPPINGS::containsKey)) .collect(Collectors.toCollection(ArrayList::new)); @@ -239,7 +239,7 @@ public void onStarted( String name = command.name(); String select = "*"; - List includes = command.columns().stream() + List includes = command.columns().stream() .filter(column -> column.constraints().stream() .anyMatch(ZILLA_MAPPINGS::containsKey)) .collect(Collectors.toCollection(ArrayList::new)); 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 d61492d92c..7e22749c22 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 @@ -39,8 +39,8 @@ import io.aklivity.zilla.runtime.binding.pgsql.parser.PgsqlParser; import io.aklivity.zilla.runtime.binding.pgsql.parser.model.Alter; import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateFunction; -import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateTable; import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateZfunction; +import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateZtable; import io.aklivity.zilla.runtime.binding.pgsql.parser.model.CreateZview; import io.aklivity.zilla.runtime.binding.pgsql.parser.model.Drop; import io.aklivity.zilla.runtime.binding.pgsql.parser.model.Operation; @@ -1692,7 +1692,7 @@ private void decodeCreateZtableCommand( { if (server.macroState == null) { - final CreateTable command = parser.parseCreateTable(statement); + final CreateZtable command = parser.parseCreateTable(statement); RisingwaveBindingConfig binding = server.binding; RisingwaveCreateZtableMacro machine = new RisingwaveCreateZtableMacro( 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 605cd812b1..b8e273440b 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 @@ -59,6 +59,16 @@ public void shouldCreateZtableWithPrimaryKey() throws Exception k3po.finish(); } + @Test + @Configuration("proxy.yaml") + @Specification({ + "${pgsql}/create.ztable.with.double.quote.name/client", + "${effective}/create.ztable.with.double.quote.name/server" }) + public void shouldCreateZtableWithDoubleQuoteName() throws Exception + { + k3po.finish(); + } + @Test @Configuration("proxy.risingwave.yaml") @Specification({ From 55fc145c268e44b26cc618fa1a01fe5b49aaa857 Mon Sep 17 00:00:00 2001 From: John Fallows Date: Mon, 24 Feb 2025 08:49:55 -0800 Subject: [PATCH 13/13] Prepare release 0.9.126 --- CHANGELOG.md | 27 +++++++++++++++++++++ build/flyweight-maven-plugin/pom.xml | 2 +- build/pom.xml | 2 +- cloud/docker-image/pom.xml | 2 +- cloud/helm-chart/pom.xml | 2 +- cloud/pom.xml | 2 +- conf/pom.xml | 2 +- incubator/binding-amqp.spec/pom.xml | 2 +- incubator/binding-amqp/pom.xml | 2 +- incubator/binding-pgsql-kafka.spec/pom.xml | 2 +- incubator/binding-pgsql-kafka/pom.xml | 2 +- incubator/binding-pgsql.spec/pom.xml | 2 +- incubator/binding-pgsql/pom.xml | 2 +- incubator/binding-risingwave.spec/pom.xml | 2 +- incubator/binding-risingwave/pom.xml | 2 +- incubator/command-dump/pom.xml | 2 +- incubator/command-log/pom.xml | 2 +- incubator/command-tune/pom.xml | 2 +- incubator/pom.xml | 2 +- manager/pom.xml | 2 +- pom.xml | 2 +- runtime/binding-asyncapi/pom.xml | 2 +- runtime/binding-echo/pom.xml | 2 +- runtime/binding-fan/pom.xml | 2 +- runtime/binding-filesystem/pom.xml | 2 +- runtime/binding-grpc-kafka/pom.xml | 2 +- runtime/binding-grpc/pom.xml | 2 +- runtime/binding-http-filesystem/pom.xml | 2 +- runtime/binding-http-kafka/pom.xml | 2 +- runtime/binding-http/pom.xml | 2 +- runtime/binding-kafka-grpc/pom.xml | 2 +- runtime/binding-kafka/pom.xml | 2 +- runtime/binding-mqtt-kafka/pom.xml | 2 +- runtime/binding-mqtt/pom.xml | 2 +- runtime/binding-openapi-asyncapi/pom.xml | 2 +- runtime/binding-openapi/pom.xml | 2 +- runtime/binding-proxy/pom.xml | 2 +- runtime/binding-sse-kafka/pom.xml | 2 +- runtime/binding-sse/pom.xml | 2 +- runtime/binding-tcp/pom.xml | 2 +- runtime/binding-tls/pom.xml | 2 +- runtime/binding-ws/pom.xml | 2 +- runtime/catalog-apicurio/pom.xml | 2 +- runtime/catalog-filesystem/pom.xml | 2 +- runtime/catalog-inline/pom.xml | 2 +- runtime/catalog-karapace/pom.xml | 2 +- runtime/catalog-schema-registry/pom.xml | 2 +- runtime/command-metrics/pom.xml | 2 +- runtime/command-start/pom.xml | 2 +- runtime/command-stop/pom.xml | 2 +- runtime/command-version/pom.xml | 2 +- runtime/command/pom.xml | 2 +- runtime/common/pom.xml | 2 +- runtime/engine/pom.xml | 2 +- runtime/exporter-otlp/pom.xml | 2 +- runtime/exporter-prometheus/pom.xml | 2 +- runtime/exporter-stdout/pom.xml | 2 +- runtime/filesystem-http/pom.xml | 2 +- runtime/guard-jwt/pom.xml | 2 +- runtime/metrics-grpc/pom.xml | 2 +- runtime/metrics-http/pom.xml | 2 +- runtime/metrics-stream/pom.xml | 2 +- runtime/model-avro/pom.xml | 2 +- runtime/model-core/pom.xml | 2 +- runtime/model-json/pom.xml | 2 +- runtime/model-protobuf/pom.xml | 2 +- runtime/pom.xml | 2 +- runtime/resolver-env/pom.xml | 2 +- runtime/vault-filesystem/pom.xml | 2 +- specs/binding-asyncapi.spec/pom.xml | 2 +- specs/binding-echo.spec/pom.xml | 2 +- specs/binding-fan.spec/pom.xml | 2 +- specs/binding-filesystem.spec/pom.xml | 2 +- specs/binding-grpc-kafka.spec/pom.xml | 2 +- specs/binding-grpc.spec/pom.xml | 2 +- specs/binding-http-filesystem.spec/pom.xml | 2 +- specs/binding-http-kafka.spec/pom.xml | 2 +- specs/binding-http.spec/pom.xml | 2 +- specs/binding-kafka-grpc.spec/pom.xml | 2 +- specs/binding-kafka.spec/pom.xml | 2 +- specs/binding-mqtt-kafka.spec/pom.xml | 2 +- specs/binding-mqtt.spec/pom.xml | 2 +- specs/binding-openapi-asyncapi.spec/pom.xml | 2 +- specs/binding-openapi.spec/pom.xml | 2 +- specs/binding-proxy.spec/pom.xml | 2 +- specs/binding-sse-kafka.spec/pom.xml | 2 +- specs/binding-sse.spec/pom.xml | 2 +- specs/binding-tcp.spec/pom.xml | 2 +- specs/binding-tls.spec/pom.xml | 2 +- specs/binding-ws.spec/pom.xml | 2 +- specs/catalog-apicurio.spec/pom.xml | 2 +- specs/catalog-filesystem.spec/pom.xml | 2 +- specs/catalog-inline.spec/pom.xml | 2 +- specs/catalog-karapace.spec/pom.xml | 2 +- specs/catalog-schema-registry.spec/pom.xml | 2 +- specs/engine.spec/pom.xml | 2 +- specs/exporter-otlp.spec/pom.xml | 2 +- specs/exporter-prometheus.spec/pom.xml | 2 +- specs/exporter-stdout.spec/pom.xml | 2 +- specs/filesystem-http.spec/pom.xml | 2 +- specs/guard-jwt.spec/pom.xml | 2 +- specs/metrics-grpc.spec/pom.xml | 2 +- specs/metrics-http.spec/pom.xml | 2 +- specs/metrics-stream.spec/pom.xml | 2 +- specs/model-avro.spec/pom.xml | 2 +- specs/model-core.spec/pom.xml | 2 +- specs/model-json.spec/pom.xml | 2 +- specs/model-protobuf.spec/pom.xml | 2 +- specs/pom.xml | 2 +- specs/vault-filesystem.spec/pom.xml | 2 +- 110 files changed, 136 insertions(+), 109 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fcb343780a..901725cdf8 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,32 @@ # Changelog +## [Unreleased](https://github.com/aklivity/zilla/tree/HEAD) + +[Full Changelog](https://github.com/aklivity/zilla/compare/0.9.125...HEAD) + +**Implemented enhancements:** + +- Type boolean possible in schema [\#1408](https://github.com/aklivity/zilla/issues/1408) + +**Fixed bugs:** + +- Java Agent Error while sending Data to Open Telemetry Endpoint \(OTEL Endpoint\) [\#1406](https://github.com/aklivity/zilla/issues/1406) +- Handle double quote when defining the table name in risingwave [\#1379](https://github.com/aklivity/zilla/issues/1379) + +**Merged pull requests:** + +- Handle double quote in z prefix resources [\#1412](https://github.com/aklivity/zilla/pull/1412) ([akrambek](https://github.com/akrambek)) +- Handle TLS Alert.USER\_CANCELED then deferred Alert.CLOSE\_NOTIFY [\#1411](https://github.com/aklivity/zilla/pull/1411) ([jfallows](https://github.com/jfallows)) +- support boolean model [\#1409](https://github.com/aklivity/zilla/pull/1409) ([ankitk-me](https://github.com/ankitk-me)) +- fix: resolveKind flow for composite binding [\#1407](https://github.com/aklivity/zilla/pull/1407) ([ankitk-me](https://github.com/ankitk-me)) +- fix: MQTT subscribe routing [\#1403](https://github.com/aklivity/zilla/pull/1403) ([ankitk-me](https://github.com/ankitk-me)) +- fix: mqtt-kafka routing fix [\#1402](https://github.com/aklivity/zilla/pull/1402) ([ankitk-me](https://github.com/ankitk-me)) +- fix: NPE due to empty Inline Catalog [\#1399](https://github.com/aklivity/zilla/pull/1399) ([ankitk-me](https://github.com/ankitk-me)) +- Append missing system schema to avoid exposing view in show command [\#1398](https://github.com/aklivity/zilla/pull/1398) ([akrambek](https://github.com/akrambek)) +- Bump lycheeverse/lychee-action from 2.2.0 to 2.3.0 [\#1397](https://github.com/aklivity/zilla/pull/1397) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Bump ubuntu from jammy-20240808 to jammy-20250126 in /cloud/docker-image/src/main/docker [\#1393](https://github.com/aklivity/zilla/pull/1393) ([dependabot[bot]](https://github.com/apps/dependabot)) +- Bump alpine from 3.21.0 to 3.21.2 in /cloud/docker-image/src/main/docker [\#1367](https://github.com/aklivity/zilla/pull/1367) ([dependabot[bot]](https://github.com/apps/dependabot)) + ## [0.9.125](https://github.com/aklivity/zilla/tree/0.9.125) (2025-02-05) [Full Changelog](https://github.com/aklivity/zilla/compare/0.9.124...0.9.125) diff --git a/build/flyweight-maven-plugin/pom.xml b/build/flyweight-maven-plugin/pom.xml index 53d3d0dafe..1a5e912885 100644 --- a/build/flyweight-maven-plugin/pom.xml +++ b/build/flyweight-maven-plugin/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla build - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/build/pom.xml b/build/pom.xml index 99a8e7a8fa..96e0d6082e 100644 --- a/build/pom.xml +++ b/build/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla zilla - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/cloud/docker-image/pom.xml b/cloud/docker-image/pom.xml index 589308e460..0bd5f146a3 100644 --- a/cloud/docker-image/pom.xml +++ b/cloud/docker-image/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla cloud - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/cloud/helm-chart/pom.xml b/cloud/helm-chart/pom.xml index 261a9ba6e1..f39102982b 100644 --- a/cloud/helm-chart/pom.xml +++ b/cloud/helm-chart/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla cloud - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/cloud/pom.xml b/cloud/pom.xml index eba77430c6..1eae0708c5 100644 --- a/cloud/pom.xml +++ b/cloud/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla zilla - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/conf/pom.xml b/conf/pom.xml index e7588439ef..6d7789a95c 100644 --- a/conf/pom.xml +++ b/conf/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla zilla - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/incubator/binding-amqp.spec/pom.xml b/incubator/binding-amqp.spec/pom.xml index 1dbfab0cca..dc1f1a1df0 100644 --- a/incubator/binding-amqp.spec/pom.xml +++ b/incubator/binding-amqp.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/incubator/binding-amqp/pom.xml b/incubator/binding-amqp/pom.xml index 6e2783924c..f7428ed841 100644 --- a/incubator/binding-amqp/pom.xml +++ b/incubator/binding-amqp/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/incubator/binding-pgsql-kafka.spec/pom.xml b/incubator/binding-pgsql-kafka.spec/pom.xml index 5c1b672147..66792953bc 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 - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/incubator/binding-pgsql-kafka/pom.xml b/incubator/binding-pgsql-kafka/pom.xml index 95b25beb5f..11575d0820 100644 --- a/incubator/binding-pgsql-kafka/pom.xml +++ b/incubator/binding-pgsql-kafka/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/incubator/binding-pgsql.spec/pom.xml b/incubator/binding-pgsql.spec/pom.xml index 61a77e1923..17a1246e52 100644 --- a/incubator/binding-pgsql.spec/pom.xml +++ b/incubator/binding-pgsql.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/incubator/binding-pgsql/pom.xml b/incubator/binding-pgsql/pom.xml index 4c0cd40a3d..6d25a5a6c2 100644 --- a/incubator/binding-pgsql/pom.xml +++ b/incubator/binding-pgsql/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/incubator/binding-risingwave.spec/pom.xml b/incubator/binding-risingwave.spec/pom.xml index ca30939968..c90a33cda6 100644 --- a/incubator/binding-risingwave.spec/pom.xml +++ b/incubator/binding-risingwave.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/incubator/binding-risingwave/pom.xml b/incubator/binding-risingwave/pom.xml index 40224a7ec0..143400faf0 100644 --- a/incubator/binding-risingwave/pom.xml +++ b/incubator/binding-risingwave/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/incubator/command-dump/pom.xml b/incubator/command-dump/pom.xml index 55f058f16a..a9959975f3 100644 --- a/incubator/command-dump/pom.xml +++ b/incubator/command-dump/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/incubator/command-log/pom.xml b/incubator/command-log/pom.xml index e437bd5ec6..7b18754976 100644 --- a/incubator/command-log/pom.xml +++ b/incubator/command-log/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/incubator/command-tune/pom.xml b/incubator/command-tune/pom.xml index 141259687c..5f4fdb6105 100644 --- a/incubator/command-tune/pom.xml +++ b/incubator/command-tune/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla incubator - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/incubator/pom.xml b/incubator/pom.xml index f45529d387..65118fec83 100644 --- a/incubator/pom.xml +++ b/incubator/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla zilla - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/manager/pom.xml b/manager/pom.xml index c7fd5ef4f3..81313ec7f1 100644 --- a/manager/pom.xml +++ b/manager/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla zilla - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/pom.xml b/pom.xml index 3d0e912ecf..6676529e09 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ 4.0.0 io.aklivity.zilla zilla - develop-SNAPSHOT + 0.9.126 pom zilla https://github.com/aklivity/zilla diff --git a/runtime/binding-asyncapi/pom.xml b/runtime/binding-asyncapi/pom.xml index 365555fd39..e9d9155cca 100644 --- a/runtime/binding-asyncapi/pom.xml +++ b/runtime/binding-asyncapi/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/binding-echo/pom.xml b/runtime/binding-echo/pom.xml index 3a47423d5a..5532df2e79 100644 --- a/runtime/binding-echo/pom.xml +++ b/runtime/binding-echo/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/binding-fan/pom.xml b/runtime/binding-fan/pom.xml index e88d3d6de4..cebe6ed47f 100644 --- a/runtime/binding-fan/pom.xml +++ b/runtime/binding-fan/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/binding-filesystem/pom.xml b/runtime/binding-filesystem/pom.xml index 25d4ae97f8..d38de9df4a 100644 --- a/runtime/binding-filesystem/pom.xml +++ b/runtime/binding-filesystem/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/binding-grpc-kafka/pom.xml b/runtime/binding-grpc-kafka/pom.xml index cebcf678e4..a48e145a18 100644 --- a/runtime/binding-grpc-kafka/pom.xml +++ b/runtime/binding-grpc-kafka/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/binding-grpc/pom.xml b/runtime/binding-grpc/pom.xml index a73bf0271e..e34e1bd088 100644 --- a/runtime/binding-grpc/pom.xml +++ b/runtime/binding-grpc/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/binding-http-filesystem/pom.xml b/runtime/binding-http-filesystem/pom.xml index 7398a08012..1ae27a7022 100644 --- a/runtime/binding-http-filesystem/pom.xml +++ b/runtime/binding-http-filesystem/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/binding-http-kafka/pom.xml b/runtime/binding-http-kafka/pom.xml index 904a2a027f..4a48f51846 100644 --- a/runtime/binding-http-kafka/pom.xml +++ b/runtime/binding-http-kafka/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/binding-http/pom.xml b/runtime/binding-http/pom.xml index 238faec7a1..a4844a146b 100644 --- a/runtime/binding-http/pom.xml +++ b/runtime/binding-http/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/binding-kafka-grpc/pom.xml b/runtime/binding-kafka-grpc/pom.xml index 6d2190e68f..5b475aeb3e 100644 --- a/runtime/binding-kafka-grpc/pom.xml +++ b/runtime/binding-kafka-grpc/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/binding-kafka/pom.xml b/runtime/binding-kafka/pom.xml index bee50a51c7..3532372974 100644 --- a/runtime/binding-kafka/pom.xml +++ b/runtime/binding-kafka/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/binding-mqtt-kafka/pom.xml b/runtime/binding-mqtt-kafka/pom.xml index 5c461f327e..7a987259ce 100644 --- a/runtime/binding-mqtt-kafka/pom.xml +++ b/runtime/binding-mqtt-kafka/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/binding-mqtt/pom.xml b/runtime/binding-mqtt/pom.xml index 1ce005dd67..9226e778ea 100644 --- a/runtime/binding-mqtt/pom.xml +++ b/runtime/binding-mqtt/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/binding-openapi-asyncapi/pom.xml b/runtime/binding-openapi-asyncapi/pom.xml index ab4e193680..e3a8d8d937 100644 --- a/runtime/binding-openapi-asyncapi/pom.xml +++ b/runtime/binding-openapi-asyncapi/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/binding-openapi/pom.xml b/runtime/binding-openapi/pom.xml index eed19b8524..a7dfa7bc73 100644 --- a/runtime/binding-openapi/pom.xml +++ b/runtime/binding-openapi/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/binding-proxy/pom.xml b/runtime/binding-proxy/pom.xml index e55a09fb6a..fdf5944226 100644 --- a/runtime/binding-proxy/pom.xml +++ b/runtime/binding-proxy/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/binding-sse-kafka/pom.xml b/runtime/binding-sse-kafka/pom.xml index dca069639d..0094c6cfd0 100644 --- a/runtime/binding-sse-kafka/pom.xml +++ b/runtime/binding-sse-kafka/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/binding-sse/pom.xml b/runtime/binding-sse/pom.xml index f66588e0a8..2e41670010 100644 --- a/runtime/binding-sse/pom.xml +++ b/runtime/binding-sse/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/binding-tcp/pom.xml b/runtime/binding-tcp/pom.xml index f26574a201..82c262f47c 100644 --- a/runtime/binding-tcp/pom.xml +++ b/runtime/binding-tcp/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/binding-tls/pom.xml b/runtime/binding-tls/pom.xml index 602b6ed554..b7dbe73c29 100644 --- a/runtime/binding-tls/pom.xml +++ b/runtime/binding-tls/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/binding-ws/pom.xml b/runtime/binding-ws/pom.xml index 0018b956cc..8ed5417e13 100644 --- a/runtime/binding-ws/pom.xml +++ b/runtime/binding-ws/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/catalog-apicurio/pom.xml b/runtime/catalog-apicurio/pom.xml index 55d5212fd0..48cf0257cf 100644 --- a/runtime/catalog-apicurio/pom.xml +++ b/runtime/catalog-apicurio/pom.xml @@ -6,7 +6,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/catalog-filesystem/pom.xml b/runtime/catalog-filesystem/pom.xml index fbe0587393..1bbd0532cc 100644 --- a/runtime/catalog-filesystem/pom.xml +++ b/runtime/catalog-filesystem/pom.xml @@ -6,7 +6,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/catalog-inline/pom.xml b/runtime/catalog-inline/pom.xml index 71f8d0daf9..86dba9c59e 100644 --- a/runtime/catalog-inline/pom.xml +++ b/runtime/catalog-inline/pom.xml @@ -6,7 +6,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/catalog-karapace/pom.xml b/runtime/catalog-karapace/pom.xml index f144b9249b..5562a24222 100644 --- a/runtime/catalog-karapace/pom.xml +++ b/runtime/catalog-karapace/pom.xml @@ -6,7 +6,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/catalog-schema-registry/pom.xml b/runtime/catalog-schema-registry/pom.xml index 45d4a09ea8..ccbf5effdc 100644 --- a/runtime/catalog-schema-registry/pom.xml +++ b/runtime/catalog-schema-registry/pom.xml @@ -6,7 +6,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/command-metrics/pom.xml b/runtime/command-metrics/pom.xml index db5bc81d49..5f345de823 100644 --- a/runtime/command-metrics/pom.xml +++ b/runtime/command-metrics/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/command-start/pom.xml b/runtime/command-start/pom.xml index 8ed869e0d7..52f6b72703 100644 --- a/runtime/command-start/pom.xml +++ b/runtime/command-start/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/command-stop/pom.xml b/runtime/command-stop/pom.xml index 76ba8f778f..3c538deab9 100644 --- a/runtime/command-stop/pom.xml +++ b/runtime/command-stop/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/command-version/pom.xml b/runtime/command-version/pom.xml index 36c49192af..53ca45dc88 100644 --- a/runtime/command-version/pom.xml +++ b/runtime/command-version/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/command/pom.xml b/runtime/command/pom.xml index 8163d6fa6c..7342504a88 100644 --- a/runtime/command/pom.xml +++ b/runtime/command/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/common/pom.xml b/runtime/common/pom.xml index 7bcda309e4..5530ab33cc 100644 --- a/runtime/common/pom.xml +++ b/runtime/common/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/engine/pom.xml b/runtime/engine/pom.xml index bf412f219e..cf3af920a9 100644 --- a/runtime/engine/pom.xml +++ b/runtime/engine/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/exporter-otlp/pom.xml b/runtime/exporter-otlp/pom.xml index 5bfaac5e8c..c06bc872b4 100644 --- a/runtime/exporter-otlp/pom.xml +++ b/runtime/exporter-otlp/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/exporter-prometheus/pom.xml b/runtime/exporter-prometheus/pom.xml index b3af26bd40..613656c28b 100644 --- a/runtime/exporter-prometheus/pom.xml +++ b/runtime/exporter-prometheus/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/exporter-stdout/pom.xml b/runtime/exporter-stdout/pom.xml index 6263e5350c..e1667a0a0d 100644 --- a/runtime/exporter-stdout/pom.xml +++ b/runtime/exporter-stdout/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/filesystem-http/pom.xml b/runtime/filesystem-http/pom.xml index f944c54a49..c5ce78ceb3 100644 --- a/runtime/filesystem-http/pom.xml +++ b/runtime/filesystem-http/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/guard-jwt/pom.xml b/runtime/guard-jwt/pom.xml index ebba56e5b5..60ec78b432 100644 --- a/runtime/guard-jwt/pom.xml +++ b/runtime/guard-jwt/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/metrics-grpc/pom.xml b/runtime/metrics-grpc/pom.xml index 310b473e19..0e0e02fd03 100644 --- a/runtime/metrics-grpc/pom.xml +++ b/runtime/metrics-grpc/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/metrics-http/pom.xml b/runtime/metrics-http/pom.xml index 4a27ee2483..5ffb5f87ac 100644 --- a/runtime/metrics-http/pom.xml +++ b/runtime/metrics-http/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/metrics-stream/pom.xml b/runtime/metrics-stream/pom.xml index 6021c37669..5ce4e04808 100644 --- a/runtime/metrics-stream/pom.xml +++ b/runtime/metrics-stream/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/model-avro/pom.xml b/runtime/model-avro/pom.xml index ec7b097e7e..636b72f2d9 100644 --- a/runtime/model-avro/pom.xml +++ b/runtime/model-avro/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/model-core/pom.xml b/runtime/model-core/pom.xml index 406a2f987e..8d794a7786 100644 --- a/runtime/model-core/pom.xml +++ b/runtime/model-core/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/model-json/pom.xml b/runtime/model-json/pom.xml index 8dd5e143b4..d56b7f9e3c 100644 --- a/runtime/model-json/pom.xml +++ b/runtime/model-json/pom.xml @@ -6,7 +6,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/model-protobuf/pom.xml b/runtime/model-protobuf/pom.xml index ec84b5cfd7..a60c85ea70 100644 --- a/runtime/model-protobuf/pom.xml +++ b/runtime/model-protobuf/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/pom.xml b/runtime/pom.xml index d42e0cc398..adc0255433 100644 --- a/runtime/pom.xml +++ b/runtime/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla zilla - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/resolver-env/pom.xml b/runtime/resolver-env/pom.xml index a5c86d1070..407d4c95d5 100644 --- a/runtime/resolver-env/pom.xml +++ b/runtime/resolver-env/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/runtime/vault-filesystem/pom.xml b/runtime/vault-filesystem/pom.xml index a856149b05..c2df6f959f 100644 --- a/runtime/vault-filesystem/pom.xml +++ b/runtime/vault-filesystem/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla runtime - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-asyncapi.spec/pom.xml b/specs/binding-asyncapi.spec/pom.xml index 55fe296472..aaf9039c03 100644 --- a/specs/binding-asyncapi.spec/pom.xml +++ b/specs/binding-asyncapi.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-echo.spec/pom.xml b/specs/binding-echo.spec/pom.xml index 02660f2ad2..d2a767403d 100644 --- a/specs/binding-echo.spec/pom.xml +++ b/specs/binding-echo.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-fan.spec/pom.xml b/specs/binding-fan.spec/pom.xml index 0256388967..b4610c4534 100644 --- a/specs/binding-fan.spec/pom.xml +++ b/specs/binding-fan.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-filesystem.spec/pom.xml b/specs/binding-filesystem.spec/pom.xml index d95e29fbcc..8f0010af27 100644 --- a/specs/binding-filesystem.spec/pom.xml +++ b/specs/binding-filesystem.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-grpc-kafka.spec/pom.xml b/specs/binding-grpc-kafka.spec/pom.xml index 3721a7cfad..83c2274270 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 - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-grpc.spec/pom.xml b/specs/binding-grpc.spec/pom.xml index eaf6d7b1a6..555902befb 100644 --- a/specs/binding-grpc.spec/pom.xml +++ b/specs/binding-grpc.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-http-filesystem.spec/pom.xml b/specs/binding-http-filesystem.spec/pom.xml index e8164f7ab4..22a6b834ff 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 - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-http-kafka.spec/pom.xml b/specs/binding-http-kafka.spec/pom.xml index be894338f9..bc81d7f23e 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 - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-http.spec/pom.xml b/specs/binding-http.spec/pom.xml index 61282d8951..6210423751 100644 --- a/specs/binding-http.spec/pom.xml +++ b/specs/binding-http.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-kafka-grpc.spec/pom.xml b/specs/binding-kafka-grpc.spec/pom.xml index c9ec172761..6508b95d5f 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 - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-kafka.spec/pom.xml b/specs/binding-kafka.spec/pom.xml index 129341bd51..e4bfb171c1 100644 --- a/specs/binding-kafka.spec/pom.xml +++ b/specs/binding-kafka.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-mqtt-kafka.spec/pom.xml b/specs/binding-mqtt-kafka.spec/pom.xml index 2941bcfc83..3a5340536b 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 - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-mqtt.spec/pom.xml b/specs/binding-mqtt.spec/pom.xml index 9f16169b5a..fea94f0f9a 100644 --- a/specs/binding-mqtt.spec/pom.xml +++ b/specs/binding-mqtt.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-openapi-asyncapi.spec/pom.xml b/specs/binding-openapi-asyncapi.spec/pom.xml index a4db3137e7..8359203ed7 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 - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-openapi.spec/pom.xml b/specs/binding-openapi.spec/pom.xml index 7a1c356c94..f9c63c8603 100644 --- a/specs/binding-openapi.spec/pom.xml +++ b/specs/binding-openapi.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-proxy.spec/pom.xml b/specs/binding-proxy.spec/pom.xml index 4408d55147..3a0a156839 100644 --- a/specs/binding-proxy.spec/pom.xml +++ b/specs/binding-proxy.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-sse-kafka.spec/pom.xml b/specs/binding-sse-kafka.spec/pom.xml index b72428eb1b..bf53582a2b 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 - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-sse.spec/pom.xml b/specs/binding-sse.spec/pom.xml index 7079f2e1ae..d761ff33da 100644 --- a/specs/binding-sse.spec/pom.xml +++ b/specs/binding-sse.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-tcp.spec/pom.xml b/specs/binding-tcp.spec/pom.xml index 0c30ded08e..ae95519b4e 100644 --- a/specs/binding-tcp.spec/pom.xml +++ b/specs/binding-tcp.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-tls.spec/pom.xml b/specs/binding-tls.spec/pom.xml index fdc955ef96..203b1b0864 100644 --- a/specs/binding-tls.spec/pom.xml +++ b/specs/binding-tls.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/binding-ws.spec/pom.xml b/specs/binding-ws.spec/pom.xml index 5dc9b1a9b6..06d064055c 100644 --- a/specs/binding-ws.spec/pom.xml +++ b/specs/binding-ws.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/catalog-apicurio.spec/pom.xml b/specs/catalog-apicurio.spec/pom.xml index 444c97efb8..2e226d8a73 100644 --- a/specs/catalog-apicurio.spec/pom.xml +++ b/specs/catalog-apicurio.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/catalog-filesystem.spec/pom.xml b/specs/catalog-filesystem.spec/pom.xml index 3c39bb0d06..ed4004800a 100644 --- a/specs/catalog-filesystem.spec/pom.xml +++ b/specs/catalog-filesystem.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/catalog-inline.spec/pom.xml b/specs/catalog-inline.spec/pom.xml index 8a90f4e4cb..69b91f969c 100644 --- a/specs/catalog-inline.spec/pom.xml +++ b/specs/catalog-inline.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/catalog-karapace.spec/pom.xml b/specs/catalog-karapace.spec/pom.xml index 3e150cf9b4..7059a550e9 100644 --- a/specs/catalog-karapace.spec/pom.xml +++ b/specs/catalog-karapace.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/catalog-schema-registry.spec/pom.xml b/specs/catalog-schema-registry.spec/pom.xml index e822b9989c..df518c37ec 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 - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/engine.spec/pom.xml b/specs/engine.spec/pom.xml index b3b73bb237..178463abf4 100644 --- a/specs/engine.spec/pom.xml +++ b/specs/engine.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/exporter-otlp.spec/pom.xml b/specs/exporter-otlp.spec/pom.xml index 9f5df63979..299259b108 100644 --- a/specs/exporter-otlp.spec/pom.xml +++ b/specs/exporter-otlp.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/exporter-prometheus.spec/pom.xml b/specs/exporter-prometheus.spec/pom.xml index 935f76f3e0..4acba97649 100644 --- a/specs/exporter-prometheus.spec/pom.xml +++ b/specs/exporter-prometheus.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/exporter-stdout.spec/pom.xml b/specs/exporter-stdout.spec/pom.xml index 359074548d..34d50281f0 100644 --- a/specs/exporter-stdout.spec/pom.xml +++ b/specs/exporter-stdout.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/filesystem-http.spec/pom.xml b/specs/filesystem-http.spec/pom.xml index 98bf6f77aa..77ff9c7740 100644 --- a/specs/filesystem-http.spec/pom.xml +++ b/specs/filesystem-http.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/guard-jwt.spec/pom.xml b/specs/guard-jwt.spec/pom.xml index 1c9ee70d5a..caf5c714c0 100644 --- a/specs/guard-jwt.spec/pom.xml +++ b/specs/guard-jwt.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/metrics-grpc.spec/pom.xml b/specs/metrics-grpc.spec/pom.xml index 72a14cd179..c5bc73b972 100644 --- a/specs/metrics-grpc.spec/pom.xml +++ b/specs/metrics-grpc.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/metrics-http.spec/pom.xml b/specs/metrics-http.spec/pom.xml index 292e82a329..e4550c29e2 100644 --- a/specs/metrics-http.spec/pom.xml +++ b/specs/metrics-http.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/metrics-stream.spec/pom.xml b/specs/metrics-stream.spec/pom.xml index bc5ef9c6a0..abea0aa799 100644 --- a/specs/metrics-stream.spec/pom.xml +++ b/specs/metrics-stream.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/model-avro.spec/pom.xml b/specs/model-avro.spec/pom.xml index 3599ba1aa3..9de7404db0 100644 --- a/specs/model-avro.spec/pom.xml +++ b/specs/model-avro.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/model-core.spec/pom.xml b/specs/model-core.spec/pom.xml index 9b5b0b41ec..7c55bbfc91 100644 --- a/specs/model-core.spec/pom.xml +++ b/specs/model-core.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/model-json.spec/pom.xml b/specs/model-json.spec/pom.xml index c7e0a3ab97..efe1c5b1e9 100644 --- a/specs/model-json.spec/pom.xml +++ b/specs/model-json.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/model-protobuf.spec/pom.xml b/specs/model-protobuf.spec/pom.xml index f040110f1d..c3c5d35d1e 100644 --- a/specs/model-protobuf.spec/pom.xml +++ b/specs/model-protobuf.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/pom.xml b/specs/pom.xml index a04ebc5efe..78e4ba4f0e 100644 --- a/specs/pom.xml +++ b/specs/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla zilla - develop-SNAPSHOT + 0.9.126 ../pom.xml diff --git a/specs/vault-filesystem.spec/pom.xml b/specs/vault-filesystem.spec/pom.xml index fbf4dbaad6..a2a0eaa7d6 100644 --- a/specs/vault-filesystem.spec/pom.xml +++ b/specs/vault-filesystem.spec/pom.xml @@ -8,7 +8,7 @@ io.aklivity.zilla specs - develop-SNAPSHOT + 0.9.126 ../pom.xml