You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Apply AmqpRetryPolicy to RequestResponseChannel.sendWithAck. #24620
Currently, sendWithAck does not have an operation timeout, so it's possible to wait indefinitely for an ACK from the service.
Solution:
Apply a retry policy similar to ReactorSender where we wait for AmqpRetryOptions.tryTimeout() for the ACK and apply retry policy until it fails or the underlying connection is closed.
Connie Yau (@conniey) and I had a quick look over this - The sendWithAck is the low-level API that enables disposition (complete, abandon, etc..); we observed that this is an API that can be in the hot path. E.g., when N parallel sessions with M concurrent calls trying to schedule concurrent disposition, adding a dedicated timeout per disposition calls is likely to create GC churn (all those TimerScheduledTask getting queued) and CPU for timer. We think this will be overkill, and if needed in the future, it has to be carefully designed and profiled under load. Hence moving to backlog.
Activity
anuchandy commentedon Apr 26, 2022
Connie Yau (@conniey) and I had a quick look over this - The sendWithAck is the low-level API that enables disposition (complete, abandon, etc..); we observed that this is an API that can be in the hot path. E.g., when N parallel sessions with M concurrent calls trying to schedule concurrent disposition, adding a dedicated timeout per disposition calls is likely to create GC churn (all those TimerScheduledTask getting queued) and CPU for timer. We think this will be overkill, and if needed in the future, it has to be carefully designed and profiled under load. Hence moving to backlog.