apache / apache/shenyu

[BUG] Last Will & Testament entirely unimplemented — will never published on ungraceful disconnect

Open
#6,852 2 comments 0 reactions 1 assignee Claimed by @wy471x View on GitHub
plugin: mqtt priority: high type: bug
Dominant language
Java
Stars
8.8k
Forks
3.1k
Avg merge
7d 1h
Merged PRs (30d)
85

Description

## Description
The CONNECT payload's will fields are dropped on the floor; nothing stores a will (module-wide grep for `willMessage|willTopic|cleanSession|hasWill` returns zero hits), `Disconnect` never publishes one, and there is no `channelInactive`/ungraceful-close hook that would fire a will on a dropped connection.

## Location
- `shenyu-protocol/shenyu-protocol-mqtt/src/main/java/org/apache/shenyu/protocol/mqtt/Connect.java` (connect method never reads will fields)
- `shenyu-protocol/shenyu-protocol-mqtt/src/main/java/org/apache/shenyu/protocol/mqtt/Disconnect.java:39` (`// todo Last words`)
- `shenyu-protocol/shenyu-protocol-mqtt/src/main/java/org/apache/shenyu/protocol/mqtt/MqttTransportHandler.java:42-44` (empty `operationComplete`)

## Impact
Clients that publish a Last Will during CONNECT never have it delivered on an ungraceful disconnect, defeating a core reliability feature of MQTT.

## Suggested fix
Parse and store will fields in `MqttContext`/session on CONNECT; on `channelInactive` for a non-clean session with a will, publish the will message with its configured QoS/retain; clear the will on graceful DISCONNECT.

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.