Skip to content

Releases: ZoneTree/ZoneTree

release-v1.8.8

10 Jun 20:34
e5eee42

Choose a tag to compare

Highlights

This release introduces ZoneTree live backup support, a major documentation refresh, and a broad modernization of the codebase for newer .NET versions.

Breaking Changes

  • ZoneTree now targets net10.0 and net9.0 only.
  • Older .NET target frameworks have been removed to simplify maintenance and enable newer runtime and C# features.

New Features

Live Backup and Restore

Added a new ZoneTree.Backup subsystem for creating and restoring live backups.

using var backup = zoneTree.CreateLiveBackup(new LiveBackupOptions
{
    Store = new LocalLiveBackupProvider("backup/app"),
    Schedule = LiveBackupSchedule.Daily(
        new TimeOnly(2, 0),
        new TimeOnly(14, 0))
});

backup.Start();

See backup docs for more: https://github.com/koculu/ZoneTree/blob/main/docs/durability/backups.md

This includes:

  • CreateLiveBackup(...) extension methods for local-directory and custom backup stores
  • LiveBackupOptions
  • LiveBackupSchedule
  • LocalLiveBackupProvider
  • LiveBackupRestore
  • record-batch backup support for in-memory records
  • scheduled backup generations
  • configurable backup record compression
  • configurable concurrent file transfers

Live backups can include disk segments, bottom segments, and in-memory records, with support for both live and snapshot-style in-memory collection.

Expanded Documentation

Added a new documentation structure under docs/, covering:

  • getting started
  • reads and writes
  • iteration and range scans
  • transactions
  • maintenance
  • WAL modes
  • recovery
  • backups
  • compression
  • disk segment tuning
  • production checklist
  • troubleshooting
  • API overview
  • building systems on ZoneTree

Improvements

  • Improved operation-index documentation and clarified its role as a per-key freshness token.
  • Added iterator options for including deleted records and controlling whether iterator reads contribute to the block cache.
  • Replaced weak-identity locking patterns with explicit Lock instances throughout the core, WAL, transaction, backup, logger, and file-provider paths.
  • Improved analyzer compliance by replacing broad suppressions with targeted suppressions.
  • Modernized argument validation with newer .NET guard APIs.
  • Improved metadata serialization by relying on source-generated JSON serialization.
  • Improved in-memory file stream provider synchronization and path handling.
  • Improved backup-related disk segment collection and restore metadata generation.

Fixes and Reliability

  • Added regression coverage for WAL maximum operation index handling.
  • Added tests for stale metadata checkpoint recovery.
  • Added tests for compressed WAL stream tail and incomplete-block behavior.
  • Added tests for transaction rollback and incremental history behavior.
  • Added tests for live backup generation and restore behavior.
  • Added disk segment factory tests.
  • Strengthened iterator, replication, count, transaction, and BTree concurrency test coverage.

Documentation and Cleanup

  • Reworked the README and moved detailed guides into the new docs/ tree.
  • Removed older DocFX-style documentation files.
  • Normalized formatting, indentation, BOM usage, and final newlines across source, playground, and test projects.
  • Cleaned up benchmark and playground code formatting.

Upgrade Notes

Projects targeting older frameworks must move to net9.0 or newer before upgrading to this release.

Users who rely on backup or replication scenarios should review the new operation-index and backup documentation, especially around live backup generation, restore behavior, and per-key freshness semantics.

Pull Requests

Full Changelog: release-v1.8.7...release-v1.8.8

release-v1.8.7

08 Jun 04:03
d8307ac

Choose a tag to compare

What's Changed

  • Fix Discord badge in README by @koculu in #134
  • Rebrand ZoneTree and harden WAL, merge, opIndex, and transaction recovery by @koculu in #135

Full Changelog: release-v1.8.6...release-v1.8.7

ZoneTree vNext

This release introduces the new ZoneTree namespace and includes important reliability improvements for WAL recovery, merge operations, and optimistic transactions.

Migration

The package has been rebranded from Tenray.ZoneTree to ZoneTree.

Update your imports:

using Tenray.ZoneTree;

to:

using ZoneTree;

Existing databases created with the previous namespace metadata remain supported through the built-in legacy metadata migration.

Improvements

  • Updated the project to target .NET 10.
  • Improved compressed WAL recovery when files end with incomplete tail data.
  • Improved incremental backup reliability for compressed and sync WAL modes.
  • Hardened bottom segment and multipart merge behavior.
  • Improved opIndex recovery semantics for WAL replay and replication scenarios.
  • Improved optimistic transaction history tracking.
  • Added regression tests for rare recovery, merge, and transaction edge cases.

Fixes

  • Fixed partial reads in file stream recovery paths.
  • Fixed compressed WAL skip behavior across tail blocks.
  • Fixed persisted sparse-array metadata loading.
  • Fixed cancelled multipart merge cleanup.
  • Fixed transaction history stamp tracking for auto-commit writes.
  • Fixed repeated writes to the same key inside one transaction.
  • Fixed atomic add/update result reporting.
  • Fixed a disk-segment cache release issue.

release-v1.8.6

14 Jun 02:59
db345c6

Choose a tag to compare

What's Changed

Full Changelog: release-v1.8.5...release-v1.8.6

release-v1.8.5

18 Jan 02:18
89e7d6e

Choose a tag to compare

What's Changed

Full Changelog: release-v1.8.4...release-v1.8.5

release-v1.8.4

14 Nov 03:16
c660862

Choose a tag to compare

What's Changed

Full Changelog: release-v1.8.3...release-v1.8.4

release-v1.8.3

16 Oct 04:52
82774e0

Choose a tag to compare

What's Changed

  • Add support for Software computed CRC32 by @albyrock87 in #95
  • Add new methods to expose opIndexes for async replication. by @koculu in #97
  • MoveMutableSegmentForward should wait until all writes to the previous mutable segment finalized. by @koculu in #100

Full Changelog: release-v1.8.2...release-v1.8.3

release-v1.8.2

07 Sep 21:03

Choose a tag to compare

What's Changed

  • Provide key in IsDeleted delegate to support TTL based on keys by @koculu in #92
  • Added operation index to support asynchronous replication and audits by @koculu in #94
  • Set NextOpIndex after loading B+Tree to remove skipped regions on op index.

Full Changelog: release-v1.8.0...release-v1.8.2

release-v1.8.0

01 Sep 19:07

Choose a tag to compare

What's Changed

  • Unify the names and types of the public members by @koculu in #88

Full Changelog: release-v1.7.9...release-v1.8.0

release-v1.7.9

30 Aug 22:32

Choose a tag to compare

What's Changed

  • Add contribute to the block cache option to the iterators. by @koculu in #84
  • Improve type mismatch validation errors. by @koculu in #86

Full Changelog: release-v1.7.7...release-v1.7.9

release-v1.7.7

24 Aug 01:10

Choose a tag to compare

What's Changed

  • 81 enhancement type validation should not fail based on the version of the assembly difference by @koculu in #82
  • DestroyTree method is renamed to Drop.

Full Changelog: release-v1.7.6...release-v1.7.7