@Override
            public void run2() {
              Region<Object, Object> region = getCache().getRegion("root" + SEPARATOR + name);

              logger.info("t1 is invoking get(" + objectName + ")");
              try {
                logger.info("t1 retrieved value " + region.get(objectName));
                fail("first load should have triggered an exception");
              } catch (RuntimeException e) {
                if (!e.getMessage().contains(exceptionString)) {
                  throw e;
                }
              }
            }
This test is for a bug in which a cache loader threw an exception that caused the wrong value
to be put in a Future in nonTxnFindObject. This in turn caused a concurrent search for the
object to not invoke the loader a second time.
<p>
VM0 is used to create a cache and a region having a loader that simulates the conditions that
caused the bug. One async thread then does a get() which invokes the loader. Another async
thread does a get() which reaches nonTxnFindObject and blocks waiting for the first thread's
load to complete. The loader then throws an exception that is sent back to the first thread.
The second thread should then cause the loader to be invoked again, and this time the loader
will return a value. Both threads then validate that they received the expected result.
geode-core/src/distributedTest/java/org/apache/geode/cache30/SearchAndLoadDUnitTest.java