[EventHub] Consumer stops sending link credits to service #32767
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.
Every time we receive a
TransferFramefrom the service in pyAMQP, we immediately subtract 1 from ourcurrent_link_credit, causing us to sendFlowFrame's when thecurrent_link_creditruns out.In the case of large messages that are split over multiple
TransferFrame's this causes ourcurrent_link_creditto deplete quickly because each frame subtracts 1. If the message is large enough, thecurrent_link_creditthen can get into the negative numbers and cause us to send multipleFlowFrame's for no reason. Then when the link credit actually depletes, our line in the AMQPReceiveClient never gets hit because we check equivalency to 0 (at this point,current_link_creditis negative).What should happen:
Every time we receive a large message via multiple
TransferFrame's we should only subtract 1 from ourcurrent_link_creditfor the entire message. This will prevent ourcurrent_link_creditfrom dipping into the negatives without us knowing.Creates #32861