InMemory gateway deduplication can cause message loss #5556
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Symptoms
Messages are not emitted by the receiving gateway with the following log statement:
"Message with id: {message-id} has already been dispatched, ignoring incoming gateway message."
The sending gateway treats the message as successfully transmitted and the message is technically lost.
Who's affected
All users of the Gateway below version 3.1 that use the InMemory option for deduplication storage.
Root cause
The record of the message-id is stored before the message is emitted to the transport and is not rolled back should the outgoing operation fail. This leads to the message being considered a duplicate once retried.