Explorar o código

fix: include t when persist tx-data log

Tienson Qin hai 15 horas
pai
achega
d27a492f2e

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

@@ -31,7 +31,7 @@
        set))
 
 (defn filter-received-tx-data
-  [{:keys [tempids db-before db-after]} tx-data]
+  [{:keys [tempids db-before db-after] :as report} tx-data]
   (->> tx-data
        (mapcat
         (fn [[op e a v]]

+ 7 - 7
deps/db/src/logseq/db/common/normalize.cljs

@@ -11,19 +11,19 @@
     (if (seq retracted)
       (remove (fn [item]
                 (and (= :db/retract (first item))
-                     (= 4 (count item))
-                     (contains? retracted (last item)))) tx-data)
+                     (= 5 (count item))
+                     (contains? retracted (nth item 3)))) tx-data)
       tx-data)))
 
 (defn replace-attr-retract-with-retract-entity-v2
   [normalized-tx-data]
   (->
-   (map (fn [[op eid a v]]
+   (map (fn [[op eid a v t]]
           (cond
             (and (= op :db/retract) (= a :block/uuid))
             [:db.fn/retractEntity eid]
             (and a (some? v))
-            [op eid a v]
+            [op eid a v t]
             :else
             [op eid]))
         normalized-tx-data)
@@ -72,7 +72,7 @@
        (keep
         (fn [d]
           (if (= (count d) 5)
-            (let [[e a v _t added] d
+            (let [[e a v t added] d
                   retract? (not added)
                   e' (if retract?
                        (eid->lookup db-before e)
@@ -89,8 +89,8 @@
                        v)]
               (when (and (some? e') (some? v'))
                 (if added
-                  [:db/add e' a v']
-                  [:db/retract e' a v'])))
+                  [:db/add e' a v' t]
+                  [:db/retract e' a v' t])))
             d)))
        remove-retract-entity-ref
        distinct))

+ 13 - 9
src/main/frontend/worker/db_sync.cljs

@@ -195,8 +195,8 @@
 (defn- reverse-tx-data
   [tx-data]
   (->> tx-data
-       (map (fn [[e a v _t added]]
-              [(if added :db/retract :db/add) e a v]))))
+       (map (fn [[e a v t added]]
+              [(if added :db/retract :db/add) e a v t]))))
 
 (defn- parse-message [raw]
   (try
@@ -574,10 +574,11 @@
     (let [tx-data (keep-last-update tx-data*)
           local-txs (pending-txs repo)
           reversed-tx-data (->> local-txs
-                                (mapcat :reversed-tx)
-                                reverse)
+                                reverse
+                                (mapcat :reversed-tx))
           has-local-changes? (seq reversed-tx-data)
           *remote-tx-report (atom nil)
+          *reversed-tx-report (atom nil)
           *remote-deleted-ids (atom #{})
           tx-report
           (ldb/transact-with-temp-conn!
@@ -591,7 +592,8 @@
                    db @temp-conn
 
                    reversed-tx-report (when has-local-changes?
-                                        (ldb/transact! temp-conn reversed-tx-data tx-meta))
+                                        (ldb/transact! temp-conn (keep-last-update reversed-tx-data) tx-meta))
+                   _ (reset! *reversed-tx-report reversed-tx-report)
                    ;; 2. transact remote tx-data
                    remote-deleted-blocks (->> tx-data
                                               (keep (fn [item]
@@ -605,11 +607,10 @@
                                                                        (contains? remote-deleted-block-ids (get-lookup-id (last item))))))
                                                          seq)]
                                         (ldb/transact! temp-conn tx-data tx-meta))
-
                                       (ldb/transact! temp-conn tx-data tx-meta))
                    _ (reset! *remote-tx-report remote-tx-report)
-                   remote-received-tx-data (sync-compare/filter-received-tx-data remote-tx-report tx-data)
-                   remote-applied-tx-data (sync-compare/filter-applied-tx-data remote-tx-report)]
+                   remote-received-tx-data (when remote-tx-report (sync-compare/filter-received-tx-data remote-tx-report tx-data))
+                   remote-applied-tx-data (when remote-tx-report (sync-compare/filter-applied-tx-data remote-tx-report))]
                ;; (when (not= remote-received-tx-data remote-applied-tx-data)
                ;;   (prn :diff-tx-data-mismatch
                ;;        (data/diff remote-received-tx-data remote-applied-tx-data))
@@ -647,7 +648,10 @@
       (when has-local-changes?
         (when-let [tx-data (:tx-data tx-report)]
           (let [remote-tx-data-set (set tx-data*)
-                normalized (normalize-tx-data (:db-after tx-report) (:db-before remote-tx-report) tx-data)
+                normalized (normalize-tx-data (:db-after tx-report)
+                                              (or (:db-before remote-tx-report)
+                                                  (:db-after @*reversed-tx-report))
+                                              tx-data)
                 normalized-tx-data (remove remote-tx-data-set normalized)
                 reversed-datoms (reverse-tx-data tx-data)]
            ;; (prn :debug :normalized-tx-data normalized-tx-data)