Skip to content

Releases: visorcraft/MongrelDB

v0.47.1

Choose a tag to compare

@github-actions github-actions released this 11 Jul 04:22
v0.47.1
b62c0d2
v0.47.1 — expose history-retention API on the node addon

v0.47.0 — CDC, backup, PITR, prepared statements, cross-request HTTP sessions, FK final-write-set, metrics and audit log

Choose a tag to compare

@visorcraft visorcraft released this 11 Jul 00:19
v0.47.0
3f589a5

What's new in v0.47.0

Server (mongreldb-server)

  • Cross-request HTTP sessions for interactive transactions — keep a transaction open across multiple HTTP calls via session-bound TxnState.
  • Prepared-statement REST API over HTTP sessionsprepare, execute, deallocate endpoints; bind values across requests.
  • Metrics, audit log, and Arrow streaming/metrics, /audit, Arrow JSON/streaming over /sql.
  • Idempotent create-table — accept default_value as alias for default_expr in /kit/create_table.

Core (mongreldb-core)

  • Foreign-key final-write-set enforcementcore FK final-write-set integrates referential integrity with the WAL group-commit path.
  • CDC, backup, and PITR — change-data-capture stream + cold/offline backups + point-in-time restore with additional test coverage.

Tooling

  • Cross-engine benchmark matrix refreshed (34 language clients documented).
  • rustfmt applied across mongreldb-core and mongreldb-server.
  • Code review pass: address Codex peer-review findings across the shipped features.

Stats since v0.46.2

  • 954 tests passing, 1 ignored.
  • cargo fmt --check, cargo clippy --workspace --all-targets --all-features -- -D warnings, and cargo test --workspace --all-features all green.

v0.46.2

Choose a tag to compare

@visorcraft visorcraft released this 10 Jul 09:03
v0.46.2
3f1a366

Bug Fixes

  • server: invalidate idempotency cache on drop_table — when a table is dropped and recreated, cached idempotency entries became stale and replays silently reported success without writing (data-loss bug). Fix clears all idempotency entries on table drop.

Full Changelog: v0.46.1...v0.46.2

v0.46.1

Choose a tag to compare

@visorcraft visorcraft released this 10 Jul 00:38
v0.46.1
a40407a

Full Changelog: v0.46.0...v0.46.1

v0.46.0

Choose a tag to compare

@visorcraft visorcraft released this 10 Jul 00:08
v0.46.0
1ab9671

Full Changelog: v0.45.0...v0.46.0

v0.45.0

Choose a tag to compare

@visorcraft visorcraft released this 09 Jul 02:34
v0.45.0
019d659

Maintenance

  • CI: GitHub Actions on Node 24 runtime. All workflow steps now run on the Node 24 action runtime, clearing the Node 20 deprecation warnings.
    • actions/checkout v5 -> v7
    • actions/setup-node v4 -> v6
    • softprops/action-gh-release v2 -> v3
    • docker/setup-qemu-action, setup-buildx-action, login-action v3 -> v4
    • docker/metadata-action v5 -> v6
    • docker/build-push-action v6 -> v7
    • Swatinem/rust-cache pinned at v2.9.1 (already node24)

Server binaries (linux x64/musl/arm64, darwin arm64/universal) and the ghcr.io/visorcraft/mongreldb-server image are attached/uploaded by CI shortly.

Full changelog: v0.44.1...v0.45.0

v0.44.1

Choose a tag to compare

@visorcraft visorcraft released this 08 Jul 19:17
v0.44.1
83db924

What changed

OpenOptions and lock_timeout_ms for Database::open_with_options

New opt-in knob for cross-process lock acquisition. Default 0 keeps the historical fail-fast behavior; pass OpenOptions { lock_timeout_ms: 5_000 } for SQLite-style busy_timeout semantics with 1ms, then 10ms, then 50ms backoff against a hard deadline. Lets multiple writers commit cleanly against the same database instead of the second opener seeing locked by another process.

create* constructors now refuse to clobber an existing database

Database::create, create_encrypted, create_with_key, create_with_credentials, and create_encrypted_with_credentials now return MongrelError::InvalidArgument("database already exists at <path>; use Database::open() to open it, or remove the directory first") when the on-disk CATALOG file is present. Previously these would silently overwrite a populated directory, destroying the catalog and any encryption keys. Use Database::open* to open an existing database.

Lock retry respects error class

The cross-process lock retry loop now only treats WouldBlock as retryable. Other I/O errors (PermissionDenied, NotFound, etc.) bubble up immediately instead of being treated as "locked, try again" and looping or hiding the real problem.

Tests

  • New crates/mongreldb-core/tests/cross_process_lock.rs: 5 tests covering fail-fast, retry-until-acquired, retry-with-no-timeout, retry-after-engine-holder-releases, and a 4-writer subprocess harness that commits 100 rows cleanly with the new lock_timeout_ms knob.
  • New database_basic.rs cases for the reject_existing_database guard across plain, encrypted, and encrypted + credentialed paths.
  • Writer subprocess PK fixed from idx to writer_id * rows + idx so parallel writers no longer collide on the primary key.

Misc

  • OpenOptions now derives Default (was a hand-rolled impl Default).
  • fail_fast_default_rejects_concurrent_open timing slack bumped 500ms to 2s to stop CI flake on slow machines.

Full Changelog: v0.44.0...v0.44.1