Просмотр исходного кода

server returns tx/reject when transaction failed

Tienson Qin 1 месяц назад
Родитель
Сommit
61c877de4f

+ 1 - 1
deps/db-sync/src/logseq/db_sync/malli_schema.cljs

@@ -31,7 +31,7 @@
      [:type [:= "ping"]]]]])
 
 (def tx-reject-reason-schema
-  [:enum "stale" "empty tx data" "invalid tx" "invalid t-before"])
+  [:enum "stale" "empty tx data" "invalid tx" "invalid t-before" "db transact failed"])
 
 (def tx-reject-schema
   [:map

+ 11 - 5
deps/db-sync/src/logseq/db_sync/worker/handler/sync.cljs

@@ -264,11 +264,17 @@
 
       :else
       (if txs
-        (let [new-t (apply-tx! self sender txs)]
-          (if (and (map? new-t) (= "tx/reject" (:type new-t)))
-            new-t
-            {:type "tx/batch/ok"
-             :t new-t}))
+        (try
+          (let [new-t (apply-tx! self sender txs)]
+            (if (and (map? new-t) (= "tx/reject" (:type new-t)))
+              new-t
+              {:type "tx/batch/ok"
+               :t new-t}))
+          (catch :default e
+            (log/error :db-sync/transact-failed e)
+            {:type "tx/reject"
+             :reason "db transact failed"
+             :t current-t}))
         {:type "tx/reject"
          :reason "empty tx data"}))))