# Changelog

## [2.8.0] - 2026-07-15

### Added

- Added follower reads with configurable staleness bounds, reducing read latency for geographically distributed clients.
- Added online range splitting based on key count, storage size, and request throughput.
- Added Prometheus metrics for Raft proposal latency, snapshot transfer progress, and compaction backlog.
- Added per-tenant request quotas with separate limits for reads, writes, and watch streams.

### Fixed

- Fixed a deadlock that could occur when leadership changed during snapshot installation.
- Fixed watch streams occasionally missing an update when a range split overlapped with compaction.
- Fixed incorrect disk-usage reporting for ranges containing recently deleted values.
- Fixed excessive retry delays after transient DNS failures between cluster members.

### Changed

- Changed the default Raft snapshot threshold from 100,000 to 250,000 log entries to reduce snapshot churn.
- Changed range rebalancing to account for request throughput in addition to stored data size.
- Changed TLS configuration reloads to apply without restarting nodes.
- Deprecated the legacy `/v1/cluster/members` endpoint in favor of `/v2/members`.

## [2.7.2] - 2026-06-18

### Added

- Added an administrative command to verify consistency between replicas without taking ranges offline.
- Added structured audit events for membership changes and manual leadership transfers.

### Fixed

- Fixed linearizable reads timing out unnecessarily immediately after a successful leader election.
- Fixed a memory leak in long-lived watch connections with frequently updated key prefixes.
- Fixed snapshot restoration failing when the target data directory resided on a different filesystem.
- Fixed transaction conflicts being reported as internal errors by the gRPC gateway.
- Fixed compaction retaining obsolete tombstones when a node had previously been offline for an extended period.

### Changed

- Changed client retry behavior to honor server-provided backoff hints.
- Changed startup validation to reject duplicate node identifiers before opening the storage engine.
- Reduced log volume for expected peer-disconnection events during rolling restarts.

## [2.7.1] - 2026-05-29

### Added

- Added configurable request-size limits for the HTTP and gRPC APIs.
- Added node and range identifiers to slow-request log entries.
- Added support for exporting cluster topology as JSON from the administration CLI.

### Fixed

- Fixed a regression in version 2.7.0 that caused unnecessary leader transfers during rolling upgrades.
- Fixed lease expiration being delayed when the system clock moved backward.
- Fixed range replicas remaining in a pending state after an interrupted rebalance.
- Fixed incorrect pagination tokens when listing keys with both a prefix and an exclusive end key.
- Fixed a race that could return stale metadata immediately after removing a cluster member.

### Changed

- Changed health checks to distinguish between node readiness and process liveness.
- Changed the administration CLI to redact authentication tokens from debug output.
- Improved recovery time by parallelizing replica metadata loading during startup.