void closeAfterRoll(final Region region) {
    hasBeenNotified = false;
    final Close th = new Close(region);
    CacheObserverHolder.setInstance(new CacheObserverAdapter() {

      @Override
      public void afterHavingCompacted() {
        LocalRegion.ISSUE_CALLBACKS_TO_CACHE_OBSERVER = false;
        try {
          th.start();
          Thread.sleep(3000);
        } catch (Exception e) {
          logWriter.error("Exception occurred", e);
          throw new AssertionError("Exception occurred when it was not supposed to occur", e);
        }
      }
    });
    region.put("Key", "Value1");
    switchOplog(region);
    synchronized (region) {
      try {
        if (!hasBeenNotified) {
          region.wait(10000);
          assertTrue(hasBeenNotified);
        }
      } catch (InterruptedException e) {
        throw new AssertionError("exception not expected here", e);
      }
    }
    try {
      th.join(5000);
    } catch (InterruptedException e) {
      throw new AssertionError("exception not expected here", e);
    }
    assertFalse(th.isAlive());
    assertFalse(failureCause, testFailed);
  }
Check if the roller thread cant skip rolling the entry & if a get is done on that entry , it is
possible for the get operation to get the Oplog which is not yet destroyed but by the time a
basicGet is done,the oplog gets destroyed & the get operation sees the file length zero or it
may encounter null pointer exception while retrieving the oplog.
geode-core/src/integrationTest/java/org/apache/geode/internal/cache/ConcurrentRollingAndRegionOperationsJUnitTest.java