0.16.0
版本发布时间: 2024-09-03 04:34:45
tigerbeetle/tigerbeetle最新发布版本:0.16.0(2024-09-03 04:34:45)
0.16.0
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.0
- Docker (debug image):
docker pull ghcr.io/tigerbeetle/tigerbeetle:0.16.0-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.0
- Go:
go mod edit -require github.com/tigerbeetle/tigerbeetle-go@v0.16.0
- Java: Update the version of
com.tigerbeetle.tigerbeetle-java
inpom.xml
to0.16.0
. - Node.js:
npm install tigerbeetle-node@0.16.0
Changelog
This release is 0.16.0 as it includes a new breaking API change around zero amount transfers, as well as the behavior around posting a full pending transfer amount or balancing as much as possible. These are all gated by the client's release version.
If you're running a client older than 0.16.0, you'll see the old behavior where zero amount transfers are disallowed, but on newer clients these are supported and will create a transfer with an amount of 0.
Additionally, the sentinel value to representing posting the full amount of a pending transfer, or
doing a balancing transfer for as much as possible has changed. It's no longer 0, but instead
AMOUNT_MAX
.
See the tracking issue for more details.
Safety And Performance
-
Change how replicas that haven't finished syncing send a
prepare_ok
message, preventing them from falsely contributing to the durability of a checkpoint, which could potentially cause liveness issues in the event of storage faults. -
The new state sync protocol regressed the behavior where the replica would try to repair the WAL before switching to state sync, and this puts the old behavior back in.
WAL repair is used when the lagging replica's log still intersects with the cluster's current log, while state sync is used when when the logs no longer intersect.
-
Try to repair (but not commit) prepares, even if we don't have all the headers between checkpoint and head.
This makes things consistent between the normal and repair paths, and improves concurrency while repairing.
-
Reject prepares on the primary if its view isn't durable, much like solo clusters.
This solves a failing VOPR seed wherein a primary accepting prepares before making its log_view durable exposes a break in its hash chain.
-
A few
sysctl
s and security frameworks (eg, seccomp) might block io_uring. Print out a more helpful error message, rather than a generic "permission denied" or "system outdated".
Features
-
Add the new
imported
flag to allow user-defined timestamps when creatingAccount
s andTransfer
s from historical events. -
Allow
Transfer
s withamount=0
and change behavior for balancing and post-pending transfers, introducing the constantAMOUNT_MAX
to replace the use of the zero sentinel when representing the maximum/original value in such cases. Note that this is a breaking change.Also, explicitly define optional indexes, which previously were determined simply by not indexing zeroed values.
-
Introduce a new flag,
Account.flags.closed
, which causes an account to reject any further transfers, except for voiding two-phase transfers that are still pending.The account flag can be set during creation or through a closing transfer. In the latter case, closed account can be re-opened by voiding or expiring the closing transfer.
Internals
-
Deprecates the old state sync protocol, no longer supporting both protocols simultaneously. As planned for this release, it only ignores old messages, allowing replicas to upgrade normally. In the next release, replicas would panic if they receive an old message.
-
Move multiversion build logic into
build.zig
fromrelease.zig
. This makes it much easier to build multiversion binaries as part of a regularzig build
, without having to invoke CI or release process specific code that's normally part ofrelease.zig
.It also makes it possible to build multiversion binaries on platforms that aren't x86_64 Linux.
-
Refactor the Multiversion API, bringing it in line with pre-existing code patterns.
-
Previously, TigerBeetle release numbers were based on a finicky conversion of GitHub's internal action run number to a version number.
This was error prone, and difficult to reason about before hand (what would the given version number for a release be?). Instead, make it so this very changelog is the source of truth for the version number which is explicitly set.
-
Change
init
function signatures to allow for in-place initialization. This addresses the silent stack growth caused by intermediate copy/move allocations during the initialization of large objects.Specifically, the
Forest
struct can grow indefinitely depending on the number ofGrooves
/IndexTrees
needed to support the StateMachine's custom logic, causing TigerBeetle to crash during startup due to stack-overflow. -
Don't cancel in-progress GitHub actions on the main branch. In particular, this ensures that the devhub records the benchmark measurements for every merge to main, even if those merges occur in quick succession.
-
Make the experimental feature
aof
(append-only file) a runtime flag instead of a build-time setting. This simplifies operations, allowing the use of the same standard release binary in environments that requireaof
. -
Renames the LSM constant
lsm_batch_multiple
tolsm_compaction_ops
, providing clearer meaning on how it relates to the pace at which LSM tree compaction is triggered. -
Add support for indexing flags, namely the new
imported
flag.
TigerTracks 🎧
1、 tigerbeetle-aarch64-linux-debug.zip 19.17MB
2、 tigerbeetle-aarch64-linux.zip 3.8MB
3、 tigerbeetle-universal-macos-debug.zip 26.33MB
4、 tigerbeetle-universal-macos.zip 9.76MB
5、 tigerbeetle-x86_64-linux-debug.zip 19.26MB
6、 tigerbeetle-x86_64-linux.zip 4.02MB
7、 tigerbeetle-x86_64-windows-debug.zip 9.9MB
8、 tigerbeetle-x86_64-windows.zip 4.45MB