Release 1.4.2 is relatively small and is mostly focused on tidying up the way the library manages the connection status. Previously sync/ atomic was used to read/update the status but this led to a range of potential deadlocks, and workarounds to avoid these, which made the code difficult to follow. The new connectionStatus separates status handling from client and should simplify further development whilst resolving potential race conditions. It is my hope that users will not notice any change (@master was updated on 10th August and the updated code has been running in production at a few sites since then without issue).
A further change is that it is now possible to disable auto acknowledgment so that received messages can be manually acknowledged (or, more to the point, not acknowledged!).
Thanks to everyone who submitted issues and contributed code (list of the main merged pull requests below):
Resolve situation where broker accepted connection but did not respond to CONNECT packet in a timely manner (should be very unusual but was reported in #597). @MattBrittan in #603
The license update in v1.4.0 included changes which prevented https://pkg.go.dev from displaying the documentation. The only change in this release is to update LICENSE such that it includes the full test of the Eclipse Public License v2.0 (tested this on a fork and it appears to resolve the issue).
v1.4.0
In the year since the release of v1.3.5 the majority of changes have been small incremental improvements/fixes. It is worth noting that the library has moved to the EPL v2.0 license (faq).
A few new features have been added:
Managing the connection to the broker can become involved (e.g. setting unusual TCP/TLS options, need for a non-standard TLS library, require a specific web-socket library etc) and the library already has too many options! To address this a new option, SetCustomOpenConectionFn, has been added that enables users to provide a function (func(uri *url.URL, options ClientOptions) (net.Conn, error)) that will be called to establish a connection (replacing the inbuilt code). This should enable edge cases to be addressed without the need for further changes to this library.
When connecting/reconnecting it is possible that there will be a lot of packets queued; in the past the library sent all of these packets as rapidly as possible when the connection came up. However this could saturate some network links causing the connection to drop (a vicious circle). The new option SetMaxResumePubInFlight allows a limit to be imposed; the library will send out the requested number of packets and then wait for acknowledgements before sending more (only applicable at QOS1+).
Thanks to everyone who submitted issues and contributed code (list of the main merged pull requests below):
Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.
Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it
- `@dependabot merge` will merge this PR after your CI passes on it
- `@dependabot squash and merge` will squash and merge this PR after your CI passes on it
- `@dependabot cancel merge` will cancel a previously requested merge and block automerging
- `@dependabot reopen` will reopen this PR if it is closed
- `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
- `@dependabot show ignore conditions` will show all of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
Bumps github.com/eclipse/paho.mqtt.golang from 1.3.5 to 1.4.3.
Release notes
Sourced from github.com/eclipse/paho.mqtt.golang's releases.
... (truncated)
Commits
aa0a8ad
Add warning re lack of ACK when no handler5e01522
Merge pull request #638 from ChIoT-Tech/mastere3d0846
Fix for PR #624 as per comment from@Tieske
(previous version worked for the ...c1df6d0
Update go version to 1.18 and update dependencies to address CVE's602b06b
Update go version to 1.18 and update dependencies to address CVE'se3fa503
Merge pull request #625 from tomatod/connect_retry_backoff - Prevent reconnec...d174b9a
Add back-off controller for sleep before reconnection when connection lost is...4b066a0
Merge pull request #624 from ChIoT-Tech/master3a8066f
Clear URL User before creating websocket connection (allowing MQTT username/p...d9dea69
Merge pull request #622 from tomatod/fix_panic_when_keepalive_zeroDependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting
@dependabot rebase
.Dependabot commands and options
You can trigger Dependabot actions by commenting on this PR: - `@dependabot rebase` will rebase this PR - `@dependabot recreate` will recreate this PR, overwriting any edits that have been made to it - `@dependabot merge` will merge this PR after your CI passes on it - `@dependabot squash and merge` will squash and merge this PR after your CI passes on it - `@dependabot cancel merge` will cancel a previously requested merge and block automerging - `@dependabot reopen` will reopen this PR if it is closed - `@dependabot close` will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually - `@dependabot show