mirror of
https://github.com/unclebob/more-speech.git
synced 2024-09-30 02:21:02 +00:00
Reset relay retry if last retry was over an hour ago.
This commit is contained in:
parent
844577fd65
commit
d4f5d47da5
@ -1,5 +1,24 @@
|
|||||||
(ns more-speech.nostr.protocol-spec
|
(ns more-speech.nostr.protocol-spec
|
||||||
(:require [speclj.core :refer :all]
|
(:require [speclj.core :refer :all]
|
||||||
[more-speech.nostr.protocol :refer :all]))
|
[more-speech.nostr.protocol :refer :all]
|
||||||
|
[more-speech.nostr.util :as util]))
|
||||||
|
|
||||||
(describe "nothing")
|
(declare now)
|
||||||
|
(describe "protocol utilities"
|
||||||
|
(with-stubs)
|
||||||
|
(with now 100)
|
||||||
|
(it "increments relay retries on un-retried relays"
|
||||||
|
(with-redefs [util/get-now (stub :get-now {:return @now})]
|
||||||
|
(should= {"relay" {:retries 1, :retry-time @now}}
|
||||||
|
(increment-relay-retry {"relay" {}} "relay"))))
|
||||||
|
|
||||||
|
(it "increments relay retries on retried relays"
|
||||||
|
(with-redefs [util/get-now (stub :get-now {:return @now})]
|
||||||
|
(should= {"relay" {:retries 3, :retry-time @now}}
|
||||||
|
(increment-relay-retry {"relay" {:retries 2 :retry-time (dec @now)}} "relay"))))
|
||||||
|
|
||||||
|
(it "resets relay retries on relays that haven't been retried in over an hour"
|
||||||
|
(with-redefs [util/get-now (stub :get-now {:return @now})]
|
||||||
|
(should= {"relay" {:retries 1, :retry-time @now}}
|
||||||
|
(increment-relay-retry {"relay" {:retries 10 :retry-time (- @now 3600001)}} "relay"))))
|
||||||
|
)
|
@ -9,10 +9,9 @@
|
|||||||
(it "can be made"
|
(it "can be made"
|
||||||
(should= {::relay/type ::ws-relay/websocket
|
(should= {::relay/type ::ws-relay/websocket
|
||||||
::ws-relay/url "url"
|
::ws-relay/url "url"
|
||||||
::ws-relay/recv-f :some-f
|
::ws-relay/callbacks :some-callbacks
|
||||||
::ws-relay/socket nil
|
::ws-relay/socket nil}
|
||||||
::ws-relay/open? false}
|
(ws-relay/make "url" :some-callbacks)))
|
||||||
(ws-relay/make "url" :some-f)))
|
|
||||||
|
|
||||||
(it "can open and close"
|
(it "can open and close"
|
||||||
(pending "be nice to relay.damus.io")
|
(pending "be nice to relay.damus.io")
|
||||||
|
@ -96,17 +96,28 @@
|
|||||||
(when (some? open-relay)
|
(when (some? open-relay)
|
||||||
(swap! relays assoc-in [url :connection] open-relay))))
|
(swap! relays assoc-in [url :connection] open-relay))))
|
||||||
|
|
||||||
|
(defn increment-relay-retry
|
||||||
|
"used in a swap!, increments retries counter unless the last retry was over an hour ago
|
||||||
|
and then resets to 1"
|
||||||
|
[relays url]
|
||||||
|
(let [relay (get relays url)
|
||||||
|
retries (get relay :retries 0)
|
||||||
|
last-retry-time (get relay :retry-time 0)
|
||||||
|
now (util/get-now)
|
||||||
|
time-since-last-retry (- now last-retry-time)
|
||||||
|
retries (if (> time-since-last-retry 3600000) 1 (inc retries))
|
||||||
|
relays (assoc-in relays [url :retries] retries)
|
||||||
|
relays (assoc-in relays [url :retry-time] now)]
|
||||||
|
relays))
|
||||||
|
|
||||||
(defn handle-close [relay]
|
(defn handle-close [relay]
|
||||||
(let [url (::ws-relay/url relay)
|
(let [url (::ws-relay/url relay)
|
||||||
now (quot (System/currentTimeMillis) 1000)
|
now (quot (System/currentTimeMillis) 1000)
|
||||||
minutes-10 600
|
minutes-10 600
|
||||||
date (- now minutes-10)
|
date (- now minutes-10)]
|
||||||
inc-retry (fn [relays url]
|
|
||||||
(let [retries (get-in relays [url :retries] 0)]
|
|
||||||
(assoc-in relays [url :retries] (inc retries))))]
|
|
||||||
(prn 'relay-closed url)
|
(prn 'relay-closed url)
|
||||||
(swap! relays assoc-in [url :connection] nil)
|
(swap! relays assoc-in [url :connection] nil)
|
||||||
(swap! relays inc-retry url)
|
(swap! relays increment-relay-retry url)
|
||||||
(future
|
(future
|
||||||
(let [retries (get-in @relays [url :retries])
|
(let [retries (get-in @relays [url :retries])
|
||||||
seconds-to-wait (min 300 (* retries 10))]
|
seconds-to-wait (min 300 (* retries 10))]
|
||||||
|
@ -81,3 +81,6 @@
|
|||||||
key-bytes (byte-array 32)
|
key-bytes (byte-array 32)
|
||||||
_ (.nextBytes gen key-bytes)]
|
_ (.nextBytes gen key-bytes)]
|
||||||
key-bytes))
|
key-bytes))
|
||||||
|
|
||||||
|
(defn get-now []
|
||||||
|
(System/currentTimeMillis))
|
||||||
|
Loading…
Reference in New Issue
Block a user