- Fix
vmq_webhooks
issue where MQTTv5 hooks where not configurable in the
vernemq.conf
file. - Support shared subscriptions in
vmq_bridge
. - Fix bug in Prometheus output (#923).
- Fix
max_message_rate
to include MQTTv5 sessions. - Support new
throttle
modifier for theauth_on_publish
and
auth_on_publish_m5
hooks which will throttle the publishing client by
waiting for a given number of milliseconds before reading new data from the
client socket. Note, backpressure is not supported for websocket
connections. This feature was kindly sponsored by Arduino SA
(https://www.arduino.cc/). - Fix issue with long-running
vmq-admin
commands (#644). - Added a new HTTP module
vmq_health_http
exposing a/health
endpoint that
returns 200 when VerneMQ is accepting connections and joined the cluster
(for clustered setups) or returns 503 in case any of the two conditions
are not met (#889). - Fix issue where a QoS2 message would be republished if a client would resend
the PUBLISH packet with the same message id within a non-finished QoS2 flow
(#944). - Make VerneMQ build on FreeBSD (11.2-RELEASE) with
gmake rel
. - Fix issue with blocking socket commands in inter-node communication.
- Improve error messages when parsing invalid CONNECT packets.
- Log IP and port information on authentication failures to make it easy to
block the client with tools like Fail2ban (#931). - Fix issue which would crash the session if a client would resend a (valid)
pubrec during a Qos2 flow (#926). - Fix
vmq_diversity
error message if invalid or unknown modifiers are returned
from a lua hook implementation. - Fix issue preventing MQTT 5.0 properties from being modifiable in
auth_on_publish_m5
(#964). - Fix issue which causes a crash if not enough data is available while parsing
the CONNECT frame invmq_mqtt_pre_init
(#950, #962). - Fix issue which could cause
vmq-admin session show
to crash when using
--limit=X
to limit the number of returned results (#902). - Handle edge case in the websocket implementation which could cause warninigs
when the session was terminating. - Expose
vernemq_dev_api:disconnect_by_subscriber_id/2
in lua
vmq_api.disconnect_by_subscriber_id/2
, an example looks like:
vmq_api.disconnect_by_subscriber_id({mountpoint = "", client_id = "client-id"}, {do_cleanup = true})
. - Improve
vmq_webhooks
errors so the error from the endpoint is shown as the
error reason where relevant. - Optimization: optimize away read operation during client registration by
reusing already available data. - Enable plugins to expose metrics via the available metric providers.
- Add histogram metric type.
- Fix incorrect debug log message in QoS 2 flow.
- Expose bridge metric for messages dropped in case the outgoing queue is full.
- Log (debug level) when a LWT is suppressed on session takeover.
- Optimize subscribe operation by refactoring away one read from the metadata
store. - Add protection mechanism for the plumtree metadata store from subscription
floods by dropping and not acknowledgingi_have
messages when the mailbox
size grows above a certain threshold. This threshold is configurable via the
plumtree.drop_i_have_threshold
hidden option. The default is 1000000. This
work was kindly contributed by ADB (https://www.adbglobal.com). - Add new
vmq-admin retain
commands to inspect the retained message store. - Support for different MySQL password hashing methods in
vmq_diversity
,
ensuring compatibility with MySQL 8.0.11+. The method is configurable via the
vmq_diversity.mysql.password_hash_method
option which allows:
password
(default for compatibility),md5
,sha1
orsha256
. - Fix the HTTP
/status.json
endpoint to have a valid JSON output (#786). - Fix bug where internal application plugins where shown as normal plugins.
- Fix crash in bridge when calling
vmq-admin session show
by fixing the
vmq_ql
row initializer to handle plugin sessions (the bridge starts a local
plugin session). - Add improvements to VerneMQ status page to have nicer UI and be readable on smaller devices.
- Upgraded dependency
sext
to 1.5.0 (required for better OSX compilation). - Do not accept new client connections while the broker is shutting down as this
could cause errors to be reported in the log (#1004). - Fix
vmq_diversity
PostgreSQL reconnect issue (#1008). - Fix
vmq_webhooks
so peer port is not considered when caching the
auth_on_register
to avoid cache misses. - Multiple bug fixes and improvements in
vmq_swc
. - Add the
vmq_swc
metadata plugin (using the already existing LevelDB backend) to
the default VerneMQ release. To usevmq_swc
instead ofvmq_plumtree
set
metadata_plugin = vmq_swc
invernemq.conf
.vmq_swc
is still in Beta. - Add missing increments of the
mqtt_connack_sent
metric for CONNACK
success(0) for MQTT 3.1.1. - Handle edge case with unknown task completion messages in
vmq_reg_sync
after
a restart. - Fix bug which could cause a queue cleanup to block indefinitely and cause the
vmq_in_order_delivery_SUITE
tests to fail. - Add a new metric (queue_initialized_from_storage) to better monitor queue
initialization process after a node restart. - Fix edge case where an extra queue process could be started when metadata
events arrive late. Now local queue processes are only started when triggered
via a new local MQTT session. - Reimplement dead queue repair mechanism.
- Add feature to reauthorize existing client subscriptions by reapplying current
auth_on_subscribe
andauth_on_subscribe_m5
hooks. This feature is exposed as a developer API invernemq_dev
, via
thevmq-admin session reauthorize
CLI command, and as a API forvmq_diversity
Lua scripts. This
work was kindly sponsored by AppModule AG (http://www.appmodule.net). - Improve planned cluster leave queue migration speed significantly (#766).
- Start metrics server before setting up queues to ensure queue metric counts
are correct when restarting VerneMQ. - Let Travis CI build the VerneMQ release packages.
- Add new metric
system_process_count
which is a gauge representing the
current number of Erlang processes. - Add
queue_started_at
andsession_started_at
information to thevmq-admin session show
command. Times are POSIX time in milliseconds and local to the
node where the session or queue was started.
Assets
10
larshesel
released this
- Fix
max_message_rate
to include MQTTv5 sessions. - Fix issue with long-running
vmq-admin
commands (#644). - Fix issue where a QoS2 message would be republished if a client would resend
the PUBLISH packet with the same message id within a non-finished QoS2 flow
(#944). - Improve error messages when parsing invalid CONNECT packets.
- Fix issue which would crash the session if a client would resend a (valid)
pubrec during a Qos2 flow (#926). - Fix
vmq_diversity
error message if invalid or unknown modifiers are returned
from a lua hook implementation. - Fix issue preventing MQTT 5.0 properties from being modifiable in
auth_on_publish_m5
(#964). - Fix issue which causes a crash if not enough data is available while parsing
the CONNECT frame invmq_mqtt_pre_init
(#950, #962). - Fix issue which could cause
vmq-admin session show
to crash when using
--limit=X
to limit the number of returned results (#902). - Handle edge case in the websocket implementation which could cause warninigs
when the session was terminating.
Assets
2
larshesel
released this
- Fix
vmq_webhooks
issue where MQTTv5 hooks where not configurable in the
vernemq.conf
file. - Fix bug in Prometheus output (#923).
Assets
2
dergraf
released this
-
Fix issue when calling a function in a Lua script that requires more time to complete than the default
gen_server
timeout (#589). -
Silently drop messages published by the client that use a routing key starting with '$'.
-
Full MQTTv5 support
With this release VerneMQ officially supports MQTT protocol version
5.0. The MQTTv5 support is currently marked as in BETA and we may
still have to change some things.VerneMQ has full support for the complete MQTTv5 spec, but to list a
few of the new features:-
Support for enhanced (re)authentication
-
User properties
-
Message Expiration
-
Last Will and Testament delay
-
Shared subscriptions
-
Retained messages
-
Request/Response flows
-
Topic aliases
VerneMQ supports topic aliases from both the client to the broker and from
the broker to the client.When a client connects to the broker, the broker will inform the client of
the maximum allowed topic alias using the topic alias max property on the
CONNACK packet (if it has been set to a non-zero value). The topic alias
maximum property can be configured through thetopic_alias_max
configuration variable or overriden in a plugin in theauth_on_register
hook. The broker will then handle topic aliases from the client as per the
MQTTv5 spec. -
Flow control
-
Subscription flags Retain as Published, No Local and Retain Handling.
-
Subscriber ids
By default MQTTv5 is disabled, but can be enabled on a listener basis, for
examplelistener.tcp.allowed_protocol_versions=3,4,5
would enable MQTT
version 3.1, 3.1.1 and 5.0 on the TCP listener.MQTTv5 support has been added to the
vmq_passwd
,vmq_acl
,vmq_webhooks
plugins as well as the parts of thevmq_diversity
plugin to support the
MySQL, PostgreSQL, Redis and MongoDB authentication and authorization
mechanisms. The Lua scripting language provided by thevmq_diversity
plugin
does not yet expose all MQTT 5.0 plugin hooks.The
vmq_bridge
plugin currently has no support for MQTTv5.!! Note !! that all MQTTv5 related features and plugins are in BETA and may
still change if needed. -
-
The metrics:
mqtt_connack_not_authorized_sent
mqtt_connack_bad_credentials_sent
mqtt_connack_server_unavailable_sent
mqtt_connack_identifier_rejected_sent
mqtt_connack_unacceptable_protocol_sent
mqtt_connack_accepted_sentHave been merged into a single metric
mqtt_connack_sent
and the various MQTT
3.1.1 return codes have been mapped into labels. So for example
mqtt_connack_sent
with the labelreturn_code=success
replaces
mqtt_connack_accepted_sent
. -
Added on_message_drop hook that is called for every message dropped due to
exceeding the MQTTv5 max_packet_size property, hitting the message expiry,
or when load shedding when enqueing messages. -
Fix ordering bug in webhook subscribe topic authentication and topic rewrites
(#823) -
Fix issue when terminating the
vmq_server
application (#828). -
Make VerneMQ build on SmartOS / Illumos / Solaris.
-
Ensure strings passed from Lua to the logger are escaped (#864).
-
Handle Mongo Date / ISODate datatype properly in Lua / vmq_diversity
(#857). -
Optimize subscribe/unsubscribe operations for large fanout cases.
-
Allow non-standard MQTT version 131 (MQTT 3.1 bridge) by default (this was
accidentally changed in VerneMQ 1.4.0). -
Improve error messages returned by the
vmq_diversity
plugin so it's easier
to understand and debug authentication and authorisation issues. -
Improve performance for looking up queue processes.
-
Make VerneMQ run on Erlang/OTP 21. To do this we had to upgrade
rebar3
to
version 3.6.0 andlager
to version 3.6.3. We also removed theeper
dependency and suppressed some new warnings due toerlang:get_stacktrace/0
having been deprecated in Erlang/OTP 21. -
The bridge plugin (
vmq_bridge
) now has an option to queue outgoing message
in case the network connection disappears. This is configurable with the
max_outgoing_buffered_messages
setting on a bridge. In addition the bridge
now has a simple cli interface undervmq-admin bridge show
. This work was
kindly sponsored by Diacare-Soft(http://diacare-soft.ru). -
Fix multiple message retry issues in the MQTT client used by vmq_bridge.
-
Fix issue where the message ordering wasn't preserved after a client reconnect.
-
Add experimental
vmq_swc
plugin that provides an alternative to the existing
vmq_plumtree
for metadata storage and replication. One must compile VerneMQ
withmake swc
to generate a release containing thevmq_swc
plugin. -
Remove unused
vmq_bridge
sslcapath
config option. This was never used
internally.
Assets
2
dergraf
released this
- Fix issue in the bridge preventing it from reconnecting after a connection
timeout (#726). - Fix issue with self referential cluster leaves and cluster readiness probing
in general (#717). - Add preparations for MQTTv5:
- Make it possible to extend the cluster internal message format when adding
new features while ensuring back- and forwards compatibility. - Refactor the leveldb message store code to support versioned indexes as well
as messages. - Refactor the retained message store to support versions.
- Add support for subscriber data with subscription options.
- Make it possible to extend the cluster internal message format when adding
- Fix issue when validating a shared subscription topic (#756).
- Fix issue with retried PUBREC frames (#750).
- Make it possible to suppress the Last Will and Testament message if an
existing session already exists for the connecting client. This is
configurable via the hidden settingsuppress_lwt_on_session_takeover
in the
VerneMQ configuration file. The default isoff
. - Fix issue with PUBREL frames retried after client reconnects (#762).
- Refactor and cleanup retry mechanism.
- Warn about deprecated setting
message_size_limit
only when it has been defined. - Change build script so nightly packages will have names on the form
vernemq_1.4.0-10-gde1b1f5-1_amd64.deb
, wherede1b1f5
refers to the commit
hash from which the package was built and10
is the number of commits since
the latest tag. This makes it much easier to reason about nightly builds and
the features they contain. - Refactor and generalize the metrics systems to allow labelling metrics coming
from different sources in order to differentiate them in the various exporters
and the command line. Labels are added to the Prometheus exporter by
default. To enable generating additional metrics from the labels in the
graphite exporter the hidden settinggraphite_include_labels
has to be set
toon
in thevernemq.conf
file. Labels are not exposed in the $SYS
metrics. - Ensure the
vmq_bridge
is properly restarted after a crash (#785). - Fix issue where not calling
http.body(ref)
in a Lua script would not return
the underlyning HTTP connection to the connection pool. This now happens
automatically, irregardless of the user callinghttp.body(ref)
or not
(#588).
Assets
2
dergraf
released this
- Fix issue with PUBREL frames retried after client reconnects (#762).
- Refactor and cleanup retry mechanism.
- Ensure the
vmq_bridge
is properly restarted after a crash (#785). - Fix issue where not calling
http.body(ref)
in a Lua script would not return
the underlyning HTTP connection to the connection pool. This now happens
automatically, irregardless of the user callinghttp.body(ref)
or not
(#588).
Assets
2
dergraf
released this
- Fix for OSX compilation issue on
vmq_passwd
due to openssl headers not found. - Refactoring to further abstract and generalize the Plumtree metadata layer.
- Small refactoring moving the calling of plugin hooks into the fsm code. This
is a preparation for MQTTv5. Note, this change has an impact on the
vmq_reg:direct_plugin_exports/1
function. Even though this function is
internal and as such not guaranteed to be stable, we know some plugin
developers use it and we therefore wanted to describe the changes. It works as
before, except that the hooksauth_on_subscribe
,on_subscribe
or
on_unsuscribe
hooks will no longer be called when using the exported
functions. - Corrected a few spelling errors in the
vmq-admin
help commands. - Added two new hidden configuration parameters for
vmq_webhooks
.vmq_webhooks
uses
the hackney HTTP client for HTTP requests.
It starts its own hackney pool with a default connection pool of 100, and a
connection timeout of 60000 milliseconds. This connection pool con now be
configurable using the settingsvmq_webhooks.pool_max_connections
and
vmq_webhooks.pool_timeout
(#621). - Add a first version of a VerneMQ status page showing node and cluster
information. This web-page is by default available on
http://localhost:8888/status. The status page is implemented using jQuery,
Twitter Bootstrap und mustache.js. As this is the first version the page
should be considered experimental and will likely be changed in future
releases. - Bugfix: Handle return values correctly when enqueuing messages to offline
shared subscribers (#625). - Bugfix: Fix issue preventing messages delivered to a subscriber group from
being delivered to the online group members first before attempting delivery
to offline queues (#618). - Fix some Dialyzer issues.
- Reduce replication load during a netsplit by making sure data is not attempted
to be replicated to unreachable nodes. - Bugfix: Fix issue causing some
session show
options (peer_host
,
peer_port
) to not work for websocket clients (#542). - Bugfix: Fix routing table initialization issue after restarting a node
preventing shared subscriptions on a remote node from being included in the
routing table (#595). - Bugfix: Fix race condition when fetching data from the internal query subsystem.
- Fix build issue on Raspberry PI (
make rpi-32
). - Make it possible to specify which protocol versions are allowed on an MQTT
listener. By default the protocol versions allowed are versions 3 and 4 (MQTT
v3.1 and v3.1.1 respectively). To set the allowed protocol versions one can
uselistener.tcp.allowed_protocol_versions = [3,4]
on the transport level or
for a specific listener using
listener.tcp.specific_listener.allowed_protocol_versions
. - Fix bug causing an exception to be thrown when
vmq-admin cluster leave
is
used with a timout value less than 5 seconds (#642). - Small refactoring enabling to store versioned message store values. This is a
preparation for MQTTv5. - Bugfix: Fix a bug that prevented user plugins with an explicit path to be
loaded. - Fix issue with new rebar3 upstream plugin version (the port-compiler) which
made builds fail by pegging it to an older version (1.8.0). - Add
xmerl
andinets
from the Erlang standard library to the release in order
to allow plugin developers to have these libraries available. - Bugfix: Fix typo (
graphie_api_key
->graphite_api_key
) preventing the
graphite api key from being set in thevernemq.conf
file. - Bugfix: WebHooks Plugin. Close the Hackney CRef so that the socket is given
back to the Hackney pool, for the case of non-200 HTTP OK status codes. - Bugfix: fix bug where queries with mountpoint and client-ids would return no
entries causing disconnecting a client with a specific mountpoint to
fail. Also ensure to use the default mountpoint if no mountpoint was
passed. (#714). - Upgraded vernemq_dev to include the
disconnect_by_subscriber_id/2
API.
Assets
2
larshesel
released this
- Fix bug causing an exception to be thrown when
vmq-admin cluster leave
is
used with a timout value less than 5 seconds (#642). - Fix for OSX compilation issue on
vmq_passwd
due to openssl headers not found. - Bugfix: Fix a bug that prevented user plugins with an explicit path to be
loaded - Fix build issue on Raspberry PI (
make rpi-32
). - Bugfix: Fix race condition when fetching data from the internal query subsystem.
Assets
2
larshesel
released this
- Bugfix: Handle return values correctly when enqueuing messages to offline
shared subscribers (#625). - Bugfix: Fix issue preventing messages delivered to a subscriber group from
being delivered to the online group members first before attempting delivery
to offline queues (#618). - Fix some Dialyzer issues.
- Reduce replication load during a netsplit by making sure data is not attempted
to be replicated to unreachable nodes. - Bugfix: Fix issue causing some
session show
options (peer_host
,
peer_port
) to not work for websocket clients (#542). - Bugfix: Fix routing table initialization issue after restarting a node
preventing shared subscriptions on a remote node from being included in the
routing table (#595).