mq-bridge-py-basic 0.4.7__tar.gz → 0.4.8__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_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/.github/workflows/ci.yml +14 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/CHANGELOG.md +70 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/Cargo.lock +76 -179
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/Cargo.toml +15 -8
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/PKG-INFO +1 -1
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/build.rs +15 -2
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/docs/CONFIGURATION.md +16 -4
- mq_bridge_py_basic-0.4.8/docs/GRPC.md +263 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/docs/REFERENCE.md +15 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/mq_bridge/config.pyi +11 -0
- mq_bridge_py_basic-0.4.8/src/endpoints/grpc/consumer.rs +322 -0
- mq_bridge_py_basic-0.4.8/src/endpoints/grpc/dynamic.rs +841 -0
- mq_bridge_py_basic-0.4.8/src/endpoints/grpc/mod.rs +249 -0
- mq_bridge_py_basic-0.4.7/src/endpoints/grpc.proto → mq_bridge_py_basic-0.4.8/src/endpoints/grpc/proto/mqbridge/bridge.proto +11 -8
- mq_bridge_py_basic-0.4.8/src/endpoints/grpc/publisher.rs +254 -0
- mq_bridge_py_basic-0.4.8/src/endpoints/grpc/server.rs +1000 -0
- mq_bridge_py_basic-0.4.8/src/endpoints/grpc/tests.rs +1520 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/http/mod.rs +4 -26
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/http/tests.rs +37 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/mod.rs +1 -3
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/structural/request.rs +292 -1
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/filter.rs +115 -12
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/models/builders.rs +3 -3
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/models/secrets.rs +52 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/models/tests.rs +39 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/models.rs +44 -4
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/route.rs +89 -0
- mq_bridge_py_basic-0.4.8/src/support/compression.rs +309 -0
- mq_bridge_py_basic-0.4.8/src/support/compression_pool.rs +236 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/support/crypto.rs +115 -43
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/support/mod.rs +2 -0
- mq_bridge_py_basic-0.4.8/tests/compat/python/bridge_client.py +68 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/grpc_tls.rs +0 -2
- mq_bridge_py_basic-0.4.7/src/endpoints/grpc.rs +0 -2347
- mq_bridge_py_basic-0.4.7/src/support/compression.rs +0 -179
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/.github/ISSUE_TEMPLATE/bug_report.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/.github/ISSUE_TEMPLATE/feature_request.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/.github/PULL_REQUEST_TEMPLATE.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/.github/dependabot.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/.github/workflows/benchmark.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/.github/workflows/ibm-mq.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/.github/workflows/node.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/.github/workflows/publish-node.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/.github/workflows/publish-python.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/.github/workflows/python.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/.github/workflows/release.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/.github/workflows/test-matrix.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/.gitignore +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/CLAUDE.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/CONTRIBUTING.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/LICENSE +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/LICENSE.python +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/README.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/SECURITY.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/benches/ETL_BENCHMARKS.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/benches/performance_bench.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/benches/router_bench.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/benches/zeromq_backends.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/bindings-common/Cargo.toml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/bindings-common/src/lib.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/bindings-common/src/logging.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/deny.toml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/docs/ARCHITECTURE.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/docs/DELIVERY.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/docs/EXTENDING.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/docs/PLUGINS.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/examples/ipc_worker_queue.yaml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/mq-bridge.schema.json +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/mq_bridge/__init__.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/mq_bridge/__init__.pyi +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/mq_bridge/config.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/mq_bridge/plugin_packaging.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/mq_bridge/py.typed +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/package-lock.json +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/pyproject.toml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/Cargo.toml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/LICENSE.python +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/README.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/analysis/bench_http_native.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/example.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/examples/bench_memory.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/examples/bench_memory.yaml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/examples/consume_pull.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/examples/dlt_source.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/examples/json_route.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/examples/memory.yaml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/examples/raw_route.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/pyproject-basic.toml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/pyproject-reduced.toml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/scripts/gen_config_types.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/src/lib.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/tests/test_config_types.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/tests/test_custom_endpoint.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/tests/test_logging.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/tests/test_packaging.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/tests/test_performance_smoke.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/tests/test_plugin_package.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/tests/test_public_api.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/tests/test_routes.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/python/mq-bridge-py/uv.lock +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/analysis/benches/metadata_bench.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/analysis/debug_ibm_mq_tls.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/analysis/http/analyze_xctrace_time_profile.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/analysis/http/http_flamegraph.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/analysis/http/mq_bridge_http_profile.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/analysis/http/run_http_ladder.sh +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/ci/format_bench_output.sh +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/httparena/README.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/httparena/frameworks/mq-bridge-py/Dockerfile +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/httparena/frameworks/mq-bridge-py/meta.json +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/httparena/frameworks/mq-bridge-py/server.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/techempower/Python/mq-bridge-py/README.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/techempower/Python/mq-bridge-py/benchmark_config.json +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/techempower/Python/mq-bridge-py/mq-bridge-py.dockerfile +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/techempower/Python/mq-bridge-py/server.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/techempower/README.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/techempower/postgres.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/techempower/seed.sql +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/techempower/verify.sh +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/the-benchmarker/README.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/the-benchmarker/python/mq-bridge-py/config.yaml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/the-benchmarker/python/mq-bridge-py/pyproject.toml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/scripts/the-benchmarker/python/mq-bridge-py/server.py +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/canonical_message.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/checkpoint.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/command_handler.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/amqp.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/aws.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/clickhouse.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/file/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/file/tests.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/http/publisher.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/http/stream.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/ibm_mq.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/kafka.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/memory/endpoint.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/memory/framed.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/memory/ipc_unix.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/memory/ipc_windows.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/memory/memory_transport.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/memory/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/memory/transport.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/mongodb/consumer.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/mongodb/dedup.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/mongodb/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/mongodb/publisher.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/mongodb/readers.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/mongodb/tests.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/mqtt.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/nats.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/object_store.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/poll.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/postgres/VENDORED.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/postgres/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/postgres/pgoutput/decoder.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/postgres/pgoutput/messages.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/postgres/pgoutput/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/postgres/pgoutput/registry.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/postgres/pgoutput/values.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/postgres/replication.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/postgres/state.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/redis_streams.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/sled.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/sqlx/dedup.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/sqlx/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/sqlx/tests.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/structural/fanout.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/structural/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/structural/null.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/structural/reader.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/structural/response.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/structural/static_endpoint.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/structural/stream_buffer.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/structural/switch.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/websocket.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/zeromq/codec.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/zeromq/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/zeromq/omq.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/endpoints/zeromq/zmq.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/errors.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/event_handler.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/event_store.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/extensions.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/lib.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/buffer.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/compression.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/cookie_jar.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/deduplication.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/deferred_commit.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/delay.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/dlq.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/encryption.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/id.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/limiter.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/metrics.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/random_panic.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/raw_json.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/retry.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/transform/coerce.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/transform/compiled.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/transform/error.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/transform/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/transform/path.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/transform/schema.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/transform/tests.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/middleware/weak_join.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/models/defaults.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/models/serde_support.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/outcomes.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/plugin/conformance.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/plugin/endpoint.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/plugin/message.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/plugin/middleware.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/plugin/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/plugin/sdk.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/plugin/test_support.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/publisher.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/response.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/support/base64_engine.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/support/connection_registry.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/support/crypto_envelope.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/support/interpolation.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/support/plugin_abi.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/support/source_ranges.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/test_utils.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/traits.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/src/type_handler.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/README.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/armature_integration.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/amqp.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/aws.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/clickhouse.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/config.toml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/amqp.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/aws.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/clickhouse.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/ibm-mq-certs/client.crl +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/ibm-mq-certs/client.kdb +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/ibm-mq-certs/client.p12 +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/ibm-mq-certs/client.rdb +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/ibm-mq-certs/client.sth +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/ibm_mq.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/ibm_mq_tls.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/kafka-tls.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/kafka.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/mariadb.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/mongodb-replica.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/mongodb-tls.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/mongodb.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/mosquitto.conf +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/mosquitto_performance.conf +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/mosquitto_persistence.conf +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/mq_init.mqsc +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/mq_init_tls.mqsc +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/mqtt.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/mqtt_performance.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/mysql.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/nats.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/object_store.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/postgres.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/postgres_cdc.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/docker-compose/redis.yml +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/file.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/grpc.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/http.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/http_tls.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/ibm_mq.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/ibm_mq_tls.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/ipc.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/kafka.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/kafka_tls.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/logic_test.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/mariadb.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/memory.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/mod.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/mongodb.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/mongodb_raw.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/mongodb_tls.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/mqtt.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/mysql.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/nats.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/object_store.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/performance_static.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/postgres.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/postgres_cdc.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/redis_streams.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/route.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/scripts/gen_certs.sh +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/sqlite.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/tls_helpers.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/websocket.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration/zeromq.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/integration_test.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/memory_leak_test.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/ref_test.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/reference_docs_test.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/sqlite_test.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/tls_example.rs +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/unit_tests.md +0 -0
- {mq_bridge_py_basic-0.4.7 → mq_bridge_py_basic-0.4.8}/tests/websocket_test.rs +0 -0
|
@@ -42,6 +42,11 @@ jobs:
|
|
|
42
42
|
- name: Run clippy
|
|
43
43
|
run: cargo clippy --all-targets --all-features -- -D warnings
|
|
44
44
|
|
|
45
|
+
# Not a workspace default member, so nothing else builds it. It pins the
|
|
46
|
+
# exhaustive `GrpcConfig` literal a downstream crate would write.
|
|
47
|
+
- name: Check downstream config-compat fixture
|
|
48
|
+
run: cargo check -p grpc-config-compat
|
|
49
|
+
|
|
45
50
|
# Every feature subset still gets its own `cargo check`, but sequentially in one
|
|
46
51
|
# job: the matrix cost 8 runner slots at the moment integration-build's dependents
|
|
47
52
|
# were starving, and none of this is on the critical path.
|
|
@@ -87,6 +92,15 @@ jobs:
|
|
|
87
92
|
|
|
88
93
|
- name: Cache cargo build
|
|
89
94
|
uses: Swatinem/rust-cache@v2
|
|
95
|
+
|
|
96
|
+
# setup-python provides a non-PEP-668 interpreter; the system python3 on
|
|
97
|
+
# ubuntu-latest is externally managed and rejects a plain pip install.
|
|
98
|
+
- uses: actions/setup-python@v5
|
|
99
|
+
with:
|
|
100
|
+
python-version: '3.12'
|
|
101
|
+
|
|
102
|
+
- name: Install Python gRPC compatibility tools
|
|
103
|
+
run: python3 -m pip install grpcio-tools
|
|
90
104
|
|
|
91
105
|
- name: Run unit tests
|
|
92
106
|
run: cargo test --lib --features=full
|
|
@@ -2,6 +2,76 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to `mq-bridge`. Newest first.
|
|
4
4
|
|
|
5
|
+
## 0.4.8
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
|
|
9
|
+
- **Dynamic gRPC sinks.** The descriptor keys now work on a route's `output` too: a unary method
|
|
10
|
+
makes one call per message and returns the reply as its response, a client-streaming method
|
|
11
|
+
streams a batch into one call. Server-streaming and bidirectional methods, and `request`, are
|
|
12
|
+
rejected there. Status codes that mean "never going to succeed" are non-retryable, so such a
|
|
13
|
+
message is dead-lettered instead of replayed.
|
|
14
|
+
|
|
15
|
+
- **gRPC server reflection, on both sides.** `reflection: true` discovers descriptors from the
|
|
16
|
+
remote server instead of a descriptor file, and server mode hosts reflection v1 and v1alpha,
|
|
17
|
+
so `grpcurl` can introspect an embedded server.
|
|
18
|
+
|
|
19
|
+
- **Metadata and credentials for dynamic gRPC calls.** `metadata`, `binary_metadata`,
|
|
20
|
+
`bearer_token`, and `api_key`/`api_key_name`, sent on the reflection call as well. They never
|
|
21
|
+
appear in errors or logs, and are startup errors on Bridge and server mode rather than a silent
|
|
22
|
+
unauthenticated connection — authenticate that with TLS client certificates.
|
|
23
|
+
|
|
24
|
+
- **Separate gRPC deadlines.** `connect_timeout_ms`, `request_timeout_ms`,
|
|
25
|
+
`idle_stream_timeout_ms` (retryable: the route reconnects), and `overall_timeout_ms` (terminal:
|
|
26
|
+
reconnecting would reset the cap). All default to disabled.
|
|
27
|
+
|
|
28
|
+
- **`descriptor_set_bytes`** passes a compiled gRPC `FileDescriptorSet` straight from embedded
|
|
29
|
+
Rust callers, with no temporary file.
|
|
30
|
+
|
|
31
|
+
- **Provenance on dynamic gRPC responses.** A deterministic id per response, plus `grpc.service`,
|
|
32
|
+
`grpc.method`, `grpc.response_index`, and `grpc.ack_guarantee=none` metadata.
|
|
33
|
+
|
|
34
|
+
- **[docs/GRPC.md](docs/GRPC.md).** The full gRPC guide, including why a generic
|
|
35
|
+
descriptor-driven server is intentionally not implemented. The Bridge contract moved to
|
|
36
|
+
`src/endpoints/grpc/proto/mqbridge/bridge.proto`, unchanged on the wire, and CI now checks a
|
|
37
|
+
generated Python client against server mode.
|
|
38
|
+
|
|
39
|
+
### Changed
|
|
40
|
+
|
|
41
|
+
- **Adding the dedicated gRPC deadline fields is a breaking Rust API change for exhaustive
|
|
42
|
+
`GrpcConfig` struct literals.** Downstream Rust callers must specify the new fields or use
|
|
43
|
+
`..Default::default()` / `GrpcConfig::new`. A downstream compile fixture now locks the complete
|
|
44
|
+
literal shape so future additions cannot make this break silently.
|
|
45
|
+
|
|
46
|
+
- **gRPC `bearer_token` and `api_key` now require an `https://` endpoint.** A credential sent over
|
|
47
|
+
plaintext h2c is rejected rather than put on the wire in the clear. Deployments that terminated
|
|
48
|
+
TLS at a sidecar and spoke plaintext gRPC to it must point the endpoint at `https://`.
|
|
49
|
+
|
|
50
|
+
- **The gRPC endpoint's `timeout_ms` and `server_streaming` are deprecated but still accepted.**
|
|
51
|
+
`timeout_ms` stays the fallback for connection and request setup; it no longer bounds a dynamic
|
|
52
|
+
stream, which needs the dedicated keys. RPC shape comes from the descriptor, so a disagreeing
|
|
53
|
+
`server_streaming` warns instead of failing startup.
|
|
54
|
+
|
|
55
|
+
- **gRPC descriptor keys on an `output` select the dynamic publisher.** They were previously
|
|
56
|
+
ignored there and the Bridge publisher was used.
|
|
57
|
+
|
|
58
|
+
- **gRPC failures preserve code, message, and trailing metadata** in a `GrpcStatusError`. Its
|
|
59
|
+
`Display`/`Debug` omit trailer values so a peer's credentials cannot leak into logs.
|
|
60
|
+
|
|
61
|
+
- **Filtering and structural forwarding retain bulk writes where possible.** An input `filter`
|
|
62
|
+
now reads additional full source batches after dropping rows until it refills the requested
|
|
63
|
+
batch size; a naturally short source batch remains a flush boundary so live routes do not
|
|
64
|
+
wait indefinitely. A `request` still performs its request/reply calls individually and
|
|
65
|
+
concurrently, unless its `to` endpoint requires ordered publishing; ordered requests run one
|
|
66
|
+
at a time. Results are restored to input order and responses plus error fallbacks are sent to
|
|
67
|
+
`forward_to` in one `send_batch` call. Batch-capable destinations such as MongoDB can
|
|
68
|
+
therefore continue using `insert_many` through both paths.
|
|
69
|
+
|
|
70
|
+
- **Buffered concurrent routes warn that destination order is not guaranteed.** Buffering
|
|
71
|
+
preserves order within each batch, but with route `concurrency > 1` separate destination
|
|
72
|
+
writes may complete out of source order. Route validation now recommends `concurrency: 1`
|
|
73
|
+
when destination order matters.
|
|
74
|
+
|
|
5
75
|
## 0.4.7
|
|
6
76
|
|
|
7
77
|
### Changed
|