Compare commits
2 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 00e9ea7484 | |||
| c5751b4a0c |
@@ -7,7 +7,6 @@ import std/net
|
|||||||
import std/asyncnet
|
import std/asyncnet
|
||||||
import std/strutils
|
import std/strutils
|
||||||
import std/streams
|
import std/streams
|
||||||
import std/os
|
|
||||||
|
|
||||||
type
|
type
|
||||||
NodeState* = enum
|
NodeState* = enum
|
||||||
@@ -312,7 +311,7 @@ proc startGossipListener*(gp: GossipProtocol) {.async.} =
|
|||||||
gp.running = true
|
gp.running = true
|
||||||
while gp.running:
|
while gp.running:
|
||||||
try:
|
try:
|
||||||
let (data, senderAddr, senderPort) = await gp.sock.recvFrom(65535)
|
let (data, senderAddr, _) = await gp.sock.recvFrom(65535)
|
||||||
if data.len > 0:
|
if data.len > 0:
|
||||||
gp.handleIncomingGossip(data, senderAddr)
|
gp.handleIncomingGossip(data, senderAddr)
|
||||||
except:
|
except:
|
||||||
|
|||||||
@@ -92,7 +92,7 @@ proc checkAuth(server: HttpServer, request: Request, ctx: Context): bool =
|
|||||||
ctx.json(%*{"error": "Unauthorized"}, 401)
|
ctx.json(%*{"error": "Unauthorized"}, 401)
|
||||||
return false
|
return false
|
||||||
let tokenStr = authHeader[7..^1]
|
let tokenStr = authHeader[7..^1]
|
||||||
let (valid, userId, role) = server.verifyToken(tokenStr)
|
let (valid, _, _) = server.verifyToken(tokenStr)
|
||||||
if not valid:
|
if not valid:
|
||||||
ctx.json(%*{"error": "Unauthorized"}, 401)
|
ctx.json(%*{"error": "Unauthorized"}, 401)
|
||||||
return false
|
return false
|
||||||
@@ -229,7 +229,7 @@ proc scramStartHandler(server: HttpServer): RequestHandler =
|
|||||||
if body == nil or "username" notin body or "clientFirstMessage" notin body:
|
if body == nil or "username" notin body or "clientFirstMessage" notin body:
|
||||||
ctx.json(%*{"error": "Missing username or clientFirstMessage"}, 400)
|
ctx.json(%*{"error": "Missing username or clientFirstMessage"}, 400)
|
||||||
return
|
return
|
||||||
let username = body["username"].getStr()
|
let username {.used.} = body["username"].getStr()
|
||||||
let clientFirst = body["clientFirstMessage"].getStr()
|
let clientFirst = body["clientFirstMessage"].getStr()
|
||||||
try:
|
try:
|
||||||
let serverFirst = server.authManager.startScram(clientFirst)
|
let serverFirst = server.authManager.startScram(clientFirst)
|
||||||
|
|||||||
@@ -1723,7 +1723,6 @@ proc computeWindowValues*(rows: seq[Row], expr: IRExpr, ctx: ExecutionContext =
|
|||||||
if rows.len == 0: return
|
if rows.len == 0: return
|
||||||
|
|
||||||
let wfName = expr.wfName.toLower()
|
let wfName = expr.wfName.toLower()
|
||||||
let frameMode = expr.wfFrameMode
|
|
||||||
let frameStart = expr.wfFrameStart
|
let frameStart = expr.wfFrameStart
|
||||||
let frameEnd = expr.wfFrameEnd
|
let frameEnd = expr.wfFrameEnd
|
||||||
|
|
||||||
@@ -1808,11 +1807,11 @@ proc computeWindowValues*(rows: seq[Row], expr: IRExpr, ctx: ExecutionContext =
|
|||||||
result[rowIdx] = defaultVal
|
result[rowIdx] = defaultVal
|
||||||
of "first_value":
|
of "first_value":
|
||||||
for pos, rowIdx in sortedIdxs:
|
for pos, rowIdx in sortedIdxs:
|
||||||
let (fStart, fEnd) = resolveFrameBounds(pos, sortedIdxs.len, frameStart, frameEnd)
|
let (fStart, _) = resolveFrameBounds(pos, sortedIdxs.len, frameStart, frameEnd)
|
||||||
result[rowIdx] = evalExpr(expr.wfArgs[0], rows[sortedIdxs[fStart]], ctx)
|
result[rowIdx] = evalExpr(expr.wfArgs[0], rows[sortedIdxs[fStart]], ctx)
|
||||||
of "last_value":
|
of "last_value":
|
||||||
for pos, rowIdx in sortedIdxs:
|
for pos, rowIdx in sortedIdxs:
|
||||||
let (fStart, fEnd) = resolveFrameBounds(pos, sortedIdxs.len, frameStart, frameEnd)
|
let (_, fEnd) = resolveFrameBounds(pos, sortedIdxs.len, frameStart, frameEnd)
|
||||||
result[rowIdx] = evalExpr(expr.wfArgs[0], rows[sortedIdxs[fEnd]], ctx)
|
result[rowIdx] = evalExpr(expr.wfArgs[0], rows[sortedIdxs[fEnd]], ctx)
|
||||||
else:
|
else:
|
||||||
# Unknown window function — fill with empty
|
# Unknown window function — fill with empty
|
||||||
@@ -2439,7 +2438,6 @@ proc executePlan*(ctx: ExecutionContext, plan: IRPlan): seq[Row] =
|
|||||||
# The graph is stored by name; for simplicity, we'll use a table-based approach
|
# The graph is stored by name; for simplicity, we'll use a table-based approach
|
||||||
# Graph nodes are stored as rows with their properties
|
# Graph nodes are stored as rows with their properties
|
||||||
let graphTable = plan.graphName & "_nodes"
|
let graphTable = plan.graphName & "_nodes"
|
||||||
let edgeTable = plan.graphName & "_edges"
|
|
||||||
# Try to scan the nodes table
|
# Try to scan the nodes table
|
||||||
let nodeRows = execScan(ctx, graphTable)
|
let nodeRows = execScan(ctx, graphTable)
|
||||||
if nodeRows.len > 0:
|
if nodeRows.len > 0:
|
||||||
@@ -3395,7 +3393,7 @@ proc executeQuery*(ctx: ExecutionContext, astNode: Node, params: seq[WireValue]
|
|||||||
if isMigrationApplied(ctx, stmt.amName):
|
if isMigrationApplied(ctx, stmt.amName):
|
||||||
return okResult(msg="Migration '" & stmt.amName & "' already applied")
|
return okResult(msg="Migration '" & stmt.amName & "' already applied")
|
||||||
|
|
||||||
let (found, upBody, downBody) = getMigrationBody(ctx, stmt.amName)
|
let (found, upBody, _) = getMigrationBody(ctx, stmt.amName)
|
||||||
if not found:
|
if not found:
|
||||||
return errResult("Migration '" & stmt.amName & "' not found")
|
return errResult("Migration '" & stmt.amName & "' not found")
|
||||||
|
|
||||||
@@ -3459,7 +3457,7 @@ proc executeQuery*(ctx: ExecutionContext, astNode: Node, params: seq[WireValue]
|
|||||||
var appliedCount = 0
|
var appliedCount = 0
|
||||||
var totalDuration = 0
|
var totalDuration = 0
|
||||||
for name in toApply:
|
for name in toApply:
|
||||||
let (found, upBody, downBody) = getMigrationBody(ctx, name)
|
let (found, upBody, _) = getMigrationBody(ctx, name)
|
||||||
if not found:
|
if not found:
|
||||||
return errResult("Migration '" & name & "' not found during batch apply")
|
return errResult("Migration '" & name & "' not found during batch apply")
|
||||||
let startTime = epochTime()
|
let startTime = epochTime()
|
||||||
@@ -3501,7 +3499,7 @@ proc executeQuery*(ctx: ExecutionContext, astNode: Node, params: seq[WireValue]
|
|||||||
|
|
||||||
var rolledBackCount = 0
|
var rolledBackCount = 0
|
||||||
for name in toRollback:
|
for name in toRollback:
|
||||||
let (found, upBody, downBody) = getMigrationBody(ctx, name)
|
let (found, _, downBody) = getMigrationBody(ctx, name)
|
||||||
if not found:
|
if not found:
|
||||||
return errResult("Migration '" & name & "' not found during rollback")
|
return errResult("Migration '" & name & "' not found during rollback")
|
||||||
if downBody.len == 0:
|
if downBody.len == 0:
|
||||||
|
|||||||
@@ -416,7 +416,7 @@ proc peekRune(l: Lexer): Rune =
|
|||||||
return r
|
return r
|
||||||
return Rune(0)
|
return Rune(0)
|
||||||
|
|
||||||
proc advanceRune(l: var Lexer): Rune =
|
proc advanceRune(l: var Lexer): Rune {.used.} =
|
||||||
if l.pos < l.input.len:
|
if l.pos < l.input.len:
|
||||||
var r: Rune
|
var r: Rune
|
||||||
fastRuneAt(l.input, l.pos, r, true)
|
fastRuneAt(l.input, l.pos, r, true)
|
||||||
|
|||||||
@@ -10,7 +10,6 @@ import std/locks
|
|||||||
import bloom
|
import bloom
|
||||||
import wal
|
import wal
|
||||||
import mmap
|
import mmap
|
||||||
import streams
|
|
||||||
|
|
||||||
const
|
const
|
||||||
SSTableMagic* = 0x53535442'u32 # "SSTB"
|
SSTableMagic* = 0x53535442'u32 # "SSTB"
|
||||||
|
|||||||
+1
-1
@@ -114,7 +114,7 @@ proc main() =
|
|||||||
asyncCheck cm.startCompactionLoop()
|
asyncCheck cm.startCompactionLoop()
|
||||||
|
|
||||||
# Create TCP server (initialization is synchronous, run is async)
|
# Create TCP server (initialization is synchronous, run is async)
|
||||||
let localId = if config.raftNodeId.len > 0: config.raftNodeId else: "node-" & $config.port
|
let localId {.used.} = if config.raftNodeId.len > 0: config.raftNodeId else: "node-" & $config.port
|
||||||
var tcpServer = newServer(config)
|
var tcpServer = newServer(config)
|
||||||
|
|
||||||
# Start Raft cluster if enabled
|
# Start Raft cluster if enabled
|
||||||
|
|||||||
Reference in New Issue
Block a user