Details
-
Bug
-
Status: Closed
-
Major
-
Resolution: Fixed
-
None
-
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.