Roman Puchkovskiy created IGNITE-18072:
------------------------------------------

             Summary: Help diagnose situations when a sender sends an 
incomplete message
                 Key: IGNITE-18072
                 URL: https://issues.apache.org/jira/browse/IGNITE-18072
             Project: Ignite
          Issue Type: Improvement
          Components: networking
            Reporter: Roman Puchkovskiy
            Assignee: Roman Puchkovskiy
             Fix For: 3.0.0-beta2


The following scenario is possible.
 # Due to a misconfiguration, some required serializer is not registered
 # A message starts to be written, namely its groupId and messageTypeId are 
written
 # Now we try to write the message (probably we write some part of it), but 
this fails with an exception due to a missing serializer. So the message is 
only partly written
 # Next message is written successfully
 # The receiver tries to read first message. It has no idea that only part of 
it is written, so it also consumes the beginning of the next message. The first 
message is read incorrectly, but we don't know this yet
 # The receiver tries to read second message (starting somewhere in the middle 
of its bytes). This usually causes an assertion of an exception due to a 
missing groupId/messageTypeId, or, if we have (bad) luck, this can lead to 
reading a wrong message (that was never sent)
 # Sooner or later, an exception happens on the receiving side, but its message 
will be misleading

This might make diagnosing 'what happened' by looking at the receiver's logs 
problematic. We could add an additional step: before writing the message 
groupId+messageTypeId, visit the message (including its parts) and check that 
all serializers are registered. If not, write some special marker (like short 
-1) followed by groupId+messageTypeId and nothing more for this message (then 
throw an exception). TheĀ  receiving side will be able to interpret this as 'no 
serializer' situation and log an appropriate diagnostic message before throing 
an exception.

This situation mostly happens at development time, so we could only enable this 
additional screening step when we are in the development mode (for example, 
when assertions are enabled).

This could also relate to rolling upgrades.



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to