Don't specify `to` when making the request to mailserver.

In some cases (say the clock of the device has drifted) specifying a `to` parameter
is decrimental and might result in missing messages.

We have changed the mailservers to default `to` if not present to `now`,
which should gives us better guarantees.

We also removed the 24 hours limit as now all the requests will be
paginated according to the `limit` parameter.

Signed-off-by: Igor Mandrigin <i@mandrigin.ru>
This commit is contained in:
Andrea Maria Piana 2019-03-12 14:17:32 +01:00 committed by Igor Mandrigin
parent cb4dc876f1
commit dc0d42ee6b
No known key found for this signature in database
GPG Key ID: 4A0EDDE26E66BC8B
1 changed files with 18 additions and 30 deletions

View File

@ -283,18 +283,14 @@
(defn request-messages! [web3 {:keys [sym-key-id address]} {:keys [topics cursor to from] :as request}]
;; Add some room to from, unless we break day boundaries so that messages that have
;; been received after the last request are also fetched
(let [adjusted-from (adjust-request-for-transit-time from)
(let [actual-from (adjust-request-for-transit-time from)
actual-limit (or (:limit request)
@limit)
actual-from (if (> (- to adjusted-from) one-day)
from
adjusted-from)]
@limit)]
(log/info "mailserver: request-messages for: "
" topics " topics
" from " actual-from
" cursor " cursor
" limit " actual-limit
" to " to)
" limit " actual-limit)
(.requestMessages (transport.utils/shh web3)
(clj->js {:topics topics
:mailServerPeer address
@ -302,8 +298,7 @@
:timeout request-timeout
:limit actual-limit
:cursor cursor
:from actual-from
:to to})
:from actual-from})
(fn [error request-id]
(if-not error
(do
@ -328,32 +323,25 @@
sym-key-id)
mailserver)))
(defn split-request-per-day
"NOTE: currently the mailserver is only accepting requests for a span
of 24 hours, so we split requests per 24h spans if the last request was
done more than 24h ago"
(defn ->request
[now-in-s [last-request topics]]
(let [days (conj
(into [] (range (max last-request
(- now-in-s one-day))
now-in-s
one-day))
now-in-s)
day-ranges (map vector days (rest days))]
(for [[from to] day-ranges]
(when (< last-request now-in-s)
{:topics topics
:from from
:to to})))
;; To is currently not sent to the mailserver, but we use to calculate
;; when the last-request was sent.
:to now-in-s
:from (max last-request
(- now-in-s one-day))}))
(defn prepare-messages-requests
[{:keys [db now] :as cofx} request-to]
(let [web3 (:web3 db)]
(remove nil?
(mapcat (partial split-request-per-day request-to)
(->>
(:mailserver/topics db)
(reduce (fn [acc [topic {:keys [last-request]}]]
(update acc last-request conj topic))
{}
(:mailserver/topics db))))))
{})
(keep (partial ->request request-to)))))
(fx/defn process-next-messages-request
[{:keys [db now] :as cofx}]