-
Notifications
You must be signed in to change notification settings - Fork 574
[FLUSS-2262][lake] Improved Stability for Iceberg Log Table Compaction Test #2265
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from 1 commit
Commits
Show all changes
109 commits
Select commit
Hold shift + click to select a range
9a6b24b
[FLUSS-2262][lake] Improved Stability for Iceberg Log Table Compactio…
rionmonster 8159dee
[FLUSS-2262][lake][server] Address lake table tiering stability durin…
rionmonster d901546
[FLUSS-2262][lake][server] Ensure pending tiering tables are removed …
rionmonster 4447287
[lake/iceberg] Removal and clean-up for previous approaches
rionmonster b7a93c1
[lake/iceberg] Continued clean-up from previous iterations
rionmonster d980235
[common] switch to at.yawk.lz4:lz4-java due to CVE-2025-12183 (#2136)
sd4324530 ac06ca2
[lake] Support ADD COLUMN AT LAST for dataLake enabled tables (#2189)
buvb 36e2a6f
[lake/paimon] Support NestedRow types for tiering paimon (#2260)
XuQianJin-Stars 7cc346c
[docs] Use the "docker compose ps" to show the running containers (#2…
zuston cc18333
[server] Introduce new rebalance API (#1380)
swuferhong 1d3b907
[Docs] Document the TypedAPI #2230 (#2261)
Prajwal-banakar aad81f3
[flink] Add RuntimeContext adapter for Flink 2.x compatibility (#2241)
sd4324530 224d5ff
[server] Support AddServerTag and RemoveServerTag (#1400)
swuferhong d886234
[client] Change SchemaNotExistException as retriable exception. (#2193)
loserwang1024 26eb8fb
[hotfix] Use CatalogTableAdapter rather than CatalogTable.newBuilder …
loserwang1024 c1a9bc6
[flink] Flink Source need to check tableId on recovery in case that t…
loserwang1024 dc90653
[common] Fix IndexOutOfBoundsException in ArrowArrayWriter when eleme…
2d0d9b0
[common Improve ArrowArrayWriter performance by replacing hardcoded h…
platinumhamburg 1ed2c58
[lake] Record a file path storing log offsets in lake snapshot proper…
luoyuxia 716fbb7
[kv] Implement basic Aggregate Merge Engine (#2255)
platinumhamburg 8115d13
[hotfix]: Build expected results with partitions value, not hard code…
SML0127 daec805
[docs] update datatypes & paimon datatype mapping document (#2283)
Jackeyzhe 09c1cf4
[spark] support spark batch write (#2277)
YannByron 5b864e4
[common] Introduce MAP type for ARROW, COMPACTED and INDEXED formats …
XuQianJin-Stars e1e22e2
[hotfix] Fix compile problem of InternalRow#getMap() interface in Spa…
wuchong 1782c6d
[hotfix] Fix spotless checkstyle problems
wuchong 44a8c86
[lake/iceberg] Support tier array type for iceberg (#2266)
XuQianJin-Stars 4096672
[hotfix] Fix compilation error: implement missing getMap method in Ic…
XuQianJin-Stars a099126
[kv] Support to report rocksdb metrics (#2282)
platinumhamburg 5965ce8
[docs] Move 'Merge Engine' to the top-level of 'Table Design' (#2300)
Aditya41150 a3195d6
[spark] Add unit tests for spark SHOW TABLES command (#2304)
Yohahaha 9d44aa3
[docs] Document COMPACTED table format (#2264)
Priyamanjare54 1b8f7e4
[server] Not permitted to enable datalake for tables created prior to…
LiebingYu badde92
[lake/paimon] Support map types for tiering paimon (#2308)
XuQianJin-Stars 894daa9
[server] Fix ConcurrentModificationException when access getTable con…
LiebingYu cf653c8
[server] Servers with PERMANENT_OFFLINE tag are no longer assigned re…
LiebingYu 293664c
[lake] fix potential dirty commit on re-create table (#2316)
zuston 18f7bd1
[hotfix] use ltz_millis as paimon system column for timestamp dataty…
luoyuxia 5a14061
[hotfix] Fix union read can't restore issue (#2321)
luoyuxia 6472010
[server] Support generate and execute reblance plan (#1452)
swuferhong a36654f
[common] Add field_id for Nested Row. (#2322)
loserwang1024 85f0966
[flink] Refactor CALL procedure "sys.xxx_cluster_config" to support m…
sd4324530 e62373f
[hotfix] Fix the rebalance status cannot reach complete when the reba…
swuferhong 7b5caf2
[docs] Add MAP type to data types and Paimon integration documentatio…
XuQianJin-Stars 12ff308
[test] Add BucketingFunctionTest, this allows rust client side to als…
leekeiabstraction 4f93ffa
[lake/iceberg] Support nested row types for Iceberg tiering (#2278)
SML0127 544cb4e
[hotfix] Add authentication for rebalance and controlled shutdown. (#…
LiebingYu b0a93fb
[docs]: updated data type mapping in iceberg (#2336)
SML0127 7600e8d
[NOTICE] Update copyright NOTICE year to 2026 (#2343)
wuchong e88e97e
[spark] Fix spark desc command output with partition info (#2313)
Yohahaha ef962be
[kv] include hidden potential internal flush time in KV flush latency…
zuston adbbd3d
[Task] Enhance tests for cluster rebalancing (#2315) (#2337)
Prajwal-banakar e4cb73c
[docs] Add alter table feature link in getting-started.md (#2348)
swuferhong 1128946
[hotfix] Add authentication to the admin APIs that currently lack it …
swuferhong f45eabe
[doc] fix typo of 'table.datalake.enabled' in options.md (#2366)
zhaomin1423 44a1e16
[lake] Re-initial tiering splits for tables if reader failover happen…
beryllw 6c1a155
[paimon] Add IT case for union read with evolved schema for Paimon (#…
ZuebeyirEser e3b094d
Rebalance procedure docs (#2355)
swuferhong 6e15f53
[Flink] Support Partial Updates to the Flink Sink (#2042)
polyzos e3facdb
Change the ListRebalanceProcessProcedure result from String[] to row[…
sd4324530 d0a54b1
[spark] Add Spark show/add/drop partition support (#2314)
Yohahaha 38ca1dd
[lake/lance] Refactor LanceArrowWriter to reuse fluss-common ArrowWri…
XuQianJin-Stars 6e38036
[kv] Add basic implementation of AUTO_INCREMENT column (#2161)
beryllw 2d86eed
[kv] Improve the implementation of AUTO_INCREMENT column
wuchong 576c612
[server] Prevent remote log TTL expiration until tiering completes (#…
LiebingYu ed6040c
[spark] Add spark streaming write support (#2357)
Yohahaha 513902c
Add RocksDB block cache configuration options for index and filter bl…
platinumhamburg 9fc28b9
[test] Fix unstable test RebalanceITCase#testRebalanceForLogTable (#2…
swuferhong 3075a41
[flink] Support PARTITION_DYNAMIC sink dynamic shuffle based on parti…
loserwang1024 d1464fd
[flink] Optimize sink statistics calculation to run only when necessary
wuchong c8d6f21
[flink] Fix the distribution mode support for FlussSink for DataStrea…
wuchong ed0f671
[tests] Cleanup ZK state in TableChangeWatcherTest to not let current…
vamossagar12 53f905a
[hotfix] Fix union read fail when from timestamp and projection enabl…
luoyuxia 860e908
[docs] Add docs for rebalance (#2382)
swuferhong cff2a43
[lake] Support alter table.datalake.freshness (#2365)
zhaomin1423 e7309db
[flink] Flink integration with Aggregation Merge Engine (#2307)
platinumhamburg 4a4670e
[kv] Add roaring bitmap aggregate function for aggregation merge engi…
platinumhamburg f4fdeaf
[client] move OffsetsInitializer to fluss-client (#2424)
YannByron 071c572
[hotfix] Catalog related lake options should overwrite table lake rel…
luoyuxia f8e31dc
[test] Support manually trigger and wait for KV snapshots for FlussCl…
wuchong 7035e24
[spark] support batch read from fluss cluster (#2377)
YannByron 98e587f
[website] Update Fluss messaging (#2428)
polyzos 540587a
[minor][flink] Remove unnecessary java notes (#2444)
leonardBang 640485c
[docs] Add client feature support matrix documentation (#2445)
leekeiabstraction b10d912
[lake] report pending records even though no tiering is finished (#2453)
luoyuxia 171875f
[hotfix][helm] Update image repository to use 'apache/fluss' instead …
morazow 58bb4de
[coordinator] Refactor SchemaUpdate to delegate schema changes to Sch…
Prajwal-banakar fda1227
[flink] changelog read support for pk table without pushdown optimiza…
MehulBatra 1a6e236
[lake] Make FlussLakeTiering pluggable to customize tiering job const…
luoyuxia eab70bb
[server] Fix FirstRowMergeEngine hang caused by empty log entries in …
loserwang1024 0909a08
[server] Update tablet server metadata cache when TableRegistration c…
LiebingYu d383c9f
[test] Fix failed testPkCompactedPollFromLatestNoRecords. (#2465)
SML0127 9a64fb5
[hotfix] Remove unstable "latest" scan startup mode test in Changelog…
wuchong 5ab4f85
[flink] changelog read support for log table without pushdown optimiz…
MehulBatra f8eab26
[helm] Remove `tablet-server.id` from coordinator configuration optio…
morazow 8a9a1e4
[test] Fix flaky AdjustIsrITCase#testIsrShrinkAndExpand by using acks…
ZuebeyirEser c711a5d
[doc/website] virtual tables documentation - $changelog for PK/Log Ta…
MehulBatra a9829e7
[test] Fix unstable test ReplicaTest.testRestore (#2469)
wuchong 95feb64
[spark] Add Spark SQL ALTER table support for set/remove table proper…
Yohahaha 09da97f
[hotfix] update messaging on github page (#2478)
polyzos a94c343
[build] Upgrade GitHub Actions for Node 24 compatibility (#2349)
sd4324530 5fd72ed
[lake] Tiering service support commit by time (#2185)
luoyuxia 3f00b00
[kv] Add Producer Offset Snapshot for Exactly-Once semantics (#2434)
platinumhamburg 10091bd
[hotfix] Fix unstable tiering source enumerator test (#2490)
luoyuxia 2ad450f
[test] Add additional assertion to tests for TimestampLtz/Ntz to part…
leekeiabstraction 90f5892
[fs/azure] Support Azure Blob Storage (#1941)
gkatzioura 5c236d2
[flink] Fix Flink connector failure caused by unknown table options (…
LiebingYu 95f4dd9
[spark] Add sparksql lake table catalog DDL suite for paimon (#2438)
Yohahaha 51f516b
[s3] fix the size of fluss-fs-s3 is too big (#2419)
sd4324530 File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I'm curious about it. If the files count already is 3 in iceberg, shouldn't it also mean that the tiering has already tiered all records since we only write 3 records.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@luoyuxia
I agree that it’s a bit odd. The additional replica assertion seems to alleviate any race conditions within this specific test case that we were seeing arise within the failing CI instances (at least based on my local testing to reproduce the issue).
It may simply be a testing artifact as opposed to a legitimate issue, but if it doesn’t seem like a fix, we can explore a few other avenues. It seemed like one of those common race conditions, so leveraging an existing function to help seemed like a decent approach. Happy to explore some additional avenues though, if we feel that we need a bit more exhaustive checks.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@rionmonster I tried to reporduce it in my local. But fails. I think it'll be better to explore the root cause for I'm afraid of it is caused by another critical issue.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@luoyuxia
Good to know! It seemed to be pretty consistent regarding pass/fail on my end, but clearly there’s something else at play.
I’ll do some more exploration and see what I find. Thanks for the feedback!
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@luoyuxia
I've been digging into this a bit further and it seems there's some disparity between the actual files being written and retrieving the latest offsets for those (specifically after any types of asynchronous operations, such as compaction, etc.). I think we may need some mechanism to improve the consistency, at least within the bounds of the tests.
I wrote a little monitor to run through several iterations of the tests to see what the state of various bits looked like during each iteration. Here's a sample of those:
Successful Test (Successfully Performs Compaction as Expected)
[MONITOR] log_table_33 - TableBucket{tableId=32, bucket=0}
Failing Test (File appeared to never be properly written before expected offset)
[MONITOR] log_table_34 - TableBucket{tableId=33, bucket=0}
I'm not sure if this is more of an artifact of the tests themselves or a legitimate issue. Any thoughts? Happy to continue digging. It feels like a race-condition due to the inconsistency, either on writing the files or reading stale offsets from the data lake directly. I'm sure in a real-world environment, this might be tolerable (as I suspect it's just a minor latency spike which would eventually resolve), but in the confines of a test, it's flaky.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@rionmonster
Could you please explain a bit about in which case the table in the queue that was no longer actually in the "Pending" state.? Although it's no in "Pending" state, the tiering service still can requst the table and do the tiering. Also, from the log, I can't see the log like "Fail to change state for table ".
To me, it looks like that the pendingTieringTables is empty, but I still can't figure out why
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Also, could you please share me your reproduce branch so that I can reproduce it in my local env.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@luoyuxia
Sure! Cleaning up some of my notes from the troubleshooting session, but hopefully this workflow makes sense:
Tbecomes eligible and is assigned normally (Pending to Tiering).Tends up in the pending queue (e.g., due to retries, late timer callbacks, or test churn).requestTable()would pollTfrom the pending queue and attempt to assign it again, even though its actual state was no longer Pending.pendingTieringTablesandtieringStates.The key difference with this change is that after it
requestTable()actually verifies the table is in the Pending state before assigning it instead of just relying on its presence in the pending queue.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@rionmonster
As for the fail test, which case cause a stale duplicate T entering into pending queue? Do you have ever find any logs?
If it's a invalid state changte, we'll print
But I can't see such log in the fail ci
To me, it looks me like that the table won't be returned to the tiering service anymore from the log.
So, i'm a little doubt about this case.
Could you please share me your reproduce branch, I want reproduce it in my local env to find the root cause.
Uh oh!
There was an error while loading. Please reload this page.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
@luoyuxia
Based on our private conversations exploring this, I'm including the following based on
Okay — I was able to reproduce the failure successfully with some extended debugging logs added throughout the
LakeTableTieringManager. I've created a gist here with the logs. Reviewing over them, it looks like we have the following chain of events:411079we have a series of these "polled tableId=x but tablePath is null (state=null, epoch=null)" type of calls, which repeats 10+ timesI think we can interpret this as:
requestTable())tablePathsdidn't contain the idtieringStatesdidn't contain the idtableTierEpochdidn't contain the idpendingTieringTablesrequestTable()calls to continually drain/recurse/loop over these stale entries which could delay processing of actual pending tablesI think the proposed fixes would help with this, although we may need to consider adjusting the
removeLakeTable()call as well to ensure we remove the requested table from the pending tables as well, which I'll add to the PR:I've created a branch with these additional logs if you would like to explore it yourself at https://github.com/rionmonster/fluss/tree/for-yuxia-with-logs