Skip to content

[server] Support group-aware tiering table assignment - #4745

Open
litiliu wants to merge 4 commits into
apache:mainfrom
litiliu:codex/tiering-groups
Open

litiliu wants to merge 4 commits into
apache:mainfrom
litiliu:codex/tiering-groups

Conversation

@litiliu

@litiliu litiliu commented Oct 20, 2026 •

Copy link
Copy Markdown
Contributor

Purpose

Linked issue: close #3789

Allow operators to assign tables to separate tiering services so workloads with different resource or freshness requirements can be scaled independently. Services in the same group continue to share work.

Brief change log

  • Add the mutable table option table.datalake.tiering-group and service option --fluss.tiering.group, both defaulting to default, with shared group-name validation.
  • Assign pending tables only to services in the matching group. Apply group changes asynchronously through the existing metadata update path, allowing an already assigned round to finish with its current epoch.
  • Document group configuration, reassignment behavior, and rolling-upgrade compatibility; cover group-aware scheduling, heartbeat compatibility, and real Flink-to-Paimon tiering in tests.
  • Regenerate the checked-in Rust protobuf bindings for the heartbeat field with the CI-pinned generator.

Tests

Passed 61 unique targeted test cases on the revised implementation:

  • TableConfigTest, TableDescriptorValidationTest
  • ServerConnectionTest
  • LakeTableTieringManagerTest, LakeTieringHeartbeatITCase
  • TieringSourceEnumeratorSchedulingTest, FlussLakeTieringTest
  • PaimonTieringITCase#testTieringWithGroups and the existing testTiering end-to-end case

The affected modules passed Maven verify, including Spotless, Checkstyle, and validation checks. The Paimon cases were built with their full dependency reactor on JDK 17, repeated six times per case including reversed method order, and use actual lake commits as synchronization barriers. Temporarily disabling group filtering in an isolated validation copy made the new isolation assertion fail as expected. The full repository test suite has not been run.

Rust protobuf regeneration is deterministic with protoc 27.1, and cargo check --package fluss-rs --lib --locked --offline passed.

API and Format

Add the optional tiering_group field to the internal lake-tiering heartbeat request and advertise heartbeat protocol version 1 while retaining version 0 support. An absent group means default; non-default group requests are rejected before being sent to an older Coordinator. Storage formats are unchanged.

Documentation

Update website/docs/streaming-lakehouse/tiering-service.md with group configuration, dynamic reassignment, default behavior, legacy-table enablement, and upgrade/downgrade guidance.

Route tiering table assignments by the configured table and service group. Keep group changes asynchronous, preserve default-group compatibility, and expose per-group tiering metrics.
@litiliu
litiliu marked this pull request as ready for review October 20, 2026 14:36
@litiliu

litiliu commented Oct 20, 2026

Copy link
Copy Markdown
Contributor Author

Hi @polyzos, CI is green and this PR is ready for review. Could you take a look when you have a chance? It adds group-aware tiering table assignment with Flink-to-Paimon end-to-end coverage. Thanks!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[lake/tiering] Support group-aware table assignment for tiering services

1 participant