release: prepare v1.3.0 changelog and version bump
This commit is contained in:
@@ -2,6 +2,31 @@
|
|||||||
|
|
||||||
All notable changes to BaraDB are documented in this file.
|
All notable changes to BaraDB are documented in this file.
|
||||||
|
|
||||||
|
## [1.3.0] — 2026-07-30
|
||||||
|
|
||||||
|
### Raft cluster — Supported (single `default` DB scope)
|
||||||
|
|
||||||
|
Raft 3-node moves from **Experimental** to **Supported** for the covered scope; single-node remains Production GA. Spec/plan: `docs/superpowers/specs/2026-07-30-raft-supported-design.md`, `docs/superpowers/plans/2026-07-30-v1.3.0-raft-supported.md`.
|
||||||
|
|
||||||
|
- **Failover under load proven** — `tests/raft_failover_load_e2e_test.nim`: sustained INSERT load, leader killed at ≥ 50 acked writes; every **acknowledged** write survives on both survivors. Client contract: in-flight writes during failover fail fast with an error — clients must retry ([distributed.md](docs/en/distributed.md))
|
||||||
|
- **Mandatory CI gate** — dedicated `raft-e2e` GitHub Actions job runs all five raft e2e suites; a missing server binary is a hard FAIL under CI (no silent skip)
|
||||||
|
- **Raft-port TLS** — `BARADB_RAFT_TLS_ENABLED` + `BARADB_RAFT_TLS_CERT_FILE` / `BARADB_RAFT_TLS_KEY_FILE` / `BARADB_RAFT_TLS_CA_FILE` / `BARADB_RAFT_TLS_VERIFY_PEER`; fail-closed startup when cert/key is missing; optional mutual auth; follower→leader SQL forwarding is TLS-wrapped when the client port is. E2E `tests/raft_tls_e2e_test.nim` (full-TLS cluster works; plaintext node excluded)
|
||||||
|
- **InstallSnapshot cold-node recovery** — backward-compatible wire protocol (`RaftProtoVersion` stays 1); the leader streams a `tar.gz` snapshot of the default DB in chunks of `BARADB_RAFT_SNAP_CHUNK_KB` KiB (default 256) to peers whose lag is unrecoverable; the follower restores via the backup/restore path and resumes from the snapshot base. Leader compaction unpins from peers stale beyond `BARADB_RAFT_PEER_STALE_MS` (default 30000). E2E `tests/raft_coldnode_e2e_test.nim` (returning node and wiped node converge automatically)
|
||||||
|
|
||||||
|
### Fixes
|
||||||
|
|
||||||
|
- **Raft put/delete encoding** — `ExecResult.keyValuePairs` carries an explicit `deleted` flag; an INSERT into a PK-only table (empty value) is no longer encoded as a `delete` and erased on apply; regression tests in `tests/bugfix_test.nim`
|
||||||
|
- **Rejoin livelock** — on leadership acquisition the leader drops cached peer sockets; half-dead sockets to a restarted peer previously never errored, so no redial ever happened and the cluster livelocked without heartbeats
|
||||||
|
- **Post-restore ctx repoint** — after an InstallSnapshot restore, the TCP serving ctx/db is repointed at the reopened database (queries previously read the closed pre-restore LSM and served 0 rows). Remaining limitation for startup-captured HTTP ctx: see [known-limitations](docs/en/known-limitations.md)
|
||||||
|
- **Intermediate InstallSnapshot chunk replies ignored** — the leader acts only on the final chunk reply
|
||||||
|
|
||||||
|
### Release
|
||||||
|
|
||||||
|
- `baradadb.nimble` → `1.3.0`; `/health` and startup version strings updated
|
||||||
|
- Docs: [distributed](docs/en/distributed.md) (failover contract, raft TLS setup, snapshot tunables), [known-limitations](docs/en/known-limitations.md) (raft supported scope + two newly documented limitations), [release-checklist](docs/en/release-checklist.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## [1.2.0] — 2026-07-30
|
## [1.2.0] — 2026-07-30
|
||||||
|
|
||||||
### Production GA (single-node)
|
### Production GA (single-node)
|
||||||
|
|||||||
@@ -1576,7 +1576,7 @@ features are still being refined:
|
|||||||
| LSM-Tree SSTable reads | ✅ Implemented | Full disk I/O with compaction, WAL, and bloom filters. |
|
| LSM-Tree SSTable reads | ✅ Implemented | Full disk I/O with compaction, WAL, and bloom filters. |
|
||||||
| HNSW vector search | ✅ Implemented | Hierarchical graph navigation with SIMD-optimized distance metrics. |
|
| HNSW vector search | ✅ Implemented | Hierarchical graph navigation with SIMD-optimized distance metrics. |
|
||||||
| TCP server execution | ✅ Implemented | Full binary wire protocol parsing and BaraQL query execution. |
|
| TCP server execution | ✅ Implemented | Full binary wire protocol parsing and BaraQL query execution. |
|
||||||
| Raft consensus | ⚡ Experimental cluster | TCP election + SQL/DDL via log; single-node is **Production GA**. See `docs/en/known-limitations.md`. |
|
| Raft consensus | ✅ Supported (3-node, `default` DB) | TCP election + SQL/DDL via log; failover under load, raft TLS, InstallSnapshot recovery e2e-proven. See `docs/en/known-limitations.md`. |
|
||||||
| Graph / FTS / Columnar | ✅ Implemented | In-memory engines with serialization; FTS/vector/graph indexes persist across restarts. |
|
| Graph / FTS / Columnar | ✅ Implemented | In-memory engines with serialization; FTS/vector/graph indexes persist across restarts. |
|
||||||
| Query codegen | ✅ Implemented | IR plans compile to storage engine operations with optimization passes. |
|
| Query codegen | ✅ Implemented | IR plans compile to storage engine operations with optimization passes. |
|
||||||
|
|
||||||
@@ -1585,10 +1585,10 @@ reflects 100% completion across all major phases.
|
|||||||
|
|
||||||
## Changelog
|
## Changelog
|
||||||
|
|
||||||
See [CHANGELOG.md](CHANGELOG.md) for full release history. Package version is **v1.2.0**.
|
See [CHANGELOG.md](CHANGELOG.md) for full release history. Package version is **v1.3.0**.
|
||||||
|
|
||||||
|
- **Raft multi-node supported (v1.3.0):** failover under load, mandatory CI gate, raft TLS, InstallSnapshot cold-node recovery — [distributed.md](docs/en/distributed.md), [known-limitations](docs/en/known-limitations.md)
|
||||||
- **Production GA (single-node):** auth-on prod compose, backup/restore drill, runbook — [known-limitations](docs/en/known-limitations.md), [deployment](docs/en/deployment.md)
|
- **Production GA (single-node):** auth-on prod compose, backup/restore drill, runbook — [known-limitations](docs/en/known-limitations.md), [deployment](docs/en/deployment.md)
|
||||||
- **Raft multi-node:** experimental — [distributed.md](docs/en/distributed.md)
|
|
||||||
|
|
||||||
## License
|
## License
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
# Package
|
# Package
|
||||||
version = "1.2.0"
|
version = "1.3.0"
|
||||||
author = "BaraDB Team"
|
author = "BaraDB Team"
|
||||||
description = "BaraDB — Multimodal database written in Nim"
|
description = "BaraDB — Multimodal database written in Nim"
|
||||||
license = "BSD-3-Clause"
|
license = "BSD-3-Clause"
|
||||||
|
|||||||
@@ -262,7 +262,7 @@ proc healthHandler(server: HttpServer): RequestHandler =
|
|||||||
let ctx = newContext(request)
|
let ctx = newContext(request)
|
||||||
var body = %*{
|
var body = %*{
|
||||||
"status": "ok",
|
"status": "ok",
|
||||||
"version": "1.2.0"
|
"version": "1.3.0"
|
||||||
}
|
}
|
||||||
if server.raftNode != nil:
|
if server.raftNode != nil:
|
||||||
let n = server.raftNode
|
let n = server.raftNode
|
||||||
@@ -368,7 +368,7 @@ proc openApiHandler(): RequestHandler =
|
|||||||
let ctx = newContext(request)
|
let ctx = newContext(request)
|
||||||
ctx.json(%*{
|
ctx.json(%*{
|
||||||
"openapi": "3.0.0",
|
"openapi": "3.0.0",
|
||||||
"info": {"title": "BaraDB API", "version": "1.2.0"},
|
"info": {"title": "BaraDB API", "version": "1.3.0"},
|
||||||
"paths": {
|
"paths": {
|
||||||
"/query": {
|
"/query": {
|
||||||
"post": {
|
"post": {
|
||||||
@@ -906,7 +906,7 @@ function showTab(idx){
|
|||||||
}
|
}
|
||||||
setInterval(() => { if(document.querySelectorAll('.panel')[4].classList.contains('active')) loadMetrics() }, 5000)
|
setInterval(() => { if(document.querySelectorAll('.panel')[4].classList.contains('active')) loadMetrics() }, 5000)
|
||||||
</script>
|
</script>
|
||||||
<div class='status' style='text-align:center;padding:10px'>BaraDB v1.2.0 — Multimodal Database Engine</div>
|
<div class='status' style='text-align:center;padding:10px'>BaraDB v1.3.0 — Multimodal Database Engine</div>
|
||||||
</body></html>"""
|
</body></html>"""
|
||||||
request.respond(200, @[("Content-Type", "text/html; charset=utf-8")], html)
|
request.respond(200, @[("Content-Type", "text/html; charset=utf-8")], html)
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -289,7 +289,7 @@ proc main() =
|
|||||||
# Init structured logger from config
|
# Init structured logger from config
|
||||||
let logLvl = parseEnum[LogLevel]("ll" & capitalizeAscii(config.logLevel))
|
let logLvl = parseEnum[LogLevel]("ll" & capitalizeAscii(config.logLevel))
|
||||||
defaultLogger = newLogger(logLvl, config.logFile)
|
defaultLogger = newLogger(logLvl, config.logFile)
|
||||||
info("BaraDB v1.2.0 — Multimodal Database Engine")
|
info("BaraDB v1.3.0 — Multimodal Database Engine")
|
||||||
info("Storage gate initialized (serializes HTTP/TCP/compaction access)")
|
info("Storage gate initialized (serializes HTTP/TCP/compaction access)")
|
||||||
|
|
||||||
# Security check: warn if JWT secret is not configured (non-production only)
|
# Security check: warn if JWT secret is not configured (non-production only)
|
||||||
|
|||||||
Reference in New Issue
Block a user