This is an automated email from the ASF dual-hosted git repository. jark pushed a commit to branch release-0.9 in repository https://gitbox.apache.org/repos/asf/fluss.git
commit 6575219222c5a4adf676a144920aaca2980bf0ba Author: 白鵺 <[email protected]> AuthorDate: Thu Feb 12 09:15:38 2026 +0800 [hotfix] Fix flaky testRescaleUp by fixing race condition in ProducerOffsetsStore.deleteSnapshot Swap deletion order to delete ZK metadata before remote files, preventing concurrent reads from finding metadata pointing to already-deleted files. --- .../fluss/server/coordinator/producer/ProducerOffsetsStore.java | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/fluss-server/src/main/java/org/apache/fluss/server/coordinator/producer/ProducerOffsetsStore.java b/fluss-server/src/main/java/org/apache/fluss/server/coordinator/producer/ProducerOffsetsStore.java index 107ed40c8..5551d93b3 100644 --- a/fluss-server/src/main/java/org/apache/fluss/server/coordinator/producer/ProducerOffsetsStore.java +++ b/fluss-server/src/main/java/org/apache/fluss/server/coordinator/producer/ProducerOffsetsStore.java @@ -199,13 +199,16 @@ public class ProducerOffsetsStore { return; } - // Delete remote files + // Delete ZK metadata first so that concurrent reads won't find metadata + // pointing to already-deleted files. Orphan files (if any) will be cleaned + // up by the periodic cleanup task. + zkClient.deleteProducerOffsets(producerId); + + // Then delete remote files for (ProducerOffsets.TableOffsetMetadata metadata : optSnapshot.get().getTableOffsets()) { deleteRemoteFile(metadata.getOffsetsPath()); } - // Delete ZK metadata - zkClient.deleteProducerOffsets(producerId); LOG.info("Deleted snapshot for producer {}", producerId); }
