tigerbeetle-node
Advanced tools
Changelog
TigerBeetle 0.16.28
Released: 2025-02-17
Test misdirected writes in the VOPR.
Fix a recovery correctness bug caused by a misdirected write in the WAL (discovered by the VOPR in #2677).
Refactor the tb_client packet interface, hiding private members in an opaque field. Add assertions to enforce expectations for each packet field.
Fix a Node client crash when it was closed with outstanding requests.
Flush loopback queue before queueing another prepare_ok.
Fuzzer weights are now configurable.
The REPL now uses StaticAllocator
on init and deinit.
tigerbeetle inspect constants
now prints a napkin math estimate for the memory usage.
Update docs with new talks, an updated illustration, and a new Slack invite link.
Don't expose VSR module to dependents in build.zig.
Changelog
TigerBeetle 0.16.27
Released: 2025-02-10
Remove redundant calls to IO.init()
and IO.deinit()
during the format
and start
commands.
These redundant calls could lead to an assertion error in the Zig standard library when a failure
occurs after the second IO.init()
.
Enhance the docs search bar with arrow-key navigation over search results, and folder collapse using the enter key.
Add talks from SystemsDistributed '23, P99 CONF '23, Money2020 '24, and SYCL '24.
Improve CPU utilization of the CFO by spawning fuzzers more frequently.
Motivated by the measurement that the cumulative CPU was (on average) 40-45% idle.
Assert zeroed padding for WAL prepares in the VOPR.
Remove the deprecated version of the start_view message.
As part of #2600, we rolled out a new on-disk format for the CheckpointState. To avoid bumping the VSR version, we made it so that replicas temporarily send two versions of the start_view message, with both the old and new CheckpointState formats.
Add fair scheduler to the CFO to avoid starvation of short running fuzzers.
Earlier, long running LSM fuzzers ended up spending more than their fair share of time on the CPU, with only 1-10% of CFO time being spent on short running VOPR fuzzers.
Changelog
TigerBeetle 0.16.26
Released: 2025-02-03
Consider blocks and prepares with nonzero padding to be corrupt. Previously blocks asserted zero padding, which can fail due to bitrot.
Also fix a similar bug in the superblock copy index handling. The copy index is not covered by a checksum, so we must treat it carefully to avoid propagating bad data if it is corrupt.
VOPR now injects single-bit errors into storage rather than whole-sector errors.
The current checkpoint process immediately frees all blocks released in the previous checkpoint. This can lead to cluster unavailability by prematurely freeing and overwriting released blocks.
To fix this, delay freeing blocks until the checkpoint is durable on a commit-quorum, ensuring data integrity and preventing single-replica failures (in a 3 node cluster) from impacting availability.
When state syncing, replicas would send prepare_oks only up to a point, to ensure they don't falsely contribute to the durability of a non-durable checkpoint they've synced to.
However, the logic to send these prepare_oks after state sync has finished was missing, which could lead to a situation where a primary was unavailable to advance. Add in the ability to send these prepare_oks after syncing.
Recently, tb_client was reworked to use OS native signals instead of a socket for delivering cross thread events.
Fix some incorrect asserts, and add a fuzz test.
#2694, #2695, #2686, #2688, #2685, #2676, #2684
A few fixes and an "Edit this page" button for our new docs!
Allocate the reply buffer in the Go client once the reply has been received. This can save up to 1MB of memory.
Refactor parts of our CFO, the process responsible for running fuzzers and the VOPR and sending the results to devhub, to better handle OOM in subprocesses and reduce false fuzz failures.
Changelog
TigerBeetle 0.16.25
Released: 2025-01-27
Avoid considering just-repaired journal headers as faulty during WAL recovery.
Reduce the minimum exponential backoff delay from 100ms (which is too pessimistic) to 10ms, a value more appropriate for fast networks.
Introduce a new CheckpointState
format on disk, which ensures that blocks released during
a checkpoint are freed only when the next checkpoint is durable, solving a known
liveness issue.
The previous format is still supported and will be removed in a future release to ensure the
proper upgrade path.
Demote a clock skew warning to a debug message when the ping time is legitimately behind the window. On the other hand, assert that the monotonic clock is within the window.
Workaround to prevent the initialization value for the AOF message from being embedded as a
binary resource, saving constants.message_size_max
bytes in the executable size!
Fix a VOPR false positive where it erroneously infers that a replica has lost a prepare that it has acknowledged.
New statically generated docs website, featuring many UX improvements while removing tons of dependencies! Check it out at https://docs.tigerbeetle.com/
Make the CFO utilize all cores all the time for running tests, pushing updates every 5 minutes.
Changelog
TigerBeetle 0.16.23
Released: 2025-01-20
Released: 2025-01-20
(Unreleased due to CI flake.)
Fix Python client initialization with long address strings.
Prevent Client IO thread starvation.
Set prepare/request timeout RTTs dynamically. Previously our backoff was almost always much too high, leading to much lower throughput when ring replication failed.
Add --clients
flag to tigerbeetle benchmark
for generating load from multiple concurrent
clients.
For test/verify only functions, assert constants.verify
at compile-time, not runtime.
Fix flaky Java client test testConcurrentInterruptedTasks
.
Fix VOPR false positive due to smallest_missing_prepare_between
bug.
In clients, add Event
s for efficient cross-thread notification.
Devhub fixes due to Ubuntu/kcov.
Changelog
TigerBeetle 0.16.21
Released: 2025-01-13
Happy 2025!
Fix multiple VOPR false positives
Disable costly cache map verification: trust, verify, but mind big-O!
Improve state sync performance by getting rid of awaiting_checkpoint
state.
Improve VOPR coverage when running out of IOPs.
#2593, #2623, #2625, #2626, #2627, #2628
Improve WAL repair performance.
Improve replication performance.
Add simple metrics to the state machine.
Greatly improve performance of append-only file (AOF). Note that this changes format of AOF on disk.
Add tigerbeetle inspect constants
command to visualize important compile-time parameters.
Use asynchronous disk IO on Windows (as a reminder, at the moment TigerBeetle server is considered to production-ready only on Linux).
Add experimental alternative replication topologies (star and closed loop).
Move RingBufferType into stdx, TigerBeetle's extended standard library.
Run go vet
on CI.
Fix tracing compatibility with perfetto.
Make it easier to investigate Vortex runs.
Correctly calculate the number of results in the Go client. Previously, the answer was correct despite the logic being wrong!
Changelog
TigerBeetle 0.16.20
Released: 2024-12-27
Improve replication reliability for tiny messages.
Add info-level logging for basic progress events.
Add logging and runtime configuration parameters for state sync.
Fix fuzz_lsm_scan
checkpoint schedule.
Changelog
TigerBeetle 0.16.19
Released: 2024-12-22
Coalesce LSM tables in memory before writing them to disk. This significantly improves workloads with small batch sizes, that would otherwise churn in the top level of the LSM while incurring heavy write amplification.
TigerBeetle recently gained the ability to do runtime debug logging with --log-debug
. Extend
that to other subcommands - not just start
.
Additionally, the Python client now has logs integrated with Python's native logging
module,
which means no more printing to stderr!
Fix broken links to TigerBeetle blog posts, thanks @PThorpe92!
Changelog
TigerBeetle 0.16.18
Released: 2024-12-19
Our repair can create a feedback loop. Repair requests prepares and headers, but, upon receiving back, we re-trigger repair, which could lead to duplicate repair work.
To avoid that, make sure that we are not sending more than two repair messages per replica per our repair timeout.
Trace AOF write duration
Timeouts with exponential backoff should reset to their original delay when the timeout is stopped.
Assert against ABA problem during commit.
Add retry for flock
. flock
s are cleaned up by the kernel when the file descriptor is closed,
but since that file descriptor is used by io_uring, it actually outlives the process itself.
Fix mlock
flag value.
Don't crash if a round of view changes happened while repairing the pipeline.
Released: 2024-12-16
Exit cleanly if the database grows to the maximum size.
Simulate virtual machine migration in the VOPR.
Test that Java client behaves correctly when its thread is interrupted.
tigerbeetle format
now automatically generates a random cluster id if it isn't passed on the
command line. To avoid operational errors, it is important that each cluster gets a globally
unique id.
Improve error reporting when a client gets evicted due to a mismatched version.
Switch CLI client to static allocation.
Run benchmark under sudo to enable memory locking for accurate RSS stats.
Remove many false negatives from unused imports tidy check.
Changelog
TigerBeetle 0.16.17
Released: 2024-12-09
This release includes a correctness fix for the preview API get_account_balances
,
get_account_transfers
, query_accounts
, and query_transfers
. If your application uses these
features it might be affected.
Fix correctness bug which affected the preview get_account_balances
, get_account_transfers
,
query_accounts
, and query_transfers
queries. Specifically, if several filters are used (that
is, several fields in QueryFilter
or AccountFilter
are set), then some objects might be
missing from the result set.
The underlying data is safely stored in the database, so re-running these queries using the new version of TigerBeetle will give correct results.
Fix panic in the node client which occurred on eviction.
Fix incorrect ABI used on aarch64 for the client library. To prevent such issues from cropping up in the future, add aarch64 testing to CI.
Add extra assertions to verify object cache consistency.
Implement network fault injection in VΓΆrtex, our non-deterministic whole system simulator.
Log level can now be specified at runtime.
Log messages now include UTC timestamp (formatted as per RFC 3339).
Relax compiler requirements for building TigerBeetle. While we only support building using one
specific version of Zig, the one downloaded via ./zig/download.sh
, you can try using other
versions.
Document how to handle errors during release. TigerBeetle's release process is complicated, as we
need to release, in lockstep, both the tigerbeetle
binary and all the related client libraries.
The release process is intentionally designed to be "highly-available", such that a failure of any
aspect of a release can be safely detected, isolated, and repaired. But, so far, this wasn't
clearly spelled out in the documentation!