Azure / Azure/azure-sdk-for-rust

[Service Bus] Add the management settlement path for messages off the current link

Open
#4,944 0 comments 1 reaction 0 assignees View on GitHub
Client Service Bus
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

Open the contributing 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

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.