Uploaded image for project: 'Geode'
  1. Geode
  2. GEODE-7661

NullPointerException when serializing an EventID to a geode 1.0.0 member

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 1.12.0
    • membership
    • None

    Description

      When serializing an EventID to a geode 1.0.0 member, there is special logic to translate the EventId.membershipID bytes to a different format.

      However, it's possible to construct an EventID with null bytes. This gets used as part of GII for server to client queues in HAEventWrapper.toData, as seen in this code and stack trace:

       context.getSerializer().writeObject(new EventID(), out);
      
      [warning 2020/01/02 22:03:29.029 PST bridgegemfire5_host1_32096 <Handshaker 0.0.0.0/0.0.0.0:24446 Thread 6> tid=0x1b8] Initialization failed for Region /_gfe_non_durable_client_with_id_rs-FullRegression03050259a4i32xlarge-hydra-client-19(edgegemfire3_host1_32498:32498:loner):40074:57d9f969:edgegemfire3_host1_32498(version:GFE 8.1)_1_queue
      java.lang.NullPointerException
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.internal.serialization.ByteArrayDataInput.initialize(ByteArrayDataInput.java:62)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.internal.serialization.ByteArrayDataInput.<init>(ByteArrayDataInput.java:50)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.internal.cache.EventID.getDistributedMember(EventID.java:319)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.internal.cache.EventID.toData(EventID.java:360)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.internal.serialization.DSFIDSerializerImpl.invokeToData(DSFIDSerializerImpl.java:199)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.internal.serialization.DSFIDSerializerImpl.write(DSFIDSerializerImpl.java:123)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.internal.InternalDataSerializer.basicWriteObject(InternalDataSerializer.java:2007)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.DataSerializer.writeObject(DataSerializer.java:2839)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.internal.InternalDataSerializer$2.writeObject(InternalDataSerializer.java:293)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.internal.cache.tier.sockets.HAEventWrapper.toData(HAEventWrapper.java:287)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.internal.serialization.DSFIDSerializerImpl.invokeToData(DSFIDSerializerImpl.java:199)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.internal.serialization.DSFIDSerializerImpl.write(DSFIDSerializerImpl.java:123)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.internal.InternalDataSerializer.basicWriteObject(InternalDataSerializer.java:2007)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.DataSerializer.writeObject(DataSerializer.java:2839)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.internal.util.BlobHelper.serializeTo(BlobHelper.java:66)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.internal.cache.entries.AbstractRegionEntry.fillInValue(AbstractRegionEntry.java:391)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.internal.cache.InitialImageOperation$RequestImageMessage.chunkEntries(InitialImageOperation.java:2051)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.internal.cache.InitialImageOperation$RequestImageMessage.process(InitialImageOperation.java:1774)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.distributed.internal.DistributionMessage.scheduleAction(DistributionMessage.java:394)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.distributed.internal.DistributionMessage$1.run(DistributionMessage.java:458)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.distributed.internal.ClusterOperationExecutors.runUntilShutdown(ClusterOperationExecutors.java:449)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.distributed.internal.ClusterOperationExecutors.doHighPriorityThread(ClusterOperationExecutors.java:404)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in org.apache.geode.logging.internal.executors.LoggingThreadFactory.lambda$newThread$0(LoggingThreadFactory.java:119)
              at Remote Member 'rs-FullRegression03050259a4i32xlarge-hydra-client-19(bridgegemfire6_host1_7584:7584)<ec><v28>:41002(version:UNKNOWN[ordinal=115])' in java.lang.Thread.run(Thread.java:834)
              at org.apache.geode.distributed.internal.ReplyException.handleAsUnexpected(ReplyException.java:85)
              at org.apache.geode.internal.cache.InitialImageOperation.getFromOne(InitialImageOperation.java:499)
              at org.apache.geode.internal.cache.DistributedRegion.getInitialImageAndRecovery(DistributedRegion.java:1307)
              at org.apache.geode.internal.cache.DistributedRegion.initialize(DistributedRegion.java:1101)
              at org.apache.geode.internal.cache.HARegion.initialize(HARegion.java:345)
              at org.apache.geode.internal.cache.GemFireCacheImpl.createVMRegion(GemFireCacheImpl.java:3304)
              at org.apache.geode.internal.cache.HARegion.getInstance(HARegion.java:265)
              at org.apache.geode.internal.cache.ha.HARegionQueue.createHARegion(HARegionQueue.java:348)
              at org.apache.geode.internal.cache.ha.HARegionQueue.<init>(HARegionQueue.java:328)
              at org.apache.geode.internal.cache.ha.HARegionQueue$BlockingHARegionQueue.<init>(HARegionQueue.java:2199)
              at org.apache.geode.internal.cache.ha.HARegionQueue$DurableHARegionQueue.<init>(HARegionQueue.java:2450)
              at org.apache.geode.internal.cache.ha.HARegionQueue.getHARegionQueueInstance(HARegionQueue.java:2030)
              at org.apache.geode.internal.cache.tier.sockets.CacheClientProxy$MessageDispatcher.<init>(CacheClientProxy.java:2315)
              at org.apache.geode.internal.cache.tier.sockets.CacheClientProxy.initializeMessageDispatcher(CacheClientProxy.java:1728)
              at org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier.initializeProxy(CacheClientNotifier.java:660)
              at org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier.registerClient(CacheClientNotifier.java:587)
              at org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier.registerGFEClient(CacheClientNotifier.java:379)
              at org.apache.geode.internal.cache.tier.sockets.CacheClientNotifier.registerClient(CacheClientNotifier.java:324)
              at org.apache.geode.internal.cache.tier.sockets.AcceptorImpl.handleNewClientConnection(AcceptorImpl.java:1517)
              at org.apache.geode.internal.cache.tier.sockets.AcceptorImpl$5.run(AcceptorImpl.java:1299)
              at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
              at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
              at java./base/java.lang.Thread.run(Thread.java:834)
      

      We should check for null in this case and just send the null bytes as is to the remote member.

      Attachments

        Issue Links

          Activity

            People

              echobravo Ernest Burghardt
              upthewaterspout Dan Smith
              Votes:
              0 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved:

                Time Tracking

                  Estimated:
                  Original Estimate - Not Specified
                  Not Specified
                  Remaining:
                  Remaining Estimate - 0h
                  0h
                  Logged:
                  Time Spent - 20m
                  20m