You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@geode.apache.org by sa...@apache.org on 2018/08/23 19:32:20 UTC

[geode] branch develop updated: GEODE-5610: CI Failure: DiskRegionJUnitTest testAssertionErrorIfMissingOplog (#2357)

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

sai_boorlagadda 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 9f13a5b  GEODE-5610: CI Failure: DiskRegionJUnitTest testAssertionErrorIfMissingOplog (#2357)
9f13a5b is described below

commit 9f13a5b7b2af6aa8bbf0ddf83740be1f31261073
Author: Sai Boorlagadda <sa...@gmail.com>
AuthorDate: Thu Aug 23 12:32:14 2018 -0700

    GEODE-5610: CI Failure: DiskRegionJUnitTest testAssertionErrorIfMissingOplog (#2357)
    
    Refactored the test to delete the oplog after
    closing the disk store to avoid any races.
---
 .../geode/internal/cache/DiskRegionJUnitTest.java  | 94 +++++++++-------------
 1 file changed, 39 insertions(+), 55 deletions(-)

diff --git a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/DiskRegionJUnitTest.java b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/DiskRegionJUnitTest.java
index 6fec15b..96aaa4a 100755
--- a/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/DiskRegionJUnitTest.java
+++ b/geode-core/src/integrationTest/java/org/apache/geode/internal/cache/DiskRegionJUnitTest.java
@@ -14,6 +14,7 @@
  */
 package org.apache.geode.internal.cache;
 
+import static org.assertj.core.api.Assertions.assertThatExceptionOfType;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNotNull;
@@ -22,8 +23,11 @@ import static org.junit.Assert.assertTrue;
 import static org.junit.Assert.fail;
 
 import java.io.File;
+import java.io.IOException;
 import java.lang.reflect.Array;
 import java.nio.ByteBuffer;
+import java.nio.file.Files;
+import java.nio.file.Path;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.List;
@@ -2316,64 +2320,44 @@ public class DiskRegionJUnitTest extends DiskRegionTestingBase {
   }
 
   @Test
-  public void testAssertionErrorIfMissingOplog() throws Exception {
-    try {
-      // Create a region with rolling enabled.
-      DiskRegionProperties props = new DiskRegionProperties();
-      // System.getProperties().setProperty(DiskRegion.CHECK_ENTRY_BALANCE_PROPERTY_NAME, "true");
-      props.setRegionName(
-          "IGNORE_EXCEPTION_testAssertionErrorIfDanglingModificationsAreNotBalancedByDanglingDeletes");
-      props.setRolling(false);
-      props.setDiskDirs(dirs);
-      props.setMaxOplogSize(100);
-      props.setPersistBackup(true);
-      region = DiskRegionHelperFactory.getSyncPersistOnlyRegion(cache, props, Scope.LOCAL);
+  public void throwsIllegalStateExceptionIfMissingOplogDrf() throws Exception {
+    validatingMissingOplogFile(false);
+  }
 
-      LocalRegion.ISSUE_CALLBACKS_TO_CACHE_OBSERVER = true;
+  @Test
+  public void throwsIllegalStateExceptionIfMissingOplogCrf() throws Exception {
+    validatingMissingOplogFile(true);
+  }
 
-      final Oplog[] switchedOplog = new Oplog[1];
-      CacheObserver old = CacheObserverHolder.setInstance(new CacheObserverAdapter() {
-        public void beforeSwitchingOplog() {
-          DiskRegion dr = ((LocalRegion) region).getDiskRegion();
-          if (switchedOplog[0] == null) {
-            switchedOplog[0] = dr.testHook_getChild();
-          }
-        }
-      });
-      // create some string entries
-      int i = 0;
-      for (; i < 100; ++i) {
-        if (switchedOplog[0] == null) {
-          region.put("" + i, new byte[10]);
-        } else {
-          break;
-        }
-      }
-      assertTrue(i > 1);
-      assertTrue(switchedOplog[0].getOplogFileForTest().delete());
-      region.close();
-      // We don't validate the oplogs until we recreate the disk store.
-      DiskStoreImpl store = ((LocalRegion) region).getDiskStore();
-      store.close();
-      ((GemFireCacheImpl) cache).removeDiskStore(store);
-      logWriter
-          .info("<ExpectedException action=add>" + "DiskAccessException" + "</ExpectedException>");
-      try {
-        region = DiskRegionHelperFactory.getSyncPersistOnlyRegion(cache, props, Scope.LOCAL);
-        // Missing crf and drfs are now detected.
-        fail("expected DiskAccessException LocalizedStrings.DiskRegion_MISSING_OR_CORRUPT_OPLOG");
-      } catch (IllegalStateException expected) {
-        // Expected in recovery
-      } finally {
-        logWriter.info(
-            "<ExpectedException action=remove>" + "DiskAccessException" + "</ExpectedException>");
-      }
+  private void validatingMissingOplogFile(boolean crf) throws IOException {
+    DiskRegionProperties props = new DiskRegionProperties();
+    props.setRegionName("throwsIllegalStateExceptionIfMissingOplog" + (crf ? "Crf" : "Drf"));
+    props.setDiskDirs(dirs);
+    props.setPersistBackup(true);
+    region = DiskRegionHelperFactory.getSyncPersistOnlyRegion(cache, props, Scope.LOCAL);
 
-    } finally {
-      LocalRegion.ISSUE_CALLBACKS_TO_CACHE_OBSERVER = false;
-      CacheObserverHolder.setInstance(new CacheObserverAdapter());
-      // System.getProperties().setProperty(DiskRegion.CHECK_ENTRY_BALANCE_PROPERTY_NAME, "");
-    }
+    region.close();
+    // We don't validate the oplogs until we recreate the disk store.
+    DiskStoreImpl store = ((LocalRegion) region).getDiskStore();
+    store.close();
+    ((GemFireCacheImpl) cache).removeDiskStore(store);
+
+    Path oplogFile = Files.list(dirs[0].toPath())
+        // Path.endsWith is not like String.endsWith
+        .filter(path -> path.toString().endsWith("." + (crf ? "crf" : "drf")))
+        .findFirst()
+        .get();
+
+    Files.delete(oplogFile);
+
+    String errorMessage =
+        "The following required files could not be found: *." + (crf ? "crf" : "drf")
+            + " files with these ids:";
+    assertThatExceptionOfType(IllegalStateException.class)
+        .isThrownBy(
+            () -> DiskRegionHelperFactory.getSyncPersistOnlyRegion(cache, props, Scope.LOCAL))
+        .withMessageContaining(errorMessage)
+        .withNoCause();
   }
 
   @Test