Releases: eclipse-hono/hono
Releases · eclipse-hono/hono
2.0.1
Fixes & Enhancements
- The CoAP adapter did not properly consider the reduced minimum RAM requirements for starting up when running as a
native executable on a SubstrateVM. This could have resulted in the adapter not starting up at all, if configured
with less than ~150MB of RAM. This has been fixed. - The HTTP protocol adapter and Device Registry now support a configuration property for explicitly setting the idle timeout.
The timeout is configured with the propertyidleTimeout
. This determines if a connection will timeout and be closed
if no data is received or sent within the idle timeout period. The idle timeout is in seconds.
A zero value means no timeout is used. - The MQTT adapter skipped command or error (the first one) subscription if both are requested for the same device. This has been fixed.
- On startup, Hono components could get into a state that caused certain Kafka client metrics to not get reported.
This has been fixed. - The native executable based Lora adapter container image failed to forward Lora meta information in messages being
sent downstream. This has been fixed. - Default messaging type changed to Kafka. Changed related documentation pages.
- The Command Router component possibly did not reach the "ready" state in case the Kafka broker got restarted during
Command Router startup. This has been fixed. - The CoAP protocol adapter now uses Eclipse Californium 3.6.0.
- Upgraded to JJWT 0.11.5 which contains additional security guards against an ECDSA bug in Java SE versions
15-15.0.6, 17-17.0.2, and 18 (CVE-2022-21449).
Note: if your application does not use these JVM versions, you are not exposed to the JVM vulnerability.
The CVE is not a bug within JJWT itself - it is a bug within the above listed JVM versions, and the JJWT 0.11.5 release
adds additional precautions within JJWT in case an application team is not able to upgrade their JVM in a timely manner. - The Auth server failed to create a token when configured with an ECC based private key that does not use the P-256 curve.
This has been fixed.
1.12.3
1.12.3
Fixes & Enhancements
- The mechanism to delete obsolete
hono.command_internal.*
Kafka topics could have deleted still used topics in
case the Kubernetes API server gave information about the running containers with a delay of several seconds. This has
been fixed. - The CoAP adapter did not properly consider the reduced minimum RAM requirements for starting up when running as a
native executable on a SubstrateVM. This could have resulted in the adapter not starting up at all, if configured
with less than ~150MB of RAM. This has been fixed. - The HTTP protocol adapter and Device Registry now support a configuration property for explicitly setting the idle timeout.
The timeout is configured with the propertyidleTimeout
. This determines if a connection will timeout and be closed
if no data is received or sent within the idle timeout period. The idle timeout is in seconds.
A zero value means no timeout is used. - The MQTT adapter skipped command or error (the first one) subscription if both are requested for the same device. This has been fixed.
- The native executable based Lora adapter container image failed to forward Lora meta information in messages being
sent downstream. This has been fixed. - Upgraded to JJWT 0.11.5 which contains additional security guards against an ECDSA bug in Java SE versions
15-15.0.6, 17-17.0.2, and 18 (CVE-2022-21449).
Note: if your application does not use these JVM versions, you are not exposed to the JVM vulnerability.
The CVE is not a bug within JJWT itself - it is a bug within the above listed JVM versions, and the JJWT 0.11.5 release
adds additional precautions within JJWT in case an application team is not able to upgrade their JVM in a timely manner. - The Auth server failed to create a token when configured with an ECC based private key that does not use the P-256 curve.
This has been fixed. - The CoAP protocol adapter now uses Eclipse Californium 2.7.3.
2.0.0
New features
- The HTTP protocol adapter now allows authenticated gateway devices to omit the tenant ID from the URI of requests
used to upload telemetry, event or command response messages. - The CoAP protocol adapter now allows authenticated gateway devices to omit the tenant ID from the URI of requests
used to upload telemetry, event or command response messages. - The AMQP protocol adapter now allows authenticated gateway devices to omit the tenant ID from the address of
messages used to upload telemetry or event messages. - The MQTT protocol adapter now allows authenticated gateway devices to omit the tenant ID from the topic of
messages used to upload telemetry or event messages. - The CoAP adapter now exposes its resources using short endpoint name alternatives to the existing resources.
Using the short endpoint names, devices can save a few bytes per request. - The protocol adapters now support a configuration property for explicitly setting the percentage of the heap memory
not to be used for maintaining device connections. This can be used to tune the adapter's memory utilization with
regard to the overall amount of memory available to the JVM and the characteristics of the garbage collector being
used.
Fixes & Enhancements
- The Quarkus variant of the MongoDB based device registry failed to start up if the hono.mongodb.dbName property
was not set. However, the DB name should not be required if a connection string is set using the
hono.mongodb.connectionString property. This has been fixed. - When a tenant or device gets disabled or deleted, any open AMQP or MQTT connections from clients having authenticated
themselves as belonging to that tenant or device are getting closed now. - Using OpenSSL with the Quarkus based variant of Hono components did not work as described in the Secure Communication
guide. This has been fixed. - The connection pool configuration for the HotRod client in the Quarkus variant of the Command Router component
didn't support using property names in camel-case. This has been fixed. - HonoConnectionImpl instances failed to release/close the underlying TCP/TLS connection when its disconnect or
shutdown method had been invoked. This has been fixed. - The LoraWAN protocol adapter has been extended with support for Live Objects provider.
- In the Quarkus variants of the MongoDB device registry and the Hono auth component, the provided metrics did not
contain the default set of tags, as used in the other Hono components (e.g. host or component-name). This has been
fixed. - The device registry components now support the reporting of Kafka client metrics.
- The Java source code level of the Hono code has been raised from 11 to 17. This also means that a JDK version 17 or
later is required for building and running Hono. - The mechanism to delete obsolete
hono.command_internal.*
Kafka topics could have deleted still used topics in
case the Kubernetes API server gave information about the running containers with a delay of several seconds. This has
been fixed. - The native executable based images of protocol adapters failed to deserialize a registration assertion if it included command
endpoint information that had been configured for the device. This has been fixed.
API Changes
- The MQTT adapter no longer accepts the
+
wild card character for the tenant ID in a topic filter used for
subscribing to commands. - Support for configuration properties that had been marked as deprecated in Hono versions before 2.0.0 has been
removed. - The Kura protocol adapter has been removed. Eclipse Kura gateways starting with version 4 can still connect to Hono
using Hono's standard MQTT adapter. - The file based device registry has been removed.
- The Spring Boot based variant of the AMQP protocol adapter has been removed.
- The Spring Boot based variant of the HTTP protocol adapter has been removed.
- The Spring Boot based variant of the MQTT protocol adapter has been removed.
- Usage and implementations of the Device Connection API have been removed.
- The Spring Boot based variant of the Command Router has been removed.
- The amqp-device client has been moved from the client module to the new client-device-amqp module. The
org.eclipse.hono.client.device.amqp.AmqpAdapterClientFactory
class is superseded by the new
org.eclipse.hono.client.device.amqp.AmqpAdapterClient
class. - Removed deprecated startServiceClient, stopServiceClient and updateLastGateway methods of class
org.eclipse.hono.adapter.AbstractProtocolAdapterBase. - Removed deprecated org.eclipse.hono.util.BufferResult class.
- Removed deprecated org.eclipse.hono.service.http.AbstractEventBusHttpEndpoint class.
- The client module has been removed. Its deprecated classes have been removed and the remaining classes have been
moved to the client-common, amqp-connection and amqp-common modules. The classes for configuring AMQP client
connections have been moved from the core to the amqp-connection module. - The core module no longer supports Java 8 but has been changed to require at least Java 17 as all the other modules.
- The core module is no longer an OSGi bundle.
- The
org.eclipse.hono.service.auth.AuthenticationService
's method signatures have been changed to return a Future
instead of accepting aHandler<AsyncResult>
. - The
org.eclipse.hono.client.amqp.connection.ConnectionFactory
's method signatures have been changed to return a Future
instead of accepting aHandler<AsyncResult>
. - Removed unused classes
org.eclipse.hono.util.EventBusMessage
andorg.eclipse.hono.util.MessageTap
. - Moved
org.eclipse.hono.util.BaseMessageFilter
to service-base module. - Moved
org.eclipse.hono.util.AmqpErrorException
to amqp-connection client module. - Moved
org.eclipse.hono.util.TimeUntilDisconnectNotification
to application client module. - The
org.eclipse.hono.util.RequestResponseResult
class hierarchy's dependency on the Proton-JApplicationProperties
class
has been removed. Instead, the constructors now accept a standard Map containing the properties. - Moved several AMQP 1.0 specific constants from
org.eclipse.hono.util.Constants
to
org.eclipse.hono.client.amqp.connection.AmqpConstants
in the amqp-connection client module. - Moved the code for injecting and extracting a tracing context to/from AMQP 1.0 messages to the amqp-connection
client module. - Moved
org.eclipse.hono.util.TelemetryExecutionContext
to adapter-base module. - The amqp-device client module no longer supports including arbitrary properties in telemetry, event and command
response messages because it was undefined how these properties would be processed by the AMQP protocol adapter. - The application client module no longer supports including arbitrary properties in command messages
because it was undefined how these properties would be processed by the Hono components. - The order of the method parameters of the
org.eclipse.hono.application.client.CommandSender
interface have been changed
so that mandatory parameters come first. - The hono-service-base-quarkus module has been removed. Its content has been integrated in the hono-service-base module.
- The hono-adapter-base-quarkus module has been removed. Its content has been integrated in the hono-adapter-base module.
- The amqp-device client no longer requires supplying a tenant ID when creating a client or invoking any of its
methods. - The Hono components now export tracing data using the OpenTelemetry Protocol (OTLP). See the
Monitoring & Tracing guide for details on how to configure the trace sampling and the OpenTelemetry Collector
endpoint to send the traces to. Thejaeger
Maven build profile used for including the Jaeger client in the Hono images has
been removed. In order to forward Hono traces to a Jaeger back-end, the OpenTelemetry Collector should be configured accordingly. - The Hono components now support reading and writing trace context information from and to messages exchanged with
other applications in the format defined by the W3C Trace Context and the
W3C Baggage specifications. The Jaeger native propagation format used in earlier Hono
versions is not supported any more. - The Hono command line client has been re-implemented using the Picocli framework. The synopsis of the client has been
changed to provide for a richer user experience. The Getting Started guide has been updated to use the new command
line client as well. - The Hono protocol adapter, command router and device registry Maven modules and Docker images have been renamed,
removing the -vertx and -quarkus parts from the names. - The hono-adapters-quarkus and hono-services-quarkus Maven modules, used as parent modules for protocol adapter
and service implementations, have been renamed to hono-adapters-parent and hono-services-parent, respectively. - The hono.messages metrics have been renamed to hono.telemetry and hono.messages.received has been renamed to
hono.telemetry.processing.duration. - The hono.commands metrics have been renamed to hono.command.
- The hono.downstream metrics have been renamed to hono.amqp, hono.downstream.sent has been renamed to
hono.amqp.delivery.duration and hono.downstream.full has been renamed to hono.amqp.nocredit. - Hono’s service components and protocol adapters now use the Quarkus SmallRye Health extension to implement the health
check and metrics endpoints. That means the health check server configuration is now done via the corresponding Quarkus
configuration properties and not via hono.healthCheck properties any more. See the Monitoring & Tracing guide for details on...
1.11.3
Fixes & Enhancements
- HonoConnectionImpl instances failed to release/close the underlying TCP/TLS connection when its disconnect or
shutdown method had been invoked. This has been fixed. - In the Quarkus variant of the Hono auth component, the provided metrics did not contain the default set of tags, as
used in the other Hono components (e.g. host or component-name). This has been fixed.
1.12.2
Fixes & Enhancements
- The Quarkus variant of the MongoDB device registry did not accept HTTP endpoint credentials that worked with the
Spring Boot based variant because password hashes were created in lower case instead of upper case. This has been fixed. - In some cases, invalid HTTP requests to the HTTP adapter or the Device Registry caused a response
with a 500 status code instead of the corresponding 4xx status code. This has been fixed. - HonoConnectionImpl instances failed to release/close the underlying TCP/TLS connection when its disconnect or
shutdown method had been invoked. This has been fixed. - In the Quarkus variants of the MongoDB device registry and the Hono auth component, the provided metrics did not
contain the default set of tags, as used in the other Hono components (e.g. host or component-name). This has been
fixed.
1.12.1
Fixes & Enhancements
- The Quarkus variant of the MongoDB based device registry failed to start up if the hono.mongodb.dbName property
was not set. However, the DB name should not be required if a connection string is set using the
hono.mongodb.connectionString property. This has been fixed. - Using OpenSSL with the Quarkus based variant of Hono components did not work as described in the Secure Communication
guide. This has been fixed. - The connection pool configuration for the HotRod client in the Quarkus variant of the Command Router component
didn't support using property names in camel-case. This has been fixed.
1.12.0
New Features
- The Mongo DB based device registry now supports multiple tenants to use the same trust anchors for authenticating
devices based on client certificates. The devices belonging to such tenants need to indicate the tenant identifier
using the Server Name Indication extension during their TLS handshake with a protocol adapter. Please refer to the
Device Registry Management API for details on how to configure tenants accordingly. Please refer to the protocol
adapter user guides and the Device Identity concept page for details regarding device authentication based on client
certificates. - A Quarkus based variant of the MongoDB device registry has been added.
Fixes & Enhancements
- The device registry containers might not have started up properly when used with Kafka as the messaging
infrastructure. This has been fixed. - The MongoDB device registry did not accept HTTP endpoint credentials that worked with Hono <= 1.10 because
password hashes were created in lower case instead of upper case. This has been fixed. - The native executable of the Command Router component did not start when configured with an embedded cache.
This has been fixed. - There was an issue trying to send connection events concerning unauthenticated MQTT/AMQP devices. This has been fixed.
Deprecations
- The Spring Boot based variant of the MongoDB device registry has been deprecated and marked for removal in Hono 2.0.0.
1.11.2
Fixes & Enhancements
- The MongoDB device registry did not accept HTTP endpoint credentials that worked with Hono <= 1.10 because
password hashes were created in lower case instead of upper case. This has been fixed. - The native executable of the Command Router component did not start when configured with an embedded cache.
This has been fixed. - There was an issue trying to send connection events concerning unauthenticated MQTT/AMQP devices. This has been fixed.
1.11.0
New Features
- The Authentication Server now also reports the
hono.connections.attempts
metric which counts the number of authentication
attempts made by clients. - The JDBC DB based registry now also supports enforcement of registration limits configured at the tenant level.
In particular, the maximum number of devices and the maximum number of credentials per device can be set in
a tenant's registration-limits property. Please refer to the User Guide for details. - Kafka clients used by a component can now be configured individually instead of all clients of a type using the same
configuration. The prefixes that are prepended to the configuration properties of the native Kafka client have
changed. For existing configuration properties prefixed withhono.kafka.commonClientConfig
properties, no change is
needed. Other configurations with specific consumer/producer/admin client properties have to be adapted. Please refer
to the Hono Kafka Client Configuration Guide for details. - The protocol adapters now include a ttl header/property in every message being forwarded, regardless of message
type. This allows a consumer of a message to easily determine if the message should be processed or considered
expired already. The device registry supports the definition of default ttl values for the different types of
messages at both the tenant and device level. Please refer to the Tenant API for details regarding the
corresponding default property names to use.
Fixes & Enhancements
- The number of credits that the Mongo DB based registry would flow to a newly connected client could not be set using
the documented environment variableHONO_CREDENTIALS_SVC_RECEIVERLINKCREDIT
. Instead, the initial link credit can be
configured using environment variableHONO_REGISTRY_AMQP_RECEIVERLINKCREDIT
. The Mongo DB based registry's admin guide
has been updated accordingly. - When using Kafka messaging, there could possibly be an exception during startup of the Command Router component,
meaning the component was potentially only available after a number of startup attempts. This has been fixed. - The Quarkus based variant of the Lora protocol adapter did not start up unless the
HONO_LORA_COMMANDENABLEDTENANTS
environment variable had been set. This has been fixed by removing this (unused) variable from the Lora adapter
altogether. - All downstream messages that can be consumed via Hono's north bound APIs now include a
creation-time
header
which indicates the point in time at which the message has been created. - The error messages returned by protocol adapters when sending commands received via Kafka now include a reasonable
error description. - The tenant's configuration property
auto-provisioning-device-id-template
is now extended to support more
subjectDN's attributes namely Organizational Unit Name (OU) and Organization Name (O). For more information
please refer to the Device Registry Management API. - The container images published by the Hono project are now built on top of Java 17 base images provided by the
Eclipse Temurin project. - The Hono container images released with tag 1.10.0 failed to start up when not running as user
root
because the
Java process was lacking authority to create a temporary directory in the file system's root folder (/
).
This has been fixed. - Command response messages published via Kafka did not contain the
tenant_id
header. This has been fixed. - Hono's components now support configuring the ciphers used in the TLS handshake when connecting to Infinispan servers.
For the Command Router component remote data grid configuration this can be done by setting thehono.commandRouter.cache.remote.sslCiphers
property. - When using Kafka messaging, the Hono components will now retry creating the Kafka clients in case the Kafka bootstrap
server URLs are not yet resolvable. This will prevent unnecessary restarts of the Hono components during initial
deployment. - The native image variant of the Command Router component failed to connect to an Infinispan server using SASL
SCRAM. This has been fixed. - The lora adapter supports unconfirmed uplink data for the firefly provider.
- The poll timeout used by the Kafka consumer clients in the Hono components can now be configured individually.
Please refer to the Hono Kafka Client Configuration Guide for details.
Deprecations
- The Spring Boot based variant of the protocol adapters has been deprecated and marked for removal in Hono 2.0.0.
- The Kura 3 protocol adapter has been deprecated and marked for removal in Hono 2.0.0. Support for Kura version 4 and
later is still available by means of Hono's standard MQTT adapter.
API Changes
- The
hono.kafka.defaultClientIdPrefix
configuration property needs to be removed from existing configurations.
Configuring parts of the created Kafka client identifiers should usually not be needed any more. To still set a custom
part, theclient.id
property value may be used instead. It is adopted as prefix for created client identifiers. - A new API for notifications among Hono components has been introduced. For Hono deployments using an AMQP messaging
network, it has to be made sure that addresses with thenotification/
prefix are configured to use multicast.
See thetests/src/test/resources/qpid/qdrouterd-with-broker.json
file for an example Qpid Dispatch Router
configuration.
1.10.1
1.10.1
Fixes & Enhancements
- The number of credits that the Mongo DB based registry would flow to a newly connected client could not be set using
the documented environment variableHONO_CREDENTIALS_SVC_RECEIVERLINKCREDIT
. Instead, the initial link credit can be
configured using environment variableHONO_REGISTRY_AMQP_RECEIVERLINKCREDIT
. The Mongo DB based registry's admin guide
has been updated accordingly. - When using Kafka messaging, there could possibly be an exception during startup of the Command Router component,
meaning the component was potentially only available after a number of startup attempts. This has been fixed. - The Quarkus based variant of the Lora protocol adapter did not start up unless the
HONO_LORA_COMMANDENABLEDTENANTS
environment variable had been set. This has been fixed by removing this (unused) variable from the Lora adapter
altogether. - The Hono container images released with tag 1.10.0 failed to start up when not running as user
root
because the
Java process was lacking authority to create a temporary directory in the file system's root folder (/
).
This has been fixed. - Command response messages published via Kafka did not contain the
tenant_id
header. This has been fixed. - Hono's components now support configuring the ciphers used in the TLS handshake when connecting to Infinispan servers.
For the Command Router component remote data grid configuration this can be done by setting the
hono.commandRouter.cache.remote.sslCiphers
property. - When using Kafka messaging, protocol adapters may have shown a prolonged delay in processing command & control messages
in certain situations in which one Kafka cluster node was shortly unavailable. This has been fixed. - The native image variant of the Command Router component failed to connect to an Infinispan server using SASL
SCRAM. This has been fixed. - The lora adapter supports unconfirmed uplink data for the firefly provider.