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.
This is the 4th PR in a series to improve the request queue behavior for sleepy end devices, as discussed in Koenkk/zigbee2mqtt#17177.
This PR introduces the following change: All new requests are attempted to be sent at least once, even when the request queue is not empty.
With the previous implementation, requests were held back until the end device checks in, but only if there is already something in the queue. This can lead to an unneccessary delay in request execution if the end device is not actually sleeping, but messages are in the queue for other reasons (e.g. temporary connection loss). For the user, this can result in end devices appearing to be unresponsive seemingly at random (e.g. Koenkk/zigbee2mqtt#1347).
The proposed change makes the send behavior consistent for all request queue sizes by always attempting to send new requests once. This means that for the "default" case of an empty queue, nothing changes. Only for non-empty queues, an additional initial send attempt is introduced. If this attempt fails, we fall back to the previous queue behavior.