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);
     }
 

Reply via email to