When a publish, subscribe or unsubscribe request was cancelled or
timed out client-side, the corresponding awaitable was removed from
the packet dispatcher. A subsequent PUBACK / PUBCOMP / SUBACK /
UNSUBACK arriving from the broker then fell through to the default
case and raised an MqttProtocolViolationException, which forced a
disconnect. Under high publish load (issue #2079) and from multiple
threads (issue #2078) this manifested as sporadic connection drops.
Match these acknowledgement packets explicitly and log a warning
when no awaiter is registered, instead of treating it as a protocol
violation. The connection is now preserved.
Also documents the thread-safety guarantees of IMqttClient: publish,
subscribe, unsubscribe and ping operations are safe to invoke
concurrently. Connect / disconnect must still be coordinated.
Co-authored-by: meisa <meisa@MAFDEL>
Co-authored-by: christian <6939810+chkr1011@users.noreply.github.com>
* Issues #2091 Improve the performance of RetainedMessages without subscribing to RetainedMessageChangedEvent.
* Fix build errors
* Update release notes
---------
Co-authored-by: Christian <6939810+chkr1011@users.noreply.github.com>
* Corrected Cancellation Source for KeepAlive Messages
* Use half of the keep alive value for the ping timeout
* Update release notes
* Update ReleaseNotes.md
* Update ReleaseNotes.md
* Update ReleaseNotes.md
---------
Co-authored-by: christian <6939810+chkr1011@users.noreply.github.com>
* Improve session message injection methods
* Add more tests for session injection
* Change return type from MqttPublishPacket to MqttPacketWithIdentifier
* Use dedicated type for MattApplicationMessage injection result
* Code review minor fixes
* Apply project code style
* Update release notes
---------
Co-authored-by: Anton Smolkov <anton.smolkov@idp.zyfra.com>
Co-authored-by: christian <6939810+chkr1011@users.noreply.github.com>
* Implement enhanced authentication for client and server.
* Update samples
* Add abstraction layer
* Merge master
* Use dedicated class for public API.
* Update release notes
* Rename methods to fit naming scheme
* Fix unit tests and samples