Azure / Azure/azure-sdk-for-rust
[Service Bus] Add the management settlement path for messages off the current link
- Dominant language
- Rust
- Stars
- 884
- Forks
- 365
- Avg merge
- 2d 19h
- Merged PRs (30d)
- 112
Description
## Summary
Settlement is implemented only as a link level disposition. Messages that did not arrive on the current receive link cannot be settled at all.
## Motivation
A link level disposition works only while the delivery is still on the link that produced it. Three cases break that assumption: a session receiver, a message fetched by `com.microsoft:receive-by-sequence-number`, and any message held across a reconnect. Every Service Bus client therefore implements settlement twice, once on the link and once over `com.microsoft:update-disposition`.
The Go SDK shows the pattern. It settles on the receiver when it can, then falls back to the management link.
Without this path, deferred messages received in #4945 cannot be completed, and sessions in #4949 cannot settle anything.
## Proposal
- Implement `com.microsoft:update-disposition` with a disposition status of completed, abandoned, suspended, or deferred.
- Carry `properties-to-modify`, and the dead letter reason and description, in the request body.
- Choose the path per message rather than per receiver, and prefer the link when the delivery is still on it.
## Dependencies
Blocked by:
- #4936 [AMQP] Management client cannot send a typed request body or read the status fields
- #4943 [Service Bus] Settlement sends the wrong AMQP outcomes and discards caller input
Sub-issue of #4934.
Contributor guide
Research direction
Review blocked issues #4936 and #4943 first, then trace the existing link-level settlement path and the com.microsoft:update-disposition management entry point. Done means settlement can choose the link or management path per message and carry the listed statuses, properties, and dead-letter fields.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- rust
- Domain
- distributed-systems
- Issue type
- Feature
- Difficulty
- 4/5
- Estimated time
- 3-5 days
- Activity status
- Quiet
- Clarity
- Mostly clear
- Newbie friendliness
- 42/100