I'm looking into a CI test failure
(ClientHealthStatsDUnitTest.testClientHealthStats_SubscriptionEnabled). I
don't see anything wrong with the test so far.

It looks to me like region.getEntry(KEY1) must have either returned a null
RegionEntry or RegionEntry.getValue returned a null immediately after the
same thread that just called region.put(KEY1, VALUE1). I'm looking for
confirmation that this is incorrect behavior or more info about how and why
this would be correct:

  private static final String KEY1 = "KEY1";
  private static final String VALUE1 = "VALUE1";

365: Cache cache = (Cache) clientCache;
366: Region<String, String> region = cache.getRegion(Region.SEPARATOR +
REGION_NAME);
367:
368: *region.put(KEY1, VALUE1);*
369: *assertThat(region.getEntry(KEY1).getValue()).isEqualTo(VALUE1); <--
throws NPE*

The following is the setup code that configured and created clientCache:

    Properties props = new Properties();
    props.setProperty(STATISTIC_SAMPLING_ENABLED, "true");

    ClientCacheFactory cacheFactory = new ClientCacheFactory(props);
    if (subscriptionEnabled) {
      cacheFactory.setPoolSubscriptionEnabled(true);
      cacheFactory.setPoolSubscriptionAckInterval(50);
      cacheFactory.setPoolSubscriptionRedundancy(0);
    }

    cacheFactory.set(DURABLE_CLIENT_ID, "DurableClientId_" + clientNum);
    cacheFactory.set(DURABLE_CLIENT_TIMEOUT, "" + 30000);

    cacheFactory.addPoolServer(hostName, port);
    clientCache = cacheFactory.create();

    ClientRegionFactory<String, String> regionFactory =

clientCache.createClientRegionFactory(ClientRegionShortcut.CACHING_PROXY);
    regionFactory.setConcurrencyChecksEnabled(false);

    regionFactory.addCacheListener(new CacheListenerAdapter<String,
String>() {
      @Override
      public void afterInvalidate(final EntryEvent<String, String> event) {
        numOfInvalidates++;
      }

      @Override
      public void afterCreate(final EntryEvent<String, String> event) {
        if ("last_key".equals(event.getKey())) {
          lastKeyReceived = true;
        }
        numOfCreates++;
      }

      @Override
      public void afterUpdate(final EntryEvent<String, String> event) {
        numOfUpdates++;
      }
    });

    Region<String, String> region = regionFactory.create(REGION_NAME);
    if (subscriptionEnabled) {
      region.registerInterest("ALL_KEYS", true);
      clientCache.readyForEvents();
    }
  }

The following is the stack trace showing the NPE:

org.apache.geode.test.dunit.RMIException: While invoking
org.apache.geode.management.ClientHealthStatsDUnitTest$$Lambda$193/1653332728.run
in VM 3 running on Host asf902.gq1.ygridcore.net with 4 VMs
at org.apache.geode.test.dunit.VM.invoke(VM.java:377)
at org.apache.geode.test.dunit.VM.invoke(VM.java:347)
at org.apache.geode.test.dunit.VM.invoke(VM.java:292)
at
org.apache.geode.management.ClientHealthStatsDUnitTest.testClientHealthStats_SubscriptionEnabled(ClientHealthStatsDUnitTest.java:128)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at
org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
at
org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at
org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
at
org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at
org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at
org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
at
org.apache.geode.management.ManagementTestRule$2.evaluate(ManagementTestRule.java:86)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at
org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at
org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.runTestClass(JUnitTestClassExecuter.java:114)
at
org.gradle.api.internal.tasks.testing.junit.JUnitTestClassExecuter.execute(JUnitTestClassExecuter.java:57)
at
org.gradle.api.internal.tasks.testing.junit.JUnitTestClassProcessor.processTestClass(JUnitTestClassProcessor.java:66)
at
org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.processTestClass(SuiteTestClassProcessor.java:51)
at sun.reflect.GeneratedMethodAccessor16.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at
org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at
org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at
org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:32)
at
org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:93)
at com.sun.proxy.$Proxy2.processTestClass(Unknown Source)
at
org.gradle.api.internal.tasks.testing.worker.TestWorker.processTestClass(TestWorker.java:109)
at sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at
org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:35)
at
org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
at
org.gradle.internal.remote.internal.hub.MessageHub$Handler.run(MessageHub.java:377)
at
org.gradle.internal.concurrent.ExecutorPolicy$CatchAndRecordFailures.onExecute(ExecutorPolicy.java:54)
at
org.gradle.internal.concurrent.StoppableExecutorImpl$1.run(StoppableExecutorImpl.java:40)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
*Caused by: java.lang.NullPointerException*
* at
org.apache.geode.management.ClientHealthStatsDUnitTest.put(ClientHealthStatsDUnitTest.java:369)*
at
org.apache.geode.management.ClientHealthStatsDUnitTest.lambda$testClientHealthStats_SubscriptionEnabled$bb17a952$2(ClientHealthStatsDUnitTest.java:128)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at hydra.MethExecutor.executeObject(MethExecutor.java:245)
at
org.apache.geode.test.dunit.standalone.RemoteDUnitVM.executeMethodOnObject(RemoteDUnitVM.java:73)
at sun.reflect.GeneratedMethodAccessor4.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at sun.rmi.server.UnicastServerRef.dispatch(UnicastServerRef.java:346)
at sun.rmi.transport.Transport$1.run(Transport.java:200)
at sun.rmi.transport.Transport$1.run(Transport.java:197)
at java.security.AccessController.doPrivileged(Native Method)
at sun.rmi.transport.Transport.serviceCall(Transport.java:196)
at sun.rmi.transport.tcp.TCPTransport.handleMessages(TCPTransport.java:568)
at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run0(TCPTransport.java:826)
at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.lambda$run$0(TCPTransport.java:683)
at java.security.AccessController.doPrivileged(Native Method)
at
sun.rmi.transport.tcp.TCPTransport$ConnectionHandler.run(TCPTransport.java:682)
... 3 more

Reply via email to