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

ConfigurationResponse serialization exception

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Major
    • Resolution: Fixed
    • None
    • 1.11.0
    • management
    • None

    Description

      ConfigurationResponse is a DataSerializableFixedID that implements getSerializationVersions incorrectly.  If an older member happens to make a request that returns one of these objects it causes that member to hang waiting for a response.  The locator in my case had this:

      [warn 2019/07/10 15:57:15.808 PDT <Function Execution Processor3> tid=0x3d] Error serializing message
      java.io.NotSerializableException: org.apache.geode.management.internal.configuration.messages.ConfigurationResponse
      at org.apache.geode.internal.cache.FunctionStreamingReplyMessage.toData(FunctionStreamingReplyMessage.java:115)
      at org.apache.geode.internal.InternalDataSerializer.invokeToData(InternalDataSerializer.java:2305)
      at org.apache.geode.internal.InternalDataSerializer.writeDSFID(InternalDataSerializer.java:1497)
      at org.apache.geode.internal.InternalDataSerializer.writeDSFID(InternalDataSerializer.java:1469)
      at org.apache.geode.internal.InternalDataSerializer.basicWriteObject(InternalDataSerializer.java:2072)
      at org.apache.geode.DataSerializer.writeObject(DataSerializer.java:2943)
      at org.apache.geode.distributed.internal.membership.gms.messenger.JGroupsMessenger.serializeMessage(JGroupsMessenger.java:966)
      at org.apache.geode.distributed.internal.membership.gms.messenger.JGroupsMessenger.createJGMessage(JGroupsMessenger.java:870)
      at org.apache.geode.distributed.internal.membership.gms.messenger.JGroupsMessenger.send(JGroupsMessenger.java:775)
      at org.apache.geode.distributed.internal.membership.gms.messenger.JGroupsMessenger.send(JGroupsMessenger.java:662)
      at org.apache.geode.distributed.internal.membership.adapter.GMSMembershipManager.send(GMSMembershipManager.java:1783)
      at org.apache.geode.distributed.internal.ClusterDistributionManager.sendViaMembershipManager(ClusterDistributionManager.java:2852)
      at org.apache.geode.distributed.internal.ClusterDistributionManager.sendOutgoing(ClusterDistributionManager.java:2779)
      at org.apache.geode.distributed.internal.ClusterDistributionManager.sendMessage(ClusterDistributionManager.java:2816)
      at org.apache.geode.distributed.internal.ClusterDistributionManager.putOutgoing(ClusterDistributionManager.java:1526)
      at org.apache.geode.internal.cache.FunctionStreamingReplyMessage.send(FunctionStreamingReplyMessage.java:63)
      at org.apache.geode.internal.cache.MemberFunctionStreamingMessage.sendReply(MemberFunctionStreamingMessage.java:352)
      at org.apache.geode.internal.cache.MemberFunctionStreamingMessage.sendReplyForOneResult(MemberFunctionStreamingMessage.java:337)
      at org.apache.geode.internal.cache.execute.MemberFunctionResultSender.lastResult(MemberFunctionResultSender.java:100)
      at org.apache.geode.management.internal.configuration.functions.GetClusterConfigurationFunction.execute(GetClusterConfigurationFunction.java:54)
      at org.apache.geode.internal.cache.MemberFunctionStreamingMessage.process(MemberFunctionStreamingMessage.java:193)
      at org.apache.geode.distributed.internal.DistributionMessage.scheduleAction(DistributionMessage.java:375)
      at org.apache.geode.distributed.internal.DistributionMessage$1.run(DistributionMessage.java:439)
      at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
      at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
      at org.apache.geode.distributed.internal.ClusterDistributionManager.runUntilShutdown(ClusterDistributionManager.java:964)
      at org.apache.geode.distributed.internal.ClusterDistributionManager.doFunctionExecutionThread(ClusterDistributionManager.java:818)
      at org.apache.geode.internal.logging.LoggingThreadFactory.lambda$newThread$0(LoggingThreadFactory.java:121)
      at java.lang.Thread.run(Thread.java:748)
      Caused by: org.apache.geode.ToDataException: class org.apache.geode.management.internal.configuration.messages.ConfigurationResponse
      at org.apache.geode.internal.InternalDataSerializer.invokeToData(InternalDataSerializer.java:2336)
      at org.apache.geode.internal.InternalDataSerializer.writeDSFID(InternalDataSerializer.java:1497)
      at org.apache.geode.internal.InternalDataSerializer.writeDSFID(InternalDataSerializer.java:1469)
      at org.apache.geode.internal.InternalDataSerializer.basicWriteObject(InternalDataSerializer.java:2072)
      at org.apache.geode.DataSerializer.writeObject(DataSerializer.java:2943)
      at org.apache.geode.internal.cache.FunctionStreamingReplyMessage.toData(FunctionStreamingReplyMessage.java:109)
      ... 28 more
      Caused by: java.lang.NoSuchMethodException: org.apache.geode.management.internal.configuration.messages.ConfigurationResponse.toDataPre_GEODE_1_10_0_0(java.io.DataOutput)
      at java.lang.Class.getMethod(Class.java:1786)
      at org.apache.geode.internal.InternalDataSerializer.invokeToData(InternalDataSerializer.java:2294)
      ... 33 more
      
      

       

      The fix for this is to remove Version.CURRENT from the list in getSerializationVersions.  This list should contain versions which contain on-wire format changes that require backward-compatibility "toData" and "fromData" methods.

      Attachments

        Activity

          People

            Unassigned Unassigned
            bschuchardt Bruce J Schuchardt
            Votes:
            0 Vote for this issue
            Watchers:
            4 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: