tigerbeetle-node
Advanced tools
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!
Changelog
TigerBeetle 0.16.16
Released: 2024-12-02
The highlight of today's release is the new official Python client, implemented in #2527, and #2487. Please kick the tires!
Require that all replicas in a cluster have the latest TigerBeetle binary as a precondition for an upgrade.
Fix several bugs when handling misdirected writes. That is, situations when the disk reports a write as successful, despite the write ending up in the wrong place on the disk!
Make sure that TigerBeetle memory is not swappable, otherwise a storage fault can occur in a currently swapped-out page, circumventing TigerBeetle guarantees.
REPL correctly emits errors when several objects are used as an argument of an operation that
only works for a single object, like get_account_transfers
.
Add randomized integration tests for the Java client.
Ignore OOM failures during fuzzing. Fuzzers normally don't use that much memory, but, depending on random parameters selected by swarm testing, there are big outliers. If all concurrent fuzzers hit a seed that requires a lot of memory, a fuzzing machine runs out of physical RAM. Handle such errors and don't treat them as fuzzing failures.
Track the number of untriaged issues on DevHub.
Changelog
TigerBeetle 0.16.14
Released: 2024-11-25
Call DetachCurrentThread
when the Java client is closed. The underlying Zig TigerBeetle client
runs in a separate thread internally, and a handler to this thread was being leaked.
This is not noticeable in normal operation, but could impact long running processes that create and close clients frequently.
Document that it's not possible to currently look up or query more than a full batch of accounts atomically without using the history flag and querying balances.
Add the ability to check timestamp order - and verify they are monotonically increasing - for accounts and transfers inside Vortex.
Recently the VOPR has gotten too good, and it's very tempting to switch to an empirical mode of coding: write some code and let the VOPR figure out whether it is correct or not.
This is suboptimal - silence of the VOPR doesn't guarantee total absence of bugs and safety comes in layers and cross checks. Just formal or informal reasoning is not enough, we need both.
Document this in TigerStyle.
Previously, the Zig part of languages clients logged directly to stderr using Zig's std.log
, but
since directly outputting to stderr is considered rude for a library, logging was disabled.
This PR adds in scaffolding for sending these logs to the client language to be handled there, tying in with native log libraries (eg, Log4j). No languages use it yet, however.
Additionally, log warn
and err
directly to stderr, if there's no handler.
Changelog
TigerBeetle 0.16.13
Released: 2024-11-18
Fix a broken assert when a recently-state-synced replica that has not completed journal repair
receives an old commit
message.
Retry EAGAIN
on (disk) reads. This is essential for running TigerBeetle on XFS, since XFS
returns EAGAIN
unexpectedly.
Fix a message bus crash when a client reconnects to a replica without the replica receiving a disconnect for the first connection.
Save 256KiB of RAM by not having a prefetch cache for historical balances. (Historical balances are never prefetched, so this cache was unused.)
Update hardware requirements in the documentation to include the recommended network bandwidth, advice for very large data files, and farther emphasis on the importance of ECC RAM.
Don't panic the client when the client's session is
evicted.
Instead, report an error any time a new batch is submitted to the evicted client.
(How the error is reported depends on the client language β e.g. Java throws an exception, whereas
Node.js rejects the Promise
).
Note that if running clients are evicted, that typically indicates that there are too many clients running β check out the suggested system architecture.
Add REPL interactivity. Also change the REPL from dynamic to static allocation. Thanks @wpaulino!
Expose the VSR timestamp to the client. (This is an experimental feature which will be removed soon β don't use this!)