on master help sign in
Simplify server.knot: factor repeated computations, extract predicates, replace mapWhere+headOf with findFirst
commit4c4ef1af0f8e26abd793adaa98a5c362927ae1d9 authoriko <mail@iko.soy> dateMon 27 Apr 2026, 19:50 (6 months ago) parent35d67db
1 file changed+13−15
server.knot+13−15
server.knot+13−15
@@ -558,8 +558,9 @@ tooLong = \s maxLen -> count (chars s) > maxLen
558558
559559isValidHex : Text -> Bool
560560isValidHex = \s ->
561− let n = count (chars s) in
562− n > 0 && n / 2 * 2 == n && all (chars s) (\c -> contains c "0123456789abcdef")
561+ let cs = chars s in
562+ let n = count cs in
563+ n > 0 && n / 2 * 2 == n && all cs (\c -> contains c "0123456789abcdef")
563564
564565stripTrailingDot : Text -> Text
565566stripTrailingDot = \s -> if containsSuffix "." s then stripTrailingDot (take (count (chars s) - 1) s) else s
@@ -657,8 +658,8 @@ verifyFederationAuth = \authorization fromServer scope requestTimestamp -> do
657658 else do
658659 -- Split payload on first ':' into {sig, nonce}.
659660 let cs = chars payload
660− let sepIdx = case headOf (mapWhere (withIndex cs) (\p -> p.v == ":") (\p -> p.i)) of
661− Just {value: i} -> i
661+ let sepIdx = case findFirst (withIndex cs) (\p -> p.v == ":") of
662+ Just {value: p} -> p.i
662663 _ -> count cs
663664 let sig = take sepIdx payload
664665 let nonce = drop (sepIdx + 1) payload
@@ -764,10 +765,11 @@ recordFailure = \server -> do
764765 t <- now
765766 atomic do
766767 failures <- *forwardFailures
767− let prev = case findFirst failures (\f -> f.server == server) of
768+ let same = \f -> f.server == server
769+ let prev = case findFirst failures same of
768770 Just {value: f} -> {count: f.failures + 1, firstFailedAt: f.firstFailedAt}
769771 _ -> {count: 1, firstFailedAt: t}
770− set *forwardFailures = union (removeWhere failures (\f -> f.server == server))
772+ set *forwardFailures = union (removeWhere failures same)
771773 [{server: server, failedAt: t, failures: prev.count, firstFailedAt: prev.firstFailedAt}]
772774
773775clearFailure = \server -> atomic (pruneRef forwardFailures (\f -> f.server != server))
@@ -977,14 +979,12 @@ refreshLocalPresence = \t -> do
977979 refreshState <- atomic do
978980 sessions <- *sessions
979981 presence <- *presence
980− let newExpiry = t + sessionExpiry
981982 let sessionKeys = unique (pluck sessions (\s -> s.pubkey))
982− let updated = pluck presence (\p ->
983− if isLocalServer p.server && elem sessionKeys p.pubkey && p.expiresAt - t < sessionExpiry / 2
984− then {pubkey: p.pubkey, server: p.server, expiresAt: newExpiry, timestamp: t}
985− else p)
983+ let needsRefresh = \p -> isLocalServer p.server && elem sessionKeys p.pubkey && p.expiresAt - t < sessionExpiry / 2
984+ let refreshed = pluck (filter presence needsRefresh) (\p -> {pubkey: p.pubkey, server: p.server, expiresAt: t + sessionExpiry, timestamp: t})
985+ let updated = union (removeWhere presence needsRefresh) refreshed
986986 set *presence = updated
987− yield {refreshed: filter updated (\p -> isLocalServer p.server && p.expiresAt == newExpiry), peers: knownPeerServersFromPresence updated}
987+ yield {refreshed: refreshed, peers: knownPeerServersFromPresence updated}
988988 when (count refreshState.refreshed > 0)
989989 (fork (sendBatchedGossip refreshState.peers (pluck refreshState.refreshed (\p -> mkGossip (GossipOnline {}) p.pubkey t (clampTtl (sessionExpiry / 1000)))) gossipOriginHops))
990990
@@ -1243,9 +1243,7 @@ handleBatchLookupPresence = \pubkeys authorization clientIp respond -> do
12431243 gateLookup authorization clientIp t respond mkErr
12441244 {results: [], authorized: True {}, error: "rate_limited"} (\_ -> do
12451245 pres <- *presence
1246− let results = do
1247− k <- takeRelation 50 pubkeys
1248− yield {pubkey: k, server: maskedServer pres k t}
1246+ let results = pluck (takeRelation 50 pubkeys) (\k -> {pubkey: k, server: maskedServer pres k t})
12491247 yield (respond {results: results, authorized: True {}, error: ""}))
12501248
12511249handleMessageStatus = \to messageId authorization clientIp respond -> do