on master help sign in
Simplify recordFailure and forkForwardsTo: extract prevCount, apply De Morgan's law
4651be0iko
server.knot+5−5
@@ -382,10 +382,10 @@ recordFailure = \server -> do
382 t <- now
382 t <- now
383 atomic (do
383 atomic (do
384 failures <- *forwardFailures
384 failures <- *forwardFailures
385− let new = case findFirst failures (\f -> f.server == server) of
385+ let prevCount = case findFirst failures (\f -> f.server == server) of
386− Just {value: f} -> {server, failedAt: t, failures: f.failures + 1}
386+ Just {value: f} -> f.failures
387− _ -> {server, failedAt: t, failures: 1}
387+ _ -> 0
388− *forwardFailures = union (filter (\f -> f.server != server) failures) [new])
388+ *forwardFailures = union (filter (\f -> f.server != server) failures) [{server, failedAt: t, failures: prevCount + 1}])
389
389
390-- Drop the failure record for `server` (called after any successful peer call).
390-- Drop the failure record for `server` (called after any successful peer call).
391-- Single-success recovery — there is no half-open state.
391-- Single-success recovery — there is no half-open state.
@@ -744,7 +744,7 @@ forkForwardsTo = \to encryptedBlob servers -> forEach servers (\server -> do
744 pres <- *presence
744 pres <- *presence
745 let stillLocal = hasLocalPresence pres to t
745 let stillLocal = hasLocalPresence pres to t
746 let othersPending = any (\x -> x.encryptedBlob == encryptedBlob) remaining
746 let othersPending = any (\x -> x.encryptedBlob == encryptedBlob) remaining
747− when (not stillLocal && not othersPending) (do
747+ when (not (stillLocal || othersPending)) (do
748 msgs <- *messages
748 msgs <- *messages
749 *messages = filter (\m -> m.encryptedBlob != encryptedBlob) msgs))))
749 *messages = filter (\m -> m.encryptedBlob != encryptedBlob) msgs))))
750
750