Changelog
v0.5.0 (unreleased)
Highlights
Follower to leader replication
- The write API (Put, DeleteRange, Txn) is now available on leader cluster nodes as well.
- The API provides read after write guarantee by relying on backpropagation from the leader.
Dynamic tables management
- Tables now could be managed dynamically during the runtime of the server using newly provided
regatta.v1.Tables
API. - Tables API could be secured by an API token using
tables.token
configuration value.
Security
- API port now supports mTLS
- API port mTLS can verify Hostname or CN in presented certificate.
- Follower to Leader mTLS can now verify Hostname or CN in presented certificate.
Improvements
- Improve on API allocations when deserializing gRPC messages.
- Support
zstd
API compression. - Removed obsolete table manager cache that could have caused hard to debug race conditions.
- Bump to Go 1.22.
Deprecations
tables.names
andtables.delete
configuration values were deprecated and will be removed in future releases.
Bugfixes
- Proper authentication of
maintenance.v1.Backup/Restore
API endpoint. - When table is deleted in the leader cluster the followers will gracefully handle the situation by deleting the table locally and stopping the replication.
Fixed potential Engine deadlock when shutting down the server.
v0.4.1
Improvements
- Server now reports transient errors for requests that could be potentially retried as
codes.Unavailable
.
Bugfixes
- Fixed the default timeout of
KV/IterateRange
operation.
v0.4.0
Breaking changes
- Remove maintenance server port, the API is now available on standard API port. It could still though be secured by a separate API token.
- Replaced
clusterID
withshard_id
in metric label names.
Features
- Added new
regatta.v1.KV/IterateRange
API. - Added option to get the server configuration via the
regatta.v1.Cluster/Status
API. - Added
memberlist.cluster-name
andmemberlist.node-name
options.- Both help identifying cluster and nodes in CLuster API responses.
- Cluster name setting prevents accidental pairing of multiple clusters running in the same network. (with different cluster name setting)
- Added
api.advertise-address
option to split address advertised to clients from the listen address. - Removed
maintenance.address
config option. - Removed
maintenance.cert-filename
config option. - Removed
maintenance.key-filename
config option.
Bugfixes
- Fix
KV/DeleteRange
Count
erroneously returning1
if no key was deleted. - Fix
KV/DeleteRange
PrevKV
panicking when previous key did not exist.
v0.3.2
A bugfix release, fixes critical issue in replication server TLS handling.
Bugfixes
- Fix replication server TLS.
v0.3.1
A bugfix release, with small improvements.
Improvements
- Improve startup logging and failure reporting.
Bugfixes
- Fix
rest.address
handling. - Fix race-conditions in Raft events handling.
v0.3.0
Release brings a brand-new Cluster API as well as ability to listen over plain or unix socket connection.
Breaking changes
- Semantics of
api.address
replication.address
andmaintenance.address
changed. The protocol is now mandatory could be one ofhttp|https|unix|unixs
. - Removed
api.reflection-api
configuration.
Features
- Regatta could now serve its api on unix sockets.
- Support for serving over plain (non-TLS) gRPC added.
- Added
regatta.v1.Cluster
api.
Improvements
- Improve
version
command output. - Follower can connect to leader over plain connection or via unix socket.
Bugfixes
- Fix cluster member node registration.
v0.2.3
Release with profile guided optimization.
Improvements
- Removal of few obsolete dependencies.
- Set toolchain in go.mod file.
- Enable profile guided optimizations.
v0.2.2
Minor release with just updated dependencies.
v0.2.1
Release focuses on stability and performance of the leader-follower replication.
Breaking changes
- Leader
replication.logCacheSize
now defaults to 0.
Features
- Add
replication.keepalive-time
config option for follower. Sets how often the keepalive should be sent. - Add
replication.keepalive-timeout
config option for follower. Sets how long to wait for an ack of the keepalive message.
Improvements
- Improve follower replication throughput and latency.
- Snapshot recovery type could be switched on a running cluster safely.
- Bump to Go 1.21.
- Keepalive for replication connection to tackle misbehaving LBs.
Bugfixes
- Fix release image cosign.
- Fix off by one replication error.
v0.2.0
Release is mostly focused on tidying up the docs and code base and on resource consumption improvements.
- New way of producing table snapshots is introduced that should lead to quicker and more efficient process of recovering shards in a Raft cluster.
- Experimental Tan logdb feature was promoted to a regular and made a default choice.
- Gossip based cluster registry was added, the necessary migration is handled automatically by the new version of the
jamf/regatta-helm
helm chart. If you want to know more refer to the documentation ofmemberlist
flags.
Breaking changes
- Removal of
--experimental.tanlogdb
flag. - Addition of gossip based cluster registry.
regatta.v1.KV/Range
now returns empty response instead ofNOT_FOUND
error if result of the query is an empty range. Implements proposal #001.
Features
- New
--raft.logdb
flag (defaults to Tan). - Added
--memberlist.address
,--memberlist.advertise-address
and--memberlist.members
flags to configure cluster registry. - Added a raft cluster snapshot mode option
--raft.snapshot-recovery-type
which defaults to newcheckpoint
mode. - Added a flag for configuring shared table cache size
--storage.table-cache-size
which defaults to1024
. - Added support for
gzip
, andsnappy
compression for API calls.
Improvements
- Compressed Log replication messages to lower API bandwidth usage.
- Bump to Go 1.20.
- Pebble instances table cache is now shared.
- Single key lookups now utilise bloom filters optimizing the “key not present” case.
- Added compaction metrics of pebble instances.
Bugfixes
- Removing kafka package leftovers.
- Improving logreader tests.
- Fixed raft header returned from non-leader cluster nodes.
- Fixed value of
Deleted
field of theDeleteRange
response. - Fixed potential DOS by limiting the storage iterator with max RPC size.
v0.1.0
Initial Regatta v0.1.0 Release
This release was made possible thanks to the contributions of @jizi @martinvizvary @jojand @mrackoa and @juldou :rocket::tada:
Special shout-out to @coufalja for his efforts!