xiaojian zhou created GEODE-6630:
------------------------------------

             Summary: RedundancyLogger might throw NPE
                 Key: GEODE-6630
                 URL: https://issues.apache.org/jira/browse/GEODE-6630
             Project: Geode
          Issue Type: Bug
            Reporter: xiaojian zhou


{noformat}
I noticed in some tests with following error logged in debug level:

[debug 2019/04/10 11:25:52.904 PDT <RedundancyLogger for region TestRegion> 
tid=0x55] Unexpected exception in PR redundancy recovery
java.lang.NullPointerException
        at 
org.apache.geode.internal.cache.partitioned.RedundancyLogger.run2(RedundancyLogger.java:154)
        at 
org.apache.geode.internal.cache.partitioned.RecoveryRunnable.run(RecoveryRunnable.java:59)
        at java.lang.Thread.run(Thread.java:748)

Then I looked at the code that it's using:
(this.allBucketsRecoveredFromDisk.getCount() > 0) in more than one places.

The allBucketsRecoveredFromDisk is referecing to the object in 
PRHARedundancyProvider. 
But in PRHARedundancyProvider, it is using:
  public boolean isPersistentRecoveryComplete() {
    if (!ColocationHelper.checkMembersColocation(this.prRegion, 
this.prRegion.getMyId())) {
      return false;
    }

    if (allBucketsRecoveredFromDisk != null && 
allBucketsRecoveredFromDisk.getCount() > 0) {
      return false;
    }

So allBucketsRecoveredFromDisk could be null. We should alway use 
"(allBucketsRecoveredFromDisk != null && allBucketsRecoveredFromDisk.getCount() 
> 0) " instead of "(this.allBucketsRecoveredFromDisk.getCount() > 0)"

{noformat}




--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

Reply via email to