Releases: bifromqio/bifromq
v3.3.4
This patch release includes the following changes:
Improvements:
- Enhanced usability of the Demo plugin. See details in PR #108 by @Gujiawei-Edinburgh
- Added support for server-assigned client identifiers for both MQTT 3 and MQTT 5 protocols. @popduke
Bug Fixes:
- Fixed the handling of MQTT 5 connections with empty client identifiers. @popduke
- Removed unnecessary fields in MQTT 5 Disconnect packets to align with the MQTT5 Spec. See details in PR #107. by @Gujiawei-Edinburgh
Others:
- Updated issue templates with new guidelines for better user support by @Gujiawei-Edinburgh.
Full Changelog: v3.3.3...v3.3.4
BifroMQ-v3.3.3
This patch release includes the following changes:
Improvements:
- Optimized the subscription cache population mechanism to reduce processing time during burst workloads.
- Enhanced the subscription cache invalidation mechanism, ensuring concurrent subscription changes take effect promptly.
Bug Fixes:
- Corrected reported event types for dropped QoS1/2 messages when the MQTT5 NO_LOCAL flag is explicitly set.
Other Changes:
- Updated maven-archetype-plugin to address a security vulnerability.
Full Changelog: v3.3.2…v3.3.3
BifroMQ-v3.3.2
This patch release includes the following changes:
Improvements:
- Added support for storing retained messages of a single tenant across multiple ranges.
- Implemented message dropping for overflowed messages when a channel becomes unwritable due to a slow subscriber, preventing OOM.
Bug Fixes:
- Fixed an issue where retain requests could be dropped during the batching phase.
- Resolved a bug that caused the route cache to become out of sync when sub/unsub operations were performed concurrently.
Other Changes:
- Upgraded
protobuf-java
to version 3.25.5 to address its security vulnerability.
Full Changelog: v3.3.1...v3.3.2
BifroMQ-v3.3.1
This patch release includes the following changes:
New Features:
- Support for self-signed certificates for MQTT over TLS and WSS for non-production purposes.
Improvements:
- Removed the legacy approach for determining local bindable address in the startup script, which helps avoid confusion in environments with multiple NICs.
- Improved the route cache invalidation mechanism to reduce the impact of adding or removing wildcard topic filters.
Bug Fixes:
- Fixed a memory leak issue when building an RPC pipeline or stream to an unreachable server.
Others:
- Improved the stability of integration tests.
Full Changelog: v3.3.0...v3.3.1
BifroMQ-v3.3.0
This minor release includes the following changes:
Due to optimizations made to the storage engine in this release, the replace method is required for rolling upgrades. Please refer to the online documentation for detailed instructions.
New Features:
- Introduced a new built-in StoreBalancer (UnreachableReplicaRemovalBalancer) for automatically removing unreachable replicas.
- Added a new built-in StoreBalancer (RangeBootstrapBalancer) for cluster initialization, which can serve as an alternative to the bootstrap configuration option, relaxing the requirement for a unique 'bootstrapping' node.
- Implemented an auto-detection and cleanup strategy for "zombie-state" KVRange replicas in base-kv.
Improvements:
- Refactored base-kv to support a multi-RocksDB instance architecture, improving performance across multiple shards (KVRange).
- Enhanced the efficiency of internal management processes in base-kv, reducing contention during concurrent executions.
- Optimized the snapshot installation process to increase the success rate.
- Improved the mechanism for KVRange graceful exit from the cluster.
Bug Fixes:
- Resolved issue #98: SessionInfo lost updates when self-kicking.
- Fixed an issue where Checkpoints were not cleaned up promptly after their owner RocksDBCPableKVSpace was destroyed.
Others:
- Deprecated the built-in RecoveryBalancer, which could potentially cause data inconsistency.
- Implemented a workaround(8580fd8) for an unresolved issue in OpenJDK17 that may occur sporadically.
- Upgraded major dependency versions: grpc, netty, rocksdb, etc.
Full Changelog: v3.2.2...v3.3.0
BifroMQ-v3.2.2
This patch release includes the following changes:
Improvements:
- Restructured basekv-related log files and the metrics of executors used within basekv to simplify diagnostic work.
- Implemented separate executors for ticking tasks in each basekv-based store to reduce interference under heavy load.
- Reduced read-write contention to enhance the efficiency of collecting basekv-related metrics.
Bug Fixes:
- Explicitly close KV iterators after use to prevent potential RocksDB crashes.(2657a5e)
- Fixed a thread starvation issue that could occur during highly concurrent publish and subscribe operations.(df63f83)
- Fixed a potential
ConcurrentModificationException
that could be thrown when resettingInboxStoreCoProc
after splitting.(b915fb7) - Prevented already sent confirmable messages from being added to the staging buffer in persistent sessions, which previously caused a steady increase in session memory usage.(cca3e55)
Full Changelog: GitHub Compare v3.2.1...v3.2.2
BifroMQ-v3.2.1
This patch release includes the following changes:
Improvements:
- The
ingressBytes
metric, which measures the inbound traffic from MQTT clients, now includes the size of the connect message. - Enhanced both the performance and accuracy of the approach for measuring Netty direct memory usage.
- Reduced memory consumption by adjusting the per-channel
maxWriteSize
according to outbound bandwidth. - Improved stability and recoverability when overloaded.
- Enhanced the stability of
base-kv
after failover.
Bug Fixes:
- Resolved inaccuracies in sizing incoming MQTT messages.
- Fixed inaccuracies in counting persistent sessions in some failover cases.
- Implemented a workaround for the issue where metrics collection could be blocked in extreme high direct buffer usage situations.
- Fixed issue #95 by enforcing type-checking of
BifroMQSysProp
at build time.
Full Changelog: GitHub Compare v3.2.0...v3.2.1
BifroMQ-v3.2.0
This minor release includes the following changes:
New Features:
- Introduced an opt-in Maven Archetype to quickly bootstrap plugin development
- Added unified session lifetime event types(
MQTT_SESSION_START
/MQTT_SESSION_STOP
) for both transient and persistent sessions
Improvements:
- WS/WSS ports now reject non-WS traffic during the handshake phase and set up the pipeline after the handshake is complete
- Exceptions thrown during plugin initialization will no longer prevent BifroMQ from starting
- Cleaned up plugin definition modules and consolidated plugin loading information into a dedicated log file (plugin.log).
- Improved startup script to read the JVM_DEBUG environment variable
Bug Fixes:
- No longer maintain a separate view for local session lookup, which was the root cause of issue #91
- Fixed the overflow issue (#90) in calculating the running average, which caused message dist failures in the long run
- Fixed the environment variable reading issue in the Windows startup script, which caused issue #88
Full Changelog: v3.1.1...v3.2.0
BifroMQ-v3.1.1
This patch release includes the following changes:
Bug Fixes
- Fixed a bug in the subscription data encoding format that could cause the topic matching process to get stuck in rare cases. Thanks, @844028312, for reporting the issue (#87) and sharing the test data.
- Fixed an issue where a node may fail to start after a force kill during a splitting operation (a97adfc).
- Fixed an issue where the persistent session remains active even when the client is disconnected (d17eb3a).
- Set the reason field of the
DistError
event. - Corrected two scheduler names used in the inbox service to ensure the related metrics are distinguished.
Improvements
- Ensured the thread context classloader is set to
PluginClassLoader
during plugin instance creation to reduce potentialClassNotFoundException
errors from the plugin's constructor. - Set up pipeline handlers only after the connection is accepted by the rate limiter, improving memory usage when the connection rate exceeds the allowed rate.
- Added a
withoutDisconnect
field to theByClient
event to distinguish between two client-initiated disconnection situations. - Reported
ChannelError
event with detailed reasons when a connection is rejected due to exceeding the configured rate. - Ensured pipeline resources are closed properly during graceful shutdown (bc329a7).
- Improved the time spent loading tenant states during startup (5566196).
- Stopped range splitting when the local store hits the maximum range limit (9c62c5e).
Full Changelog: v3.1.0...v3.1.1
BifroMQ-v3.1.0
This minor release includes the following changes:
New Feature
- Enhanced the HTTP Kill API to allow terminating sessions for a specific tenant user or all sessions associated with a tenant. For more details, check the API documentation.
Improvements
Clustering
- Optimized recovery speed by not caching unresolved
InetAddress
when the hostname cannot be resolved temporarily. - Improved clustering stability by retrying domain resolution with a timeout when joining the
clusterConfig.clusterDomainName
. The timeout is controlled by the system propertycluster_domain_resolve_timeout_seconds
.
Docker
- Reduced the final image size by using a smaller base image and optimizing layer instructions.
- Included necessary tools for diagnosing various networking issues.
Others
- Improved backpressure protection by considering heap usage and slowdown timeout.
- Introduced a dedicated event type, 'OutOfTenantResource,' to signal when a tenant hits the resource limit.
- Adjusted the upper bound for
MaxUserPayloadBytes
to 256MB to comply with the MQTT specification. - Support building with OpenJDK 22 (#86 )
Full Changelog: v3.0.2...v3.1.0