Bruce Schuchardt created GEODE-5198:
---------------------------------------
Summary: NPE in DataSerializer registration when forming a
client/server connection during handshake
Key: GEODE-5198
URL: https://issues.apache.org/jira/browse/GEODE-5198
Project: Geode
Issue Type: Improvement
Components: client/server, serialization
Reporter: Bruce Schuchardt
Fix For: 1.7.0
Someone hit an NPE when forming a connection to a server in an application
making heavy use of custom DataSerializers. I wrote a unit test to reproduce
the problem (attached) which produces this:
{noformat}
java.lang.NullPointerException
at
java.util.concurrent.ConcurrentHashMap.putVal(ConcurrentHashMap.java:1011)
at
java.util.concurrent.ConcurrentHashMap.putIfAbsent(ConcurrentHashMap.java:1535)
at
org.apache.geode.internal.InternalDataSerializer.updateSupportedClassesMap(InternalDataSerializer.java:1079)
at
org.apache.geode.internal.DataSerializerHolderJUnitTest$1.run(DataSerializerHolderJUnitTest.java:72)
{noformat}
The problem is in the idsToHolders map in InternalDataSerializer. This map is
initialized with a "holder" object that knows the name and ID of a
DataSerializer. During tcp/ip connection formation one of these is created when
processing a list of DataSerializers sent to the client by the server as part
of the handshake. Then the server sends a map of the names of classes supported
by the serializers. It's in this second step that we're hitting the NPE because
some other thread has resolved the holder into an actual class and has removed
the holder from the idsToHolders map. This can be done in any of three other
methods in InternalDataSerializer that are used as a matter of course in
serializing/deserializing objects.
--
This message was sent by Atlassian JIRA
(v7.6.3#76005)