Releases: maxpert/marmot
v2.9.9-beta
What's Changed
🐛 Bug Fixes
- Parameterized query extraction for binary data safety
- MySQL/Drupal compatibility improvements
- Strip MySQL column COLLATE and COMMENT in CREATE TABLE transpilation
🧹 Maintenance
- correct beta version to v2.9.0-beta
📦 Other Changes
- build: move to Go 1.26 + Green Tea GC and bump project to v2.1.0-beta
- Add replicated LOAD DATA LOCAL INFILE with replica forwarding
- transpiler/cdc: wire schema-aware upsert conflicts and remove forced WAL checkpoints
- replica: make forwarded writes leader-transparent and idempotent
Full Changelog: v2.9.8-beta...v2.9.9-beta
v2.9.8-beta
What's Changed
🐛 Bug Fixes
- Forward handler missing InTransaction and CommittedTxnId
Full Changelog: v2.9.7-beta...v2.9.8-beta
v2.9.7-beta
What's Changed
🐛 Bug Fixes
- Schema version not incremented on followers for CREATE/DROP DATABASE
- Return LastInsertId in write forwarding response
Full Changelog: v2.9.6-beta...v2.9.7-beta
v2.9.6-beta
What's Changed
🚀 New Features
- Signal-based CDC notification for replica streaming
🐛 Bug Fixes
- CREATE/DROP DATABASE forwarding and cleanup dead code
- Skip transpilation for forwarded queries from replica
- Write forwarding improvements and stream client robustness
Full Changelog: v2.9.2-beta...v2.9.6-beta
v2.9.2-beta
What's Changed
🐛 Bug Fixes
- DDL streaming replication - persist DDL to CDC storage
- CREATE/DROP DATABASE via write forwarding now available immediately
Full Changelog: v2.9.1-beta...v2.9.2-beta
v2.9.1-beta
What's Changed
🐛 Bug Fixes
- CREATE DATABASE via write forwarding fails with syntax error
Full Changelog: v2.9.0-beta...v2.9.1-beta
v2.8.0
What's Changed
🚀 New Features
- Add -daemon flag for background process mode
- Add file-based logging with rotation support
🐛 Bug Fixes
- Add missing logging options to config.toml
- Release workflow version naming and Linux uploads
📦 Other Changes
- ci: release assets to GitHub Releases on workflow_dispatch events too
Full Changelog: v2.7.2...v2.8.0
v2.7.2
What's Changed
🚀 New Features
- Wire up new admin endpoints in dashboard UI
- Add new admin API endpoints for improved observability
- Add auto-release workflow for tag-based releases
Full Changelog: v2.7.1...v2.7.2
v2.7.1
Highlights
This release brings major performance improvements, enhanced replica capabilities with transparent failover, and significant telemetry enhancements for production observability.
🚀 New Features
Replica Enhancements
- Transparent Failover: Read-only replicas now automatically failover between cluster nodes when disconnected
- Cluster Discovery: Replicas can discover new cluster nodes dynamically
- Per-Database Snapshots: Support for snapshotting individual databases instead of full cluster state
- TxnID-Ordered Streaming: Ensures replica correctness during failover scenarios
Performance & Compression
- Zstd Compression: Added zstd compression for gRPC cluster communication (configurable compression level)
- Deferred CDC Payload: CDC data now deferred from PREPARE to COMMIT phase, reducing network overhead
- Binary Intent Key Encoding: More efficient storage format for transaction intents
Telemetry & Observability
- Comprehensive Prometheus metrics improvements
- Better gap detection and reporting
- Enhanced logging for debugging replication issues
SQLite Enhancements
- Session-Level Transpilation Toggle: Control MySQL-to-SQLite transpilation per session
- SQLite Extension Loading: Support for loading SQLite extensions at runtime
- Time-Limited Incremental Vacuum: Automatic WAL checkpoint with configurable vacuum duration
- Unix Socket Support: MySQL server can now listen on Unix sockets
DML Determinism Detection
- Automatic detection of non-deterministic DML statements
- Warnings for statements that may produce different results across nodes
⚡ Performance Improvements
- In-Memory Intent Tracking: Replaced Pebble-based intent locks with in-memory RowLockStore for faster conflict detection
- Optimized Commit Path: Removed redundant validation, added DDL flush barriers
- Eliminated O(N) Random Seeks: New intent storage schema with efficient key layout
- Batched CDC Application: CDC entries wrapped in single SQLite transaction
- Consolidated Pebble Key-Building: Generic helpers reduce code duplication and improve performance
🐛 Bug Fixes
- Replica Snapshot Verification: Fixed mismatch where __marmot_system was included in verification list but not sent (replicas maintain their own system DB)
- UPSERT Replication: Fixed CDC type override breaking UPSERT operations
- Startup Deadlock: Fixed deadlock in wireGCCoordination during node startup
- GC/Anti-Entropy Interval: Enforced GC interval >= anti-entropy interval to prevent stale watermark decisions
🧹 Code Quality
- Migrated from deprecated grpc.DialContext to grpc.NewClient
- Removed 250+ lines of dead code and unused dependencies
- Updated outdated dependencies
- Cleaned up unused config fields and parameters
📖 Documentation
- Updated README with new replica failover configuration
- Added per-database snapshot configuration docs
- Improved example scripts with auto-generated configs and PSK authentication
Breaking Changes
None - this release is backward compatible with v2.4.x configurations.
Upgrade Notes
- Replica Users: Existing replicas will automatically benefit from the snapshot fix
- Compression: To enable zstd compression, set compression_level in [grpc_client] config (0=disabled, 1=fastest, 4=best)
- Vacuum: Configure vacuum_time_limit_seconds in [replication] to control incremental vacuum duration
v2.6.0
What's Changed
- Feature/per database snapshots by @maxpert in #144
- Correct rqlite comparison by @otoolep in #146
- Deferred CDC payload support for large mutations by @maxpert in #147
- Feat: Add determinism detection for DML statement replication by @maxpert in #148
New Contributors
Full Changelog: v2.4.2...v2.6.0