This is an automated email from the ASF dual-hosted git repository.

anmolnar pushed a commit to branch HBASE-29081
in repository https://gitbox.apache.org/repos/asf/hbase.git

commit 621b0cbbe13114e63d3c5556c359c0b30f099e2b
Author: Kota-SH <[email protected]>
AuthorDate: Thu May 7 10:49:22 2026 -0400

    HBASE-30090: Table on replica cluster not refreshing after flipping 
read-only flag twice (#8196)
---
 .../apache/hadoop/hbase/regionserver/HRegion.java   | 10 ++++++++++
 .../hadoop/hbase/regionserver/StoreEngine.java      |  4 ++++
 .../storefiletracker/FileBasedStoreFileTracker.java |  8 ++++++++
 .../storefiletracker/StoreFileListFile.java         |  5 +++++
 .../storefiletracker/StoreFileTracker.java          |  4 ++++
 .../storefiletracker/TestStoreFileListFile.java     | 21 +++++++++++++++++++++
 6 files changed, 52 insertions(+)

diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
index 36527a6d934..f2a67df842c 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/HRegion.java
@@ -178,6 +178,7 @@ import org.apache.hadoop.hbase.util.Bytes;
 import org.apache.hadoop.hbase.util.CancelableProgressable;
 import org.apache.hadoop.hbase.util.ClassSize;
 import org.apache.hadoop.hbase.util.CommonFSUtils;
+import org.apache.hadoop.hbase.util.ConfigurationUtil;
 import org.apache.hadoop.hbase.util.CoprocessorConfigurationUtil;
 import org.apache.hadoop.hbase.util.EnvironmentEdgeManager;
 import org.apache.hadoop.hbase.util.FSUtils;
@@ -8998,6 +8999,15 @@ public class HRegion implements HeapSize, 
PropagatingConfigurationObserver, Regi
         CoprocessorConfigurationUtil.updateCoprocessorListInConf(this.conf, 
conf,
           CoprocessorHost.REGION_COPROCESSOR_CONF_KEY);
       });
+
+    boolean newReadOnlyEnabled = 
ConfigurationUtil.isReadOnlyModeEnabledInConf(newConf);
+
+    if (originalIsReadOnlyEnabled && !newReadOnlyEnabled) {
+      LOG.info("Cluster Read Only mode disabled");
+      for (HStore store : stores.values()) {
+        store.getStoreEngine().getStoreFileTracker().onTransitionToActive();
+      }
+    }
   }
 
   /**
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreEngine.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreEngine.java
index e262abd9ea3..96a7ad856cd 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreEngine.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/StoreEngine.java
@@ -579,4 +579,8 @@ public abstract class StoreEngine<SF extends StoreFlusher, 
CP extends Compaction
   public BloomFilterMetrics getBloomFilterMetrics() {
     return bloomFilterMetrics;
   }
+
+  public StoreFileTracker getStoreFileTracker() {
+    return storeFileTracker;
+  }
 }
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/FileBasedStoreFileTracker.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/FileBasedStoreFileTracker.java
index fae97b9dd93..140e9e35546 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/FileBasedStoreFileTracker.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/FileBasedStoreFileTracker.java
@@ -256,4 +256,12 @@ class FileBasedStoreFileTracker extends 
StoreFileTrackerBase {
     add(Collections.singleton(storeFileInfo));
     return reference;
   }
+
+  public void onTransitionToActive() {
+    if (backedFile != null) {
+      synchronized (storefiles) {
+        backedFile.resetWriteState();
+      }
+    }
+  }
 }
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileListFile.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileListFile.java
index fffd4ab499e..1137f1cf856 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileListFile.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileListFile.java
@@ -298,4 +298,9 @@ class StoreFileListFile {
         trackFiles[nextTrackFile], e);
     }
   }
+
+  synchronized void resetWriteState() {
+    nextTrackFile = -1;
+    prevTimestamp = -1;
+  }
 }
diff --git 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTracker.java
 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTracker.java
index c56a40997c1..29668142de0 100644
--- 
a/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTracker.java
+++ 
b/hbase-server/src/main/java/org/apache/hadoop/hbase/regionserver/storefiletracker/StoreFileTracker.java
@@ -176,4 +176,8 @@ public interface StoreFileTracker {
    * @return the store context.
    */
   StoreContext getStoreContext();
+
+  default void onTransitionToActive() {
+    // no op by default
+  }
 }
diff --git 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/storefiletracker/TestStoreFileListFile.java
 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/storefiletracker/TestStoreFileListFile.java
index 54db419ef89..6dd14e1792b 100644
--- 
a/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/storefiletracker/TestStoreFileListFile.java
+++ 
b/hbase-server/src/test/java/org/apache/hadoop/hbase/regionserver/storefiletracker/TestStoreFileListFile.java
@@ -299,4 +299,25 @@ public class TestStoreFileListFile {
       logger.setLevel(oldLevel);
     }
   }
+
+  @Test
+  public void testStoreFilesResetTracker() throws IOException {
+    storeFileListFile.update(StoreFileList.newBuilder()
+      
.addStoreFile(StoreFileEntry.newBuilder().setName("h1").setSize(10).build()));
+
+    StoreFileListFile writer2 = create();
+    writer2.update(StoreFileList.newBuilder()
+      
.addStoreFile(StoreFileEntry.newBuilder().setName("h1").setSize(10).build())
+      
.addStoreFile(StoreFileEntry.newBuilder().setName("h2").setSize(10).build()));
+
+    storeFileListFile.resetWriteState();
+
+    storeFileListFile.update(StoreFileList.newBuilder()
+      
.addStoreFile(StoreFileEntry.newBuilder().setName("h1").setSize(10).build())
+      
.addStoreFile(StoreFileEntry.newBuilder().setName("h2").setSize(10).build())
+      
.addStoreFile(StoreFileEntry.newBuilder().setName("h3").setSize(10).build()));
+
+    StoreFileListFile reader = create();
+    assertEquals(3, reader.load(true).getStoreFileCount());
+  }
 }

Reply via email to