Skip to content

[lake][follow] Support empty commits for Hudi and Lance to persist tiering progress - #3941

Open
beryllw wants to merge 4 commits into
apache:mainfrom
beryllw:tiering-empty-commit-hudi-lance
Open

[lake][follow] Support empty commits for Hudi and Lance to persist tiering progress#3941
beryllw wants to merge 4 commits into
apache:mainfrom
beryllw:tiering-empty-commit-hudi-lance

Conversation

@beryllw

@beryllw beryllw commented Aug 11, 2026

Copy link
Copy Markdown
Contributor

Purpose

Linked issue: close #3892

Brief change log

Tests

API and Format

Documentation

@luoyuxia
luoyuxia requested a lite review from Copilot August 11, 2026 07:21
@luoyuxia

Copy link
Copy Markdown
Contributor

@fhan688 Could you please help review the hudi part?

Copilot AI left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR addresses issue #3892 by ensuring lake tiering progress can be persisted even when a tiering round produces no data files (e.g., buckets only advanced past empty WAL batches). It adds empty-commit behavior for Hudi and Lance so Fluss can still record updated bucket log end offsets and avoid repeatedly regenerating the same “empty” split.

Changes:

  • Hudi: add an explicit “empty instant” commit path to persist tiering progress even when no writer ran.
  • Lance: allow committing an empty set of fragments by switching to a no-op transaction operation that still creates a new dataset version with snapshot properties.
  • Add/extend unit tests for empty commits (Hudi + Lance) and document the Hudi configuration caveat.

Reviewed changes

Copilot reviewed 6 out of 6 changed files in this pull request and generated 3 comments.

Show a summary per file
File Description
website/docs/streaming-lakehouse/datalake-formats/hudi.md Documents that empty commits must be allowed for tiering progress persistence.
fluss-lake/fluss-lake-lance/src/test/java/org/apache/fluss/lake/lance/tiering/LanceTieringTest.java Adds a test asserting an empty commit creates a new Lance snapshot/version and recovery works.
fluss-lake/fluss-lake-lance/src/main/java/org/apache/fluss/lake/lance/utils/LanceDatasetAdapter.java Adds commitFragments and implements a no-op commit path for empty fragment lists.
fluss-lake/fluss-lake-lance/src/main/java/org/apache/fluss/lake/lance/tiering/LanceLakeCommitter.java Switches to the new commitFragments API.
fluss-lake/fluss-lake-hudi/src/test/java/org/apache/fluss/lake/hudi/tiering/HudiTieringTest.java Adds tests for empty commit success/failure behavior and commit rollback handling.
fluss-lake/fluss-lake-hudi/src/main/java/org/apache/fluss/lake/hudi/tiering/HudiLakeCommitter.java Implements committing an empty Hudi instant and ensures operation type is recorded in commit metadata.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

@beryllw

beryllw commented Aug 17, 2026

Copy link
Copy Markdown
Contributor Author

@fhan688 cc

@beryllw

beryllw commented Aug 28, 2026

Copy link
Copy Markdown
Contributor Author

@fhan688 cc, — just a gentle ping on this one. The current upstream main still has a bug in Hudi tiering (tracked in #3892), and from my perspective it'd be better to get it fixed before the 1.0 release. Would you have some time to help review the Hudi part? No rush.

@fhan688

fhan688 commented Aug 31, 2026

Copy link
Copy Markdown
Contributor

Overall LGTM, one minor comment. @beryllw cc @luoyuxia

@beryllw
beryllw requested a review from fhan688 September 1, 2026 05:55
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 never advances for buckets whose pending log contains only empty WAL batches

4 participants