mq-bridge-basic 0.4.19__tar.gz → 0.4.20__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.dockerignore +1 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/dependabot.yml +2 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/app.yml +5 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/ci.yml +5 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/docs.yml +13 -9
- mq_bridge_basic-0.4.20/.github/workflows/examples.yml +62 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/AGENTS.md +2 -2
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/CHANGELOG.md +149 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/Cargo.lock +185 -154
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/Cargo.toml +16 -10
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/PKG-INFO +1 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/README.md +17 -9
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/docs/DELIVERY.md +5 -7
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/docs/PLUGINS.md +35 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/docs/REFERENCE.md +18 -1
- mq_bridge_basic-0.4.20/examples/c-library/publish.c +40 -0
- mq_bridge_basic-0.4.20/examples/c-library/smoke.c +371 -0
- mq_bridge_basic-0.4.20/examples/postgres-cdc-to-qdrant/README.md +55 -0
- mq_bridge_basic-0.4.20/examples/postgres-cdc-to-qdrant/docker-compose.yml +53 -0
- mq_bridge_basic-0.4.20/examples/postgres-cdc-to-qdrant/init.sql +11 -0
- mq_bridge_basic-0.4.20/examples/postgres-cdc-to-qdrant/routes.yaml +53 -0
- mq_bridge_basic-0.4.20/examples/postgres-cdc-to-qdrant/search.sh +16 -0
- mq_bridge_basic-0.4.20/examples/postgres-cdc-to-qdrant/test.sh +43 -0
- mq_bridge_basic-0.4.20/examples/transactional-outbox/README.md +49 -0
- mq_bridge_basic-0.4.20/examples/transactional-outbox/consume.sh +6 -0
- mq_bridge_basic-0.4.20/examples/transactional-outbox/docker-compose.yml +38 -0
- mq_bridge_basic-0.4.20/examples/transactional-outbox/init.sql +17 -0
- mq_bridge_basic-0.4.20/examples/transactional-outbox/routes.yaml +17 -0
- mq_bridge_basic-0.4.20/examples/transactional-outbox/test.sh +50 -0
- mq_bridge_basic-0.4.20/include/mq_bridge.h +252 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/mq-bridge.schema.json +45 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/mq_bridge/config.py +2 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/mq_bridge/config.pyi +4 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/examples/IBM_MQ.md +1 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/sync-version.mjs +1 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/amqp.rs +1 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/file/mod.rs +174 -13
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/file/tests.rs +113 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/http/mod.rs +78 -19
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/http/publisher.rs +45 -7
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/http/stream.rs +24 -81
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/http/tests.rs +498 -42
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/http_bulk/consumer.rs +542 -61
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/http_bulk/mod.rs +12 -7
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/http_bulk/presets.rs +53 -3
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/kafka.rs +7 -2
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/mod.rs +139 -11
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/mongodb/mod.rs +0 -16
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/mongodb/readers.rs +3 -54
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/mongodb/tests.rs +40 -12
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/mqtt.rs +1 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/postgres/mod.rs +113 -6
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/sqlx/columns.rs +1 -1
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/sqlx/mod.rs +38 -26
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/sqlx/tests.rs +29 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/websocket.rs +9 -3
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/buffer.rs +119 -18
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/cookie_jar.rs +34 -7
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/dlq.rs +108 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/metrics.rs +71 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/mod.rs +164 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/random_panic.rs +117 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/timeout.rs +51 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/models/builders.rs +261 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/models/tests.rs +98 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/models.rs +25 -3
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/discovery.rs +7 -2
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/mod.rs +79 -6
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/publisher.rs +97 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/crypto_envelope.rs +1 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/mod.rs +10 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/parallel.rs +7 -0
- mq_bridge_basic-0.4.20/src/support/redact.rs +57 -0
- mq_bridge_basic-0.4.20/src/support/sse.rs +74 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/test_utils.rs +3 -0
- mq_bridge_basic-0.4.20/tests/full_plugin_fallback_test.rs +49 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/http.rs +4 -4
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/kafka.rs +11 -6
- mq_bridge_basic-0.4.20/tests/plugin_loading_latch_test.rs +28 -0
- mq_bridge_basic-0.4.19/benches/ETL_BENCHMARKS.md +0 -85
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.cargo/config.toml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.coderabbit.yaml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/benchmark.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/build-node.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/conda.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/ibm-mq.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/node.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/publish-node.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/publish-python.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/python.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/release.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.github/workflows/test-matrix.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.gitignore +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/.justfile +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/CLAUDE.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/CONTRIBUTING.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/LICENSE +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/LICENSE-APACHE +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/LICENSE-APACHE.python +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/LICENSE-MIT +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/LICENSE-MIT.python +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/LICENSE.python +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/SECURITY.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/THIRD_PARTY_LICENSES.txt +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/benches/csv_to_json_bench.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/benches/middleware_expr_bench.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/benches/pack_bench.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/benches/performance_bench.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/benches/router_bench.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/benches/zeromq_backends.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/bindings-common/Cargo.toml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/bindings-common/src/lib.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/bindings-common/src/logging.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/build.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/deny.toml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/docs/ARCHITECTURE.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/docs/CONFIGURATION.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/docs/EXTENDING.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/docs/GRPC.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/docs/THIRD_PARTY_LICENSES.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/docs/assets/copy-demo.png +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/examples/c-plugin/CMakeLists.txt +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/examples/c-plugin/README.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/examples/c-plugin/legacy_ledger.c +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/examples/c-plugin/legacy_ledger.h +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/examples/c-plugin/legacy_parser.c +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/examples/c-plugin/legacy_parser.h +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/examples/c-plugin/minimal.c +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/examples/c-plugin/plugin.c +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/examples/ipc_worker_queue.yaml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/include/cbindgen.toml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/include/mq_bridge_plugin.h +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/include/mq_bridge_plugin_helpers.h +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/llms.txt +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/mq_bridge/__init__.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/mq_bridge/__init__.pyi +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/mq_bridge/plugin_packaging.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/mq_bridge/py.typed +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/package-lock.json +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/pyproject.toml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/Cargo.toml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/LICENSE-APACHE.python +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/LICENSE-MIT.python +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/LICENSE.python +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/README.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/THIRD_PARTY_LICENSES.txt +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/analysis/bench_http_native.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/example.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/examples/bench_memory.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/examples/bench_memory.yaml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/examples/consume_pull.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/examples/dlt_source.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/examples/ibm-mq-input.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/examples/json_route.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/examples/memory.yaml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/examples/raw_route.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/pyproject-basic.toml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/pyproject-reduced.toml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/scripts/gen_config_types.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/src/lib.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/tests/test_config_types.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/tests/test_custom_endpoint.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/tests/test_logging.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/tests/test_packaging.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/tests/test_performance_smoke.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/tests/test_plugin_package.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/tests/test_public_api.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/tests/test_routes.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/tests/test_shutdown.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/python/mq-bridge-py/uv.lock +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/analysis/benches/metadata_bench.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/analysis/debug_ibm_mq_tls.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/analysis/http/analyze_xctrace_time_profile.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/analysis/http/http_flamegraph.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/analysis/http/mq_bridge_http_profile.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/analysis/http/run_http_ladder.sh +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/ci/format_bench_output.sh +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/httparena/README.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/httparena/frameworks/mq-bridge-py/Dockerfile +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/httparena/frameworks/mq-bridge-py/meta.json +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/httparena/frameworks/mq-bridge-py/server.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/httparena/frameworks/mq-bridge-py/templates/fortunes.html +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/mqb-agent.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/techempower/Python/mq-bridge-py/README.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/techempower/Python/mq-bridge-py/benchmark_config.json +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/techempower/Python/mq-bridge-py/mq-bridge-py.dockerfile +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/techempower/Python/mq-bridge-py/server.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/techempower/README.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/techempower/postgres.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/techempower/seed.sql +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/techempower/verify.sh +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/the-benchmarker/README.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/the-benchmarker/python/mq-bridge-py/config.yaml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/the-benchmarker/python/mq-bridge-py/pyproject.toml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/scripts/the-benchmarker/python/mq-bridge-py/server.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/canonical_message.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/checkpoint.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/command_handler.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/config_file.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/aws.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/clickhouse.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/dir_spool/mod.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/dir_spool/tests.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/file/csv_dialect.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/grpc/consumer.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/grpc/dynamic.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/grpc/mod.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/grpc/proto/mqbridge/bridge.proto +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/grpc/publisher.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/grpc/server.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/grpc/tests.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/http_bulk/auth.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/http_bulk/publisher.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/http_bulk/query.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/ibm_mq.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/memory/endpoint.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/memory/framed.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/memory/ipc_unix.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/memory/ipc_windows.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/memory/memory_transport.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/memory/mod.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/memory/transport.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/mongodb/aggregate.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/mongodb/consumer.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/mongodb/dedup.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/mongodb/publisher.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/nats.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/object_store.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/poll.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/postgres/VENDORED.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/postgres/pgoutput/decoder.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/postgres/pgoutput/messages.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/postgres/pgoutput/mod.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/postgres/pgoutput/registry.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/postgres/pgoutput/values.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/postgres/replication.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/postgres/state.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/redis_streams.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/sled.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/sqlx/aggregate.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/sqlx/dedup.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/structural/fanout.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/structural/mod.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/structural/null.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/structural/reader.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/structural/request.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/structural/response.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/structural/sequence.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/structural/static_endpoint.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/structural/stream_buffer.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/structural/switch.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/zeromq/codec.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/zeromq/mod.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/zeromq/omq.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/endpoints/zeromq/zmq.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/errors.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/event_handler.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/event_store.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/extensions.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/lib.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/aggregate/mod.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/aggregate/states.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/aggregate/store.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/aggregate/tests.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/aggregate/writer.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/compression.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/deduplication/memory.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/deduplication.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/deferred_commit.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/delay.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/encryption.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/filter.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/id.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/limiter.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/lookup.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/otel.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/pack.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/raw_json.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/retry.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/transform/coerce.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/transform/compiled.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/transform/error.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/transform/mod.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/transform/path.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/transform/schema.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/transform/tests.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/middleware/weak_join.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/models/defaults.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/models/secrets.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/models/serde_support.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/outcomes.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/completion.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/conformance.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/crash.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/endpoint.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/forward.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/host.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/message.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/middleware.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/sdk.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/plugin/test_support.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/response.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/route.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/shutdown.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/base64_engine.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/change_op.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/compression.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/compression_pool.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/config_schema.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/connection_registry.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/crypto.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/http_status.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/interpolation.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/lookup_batch.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/ndjson.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/pack.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/parquet.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/plugin_abi.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/poll_job.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/source_ranges.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/support/stream_batch.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/traits.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/src/type_handler.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/README.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/armature_integration.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/compat/python/bridge_client.py +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/dedup_store_bench.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/delivery_guarantee_test.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/amqp.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/aws.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/clickhouse.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/config.toml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/amqp.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/aws.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/clickhouse.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/ibm-mq-certs/client.crl +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/ibm-mq-certs/client.kdb +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/ibm-mq-certs/client.p12 +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/ibm-mq-certs/client.rdb +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/ibm-mq-certs/client.sth +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/ibm_mq.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/ibm_mq_tls.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/kafka-tls.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/kafka.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mariadb.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mongodb-replica.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mongodb-tls.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mongodb.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mosquitto.conf +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mosquitto_performance.conf +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mosquitto_persistence.conf +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mq_init.mqsc +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mq_init_tls.mqsc +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mqtt.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mqtt_performance.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/mysql.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/nats.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/object_store.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/postgres.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/postgres_cdc.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/docker-compose/redis.yml +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/file.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/grpc.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/grpc_tls.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/http_tls.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/ibm_mq.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/ibm_mq_tls.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/ipc.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/kafka_tls.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/logic_test.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/mariadb.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/memory.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/mod.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/mongodb.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/mongodb_raw.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/mongodb_tls.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/mqtt.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/mysql.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/nats.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/object_store.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/performance_static.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/postgres.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/postgres_cdc.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/redis_streams.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/route.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/scripts/gen_certs.sh +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/sqlite.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/tls_helpers.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/websocket.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration/zeromq.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/integration_test.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/memory_leak_test.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/otel_test.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/ref_test.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/reference_docs_test.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/sqlite_test.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/tls_example.rs +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/unit_tests.md +0 -0
- {mq_bridge_basic-0.4.19 → mq_bridge_basic-0.4.20}/tests/websocket_test.rs +0 -0
|
@@ -9,7 +9,8 @@ updates:
|
|
|
9
9
|
directory: "/" # Location of package manifests
|
|
10
10
|
target-branch: "dev"
|
|
11
11
|
schedule:
|
|
12
|
-
|
|
12
|
+
# Same cadence as the app workspace below, so the two lockfiles do not drift.
|
|
13
|
+
interval: "weekly"
|
|
13
14
|
groups:
|
|
14
15
|
minor-and-patch:
|
|
15
16
|
applies-to: version-updates
|
|
@@ -51,6 +51,7 @@ jobs:
|
|
|
51
51
|
cache-workspace-crates: true
|
|
52
52
|
|
|
53
53
|
- name: Install system dependencies
|
|
54
|
+
timeout-minutes: 5
|
|
54
55
|
run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev pkg-config zlib1g-dev protobuf-compiler libwebkit2gtk-4.1-dev libappindicator3-dev librsvg2-dev patchelf
|
|
55
56
|
|
|
56
57
|
- name: Test desktop crate
|
|
@@ -116,6 +117,7 @@ jobs:
|
|
|
116
117
|
cache-dependency-path: apps/mq-bridge-app/package-lock.json
|
|
117
118
|
|
|
118
119
|
- name: Install system dependencies
|
|
120
|
+
timeout-minutes: 5
|
|
119
121
|
run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev pkg-config zlib1g-dev protobuf-compiler
|
|
120
122
|
|
|
121
123
|
- name: Install frontend dependencies
|
|
@@ -193,6 +195,7 @@ jobs:
|
|
|
193
195
|
cache-workspace-crates: true
|
|
194
196
|
|
|
195
197
|
- name: Install system dependencies
|
|
198
|
+
timeout-minutes: 5
|
|
196
199
|
run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev pkg-config zlib1g-dev protobuf-compiler
|
|
197
200
|
|
|
198
201
|
- name: Run integration suite
|
|
@@ -224,6 +227,7 @@ jobs:
|
|
|
224
227
|
cache-workspace-crates: true
|
|
225
228
|
|
|
226
229
|
- name: Install system dependencies
|
|
230
|
+
timeout-minutes: 5
|
|
227
231
|
run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev pkg-config zlib1g-dev protobuf-compiler
|
|
228
232
|
|
|
229
233
|
# The test drives the CLI through `env!("CARGO_BIN_EXE_mq-bridge-app")`, an
|
|
@@ -294,6 +298,7 @@ jobs:
|
|
|
294
298
|
chmod +x "$cli" docker-suite/test-binary
|
|
295
299
|
|
|
296
300
|
- name: Install runtime libraries
|
|
301
|
+
timeout-minutes: 5
|
|
297
302
|
run: sudo apt-get update && sudo apt-get install -y libcurl4-openssl-dev libssl-dev zlib1g-dev
|
|
298
303
|
|
|
299
304
|
# The engine's own integration stacks, so there is one definition per
|
|
@@ -120,6 +120,11 @@ jobs:
|
|
|
120
120
|
- name: C plugin header is current and a C plugin loads
|
|
121
121
|
run: cargo test -p mq-bridge-plugin-fixture --test plugin_c_header --test plugin_c_abi
|
|
122
122
|
|
|
123
|
+
- name: C library header is current and a C program links and runs
|
|
124
|
+
run: cargo test -p mq-bridge-c --no-default-features
|
|
125
|
+
env:
|
|
126
|
+
MQB_C_ASAN: "1" # AddressSanitizer; on Linux it also fails on leaks
|
|
127
|
+
|
|
123
128
|
- name: Memory leak soak (route commit-task JoinSet)
|
|
124
129
|
run: cargo test --test memory_leak_test --features=full -- --ignored --nocapture
|
|
125
130
|
|
|
@@ -5,7 +5,7 @@ on:
|
|
|
5
5
|
branches: [main]
|
|
6
6
|
paths:
|
|
7
7
|
- "docs/**"
|
|
8
|
-
- "
|
|
8
|
+
- "llms.txt"
|
|
9
9
|
- "apps/mq-bridge-app/crates/cli/examples/gen_url_docs.rs"
|
|
10
10
|
- ".github/workflows/docs.yml"
|
|
11
11
|
# The benchmark workflow pushes new data to the gh-pages branch; republish the
|
|
@@ -38,14 +38,18 @@ jobs:
|
|
|
38
38
|
mdbook-version: "0.5.4"
|
|
39
39
|
|
|
40
40
|
- name: Vendor engine docs
|
|
41
|
-
run: bash
|
|
41
|
+
run: bash docs/book/sync-engine-docs.sh
|
|
42
42
|
|
|
43
43
|
- name: Build book
|
|
44
|
-
run: mdbook build
|
|
44
|
+
run: mdbook build docs/book
|
|
45
45
|
|
|
46
|
-
#
|
|
47
|
-
- name:
|
|
48
|
-
run:
|
|
46
|
+
# llms.txt lives at the repository root; publish it with the book.
|
|
47
|
+
- name: Publish llms.txt
|
|
48
|
+
run: cp llms.txt docs/book/book/llms.txt
|
|
49
|
+
|
|
50
|
+
# Canonical URLs, meta descriptions, sitemap.xml and llms-full.txt.
|
|
51
|
+
- name: Postprocess book
|
|
52
|
+
run: python3 docs/book/postprocess.py
|
|
49
53
|
|
|
50
54
|
# The benchmark dashboard lives on the gh-pages branch. Copy it into the
|
|
51
55
|
# book so this workflow is the only thing that publishes to Pages.
|
|
@@ -61,8 +65,8 @@ jobs:
|
|
|
61
65
|
run: |
|
|
62
66
|
src=.benchmark-data/dev/bench
|
|
63
67
|
if [ -d "$src" ]; then
|
|
64
|
-
mkdir -p
|
|
65
|
-
cp -R "$src"
|
|
68
|
+
mkdir -p docs/book/book/dev
|
|
69
|
+
cp -R "$src" docs/book/book/dev/bench
|
|
66
70
|
else
|
|
67
71
|
echo "::warning::no benchmark data on gh-pages; /dev/bench/ will be missing"
|
|
68
72
|
fi
|
|
@@ -70,7 +74,7 @@ jobs:
|
|
|
70
74
|
- name: Upload Pages artifact
|
|
71
75
|
uses: actions/upload-pages-artifact@v5
|
|
72
76
|
with:
|
|
73
|
-
path:
|
|
77
|
+
path: docs/book/book
|
|
74
78
|
|
|
75
79
|
deploy:
|
|
76
80
|
name: Deploy to Pages
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
name: Examples
|
|
2
|
+
|
|
3
|
+
# Runs the use-case examples under examples/ the way their READMEs describe.
|
|
4
|
+
on:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
paths:
|
|
8
|
+
- "examples/postgres-cdc-to-qdrant/**"
|
|
9
|
+
- "examples/transactional-outbox/**"
|
|
10
|
+
- "examples/test-without-a-broker/**"
|
|
11
|
+
- ".github/workflows/examples.yml"
|
|
12
|
+
pull_request:
|
|
13
|
+
paths:
|
|
14
|
+
- "examples/postgres-cdc-to-qdrant/**"
|
|
15
|
+
- "examples/transactional-outbox/**"
|
|
16
|
+
- "examples/test-without-a-broker/**"
|
|
17
|
+
- ".github/workflows/examples.yml"
|
|
18
|
+
workflow_dispatch:
|
|
19
|
+
|
|
20
|
+
permissions:
|
|
21
|
+
contents: read
|
|
22
|
+
|
|
23
|
+
concurrency:
|
|
24
|
+
group: examples-${{ github.ref }}
|
|
25
|
+
cancel-in-progress: true
|
|
26
|
+
|
|
27
|
+
jobs:
|
|
28
|
+
docker:
|
|
29
|
+
name: ${{ matrix.example }}
|
|
30
|
+
runs-on: ubuntu-latest
|
|
31
|
+
timeout-minutes: 20
|
|
32
|
+
strategy:
|
|
33
|
+
fail-fast: false
|
|
34
|
+
matrix:
|
|
35
|
+
example: [postgres-cdc-to-qdrant, transactional-outbox]
|
|
36
|
+
steps:
|
|
37
|
+
- uses: actions/checkout@v7
|
|
38
|
+
with:
|
|
39
|
+
persist-credentials: false
|
|
40
|
+
- name: Run the example's smoke test
|
|
41
|
+
working-directory: examples/${{ matrix.example }}
|
|
42
|
+
run: ./test.sh
|
|
43
|
+
|
|
44
|
+
test-without-a-broker:
|
|
45
|
+
name: test-without-a-broker
|
|
46
|
+
runs-on: ubuntu-latest
|
|
47
|
+
timeout-minutes: 20
|
|
48
|
+
steps:
|
|
49
|
+
- uses: actions/checkout@v7
|
|
50
|
+
with:
|
|
51
|
+
persist-credentials: false
|
|
52
|
+
- name: Rust
|
|
53
|
+
working-directory: examples/test-without-a-broker
|
|
54
|
+
run: cargo test --locked
|
|
55
|
+
- uses: actions/setup-python@v7
|
|
56
|
+
with:
|
|
57
|
+
python-version: "3.12"
|
|
58
|
+
- name: Python
|
|
59
|
+
working-directory: examples/test-without-a-broker/python
|
|
60
|
+
run: |
|
|
61
|
+
pip install -r requirements.txt
|
|
62
|
+
pytest -q
|
|
@@ -186,8 +186,8 @@ The grammar and examples are in [CONFIGURATION.md](docs/CONFIGURATION.md).
|
|
|
186
186
|
2. **New middleware**: Add to `middleware/mod.rs`, implement middleware wrapper types
|
|
187
187
|
3. **Configuration changes**: Update `models.rs` with new config structs, add to `EndpointType`/`Middleware` enums
|
|
188
188
|
4. **Tests**: Add integration tests in `tests/integration/`, update Docker Compose if needed
|
|
189
|
-
5. **Documentation**: Update README.md and add doc comments; when middleware or endpoint behaviour changes, also check the book's hand-written pages in `
|
|
189
|
+
5. **Documentation**: Update README.md and add doc comments; when middleware or endpoint behaviour changes, also check the book's hand-written pages in `docs/book/cookbook` and `operations`
|
|
190
190
|
|
|
191
191
|
### Dependencies
|
|
192
192
|
|
|
193
|
-
Dependencies and the feature that gates each optional one are in `Cargo.toml`, with comments explaining the non-obvious choices. The
|
|
193
|
+
Dependencies and the feature that gates each optional one are in `Cargo.toml`, with comments explaining the non-obvious choices. The only default features are `file` and `dir-spool`; an endpoint whose feature is off is served by a registered factory of the same name if there is one (see `plugins/full`).
|
|
@@ -2,6 +2,154 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `mq-bridge`. Newest first.
|
|
4
4
|
|
|
5
|
+
## 0.4.20
|
|
6
|
+
|
|
7
|
+
Kafka outputs publish faster with their default settings. If you depend on `mq-bridge` with
|
|
8
|
+
`default-features = false` and use the `file` or `dir_spool` endpoint, read "Behaviour
|
|
9
|
+
changes" first: both are Cargo features now.
|
|
10
|
+
|
|
11
|
+
### Behaviour changes
|
|
12
|
+
|
|
13
|
+
- **`mqb --ui` listens on `127.0.0.1:9091`, not on `0.0.0.0:9091`.** The UI has no login,
|
|
14
|
+
and the old default put it on the network. The Docker image keeps `0.0.0.0:9091` through
|
|
15
|
+
`ENV MQB_UI_DEFAULT_ADDR`. To reach the UI from another machine, set `ui_addr` in the
|
|
16
|
+
config; a start on such an address logs a warning.
|
|
17
|
+
- **A web UI on a loopback address refuses a request with a foreign `Host` header** (403).
|
|
18
|
+
This stops a web page from reaching the UI through DNS rebinding. Behind a reverse proxy
|
|
19
|
+
or a port forward that sends another host name, list the names in `MQB_UI_ALLOWED_HOSTS`.
|
|
20
|
+
- **`GET /config` of the web UI no longer returns secrets** in any storage mode except
|
|
21
|
+
`unencrypted` and `temporary_messages`. Each secret is shown as a reference to the key it
|
|
22
|
+
is stored under, such as `${MQB__PUBLISHERS__<id>__HTTP__BASIC_AUTH__1}`; a URL keeps
|
|
23
|
+
everything but its password. A save replaces each reference by the stored value, so
|
|
24
|
+
cloning, copying and renaming an endpoint keep its secrets. A reference to a key that is
|
|
25
|
+
not stored is refused with 400. A config exported from the UI holds references, and a
|
|
26
|
+
script that read secrets from this endpoint no longer gets them.
|
|
27
|
+
- **An HTTP output with `tls.required: true` and an `http://` URL fails at start.** It sent
|
|
28
|
+
its requests unencrypted before. An `http://` output to another host that carries
|
|
29
|
+
`basic_auth` or custom headers logs a warning.
|
|
30
|
+
|
|
31
|
+
- **`file` and `dir_spool` are Cargo features: `file` and `dir-spool`.** Both endpoints
|
|
32
|
+
were compiled into every build. They are now in the default features, and in `full` and
|
|
33
|
+
`portable`; `object-store` enables `file`.
|
|
34
|
+
- A dependency with default features, `full` or `portable` builds what it built before.
|
|
35
|
+
- A dependency with `default-features = false` loses both endpoints. A route that names
|
|
36
|
+
one fails at start with `Unsupported consumer endpoint type` (or `publisher`), and code
|
|
37
|
+
that names `endpoints::file` or `endpoints::dir_spool` no longer compiles. To keep them:
|
|
38
|
+
|
|
39
|
+
```toml
|
|
40
|
+
mq-bridge = { version = "0.4", default-features = false, features = ["file", "dir-spool"] }
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
- The config types (`FileConfig`, `DirSpoolConfig`) and the `EndpointType` variants stay
|
|
44
|
+
in every build, so a configuration still parses.
|
|
45
|
+
- `mq-bridge-app`, the Python package and the Node.js package are unchanged; they enable
|
|
46
|
+
both.
|
|
47
|
+
|
|
48
|
+
### Added
|
|
49
|
+
|
|
50
|
+
- **A C library.** The new `c/mq-bridge-c` crate builds `libmq_bridge` (shared and static)
|
|
51
|
+
with the header `include/mq_bridge.h`: messages, publishers (send, batch, request/reply),
|
|
52
|
+
pull consumers with commit and per-batch ack/nack, and routes with handlers, configured
|
|
53
|
+
with the same YAML or JSON as the other bindings. Every call blocks. The header is
|
|
54
|
+
generated and carries no ABI stability promise: it ships with its library, and
|
|
55
|
+
`mqb_api_version()` detects a mismatch. There are no prebuilt archives yet; see
|
|
56
|
+
`c/mq-bridge-c/README.md`.
|
|
57
|
+
- **Plugin tables registered from the host program.** `plugin::register_plugin_table`
|
|
58
|
+
(C: `mqb_register_plugin`) registers an `MqbPluginVTable` that lives in the running
|
|
59
|
+
program, so a C or C++ application defines custom endpoints and middleware without
|
|
60
|
+
building a separate plugin library.
|
|
61
|
+
- **Live status in the CLI, the UI and MCP.** `mqb status` lists every route and consumer that
|
|
62
|
+
any `mqb` process of your user is running on the machine, with state, current and average
|
|
63
|
+
rate, total, pending and uptime. On a terminal it redraws every second; `--no-watch` prints
|
|
64
|
+
once and `--json` prints the records. The
|
|
65
|
+
UI has a **Status** tab with the same rows and the last 60 seconds of each rate, and the MCP
|
|
66
|
+
server has a read-only `bridge_status` tool. `mqb copy` and headless config runs now report
|
|
67
|
+
rates and totals too. Error text stays out of these records unless
|
|
68
|
+
`MQB_STATUS_SHOW_ERRORS=1` is set for both the reporting and the reading process.
|
|
69
|
+
- **`http_bulk` reads an open stream.** `read.stream: sse` or `ndjson` sends one request and
|
|
70
|
+
turns every server-sent event or line of the response into a message, instead of asking
|
|
71
|
+
for pages. An SSE source resumes with `Last-Event-ID` from the last acknowledged event, an
|
|
72
|
+
NDJSON source from a field named by `cursor.item`; both save the position in
|
|
73
|
+
`checkpoint_store` and connect again when the response ends. With a stream,
|
|
74
|
+
`request_timeout_ms` is the longest silence, not the length of the response. This is the
|
|
75
|
+
way to consume a remote SSE feed or a one-response export; the `http` endpoint's
|
|
76
|
+
`receive_streamable` and `stream_response_to` are unchanged.
|
|
77
|
+
- **Named `http_bulk` endpoints from your own crate.** `typesense` and `elasticsearch` are
|
|
78
|
+
`http_bulk` configurations behind a name, and that table was closed.
|
|
79
|
+
`endpoints::http_bulk::register_preset_with(name, schema, resolve)` registers one of your
|
|
80
|
+
own as a `custom` endpoint; `preset_schema`, `preset_base_url` and `preset_segment` are the
|
|
81
|
+
helpers the built-in ones use.
|
|
82
|
+
- **Every built-in endpoint as one plugin library.** The new `plugins/full` crate builds
|
|
83
|
+
`libmq_bridge_full`, which registers a factory for each built-in endpoint under its own
|
|
84
|
+
name. A host compiled without an endpoint's feature and with this library loaded keeps
|
|
85
|
+
using `kafka:`, `file:` and the rest unchanged: a built-in the build has no feature for
|
|
86
|
+
is now served by a factory registered under the same name, and fails as before when there
|
|
87
|
+
is none. The library has its own engine, so `memory` channels, `ref` names and factories
|
|
88
|
+
registered in the host are not shared with the endpoints it creates.
|
|
89
|
+
- **`plugin::disable_plugin_loading()`.** After this call the process opens no plugin
|
|
90
|
+
library any more, neither by path nor by discovery, and there is no way to switch it back
|
|
91
|
+
on. `MQB_PLUGIN_DISCOVERY=0` only covers discovery and has to be set in the environment;
|
|
92
|
+
this is for a host that must rule out native code loaded at runtime.
|
|
93
|
+
- **HTTP input: `header_read_timeout_ms` and `max_body_bytes`.** The first closes an HTTP/1
|
|
94
|
+
connection whose request head is not complete in time, the second sets the largest request
|
|
95
|
+
body, also after decompression (default 256 MiB, as before). The timeout is off by default:
|
|
96
|
+
with `30000` set, a debug build served about 15 to 20 % fewer requests per second on a
|
|
97
|
+
`http` to `response` route. Set it on a listener that is reachable from an untrusted network.
|
|
98
|
+
|
|
99
|
+
### Changed
|
|
100
|
+
|
|
101
|
+
- **CSV files read at their 0.4.15 speed again.** The quote scan that decides where a CSV
|
|
102
|
+
record ends had become about 15% slower in 0.4.16, when it learned to handle a record
|
|
103
|
+
read in pieces. It now jumps from quote to quote instead of visiting every byte, with the
|
|
104
|
+
same result. A 1,000,000-row CSV → JSONL copy on an Apple M1 takes 0.35 s, against 0.41 s
|
|
105
|
+
with 0.4.19.
|
|
106
|
+
- **CSV files and objects are written faster.** A row whose keys follow the header's
|
|
107
|
+
columns, as every row after the first usually does, is written without building a key
|
|
108
|
+
map first, nested objects under `nested: flatten` included. A 1,000,000-row JSONL → CSV
|
|
109
|
+
copy on an Apple M1 takes 1.12 s instead of 1.45 s, and 0.96 s instead of 2.03 s when
|
|
110
|
+
each row flattens a nested object. The output is byte-identical.
|
|
111
|
+
- **`mqb copy --drain` exits within 5 ms of the last row.** It noticed the end of a route by
|
|
112
|
+
polling every 50 ms, which added up to 50 ms to every copy, noticeable on short ones.
|
|
113
|
+
- **Kafka publishing no longer waits 5 ms per batch.** A Kafka output awaits the delivery of
|
|
114
|
+
every batch, and the producer's `linger.ms` of 5 held each batch back for that long before
|
|
115
|
+
sending it. The default is now 1 ms, which still sends a batch as one request per partition.
|
|
116
|
+
With the defaults (`batch_size: 512`, `concurrency: 1`) a local broker took about 71,000
|
|
117
|
+
messages per second instead of 29,000. `delayed_ack: true`, which awaits nothing, keeps
|
|
118
|
+
5 ms; the producer a Kafka input uses for replies also moves to 1 ms. A
|
|
119
|
+
`linger.ms` in `producer_options` overrides the default as before.
|
|
120
|
+
|
|
121
|
+
### Fixed
|
|
122
|
+
|
|
123
|
+
- `mq-bridge-app`: saving a config in `sensitive` or `durable` mode removes the secrets
|
|
124
|
+
that an earlier `balanced` save left in the `.env` file.
|
|
125
|
+
- Desktop app: the list of stored secrets keeps the keys of earlier saves, so "delete
|
|
126
|
+
secrets" also reaches the secret of a renamed or removed endpoint.
|
|
127
|
+
- **Passwords no longer appear in connect logs and error text.** The AMQP and MQTT connect
|
|
128
|
+
lines at INFO printed the broker URL with its password. Errors from the HTTP and WebSocket
|
|
129
|
+
outputs quoted it too. All now show `user:***@host`; the HTTP output's `status()` target
|
|
130
|
+
does the same.
|
|
131
|
+
- **`mqb copy` hides more credentials.** The `copy route started` line now also blanks
|
|
132
|
+
`basic_auth`, `custom_headers`, `headers`, API keys and the credentials of a nested endpoint
|
|
133
|
+
URI (`fanout:?to=…`), percent-encoded or not. Errors about a URI or a middleware spec quote
|
|
134
|
+
it with the same redaction instead of as typed.
|
|
135
|
+
- **`cookie_jar` stores every cookie of a response.** A response with several `Set-Cookie`
|
|
136
|
+
headers left only the last one in the jar. The HTTP output now keeps them all in the
|
|
137
|
+
`set-cookie` metadata, one per line, and an HTTP input that replies with that metadata
|
|
138
|
+
sends one header per line.
|
|
139
|
+
- **HTTP `stream_response_to`: a response that breaks before its first item no longer writes
|
|
140
|
+
to the stream.** The send already failed as retryable, but an error and an end marker went to
|
|
141
|
+
the stream first, so its reader saw a closed stream and a retry refilled it behind the
|
|
142
|
+
reader's back. Now nothing is written until the first item. A response that breaks later is
|
|
143
|
+
unchanged: it ends with an item marked `http_stream_error` and the send is acknowledged.
|
|
144
|
+
- **`postgres_cdc`: a `truncate` event no longer carries `postgres.key`.** It had `[null]`, one
|
|
145
|
+
`null` per key column, which a sink that deletes or upserts by key would take for a row. The
|
|
146
|
+
event keeps a deterministic `message_id`, also on tables without a primary key; that id
|
|
147
|
+
differs from the one earlier versions produced.
|
|
148
|
+
- **A large batch no longer fails a SQL output with an `insert_query`.** A batch that needed
|
|
149
|
+
more bind parameters than the database takes in one statement (65,535 on Postgres) failed
|
|
150
|
+
with `too many arguments for query`. It is now written as several statements in one
|
|
151
|
+
transaction, as `columns: auto` already did.
|
|
152
|
+
|
|
5
153
|
## 0.4.19
|
|
6
154
|
|
|
7
155
|
CSV in more shapes: the reader takes other separators and quoting, and a CSV sink no longer
|
|
@@ -368,7 +516,7 @@ Each of these changes what an existing setup sees. Check them before upgrading.
|
|
|
368
516
|
SOURCE, TARGET and `--filter` of a `copy --resume` job. `reset` prints the old value so
|
|
369
517
|
`set --value` can undo it. Works for SQL, ClickHouse and object-store cursor readers and
|
|
370
518
|
MongoDB change streams; Postgres CDC is refused, its slot is authoritative. See
|
|
371
|
-
[Checkpoints](
|
|
519
|
+
[Checkpoints](docs/book/cookbook/checkpoints.md#inspecting-and-editing-a-checkpoint).
|
|
372
520
|
- **`CheckpointStore::clear`**, implemented for the file, SQL, MongoDB and object-store
|
|
373
521
|
backends. The default returns an error, so existing implementations still compile.
|
|
374
522
|
|