fix(raft): state machine callback, start from main, remove asyncCheck, config

- applyCommand callback: committed entries applied to state machine
- lastApplied incremented on commit via applyCommitted()
- RaftNetwork.run() started from main() when raftEnabled=true
- asyncCheck replaced with try/await in processMessage
- bindAddr without hardcoded 127.0.0.1
- raft config: raftEnabled/Port/Peers/NodeId + env vars
- 283 tests, 0 failures
This commit is contained in:
2026-05-07 14:22:04 +03:00
parent d259c1a1fc
commit c2dc280ddd
4 changed files with 64 additions and 17 deletions
+16
View File
@@ -12,6 +12,7 @@ import barabadb/core/logging
import barabadb/protocol/ssl
import barabadb/storage/lsm
import barabadb/storage/compaction
import barabadb/core/raft
type
CompactionManager* = ref object
@@ -81,6 +82,21 @@ proc main() =
let cm = newCompactionManager(httpServer.db)
asyncCheck cm.startCompactionLoop()
# Start Raft cluster if enabled
if config.raftEnabled:
info("Starting Raft node " & config.raftNodeId & " on port " & $config.raftPort)
var raftNode = newRaftNode(config.raftNodeId, config.raftPeers, config.raftPort)
# Wire state machine to apply committed entries to the database
raftNode.applyCommand = proc(cmd: string, data: seq[byte]) {.gcsafe.} =
if cmd == "put":
let parts = cast[string](data).split("\x00")
if parts.len >= 2:
httpServer.db.put(parts[0], cast[seq[byte]](parts[1]))
elif cmd == "delete":
httpServer.db.delete(cast[string](data))
var raftNet = newRaftNetwork(raftNode)
asyncCheck raftNet.run()
# Start TCP wire protocol server on main thread with async event loop
waitFor runTcpServer(config)