Releases: tigerbeetle/tigerbeetle
0.16.10: Merge pull request #2421 from tigerbeetle/release-2024-10-21
0.16.10
Supported upgrade versions
Oldest supported client version: 0.15.3
Oldest upgradable replica version: 0.16.3
Server
- Binary: Download the zip for your OS and architecture from this page and unzip.
- Docker:
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.10
- Docker (debug image):
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.10-debug
Clients
NOTE: Because of package manager caching, it may take a few
minutes after the release for this version to appear in the package
manager.
- .NET:
dotnet add package tigerbeetle --version 0.16.10
- Go:
go mod edit -require github.com/tigerbeetle/tigerbeetle-go@v0.16.10
- Java: Update the version of
com.tigerbeetle.tigerbeetle-java
inpom.xml
to0.16.10
. - Node.js:
npm install tigerbeetle-node@0.16.10
Changelog
Safety And Performance
-
Improve performance & availability during view change by ensuring a replica only repairs the
portion of the WAL that is required to become primary, instead of repairing it in its entirety. -
Add a unit test for Zig's stdlib sort.
Stable sort is critical for compaction correctness. Zig stdlib does have a sort fuzz test, but it
doesn't cover the presorted subarray case, and doesn't check arrays much larger than the sort
algorithm's on-stack cache. -
Fix a bug in the MessageBus wherein connections weren't being terminated during client teardown.
Internals
-
Fix a bug in the benchmark wherein the usage of
--account-count-hot
was broken when used in
conjunction with theuniform
distribution. -
Revamp the
core_missing_prepares
liveness-mode check to correctly check for the prepares that a
replica should repair (after #2414).
TigerTracks 🎧
0.16.9: Merge pull request #2411 from tigerbeetle/release-2024-10-15
0.16.9
Supported upgrade versions
Oldest supported client version: 0.15.3
Oldest upgradable replica version: 0.16.2
Server
- Binary: Download the zip for your OS and architecture from this page and unzip.
- Docker:
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.9
- Docker (debug image):
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.9-debug
Clients
NOTE: Because of package manager caching, it may take a few
minutes after the release for this version to appear in the package
manager.
- .NET:
dotnet add package tigerbeetle --version 0.16.9
- Go:
go mod edit -require github.com/tigerbeetle/tigerbeetle-go@v0.16.9
- Java: Update the version of
com.tigerbeetle.tigerbeetle-java
inpom.xml
to0.16.9
. - Node.js:
npm install tigerbeetle-node@0.16.9
Changelog
Safety And Performance
-
TigerBeetle clients internally batch operations for improved performance. Fix a bug where an
unclosed link chain could be batched before another linked chain, causing them to be treated as
one long linked chain. Additionally, prevent non-batchable requests from sharing packets entirely. -
AMOUNT_MAX
is used as a sentinel value for things like balancing transfers to specify moving
as much as possible. Correct and fix its value in the Java client. Thanks @tKe!
Features
-
Improve the benchmark by adding Zipfian distributed random numbers, to better simulate realistic
conditions and as a precursor to approximating YCSB. -
Previously, TigerBeetle's clients disallowed empty batches locally, before the request was even
sent to the cluster. However, this is actually a valid protocol message - even if it's not used by
the current state machine - so allow empty batches to be sent from clients. -
Revamp client documentation so that each snippet is self-contained, and standardize it across all
languages.
Internals
-
Give the DevHub a fresh coat of paint, and fix
passing seeds being blue in dark mode. -
#2408,
#2400,
#2391,
#2399,
#2402,
#2385Improve VOPR logging and fix a few failing seeds.
TigerTracks 🎧
0.16.8: Merge pull request #2389 from tigerbeetle/release-2024-10-07-extras
0.16.8
Supported upgrade versions
Oldest supported client version: 0.15.3
Oldest upgradable replica version: 0.16.1
Server
- Binary: Download the zip for your OS and architecture from this page and unzip.
- Docker:
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.8
- Docker (debug image):
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.8-debug
Clients
NOTE: Because of package manager caching, it may take a few
minutes after the release for this version to appear in the package
manager.
- .NET:
dotnet add package tigerbeetle --version 0.16.8
- Go:
go mod edit -require github.com/tigerbeetle/tigerbeetle-go@v0.16.8
- Java: Update the version of
com.tigerbeetle.tigerbeetle-java
inpom.xml
to0.16.8
. - Node.js:
npm install tigerbeetle-node@0.16.8
Changelog
Safety And Performance
-
Significantly reduced P100 latency by incrementally spreading the mutable table's sort during
compaction. This leverages the optimization of sort algorithms for processing sequences of
already sorted sub-arrays. -
Improve the workload generator to support concurrent tests with different ledgers.
-
Fix VOPR seeds.
For more awesome details about the backstory and solutions to these issues,
please refer to the PR.
Features
-
Update the REPL to support representing the maximum integer value as
-0
,
serving as theAMOUNT_MAX
sentinel.
Additionally, other negative values such as-1
can be used to representmaxInt - 1
.Also, include support for hexadecimal numbers for more convenient inputting of GUID/UUID
literals (e.g.0xa1a2a3a4_b1b2_c1c2_d1d2_e1e2e3e4e5e6
).Allow the
timestamp
field to be set, enabling the REPL to be used forimported
events.
Internals
-
Use
zig fetch
as a replacement for downloading files, removing dependence on external tools. -
Port of Rust's
dbg!
macro to Zig,
and the corresponding CI validation to prevent code using it from being merged intomain
! 😎 -
Verify the release versions included in the multiversion binary pack at build time (not only
during runtime) and improve thetigerbeetle version --verbose
command'smultiversion
output. -
Fix a multiversioning issue where the binary size exceeded the read buffer, failing to parse the
executable header. -
Consistently use
transient_error
instead oftransient_failure
and cleanup the StateMachine
code. -
Add missing links to the operations
query_accounts
andquery_transfers
in the documentation
and include the declaration forQueryFilter
andQueryFilterFlags
in thetb_client.h
header. -
Clearer error message when the replica crashes due to a data file being too large, instructing
the operator to increase the memory allocated for the manifest log.
TigerTracks 🎧
0.16.7
0.16.7
Supported upgrade versions
Oldest supported client version: 0.15.3
Oldest upgradable replica version: 0.15.6
Server
- Binary: Download the zip for your OS and architecture from this page and unzip.
- Docker:
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.7
- Docker (debug image):
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.7-debug
Clients
No client updates in this release, use client version 0.16.4.
Changelog
Note: this is an extra release to correct an availability issue in the upgrade path for 0.16.4
.
Specifically, the combination of tigerbeetle 0.16.4
and a client at 0.16.3
can lead to an
assertion failure and a server crash. No data is lost, but the server becomes unavailable.
It is recommended to upgrade to 0.16.7
, but this is only required if you are running older
clients. To upgrade, replace the binary on disk, and manually restart the replica.
Note that although the release is tagged at 0.16.7
, the binary advertises itself as 0.16.4
.
Safety And Performance
0.16.6
0.16.6
Supported upgrade versions
Oldest supported client version: 0.15.3
Oldest upgradable replica version: 0.15.6
Server
- Binary: Download the zip for your OS and architecture from this page and unzip.
- Docker:
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.6
- Docker (debug image):
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.6-debug
Clients
No client updates in this release, use client version 0.16.4.
Changelog
Note: this is an extra release to correct a potential issue in the upgrade path for 0.16.4
.
Specifically, the combination of tigerbeetle 0.16.2
and newer, and any client before 0.16.2
can
lead to an assertion failure and a server crash. No data is lost, but the server becomes
unavailable.
It is recommended to upgrade to 0.16.6
, but this is only required if you are running older
clients. To upgrade, replace the binary on disk, and manually restart the replica.
Note that although the release is tagged at 0.16.6
, the binary advertises itself as 0.16.4
.
Safety And Performance
-
Correctly parse AccountFilter from pre
0.16.2
clients.
0.16.5
0.16.5
Supported upgrade versions
Oldest supported client version: 0.15.3
Oldest upgradable replica version: 0.15.6
Server
- Binary: Download the zip for your OS and architecture from this page and unzip.
- Docker:
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.5
- Docker (debug image):
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.5-debug
Clients
No client updates in this release, use client version 0.16.4.
Changelog
Note: this is an extra release to correct an availability issue in the upgrade path for 0.16.4
.
Specifically, the combination of tigerbeetle 0.16.4
and a client at 0.16.3
can lead to an
assertion failure and a server crash. No data is lost, but the server becomes unavailable.
It is recommended to upgrade to 0.16.5
, but this is only required if you are running older
clients. To upgrade, replace the binary on disk, and manually restart the replica.
Note that although the release is tagged at 0.16.5
, the binary advertises itself as 0.16.4
.
Safety And Performance
-
Fix an assertion which was incorrect when a pre-transient-error client retried a transient error.
0.16.4: Merge pull request #2364 from tigerbeetle/release-2024-09-30
0.16.4
Supported upgrade versions
Oldest supported client version: 0.15.3
Oldest upgradable replica version: 0.15.6
Server
- Binary: Download the zip for your OS and architecture from this page and unzip.
- Docker:
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.4
- Docker (debug image):
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.4-debug
Clients
NOTE: Because of package manager caching, it may take a few
minutes after the release for this version to appear in the package
manager.
- .NET:
dotnet add package tigerbeetle --version 0.16.4
- Go:
go mod edit -require github.com/tigerbeetle/tigerbeetle-go@v0.16.4
- Java: Update the version of
com.tigerbeetle.tigerbeetle-java
inpom.xml
to0.16.4
. - Node.js:
npm install tigerbeetle-node@0.16.4
Changelog
This release introduces "transient errors": error codes for create_transfers
which depend on the
state of the database (e.g. exceeds_credits
). Going forward, a transfer that fails with a
transient error will not succeed if retried.
See the API tracking issue
and the documentation
for more details.
Safety And Performance
-
Reduce chance of
recovering_head
status by recovering from torn writes in the WAL.
This improves the availability of the cluster, asrecovering_head
replicas cannot participate in
consensus until after they repair.
Features
-
Ensure idempotence for
create_transfers
' "transient errors" with new result code
id_already_failed
. In particular, this guards against surprising behavior when the client is
running in a stateless API service.
Internals
TigerTracks 🎧
0.16.3: Merge pull request #2341 from tigerbeetle/matklad/fix-changelog
0.16.3
Supported upgrade versions
Oldest supported client version: 0.15.3
Oldest upgradable replica version: 0.15.5
Server
- Binary: Download the zip for your OS and architecture from this page and unzip.
- Docker:
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.3
- Docker (debug image):
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.3-debug
Clients
NOTE: Because of package manager caching, it may take a few
minutes after the release for this version to appear in the package
manager.
- .NET:
dotnet add package tigerbeetle --version 0.16.3
- Go:
go mod edit -require github.com/tigerbeetle/tigerbeetle-go@v0.16.3
- Java: Update the version of
com.tigerbeetle.tigerbeetle-java
inpom.xml
to0.16.3
. - Node.js:
npm install tigerbeetle-node@0.16.3
Changelog
Safety And Performance
-
Improve cluster availability by more aggressive recovery for crashes that happen while a replica
is checkpointing. -
Add a more efficient recipe for balance-conditional transfers. A balance-conditional transfer
is a transfer that succeeds only if the source account has more than a threshold amount of funds
in it.
Features
-
Add a new recipe for enforcing
debits_must_not_exceed_credits
on some subset of transfers (this
is a special case of a balance-conditional transfer, with the threshold value being equal to
transferred amount).
Internals
-
Add
triaged
issue label to prevent newly opened issues from slipping through the cracks. -
Add CI check for dead code.
-
Cleanup the source tree by removing top-level
tools
directory. -
Make sure that process-spawning API used for build-time "scripting" consistently reports
errors when the subprocess fails or hangs.
TigerTracks 🎧
0.16.2: Merge pull request #2320 from tigerbeetle/release-2024-09-16
0.16.2
Supported upgrade versions
Oldest supported client version: 0.15.3
Oldest upgradable replica version: 0.15.4
Server
- Binary: Download the zip for your OS and architecture from this page and unzip.
- Docker:
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.2
- Docker (debug image):
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.2-debug
Clients
NOTE: Because of package manager caching, it may take a few
minutes after the release for this version to appear in the package
manager.
- .NET:
dotnet add package tigerbeetle --version 0.16.2
- Go:
go mod edit -require github.com/tigerbeetle/tigerbeetle-go@v0.16.2
- Java: Update the version of
com.tigerbeetle.tigerbeetle-java
inpom.xml
to0.16.2
. - Node.js:
npm install tigerbeetle-node@0.16.2
Changelog
Safety And Performance
-
Tighten up the VSR assertions so the transition to
.recovering_head
can only be called from the
.recovering
status. -
Make the primary abdicate if it is unable to process requests due to a broken clock.
-
Smoke integration test using the real multiversion binary.
-
Workload generator based on the Java client to be used in integration tests (i.e. Antithesis).
Features
-
#2298,
#2307,
#2304,
#2309,
#2321Remove
Tracy
integration and dependencies.
Add JSON traces for events with multiple running instances, such as IO, lookups, and scans. -
Add the ability to filter by
user_data_{128,64,32}
andcode
inget_account_transfers
andget_account_balances
.
Internals
-
Mute the log on stderr when building client libraries.
Reduce the log's severity of some entries logged as.err
to.warn
for less noise when
running withlog_level = .err
. -
Document and explain how time works in TigerBeetle ⏱️.
-
Refactor
Forest.compact
and remove some dead code. -
Rewrite
commit_dispatch
, a chain of asynchronous stages calling each other, as a state machine
implementation that resembles linear control flow that is much easier to read. -
Fix the Node.js example that was using an incorrect enum flag.
Thanks for the heads up @jorispz! -
Update outdated scripts in
HACKING.md
. -
Use git timestamps to build Docker images.
This is a requirement for being deterministic in CI. -
Devhub link to pending code reviews.
TigerTracks 🎧
0.16.1: Merge pull request #2299 from tigerbeetle/release-2024-09-09
0.16.1
Supported upgrade versions
Oldest supported client version: 0.15.3
Oldest upgradable replica version: 0.15.3
Server
- Binary: Download the zip for your OS and architecture from this page and unzip.
- Docker:
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.1
- Docker (debug image):
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.1-debug
Clients
NOTE: Because of package manager caching, it may take a few
minutes after the release for this version to appear in the package
manager.
- .NET:
dotnet add package tigerbeetle --version 0.16.1
- Go:
go mod edit -require github.com/tigerbeetle/tigerbeetle-go@v0.16.1
- Java: Update the version of
com.tigerbeetle.tigerbeetle-java
inpom.xml
to0.16.1
. - Node.js:
npm install tigerbeetle-node@0.16.1
Changelog
Safety And Performance
-
Improve view change efficiency; new heuristic for lagging replicas to forfeit view change.
A lagging replicas first gives a more up-to-date replica a chance to become primary by forfeiting
view change. If the more up-to-date replica cannot step up as primary, the lagging replica
attempts to step up as primary. -
Complete rollout of the new state sync protocol.
Remove in-code remnants of the old state sync protocol. Replicas now panic if they receive
messages belonging to the old protocol.
Internals
-
Improve log warnings for client eviction due to its version being too low/high.
-
Fix VOPR false positive wherein checkpoint was being updated twice in the upgrade path.
-
Fix typos found using codespell.
-
Document example for debiting multiple accounts and crediting a single account wherein the total
amount to transfer to the credit account is known, but the balances of the individual debit
accounts are not known. -
Document the behavior of
user_data_128/user_data_64/user_data_32
in the presence of pending
transfers. -
Inline Dockerfile in the release code, removing tools/docker/Dockerfile.
-
Add support for tracing IO & CPU events. This allows for coarse-grained performance analysis,
for example collectively profiling IO and CPU performance (as opposed to IO or CPU in isolation). -
Remove explicit header sector locks, using a common locking path for prepare and header sectors.
-
Change CliArgs -> CLIArgs in accordance with TigerStyle.
-
Vendor
llvm-objcopy
in the dependencies
repository in accordance with our "no dependencies" policy. This ensures users don't have to
manually install LLVM. -
Assign correct date to the release binary date; it was earlier set to the epoch ("Jan 1 1970").
-
Introduce fatal errors for crashing the replica process in the face of uncorrectable errors (for
example, insufficient memory/storage). -
Add formatting check in the CI for the Go client.
-
Reduce dimensionality of configuration modes.
Removes the development configuration which was used to run the replica with asserts enabled,
enabling asserts for the production configuration instead. Additionally, removes the -Dconfig CLI
option, making production configuration the default.