@Override
      public void run() {
        GiiCallback cb = (GiiCallback) getGIITestHookForCheckingPurpose(
            BeforeGetInitialImage);
        synchronized (cb.lockObject) {
          cb.lockObject.notify();
        }
        WaitCriterion wc = new WaitCriterion() {
          @Override
          public boolean done() {
            return getCache().getRegion(regionName) != null;
          }

          @Override
          public String description() {
            return "waiting for region " + regionName + " to initialize";
          }
        };
        GeodeAwaitility.await().untilAsserted(wc);
        // ensure that the RVV has recorded the event
        DistributedRegion r = (DistributedRegion) getCache().getRegion(regionName);
        if (!r.getVersionVector().contains(Xid, 1)) {
          getLogWriter()
              .info("r's version vector is " + r.getVersionVector().fullToString());
          r.dumpBackingMap();
        }
        assertTrue(r.containsKey("keyFromX"));
        // if the test fails here then the op received from X was not correctly
        // picked up and recorded in the RVV
        assertTrue(r.getVersionVector().contains(Xid, 1));
      }
In #48962 a member X has replicated region and is updating it. Members A and B are started up
in parallel. At the same time X decides to close the region. Member A manages to tell X that
it's creating the region and receives an update that B does not see. B finishes GII with no
content and then A gets its initial image from B, leaving an inconsistency between them.
<p>
The test installs a GII hook in A that causes it to pause after announcing creation of the
region.
<p>
X then creates its region and does an operation and closes its cache.
<p>
B then starts and creates its region, not doing a GII from A since A is still initializing.
<p>
A is then allowed to start its GII and pulls an image from B.
geode-core/src/distributedTest/java/org/apache/geode/cache30/ConcurrentLeaveDuringGIIDUnitTest.java