You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by mi...@apache.org on 2022/08/27 08:37:21 UTC

[geode] branch develop updated: GEODE-10408: in case corrupted oplogs, use fullGII (#7834)

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

mivanac pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode.git


The following commit(s) were added to refs/heads/develop by this push:
     new cce1d7c216 GEODE-10408: in case corrupted oplogs, use fullGII (#7834)
cce1d7c216 is described below

commit cce1d7c216f25fbbd3066d516de36f3f55199c20
Author: Mario Ivanac <48...@users.noreply.github.com>
AuthorDate: Sat Aug 27 10:37:15 2022 +0200

    GEODE-10408: in case corrupted oplogs, use fullGII (#7834)
---
 .../java/org/apache/geode/internal/cache/DiskStoreImpl.java  | 12 ++++++++++++
 .../apache/geode/internal/cache/InitialImageOperation.java   |  6 ++++++
 .../src/main/java/org/apache/geode/internal/cache/Oplog.java |  1 +
 3 files changed, 19 insertions(+)

diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreImpl.java b/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreImpl.java
index 92187c6c9f..8415a00b34 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreImpl.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/DiskStoreImpl.java
@@ -383,6 +383,8 @@ public class DiskStoreImpl implements DiskStore {
 
   private volatile Future<?> lastDelayedWrite;
 
+  private boolean dataCorrupted;
+
   private static int calcCompactionThreshold(int ct) {
     if (ct == DiskStoreFactory.DEFAULT_COMPACTION_THRESHOLD) {
       // allow the old sys prop for backwards compat.
@@ -448,6 +450,8 @@ public class DiskStoreImpl implements DiskStore {
 
     // start simple init
 
+    this.dataCorrupted = false;
+
     isCompactionPossible = isOfflineCompacting() || (!isOffline()
         && (getAutoCompact() || getAllowForceCompaction() || ENABLE_NOTIFY_TO_ROLL));
     maxAsyncItems = getQueueSize();
@@ -4739,4 +4743,12 @@ public class DiskStoreImpl implements DiskStore {
     }
     return (100 - getDiskUsagePercentage());
   }
+
+  public boolean isDataCorrupted() {
+    return dataCorrupted;
+  }
+
+  public void setDataCorrupted(boolean data) {
+    dataCorrupted = data;
+  }
 }
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageOperation.java b/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageOperation.java
index 42f746088a..612fbb02f9 100644
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageOperation.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/InitialImageOperation.java
@@ -458,6 +458,12 @@ public class InitialImageOperation {
                   MAXIMUM_UNFINISHED_OPERATIONS);
             }
             m.versionVector = null;
+
+          } else if (region.getDiskStore() != null && region.getDiskStore().isDataCorrupted()) {
+            if (isDebugEnabled) {
+              logger.debug("Data corrupted, do full GII instead");
+            }
+            m.versionVector = null;
           } else {
             if (recoveredRVV.isNewerThanOrCanFillExceptionsFor(remote_rvv)) {
               m.versionVector = null;
diff --git a/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java b/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java
index 7d8737040b..53ebdafa98 100755
--- a/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java
+++ b/geode-core/src/main/java/org/apache/geode/internal/cache/Oplog.java
@@ -2303,6 +2303,7 @@ public class Oplog implements CompactableOplog, Flushable {
     int b = di.readByte();
     if (b != END_OF_RECORD_ID) {
       if (b == 0) {
+        parent.setDataCorrupted(true);
         logger.warn(
             "Detected a partial record in oplog file. Partial records can be caused by an abnormal shutdown in which case this warning can be safely ignored. They can also be caused by the oplog file being corrupted.");