Skip to content

Commit c642dab

Browse files
committed
enhance(rtc): err handling improvements
convert several exception types into ex-info, ensuring them transit-writable/readable
1 parent 05c7ba4 commit c642dab

File tree

4 files changed

+24
-10
lines changed

4 files changed

+24
-10
lines changed

deps/db/src/logseq/db/sqlite/util.cljs

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@
3838
ExceptionInfo (transit/write-handler (constantly "error")
3939
(fn [e]
4040
{:message (ex-message e)
41-
:data (ex-data e)})))
41+
:data (ex-data e)}))
42+
js/Error (transit/write-handler (constantly "js/Error")
43+
(fn [e] {:message (ex-message e)})))
4244
(merge write-handlers))
4345
writer (transit/writer :json {:handlers write-handlers*})]
4446
(fn write-transit-str* [o]
@@ -51,7 +53,8 @@
5153
(def read-transit-str
5254
(let [read-handlers* (->> (assoc dt/read-handlers
5355
"datascript/Entity" identity
54-
"error" (fn [m] (ex-info (:message m) (:data m))))
56+
"error" (fn [m] (ex-info (:message m) (:data m)))
57+
"js/Error" (fn [m] (js/Error. (:message m))))
5558
(merge read-handlers))
5659
reader (transit/reader :json {:handlers read-handlers*})]
5760
(fn read-transit-str* [s]

src/main/frontend/common/missionary.cljs

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -115,20 +115,20 @@
115115
(m/reduce {} nil (m/eduction (take 1) f)))
116116

117117
(defn- fail-case-default-handler
118-
[e]
118+
[key' e]
119119
(when-not (instance? Cancelled e)
120-
(log/error :run-task*-failed e)))
120+
(log/error :run-task-failed e :key key')))
121121

122122
(defn run-task
123123
"Return the canceler"
124124
[key' task & {:keys [succ fail]}]
125-
(let [cancel (task (or succ #(log/info :key key' :succ %)) (or fail fail-case-default-handler))]
125+
(let [cancel (task (or succ #(log/info :key key' :succ %)) (or fail (partial fail-case-default-handler key')))]
126126
#(cancel)))
127127

128128
(defn run-task*
129129
"Return the canceler"
130130
[task & {:keys [succ fail]}]
131-
(let [cancel (task (or succ (constantly nil)) (or fail fail-case-default-handler))]
131+
(let [cancel (task (or succ (constantly nil)) (or fail (partial fail-case-default-handler nil)))]
132132
#(cancel)))
133133

134134
(comment

src/main/frontend/worker/rtc/core.cljs

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -244,7 +244,7 @@
244244
(if (= ::r.remote-update/need-pull-remote-data (:type (ex-data e)))
245245
(m/? (r.client/new-task--pull-remote-data
246246
repo conn graph-uuid major-schema-version date-formatter get-ws-create-task add-log-fn))
247-
(throw e))))
247+
(throw (r.ex/e->ex-info e)))))
248248

249249
:local-update-check
250250
(m/? (r.client/new-task--push-local-ops
@@ -265,10 +265,10 @@
265265
(m/?))
266266
(catch Cancelled e
267267
(add-log-fn :rtc.log/cancelled {})
268-
(throw e))
268+
(throw (r.ex/e->ex-info e)))
269269
(catch :default e
270270
(add-log-fn :rtc.log/cancelled {:ex-message (ex-message e) :ex-data (ex-data e)})
271-
(throw e))
271+
(throw (r.ex/e->ex-info e)))
272272
(finally
273273
(started-dfv :final) ;; ensure started-dfv can recv a value(values except the first one will be disregarded)
274274
(when @*assets-sync-loop-canceler (@*assets-sync-loop-canceler))))))}))

src/main/frontend/worker/rtc/exception.cljs

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
(ns frontend.worker.rtc.exception
22
"Exception list"
3-
(:require [logseq.common.defkeywords :refer [defkeywords]]))
3+
(:require [logseq.common.defkeywords :refer [defkeywords]])
4+
(:import [missionary Cancelled]))
45

56
(defkeywords
67
:rtc.exception/ws-already-disconnected {:doc "Remote exception. current websocket conn is already disconnected and deleted by remote."}
@@ -52,7 +53,17 @@ the server will put it to s3 and return its presigned-url to clients."}
5253
(ex-info "Unknown server error" {:type :rtc.exception/unknown-server-error}))
5354

5455
(defn ->map
56+
"TODO: deprecated
57+
This function was used to map exceptions to a format suitable for posting messages to the UI thread.
58+
However, ldb/write-transit-str now supports the ExceptionInfo type, making this function unnecessary."
5559
[e]
5660
(when-let [data (ex-data e)]
5761
{:ex-data data
5862
:ex-message (ex-message e)}))
63+
64+
(defn e->ex-info
65+
[e]
66+
(cond
67+
(instance? Cancelled e) (ex-info "missionary.Cancelled" {:message (.-message e)})
68+
(instance? js/CloseEvent e) (ex-info "js/CloseEvent" {:type (.-type e)})
69+
:else e))

0 commit comments

Comments
 (0)