Repository navigation
Releases: projecteru2/mithril
Releases · projecteru2/mithril
Release list
v0.1.8
v0.1.7
Highlights
backend-sharding autois the default. The proxy runs one experiment for itself, judged on its whole command rate: sessions start on their worker's own connections, a probe moves the proxy to the shared per-node pipes when the workers are busy and thin batches, and the move stays only where the measured rate is higher; a later fall in that rate re-arms the probe. On a 128-master rigautosits within the noise floor of the best fixed mode in the fan-out lane (P16 GET 8.98M vsyes9.01M,no5.54M) and within 2% in the sliding-pipeline lane whereyesloses 17%. A single worker with one connection per node has nothing to share and runs asno.INFOreportspipes_prefer_shared,pipe_probes,pipe_keeps,pipe_revertsand per-workerworker_busy.- A refused
CLIENT CACHINGopt-in is harmless. A backend answering a reply-cache fill's opt-in with the tracking-off error now gets its tracking frame again on that connection, the request runs once more without the opt-in (a fan-out part at its slot's current owner, following one redirect), and the client sees its reply; nothing fills. Dials, rearms and tracker arrivals log at debug level, a refusal at warn. - Ownership pass over the whole crate: a remembered script is stored as its
SCRIPT LOADframe (a watchedEVALSHAno longer copies the script body per command), the dispatch subcommand lookup reuses the parsed argument iterator, and the writer's ready buffer sheds a large excursion's capacity. Measured on the rig: the single-key path allocates 0.02 times per command, all of it read-buffer chunk turnover. - Hot path: every batch was A/B-measured against its base on the 128-master rig; the release head is flat against v0.1.6 inside the A/A floor (P16 GET +1.3% with A/A +0.9%, SET −0.2% with A/A −0.6%).
Changelog
Performance
- 3df1b1c perf: backend-sharding defaults to auto
- 3e10ce1 perf: only a lighter load on the shared pipes voids the decision
- b1db534 perf: a rate shift is judged once the rate is steady, and a pause changes nothing
- d49a99e perf: a changed workload ends the tuner's wait
- fd9042c perf: one experiment for the whole proxy, judged on its whole command rate
- 1d5a0a4 perf: the auto tuner keeps the shared pipes only where they measure faster
Bug fixes
- 039682e fix: a rerun fan-out part follows one redirect
- 9440101 fix: a refused fan-out part reruns at the slot's current owner
- 5571c6e fix: rerun a refused opt-in for fan-out parts and only for a filled request
- 6902904 fix: a refused caching opt-in re-tracks the connection and reruns the request
- b78dff4 fix: one worker with several connections per node still has a lane to choose
- d65e426 fix: one worker has nothing to share, and the docs qualify the shared-nothing claim
- 993286c fix: an idle pause is not a settled rate
- 3be4008 fix: a probe after a rate shift waits one window, and a steady baseline spreads under a quarter
- a96c935 fix: a probe needs a steady baseline
- ea3c0d7 fix: a losing trial left in the rate ring is not a changed workload
- 762682c fix: only a switch that stays wanted pauses a session to drain
- 611b6cd fix: a pipelining session drains for the move back to its worker's connections
Other
Full Changelog: v0.1.6...v0.1.7
v0.1.6
Highlights
- ACL: a user table with per-command and per-subcommand enforcement,
ACL LOG,requirepass/user/acl-pubsub-defaultin the config file. - Slow log:
SLOWLOG GET/LEN/RESETwith runtime thresholds viaCONFIG SET, credentials redacted,PSLOWLOGreads every node's log. Off by default (slowlog-log-slower-than -1); timing costs about 1% of peak throughput when on. - Slot migrations and failovers are ridden out: TRYAGAIN is retried whole so multi-key commands stay atomic under atomic slot migration, a READONLY after a failover is resent to the shard's new master, and a script is reloaded on NOSCRIPT after a redirect.
- Observability:
INFOgains# Commandstats(calls per command),# Clusterandtotal_error_replies;CLIENT LISTreports each connection's last command. - Cluster databases (
SELECT), shard pubsub,WATCH/UNWATCHon an exclusive connection,SCRIPTandFUNCTIONmanagement; the command table is generated from Redis 8.10.1 and Valkey 9.1.2 with key specs. docs/compatibility.mdstates what the proxy does not carry over from mt-proxy and where its semantics differ from a single Redis.- Hot path: every batch in this release was A/B-measured against its base on a 128-master rig; default-mode peak throughput is unchanged within the A/A noise floor.
Changelog
Features
- b8eec53 feat: PSLOWLOG forwards a SLOWLOG subcommand to every node
- d69b4dd feat: a proxy-side slow log with SLOWLOG and runtime thresholds
- 9085cf1 feat: per-command call counts in INFO and the last command in CLIENT LIST
- a29e806 feat: ride out TRYAGAIN whole and READONLY on a keyless broadcast
- fae8209 feat: cluster databases
- 20e559d feat: ride out atomic slot migrations
- e670fe3 feat: shard pubsub
- 535b680 feat: WATCH and UNWATCH on an exclusive connection
- 989c399 feat: command table from Redis 8.10.1 and Valkey 9.1.2
- 179ca6a feat: ACL user table with per-command enforcement
- 46f0d04 feat: SCRIPT and FUNCTION management, scripts reloaded on NOSCRIPT
- d1e9007 feat: command table from COMMAND INFO, numkeys key specs, newer blocking forms
Performance
- ba5b485 perf: the slow log is opt-in
Bug fixes
- bb19ea3 fix: answer SLOWLOG on a tracked task behind the hold, parse XREAD once
- 256fb9d fix: SLOWLOG answers after the session's earlier replies settle, a blocking XREAD stays untimed from the start
- 71828d2 fix: SLOWLOG RESET clears at its own place in the session's order
- 0555b4e fix: time every accepted command at its first reply sequence
- bf814fe fix: the argument-count summary outranks redaction, and one comment less
- 5470be5 fix: redact every credential argument, name only a real transaction exec, time SELECT
- 16c8bd1 fix: keep a bounded, redacted argument list per slow-log entry
- 35ea997 fix: count an error carried by a pubsub confirmation too
- 685ef0b fix: count error replies where they are written and commands once accepted
- 7fb3917 fix: track every detached ride-out for teardown
- 403dfd2 fix: abort a stalled broadcast at teardown, and send a reload's frames as one outbound
- 4346a29 fix: hold the session behind a broadcast instead of parking its reader, and keep ASKING on a script reload
- 98b1325 fix: resend a READONLY keyless write to its shard's new master only, and reload a redirected EVALSHA where it landed
- 8388832 fix: include Redis vector commands in generated table (#14)
- 4e68ee3 fix: client-info name and user fields are single plain tokens
- 33a0139 fix: ACL LOG client-info names the session user and the invoking command
- b49f261 fix: no-auth commands skip ACL rules, ACL LOG carries a full client-info line
- f4df84e fix: an unknown subcommand needs the whole container, log names are clipped
- e018b92 fix: ACL rules apply per subcommand, a disabled default user needs a login
- 7b413d2 fix: a keyless script gets a ring entry, so NOSCRIPT reloads it too
- 036f986 fix: script bodies are copied, a partial SCRIPT FLUSH reports its loss
- 18ed02b fix: NOSCRIPT reload only in order, SCRIPT FLUSH forgets at dispatch
- a09724b fix: keyword key scans start where Redis starts them
- e5913b0 fix: scripts keep the write flag, MULTI and GETKEYS walk every key spec
Other
Full Changelog: v0.1.5...v0.1.6
v0.1.5
Changelog
Features
- f49c01c feat: INFO reports cache_entries, cache_bytes and cache_flips
Performance
- 97743c8 perf: iovec stack tier back to 16 slots
- fd59520 perf: auto sharding weighs the worker's load, not only the session's pipelining
Bug fixes
- 02bd346 fix: cache entry overhead calibrated against measured RSS
- 736ce54 fix: the auto tuner leaves the shared pipes slowly
- 079f8e3 fix: the auto tuner records a batch when staged and ignores exclusive connections
- e63c915 fix: the auto tuner measures local batch depth and skips blocked sessions
- 062c449 fix: close the codex round-71 findings on the tuner and the cache gauges
Full Changelog: v0.1.4...v0.1.5
v0.1.4
Changelog
Performance
- 64015c9 perf: fills are sampled once hits stop paying for their tracking
- 4cfff49 perf: MGET through the reply cache; backend-sharding auto; lazy conn buffers
Bug fixes
- d6fd275 fix: persist session closes and share build version (#1)
- a6fc35f fix: broadcasts and scans target masters that can hold keys
Full Changelog: v0.1.3...v0.1.4
v0.1.3
Changelog
Features
- b1e55c8 feat: multi-key commands ride out a migrating slot
- 6d3db53 feat: OBJECT routing, CLIENT LIST, config_file in INFO, QUIT drains confirmations
- e4acba0 feat: reply cache with server-assisted invalidation
Performance
- 6e079d8 perf: route through a borrowed pipe
- 08668f3 perf: coarse cache clock, chunked generation release, leaner invalidation
- 5167614 perf: partial frames resume their scan instead of restarting at byte 0
- cbd0804 perf: fan-out and blocking commands keep an unboxed fast path
- ea44593 perf: redirected opt-in tracking replaces the BCAST invalidation stream
Bug fixes
- 4fcf8e7 fix: fan-out waits on a queue filled since the room check
- 51396e7 fix: INFO cpu times come from getrusage
- b619092 fix: a cached reply owns its bytes
- 9336a89 fix: invalidations cross workers in a compact copy; bound the tracker frame
- 5415a8f fix: cap the bytes an invalidation push may pin
- daed2c8 fix: coverage state is one atomic snapshot; early tracker guard; push cap
- 108aedd fix: close the codex round-43 tracking findings
- 1dce0f4 fix: fan-out gates are slot-indexed, close-aware, and self-releasing
- 75e8a01 fix: fan-out writes hold their marks to the end, same-slot commands wait
- f57fbd8 fix: one fill ticket per key, writes hold the key until they finish
- 8b6f708 fix: close codex round-38 cache findings and the lens ledgers
Full Changelog: v0.1.2...v0.1.3
v0.1.2
Changelog
Features
- ac82d7e feat: backend-sharding routes every node through one owner-worker pipe
Performance
- 382d90c perf: sharded replies land directly in a shared session queue
- 171a4d3 perf: sharded replies cross back in per-home batches
- 1c323c9 perf: reply queue notifies only on the empty transition
- 5b1fae6 perf: per-session reply queue drops the atomic mpsc for a RefCell deque
- fb3ffc4 perf: read buffers start at 8KB and grow geometrically to the chunk cap
- f13c7dd perf: write_loop coalesces cross-backend replies into one flush
- 57d0c89 perf: session-local topology cache and branchless lookup prefix fold
- 21bcca5 perf: command lookup probes a const-built open-addressing table
- 1ad2388 perf: replace the parked BTreeMap with a sequence-indexed ring
- fec8910 perf: single-key sends go through a sync try_send at the call site
- 6dd948d perf: shrink dispatch future with a sync Outbound builder and boxed cold arms
- ea2438d perf: flatten hot-path future nesting with a try_send fast path
Bug fixes
- 92a78e0 fix: restore O(1) slot grouping in multikey split
- d42b528 fix: close the codex whole-crate sweep findings
- 876a335 fix: bound intake work by replies, not batches
- 0571382 fix: bound the intake turn and avalanche the token hash
- 46b2464 fix: a dead shard pipe forgets only its own generation
- a4c39e6 fix: closing the reply queue releases its backing allocation too
- 01fbb96 fix: the writer's exit guard clears the reply queue it closes
- 5c4d0d4 fix: close codex round-22 findings on the cache and coalescing commits
Full Changelog: v0.1.1...v0.1.2
v0.1.1
Changelog
Other
- f3321a2 placement: retry waits resample on the tick cadence, tick arm observes shutdown
- d26fb77 placement: independent 10ms rate sampling in the acceptor select
- b30ccf3 placement: snapshots refresh inside placement retries and normalize per window
- ede5694 placement: full-queue fallback probes workers in placement-key order
- 7fded86 placement: configurable worker placement, least-loaded by default
Full Changelog: v0.1.0...v0.1.1