This is an automated email from the ASF dual-hosted git repository. numinnex pushed a commit to branch partition_superblock in repository https://gitbox.apache.org/repos/asf/iggy.git
commit 4ff889f52c4da7307cc36ed27982becfb8f044f9 Merge: 9494dd6cc 0d76a691c Author: Grzegorz Koszyk <[email protected]> AuthorDate: Wed Aug 5 17:35:12 2026 +0200 merge master Cargo.lock | 2 +- Cargo.toml | 1 + bdd/python/uv.lock | 4 +- core/common/src/types/partition/mod.rs | 2 +- core/configs/Cargo.toml | 1 + core/configs/src/server_ng_config/cluster.rs | 987 ++++++++++++++++++++- core/configs/src/server_ng_config/defaults.rs | 1 + core/configs/src/server_ng_config/validators.rs | 1 + core/configs_derive/src/config_env.rs | 22 +- .../tests/cluster/metadata_checkpoint_restart.rs | 138 ++- core/integration/tests/sdk/mcp_parity.rs | 608 ------------- core/integration/tests/sdk/messages.rs | 172 ---- core/integration/tests/sdk/mod.rs | 4 - .../tests/server/cluster_metadata_vsr.rs | 229 ++++- core/integration/tests/server/general.rs | 19 +- core/integration/tests/server/http_client.rs | 19 +- core/integration/tests/server/http_tls.rs | 112 ++- .../server/metadata_checkpoint_recovery_vsr.rs | 138 --- core/integration/tests/server/mod.rs | 4 - .../server/scenarios/create_message_payload.rs | 148 --- core/integration/tests/server/scenarios/mod.rs | 1 - core/server-ng/Cargo.toml | 6 +- core/server-ng/config.toml | 47 + core/server-ng/src/bootstrap.rs | 9 +- core/server-ng/src/cluster_meta.rs | 125 ++- core/server-ng/src/dispatch.rs | 36 +- core/server-ng/src/http.rs | 37 +- core/server-ng/src/http/error.rs | 109 ++- core/server-ng/src/http/extractor.rs | 22 +- core/server-ng/src/http/handlers.rs | 7 +- core/server-ng/src/http/reads.rs | 3 +- core/server-ng/src/http/state.rs | 22 +- core/server-ng/src/http/tls.rs | 15 +- core/server-ng/src/responses.rs | 12 +- core/server-ng/src/session_manager.rs | 28 + core/server-ng/tests/sdk_e2e.rs | 175 +--- examples/python/uv.lock | 2 +- foreign/python/Cargo.toml | 2 +- foreign/python/apache_iggy.pyi | 221 ++++- foreign/python/pyproject.toml | 2 +- foreign/python/src/client.rs | 109 ++- foreign/python/src/consumer.rs | 32 +- foreign/python/src/lib.rs | 5 +- foreign/python/src/topic.rs | 276 +++++- foreign/python/tests/test_topic.py | 235 ++++- foreign/python/uv.lock | 4 +- 46 files changed, 2649 insertions(+), 1505 deletions(-) diff --cc core/integration/tests/server/mod.rs index 9cb6c3042,8c3f6e052..b93b0052e --- a/core/integration/tests/server/mod.rs +++ b/core/integration/tests/server/mod.rs @@@ -48,14 -48,6 +48,10 @@@ mod cluster_metadata_vsr // across a replica restart. #[cfg(feature = "vsr")] mod cluster_view_durability_vsr; +// A partition view change must persist the advanced view in that group's own +// superblock and recover it from disk across a replica restart. +#[cfg(feature = "vsr")] +mod partition_view_durability_vsr; - // A metadata checkpoint must drain the WAL and recover from the snapshot fold plus - // the WAL suffix across a restart. - #[cfg(feature = "vsr")] - mod metadata_checkpoint_recovery_vsr; // 80-case race matrix with hardcoded HTTP variants (test_matrix bypasses // the harness transport filter). mod concurrent_addition; diff --cc core/server-ng/src/dispatch.rs index bfc11f2a2,a477d1f88..783c531ad --- a/core/server-ng/src/dispatch.rs +++ b/core/server-ng/src/dispatch.rs @@@ -1382,9 -1381,9 +1396,9 @@@ async fn handle_non_replicated_request< } } - #[allow(clippy::future_not_send)] + #[allow(clippy::future_not_send, clippy::too_many_arguments)] -async fn handle_default_non_replicated<B, MJ, S>( - shard: &Rc<ShellShard<B, MJ, S>>, +async fn handle_default_non_replicated<B, MJ, S, SB>( + shard: &Rc<ShellShard<B, MJ, S, SB>>, transport_client_id: u128, code: u32, request: &Message<RequestHeader>, diff --cc core/server-ng/src/responses.rs index c661a375c,2254b1ce1..289654152 --- a/core/server-ng/src/responses.rs +++ b/core/server-ng/src/responses.rs @@@ -472,9 -464,12 +473,12 @@@ wher /// `user_id` is the authenticated caller, used only by the identity-scoped /// reads (currently the PAT list); every other arm ignores it. Authorization - /// stays with the per-transport gates that run before this builder. + /// stays with the per-transport gates that run before this builder. `client_ip` + /// is the caller's transport-level peer address, used only by the + /// cluster-metadata read to pick each node's advertised address; `None` + /// degrades to the catch-all address. -pub(crate) fn build_non_replicated_response<B, MJ, S>( - shard: &Rc<ShellShard<B, MJ, S>>, +pub(crate) fn build_non_replicated_response<B, MJ, S, SB>( + shard: &Rc<ShellShard<B, MJ, S, SB>>, code: u32, body: &[u8], user_id: Option<u32>, @@@ -604,9 -599,10 +609,10 @@@ wher /// The leader marking comes from this shard's consensus view; a shard without /// consensus (any shard but 0) still serves the full roster, only with no node /// marked leader. -fn build_cluster_metadata_response<B, MJ, S>( +fn build_cluster_metadata_response<B, MJ, S, SB>( roster: &ClusterRoster, - shard: &Rc<ShellShard<B, MJ, S>>, + shard: &Rc<ShellShard<B, MJ, S, SB>>, + client_ip: Option<IpAddr>, ) -> ClusterMetadataResponse where B: ShellBus,
