From a6aeb7801b0fc81ce2742305781daeebedbf5e3c Mon Sep 17 00:00:00 2001 From: dimgigov Date: Tue, 12 May 2026 23:31:51 +0300 Subject: [PATCH] =?UTF-8?q?docs:=20=D0=BE=D0=B1=D0=BD=D0=BE=D0=B2=D0=B5?= =?UTF-8?q?=D0=BD=20BUG=5FAUDIT.md=20=E2=80=94=20=D0=B2=D1=81=D0=B8=D1=87?= =?UTF-8?q?=D0=BA=D0=B8=20=D0=BA=D1=80=D0=B8=D1=82=D0=B8=D1=87=D0=BD=D0=B8?= =?UTF-8?q?/=D0=B2=D0=B8=D1=81=D0=BE=D0=BA=D0=B8/=D1=81=D1=80=D0=B5=D0=B4?= =?UTF-8?q?=D0=BD=D0=B8=20=D0=B1=D1=8A=D0=B3=D0=BE=D0=B2=D0=B5=20=D0=BF?= =?UTF-8?q?=D0=BE=D0=BF=D1=80=D0=B0=D0=B2=D0=B5=D0=BD=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- BUG_AUDIT.md | 37 +++++++++++++++++++++++-------------- 1 file changed, 23 insertions(+), 14 deletions(-) diff --git a/BUG_AUDIT.md b/BUG_AUDIT.md index 21db164..658d7e3 100644 --- a/BUG_AUDIT.md +++ b/BUG_AUDIT.md @@ -8,7 +8,7 @@ | Категория | Общо | Поправени | Остават | |-----------|------|-----------|---------| -| 🔴 Критични | 9 | 8 | 1 | +| 🔴 Критични | 9 | 9 | 0 | | 🟠 Високи | 7 | 7 | 0 | | 🟡 Средни | 12 | 12 | 0 | | 🟢 Конфигурационни | 4 | 4 | 0 | @@ -50,11 +50,11 @@ if creator in tm.activeTxns and tm.activeTxns[creator].state != tsCommitted: **Файл:** `src/barabadb/storage/recovery.nim` **Fix:** `summary()` вече извиква `analyze()` вместо `recover()`. -### 7. DistTxn — Rollback след commit attempt нарушава atomicity ❌ ОСТАВА +### 7. DistTxn — Rollback след commit attempt нарушава atomicity ✅ ПОПРАВЕНО **Файл:** `src/barabadb/core/disttxn.nim` **Проблем:** В `commit()`, ако някои participants не acknowledge, coordinator се опитва да rollback-не nodes, които вече са върнали `committed = true`. Веднъж commit-нато, не може да се rollback-ва. -**Fix:** След първия successful commit на participant, не опитвай rollback. Ползвай heuristic recovery или блокирай докато всички acknowledge-нат. +**Fix:** `commit()` вече не rollback-ва commit-нали participants. Ако някой participant е commit-нал, транзакцията се маркира като committed. ### 8. Raft — Majority calculation bug за четен брой нодове ✅ ПОПРАВЕНО **Файл:** `src/barabadb/core/raft.nim` @@ -94,7 +94,7 @@ if creator in tm.activeTxns and tm.activeTxns[creator].state != tsCommitted: | 24 | `vector/engine.nim` | Няма locking в HNSW | ✅ Поправено — `Lock` в `HNSWIndex` | | 25 | `fts/engine.nim` | Tokenize мангира UTF-8 | ✅ Поправено — `runes` вместо байтове | | 26 | `graph/engine.nim` | `addEdge` без node existence check | ✅ Поправено — `KeyError` при липсващ node | -| 27 | `core/raft.nim` | Няма disk persistence | ❌ ОСТАВА (преместено в Дългосрочни) | +| 27 | `core/raft.nim` | Няма disk persistence | ✅ Поправено — saveState()/loadState() | | 28 | `core/server.nim` | `DISTTXN`/`REP` handlers без timeout | ✅ Поправено — `recvWithTimeout()` | --- @@ -154,18 +154,17 @@ if creator in tm.activeTxns and tm.activeTxns[creator].state != tsCommitted: ### 🔄 Оставащи задачи **Висок приоритет:** -- [ ] **DistTxn:** Rollback след commit attempt нарушава atomicity +- [x] **DistTxn:** Rollback след commit attempt нарушава atomicity - Трябва да се изпълни само ако НИТО ЕДИН participant не е commit-нал - Или: имплементирай heuristic recovery **Среден приоритет:** -- [ ] **Raft disk persistence:** `currentTerm`, `votedFor`, log са in-memory - - Трябва WAL за Raft state - - Snapshot механизъм -- [ ] **MVCC version chain cleanup:** Unbounded memory growth - - Периодично премахване на невидими версии -- [ ] **LSM-Tree WAL write под global lock:** Scalability bottleneck - - WAL писането трябва да е извън `db.lock` +- [x] **Raft disk persistence:** `currentTerm`, `votedFor`, log са in-memory + - ✅ saveState()/loadState() за term/votedFor/log +- [x] **MVCC version chain cleanup:** Unbounded memory growth + - ✅ compactVersions() на всеки 100 commits +- [x] **LSM-Tree WAL write под global lock:** Scalability bottleneck + - ✅ Отделен `walLock`, WAL write е извън `db.lock` - [ ] **Auth token expiration:** `exp`/`nbf`/`iat` не се проверяват - [ ] **Auth timing attack:** JWT signature comparison не е constant-time @@ -190,7 +189,7 @@ if creator in tm.activeTxns and tm.activeTxns[creator].state != tsCommitted: | Метрика | Цел | Текущ статус | |---------|-----|--------------| | Тестово покритие | > 80% | ~292 теста, 0 failure-а | -| Критични бъгове | 0 | 1 остава (DistTxn) | +| Критични бъгове | 0 | 0 остават ✅ | | Високи бъгове | 0 | 0 остават ✅ | | Security audit | Поправи всички 🔴 и 🟠 | Почти готово | | Benchmark consistency | `nimble bench` да работи | ✅ Готово | @@ -199,4 +198,14 @@ if creator in tm.activeTxns and tm.activeTxns[creator].state != tsCommitted: ## Заключение -След 4 спринта BaraDB е значително по-стабилна. **8 от 9 критични, всички 7 високи и всички 12 средни бъгове са поправени.** Оставащите проблеми са предимно архитектурни (Raft persistence, MVCC cleanup, distributed transactions) и изискват по-дълбоки промени. Базата вече е много по-близо до production-ready статус. +След 5 спринта **ВСИЧКИ критични, високи и средни бъгове са поправени.** BaraDB вече има: + +- ✅ Коректен MVCC с aborted txn tracking и version cleanup +- ✅ LSM-Tree без data loss и с по-добра concurrency +- ✅ Сигурен JWT (HMAC-SHA256) и SSL без command injection +- ✅ Bounds checking в wire protocol срещу DoS +- ✅ Thread-safe HNSW и graph engine +- ✅ Disk persistence за Raft state +- ✅ Коректни distributed transactions (no rollback after commit) + +Оставащите задачи са предимно архитектурни подобрения (formal verification specs, auth token expiration, threadpool deprecation) и не са блокери за production.