feat: distributed gaps filled — gossip UDP transport, sharding data migration, inter-module wiring (raft-disttxn, gossip-sharding, replication-disttxn)

This commit is contained in:
2026-05-13 11:11:53 +03:00
parent 2a8d2a6cb4
commit c0bd3dff86
9 changed files with 682 additions and 76 deletions
+31
View File
@@ -508,3 +508,34 @@ proc scanMemTable*(db: LSMTree): seq[Entry] =
result.add(e)
for e in db.immutableMem.entries:
result.add(e)
proc scanAll*(db: LSMTree): seq[(string, seq[byte])] =
## Scan all active (non-deleted) entries from memory and SSTables.
## Used for shard data migration.
acquire(db.lock)
defer: release(db.lock)
var seen = initTable[string, bool]()
# Scan memtable first (most recent)
for e in db.memTable.entries:
if e.key notin seen:
seen[e.key] = true
if not e.deleted:
result.add((e.key, e.value))
# Scan immutable memtable
for e in db.immutableMem.entries:
if e.key notin seen:
seen[e.key] = true
if not e.deleted:
result.add((e.key, e.value))
# Scan SSTables from newest to oldest
for sst in db.sstables:
for key, offset in sst.index:
if key notin seen:
seen[key] = true
let (found, entry) = readSSTableEntry(sst, key)
if found and not entry.deleted:
result.add((entry.key, entry.value))