on master help sign in
Simplify server.knot: remove redundant backoff max, shrink pruneExpired return, split event fold
commitd18ddb1a277414a0302b16b27ec2fc1d52b9091e authoriko <mail@iko.soy> dateMon 11 May 2026, 15:12 (5 months ago) parent4651be0
1 file changed+14−14
server.knot+14−14
server.knot+14−14
@@ -374,7 +374,7 @@ authedPubkey = \authorization t clientIp -> do
374374-- worth retrying (or no failure recorded at all). Linear backoff:
375375-- `retryBackoffBase * failures`, capped at `retryBackoffMax`.
376376shouldRetryServer : Text -> Timestamp -> [ForwardFailure] -> Bool
377−shouldRetryServer = \server t failures -> not any (\f -> f.server == server && t - f.failedAt < min retryBackoffMax (retryBackoffBase * max 1 f.failures)) failures
377+shouldRetryServer = \server t failures -> not any (\f -> f.server == server && t - f.failedAt < min retryBackoffMax (retryBackoffBase * f.failures)) failures
378378
379379-- Bump the failure counter for `server`.
380380recordFailure : Text -> IO {rw *forwardFailures, clock} {}
@@ -447,7 +447,7 @@ refreshLocalPresence = \pubkey expiry -> do
447447-- One sweep over every state ref: drops expired rows in a single atomic block.
448448-- Returns the locally-expired presence rows whose pubkey has no other live
449449-- local session, so the caller can broadcast offline gossip for them.
450−pruneExpired : Int<Ms> -> IO {rw *challenges, rw *forwardFailures, rw *messages, rw *presence, rw *sessions} [{expiresAt: Timestamp, pubkey: PubkeyHex, server: ServerName}]
450+pruneExpired : Int<Ms> -> IO {rw *challenges, rw *forwardFailures, rw *messages, rw *presence, rw *sessions} [PubkeyHex]
451451pruneExpired = \t -> atomic do
452452 ch <- *challenges
453453 *challenges = filter (\x -> x.expiresAt > t) ch
@@ -460,7 +460,7 @@ pruneExpired = \t -> atomic do
460460 -- presence: remember locally-expired keys for offline gossip
461461 pres <- *presence
462462 *presence = filter (\p -> p.expiresAt > t) pres
463− yield (filter (\p -> p.expiresAt <= t && isLocalServer p.server && not (hasLocalPresence pres p.pubkey t)) pres)
463+ yield (map (\p -> p.pubkey) (filter (\p -> p.expiresAt <= t && isLocalServer p.server && not (hasLocalPresence pres p.pubkey t)) pres))
464464
465465-- ============================================
466466-- Federation gossip
@@ -769,16 +769,16 @@ handleRecvGossip = \events fromServer -> do
769769 else do
770770 newlyOnline <- atomic (do
771771 pres <- *presence
772− let combined = fold (\acc e -> case e of
773− GossipOnline {pubkey} -> {
774− touchedPubkeys: union acc.touchedPubkeys [pubkey],
775− added: union acc.added [{pubkey, server: fromServer, expiresAt: t + onlineGossipTtl}]
776− }
777− GossipOffline {pubkey} -> {touchedPubkeys: union acc.touchedPubkeys [pubkey], acc.added}
778− _ -> acc) {touchedPubkeys: [], added: []} events
779− let kept = filter (\p -> p.server != fromServer || not elem p.pubkey combined.touchedPubkeys) pres
780− *presence = union kept combined.added
781− yield (filter (\pk -> not any (\p -> p.pubkey == pk && p.server == fromServer && p.expiresAt > t) pres) (map (\p -> p.pubkey) combined.added)))
772+ let touchedPubkeys = fold (\acc e -> case e of
773+ GossipOnline {pubkey} -> union acc [pubkey]
774+ GossipOffline {pubkey} -> union acc [pubkey]
775+ _ -> acc) [] events
776+ let added = fold (\acc e -> case e of
777+ GossipOnline {pubkey} -> union acc [{pubkey, server: fromServer, expiresAt: t + onlineGossipTtl}]
778+ _ -> acc) [] events
779+ let kept = filter (\p -> p.server != fromServer || not elem p.pubkey touchedPubkeys) pres
780+ *presence = union kept added
781+ yield (filter (\pk -> not any (\p -> p.pubkey == pk && p.server == fromServer && p.expiresAt > t) pres) (map (\p -> p.pubkey) added)))
782782 fork (forEach newlyOnline (\pk -> forwardQueuedToServer pk fromServer))
783783 yield (Ok {value: {}})
784784
@@ -832,7 +832,7 @@ backgroundPrune = do
832832 when federationEnabled (do
833833 fork (do
834834 pres <- *presence
835− sendBatchedGossip (collectPeers pres (\p -> p.server)) (map (\p -> GossipOffline {p.pubkey}) expiredLocal))
835+ sendBatchedGossip (collectPeers pres (\p -> p.server)) (map (\pk -> GossipOffline {pubkey: pk}) expiredLocal))
836836 fork retryPendingForwards)
837837 sleep backgroundPruneInterval
838838 backgroundPrune