Uploaded image for project: 'Red Hat Data Grid'
  1. Red Hat Data Grid
  2. JDG-7644

NullPointerException while expiring entry with cross-site

XMLWordPrintable

    • Icon: Bug Bug
    • Resolution: Done
    • Icon: Major Major
    • RHDG 8.5.4 GA
    • None
    • None
    • None

      With async cross-site (IRAC) and max-idle:

          replicatedCache:
            backups:
              AccA:
                backup:
                  strategy: "ASYNC"
                    stateTransfer:
                      chunkSize: "512"
                      timeout: "2400000"
                      maxRetries: "30"
                      waitTime: "2000"
                      mode: "AUTO"
            mode: "SYNC"
            statistics: "true"
            encoding:
              key:
                mediaType: "text/plain"
              value:
                mediaType: "application/octet-stream"
            expiration:
              lifespan: "-1"
              maxIdle: "1200000"
      

       
      The following NullPointerException is thrown:

       java.lang.NullPointerException: Cannot invoke "org.infinispan.metadata.impl.IracMetadata.getVersion()" because "remoteMetadata" is null at 
      org.infinispan.interceptors.impl.NonTxIracRemoteSiteInterceptor.validateRemoteUpdate(NonTxIracRemoteSiteInterceptor.java:153)
      ...
      org.infinispan.xsite.ClusteredCacheBackupReceiver.removeKey(ClusteredCacheBackupReceiver.java:224) at 
      org.infinispan.xsite.commands.remote.IracPutManyRequest$Expire.execute(IracPutManyRequest.java:186) at 
      org.infinispan.xsite.commands.remote.IracPutManyRequest.executeOperation(IracPutManyRequest.java:61) at 
      org.infinispan.xsite.commands.remote.IracUpdateKeyRequest.invokeInLocalCache(IracUpdateKeyRequest.java:24) at 
      org.infinispan.xsite.commands.remote.XSiteCacheRequest.invokeInLocalSite(XSiteCacheRequest.java:55)
       

      One possible cause, the IRAC queue is being flushed when a concurrent write happens. The tombstone is removed and nullis sent with the expiration command.
      Another cause may be a concurrent tombstone cleanup while the queue is flushed.

      We should skip sending the expiration request when tombstone is null here:

       
      infinispan/core/src/main/java/org/infinispan/xsite/irac/DefaultIracManager.java

      Lines 430 to 432 in 2ef455e

      if (data.state.isExpiration()) {| |cmd.addExpire(data.state.getKey(), data.tombstone);| |}else if (data.entry == null) {

       

      Additional information

      Original report: infinispan/infinispan-operator#2270

              Unassigned Unassigned
              rhn-support-afield Alan Field
              Anna Manukyan Anna Manukyan
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

                Created:
                Updated:
                Resolved: