Skip to content

[lake/iceberg] Fix Iceberg table rebinding with different Fluss properties - #4220

Open
litiliu wants to merge 1 commit into
apache:mainfrom
litiliu:codex/iceberg-ignore-fluss-properties
Open

[lake/iceberg] Fix Iceberg table rebinding with different Fluss properties#4220
litiliu wants to merge 1 commit into
apache:mainfrom
litiliu:codex/iceberg-ignore-fluss-properties

Conversation

@litiliu

@litiliu litiliu commented Sep 3, 2026

Copy link
Copy Markdown
Contributor

Purpose

Linked issue: close #4218

Prevent Fluss-owned fluss.* metadata from making an existing Iceberg table appear incompatible during idempotent table creation. Iceberg-native properties remain strictly validated.

Brief change log

  • Ignore properties with the fluss. prefix during existing Iceberg table compatibility checks.
  • Keep Iceberg-native property mismatches incompatible.
  • Add unit coverage for differing fluss.table.replication.factor.
  • Iceberg format-version migration is not changed by this PR.

Tests

  • ./mvnw -q -pl fluss-lake/fluss-lake-iceberg -am -DskipITs -Dtest=IcebergLakeCatalogTest -Dsurefire.failIfNoSpecifiedTests=false test
  • Result: 42 tests passed.

API and Format

No API or storage format changes.

Documentation

No documentation changes.

Generative AI disclosure

  • No generative AI tools used
  • Yes (Codex)

@litiliu
litiliu marked this pull request as ready for review September 3, 2026 09:46
@luoyuxia
luoyuxia requested a lite review from Copilot September 3, 2026 10:17

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.

Warning

Copilot couldn't run its full agentic review because it didn't start before the timeout. Make sure your repository has a runner available, or add a copilot-code-review.yml file specifying one with the runs-on attribute. See the docs for more details.

Pull request overview

Updates Iceberg table compatibility checks to treat Fluss-owned fluss.* metadata as non-blocking during idempotent table creation, while keeping strict validation for Iceberg-native properties.

Changes:

  • Skip fluss.* keys when comparing expected vs existing Iceberg table properties for compatibility.
  • Add a unit test case asserting that differing fluss.table.replication.factor does not mark a table incompatible.

Reviewed changes

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

File Description
fluss-lake/fluss-lake-iceberg/src/main/java/org/apache/fluss/lake/iceberg/IcebergLakeCatalog.java Ignores fluss.* keys during property compatibility checks.
fluss-lake/fluss-lake-iceberg/src/test/java/org/apache/fluss/lake/iceberg/IcebergLakeCatalogTest.java Adds regression coverage for differing Fluss-owned property values.

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

Comment on lines +522 to 525
if (entry.getKey().startsWith(FLUSS_CONF_PREFIX)) {
continue;
}
String actual = existingProperties.get(entry.getKey());
Comment on lines +1778 to 1785
// Fluss properties are metadata owned by Fluss and may differ between descriptors.
expected.put("fluss.table.replication.factor", "1");
existing.put("fluss.table.replication.factor", "2");
assertThat(flussIcebergCatalog.isIcebergPropertiesCompatible(existing, expected)).isTrue();

// Existing missing an expected key -> incompatible.
existing = new HashMap<>();
existing.put("k1", "v1");
@litiliu

litiliu commented Sep 4, 2026

Copy link
Copy Markdown
Contributor Author

Thanks @luoyuxia for reviewing and approving this PR!

@litiliu litiliu changed the title [lake/iceberg] Ignore Fluss properties in compatibility checks [lake/iceberg] Fix Iceberg table rebinding with different Fluss properties Sep 4, 2026
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/iceberg] Cannot rebind an existing Iceberg table across Fluss clusters with different replication factors

3 participants