Use composite cumulator for message decoding #530
Merged
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.
MessageDecoder
is responsible for assembling full Bolt messages. It accumulates bytes until an empty chunk is received. Empty chunk signals a message boundary. It used to copy all received chunks into a larger buffer every time. This resulted in an increased memory usage when receiving large results.This PR makes
MessageDecoder
store all received chunks in a composite buffer. No buffer copying is done. It is achieved by using a different non-default byte buffer cumulator. System property "messageDecoderCumulator" can be used to make decoder use the default copying/merging cumulator "-DmessageDecoderCumulator=merge".