The fix for MarshallerContext in IGNITE-7794 has resolved part of the
problem with unknown pair, however, we can still trigger a further unknown
pair issue with the following sequence:

1) Connect a client node to a server node
2) send a couple of service call so that there are some objects is being
marshalled
3a) Stop the server node, removed the work directory (for example, docker
remove container that runs the server which would clear the work directory)
3b) leave the client node running so that it tries  to reconnect
4) Restart the server, let the client node reconnect and send service call

This will still trigger the Unknown Pair issue.

Upon further investigation, it seems that in the OptimizedMarshaller, it
caches the look up for the existing class descriptor
(OptimizedClassDescriptor) in the "clsmap". This is not cleared when the
client reconnects it will assume that the server still have the same
mapping and therefore attempt to send the invalid class id down the wire.

I have a hack to force the OptimizedMarshaller to check with the
MarshallerContext before using the cached OptimizedClassDescriptor. This
does fix the issue however there is a performance penalty as we need to
check the MarhsallerContext

I believe the proper fix for this problem should be by adding a hook to
clear the clsmap when the client reconnect, but I cannot identify the right
place to insert this hook. Can the community suggest a good place where
this hook can be inserted? Or is there any alternative fixes that you can
suggest?

Thanks
Sunny

Reply via email to