Skip to content

Releases: bifromqio/bifromq

v3.3.4

20 Dec 06:08
Compare
Choose a tag to compare

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:

Full Changelog: v3.3.3...v3.3.4

BifroMQ-v3.3.3

30 Oct 08:42
Compare
Choose a tag to compare

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

26 Sep 10:06
Compare
Choose a tag to compare

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

14 Sep 13:18
Compare
Choose a tag to compare

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

26 Aug 08:27
Compare
Choose a tag to compare

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

08 Aug 09:28
Compare
Choose a tag to compare

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 resetting InboxStoreCoProc 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

19 Jul 07:51
Compare
Choose a tag to compare

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

27 Jun 10:47
Compare
Choose a tag to compare

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

03 Jun 07:08
Compare
Choose a tag to compare

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 potential ClassNotFoundException 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 the ByClient 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

23 May 15:46
Compare
Choose a tag to compare

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 property cluster_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