Emitter Versions Save

High performance, distributed and low latency publish-subscribe platform.

v3.1

3 months ago

What's Changed

Main changes:

Limit the size of a response by @Florimond in https://github.com/emitter-io/emitter/pull/413

From the begining, mqtt.go defines a maximum size for a response. However if the limit was met, it resulted in an error and no message was sent. Now, the Query itself limits the size of a frame and messages are sent to the client, but only those whose total size <= to the maximum size of a response.

Implications on the current API: for a subscribe request with a Last=X parameter, the client will receive the last messages whose total size is <= to the max size of a response, with a maximum of X messages. This behavior is an improvement over just getting an error.

Adds the new history API by @Florimond in https://github.com/emitter-io/emitter/pull/414

The history api allows to retrieve any number of messages stored in a channel. As the number of messages that can return in a single response is limited by the size of a response (as per https://github.com/emitter-io/emitter/pull/413), a system of pagination is required. This system is implemented with the introduction of the StartFromID query parameter. An client that already received a response with a certain number of messages can send a new request to the API with the StartFromID set to the ID of the last message it received. The storage query will then start retreiving messages starting at that ID to provide the API the next page of messages in its response.

[FIX] Storage implement the Surveyee interface by @Florimond in https://github.com/emitter-io/emitter/pull/420

This fixes a major bug preventing Emitter instances to start a cluster.

New Contributors

Full Changelog: https://github.com/emitter-io/emitter/compare/v3.0...v3.1

v3.0

2 years ago

This release contains various bug fixes and migrates emitter to use badger/v3 as the underlying message storage. This message storage is incompatible with v1, hence the bump of the major version (breaking change). It also rebases docker to run on Go 1.17 which increases overall throughput.

What's Changed

New Contributors

Full Changelog: https://github.com/emitter-io/emitter/compare/v2.8...v3.0

v2.8

3 years ago

This release introduces a revamp of how internal state is replicated with gossip along with other, smaller features. The brokers now use durable CRDT map in order to replicate and synchronize internal state (e.g. subscriptions, disallow lists) within the cluster. This enables more reliable cluster and allows us to support more complex features in future, such as cluster-wide last will & testament.

Changelog

  • Added support to block or unblock keys. This can be done using emitter/keyban/ request. The block list is replicated across the cluster and persisted to disk on each broker. In order to specify the directory, use the newly added dir parameter to the cluster configuration section. (#317)
  • Fixed a bug with frame iteration (#282).
  • Fixed alignment of int64, to be able to access it with atomic.LoadInt64 (#294).
  • Fixed the panic when received a corrupt/bad MQTT packet (#305) (#308).
  • Fixed an issue where presence events could be received with an extension key (#295).
  • Limit the gossip broadcast message size to a random set of 100K subscriptions, in order to make sure that the maximum message size is under 10MB. Exceeding this limit would cause peers to be disconnected from the cluster. (#312)
  • Fixed the issue when presence notifications would not be sent when a node goes down (#304) (#313).
  • Refactored gossip state and cluster-wide survey (#314) (#315)
  • Changed the license to v3 with shuffled salsa cipher for better randomness when generating keys (#311).
  • Changed the local CRDT set durable and can potentially be persisted to disk going forward. The incoming sets are now called "volatile" and implemented using Golang map. (#316)
  • Changed the current CRDT set to a key/value dictionary, adds more tests around it and other changes to serialization. This is the necessary plumbing to allow for cluster-global state which is replicated with gossip (#310) (#320).

edge

4 years ago

This is v2.769 pre-release which is automatically built on every commit to master.

v2.7

4 years ago

This release removes private links (normal links are still there) and introduces a way of creating private keys by simply calling keygen with an "extendable" key (ie. a key with e permission). On top of that, it has a few optimisations and emitter now defaults to using/generating license v2 which was introduced a few months ago.

Changelog

  • Added chunking before sending through to the gossi unicast, given that the max frame is 10MB we can send at once (#254)
  • Added a debug mode flag in the config. Ppprof HTTP endpoints are now by default disabled and you'll need to flip the flag on to enable them (#255)
  • Fixed a security issue by disallowing pub/sub on extended keys (#262) (#261)
  • Added a way to extend keys through a normal keygen method. Users will need to provide a key which has extend permissions in the request along with the desired access permissions. Note that the permissions will be a reflection of the key itself (e.g: if a key has re permissions and keygen request contains wr, the resulting key will only have r permission) (#268)
  • Upgraded the dependencies and made v2 license default. (#278)
  • Removed private links as they have been replaced with a keygen. This is to make sure there's only one way of extending keys and keep the API relatively simple to understand. (#279)

v2.6

4 years ago

This release makes flush and read rate limiting configurable which allows brokers to be more protected against misbehaving clients.

Changelog:

  • Made flush rate configurable for tuning socket writes (#250)
  • Removed 1 alloc in channel validation (#251)
  • Added a read rate limiter which allows limiting the read QpS per client (#252)