浏览代码

fix(rtc): sort entity-datoms-coll when generate local-ops

rcmerci 2 年之前
父节点
当前提交
7752a8f75f

+ 0 - 1
src/main/frontend/db/rtc/core.cljs

@@ -551,7 +551,6 @@
                          update-block-uuid->attrs)]
     [update-page-ops remove-ops move-ops update-ops remove-page-ops]))
 
-
 (defn- <get-N-ops
   [repo n]
   (go

+ 12 - 1
src/main/frontend/db/rtc/db_listener.cljs

@@ -155,12 +155,23 @@
                      (prn ::add-ops ops)
                      (<! (op/<add-ops! repo ops))))))))
 
+(defn- sort-entity-datoms-coll
+  [entity-datoms-coll]
+  (let [id->datoms
+        (into {}
+              (keep (fn [datoms]
+                      (when-let [e (ffirst datoms)]
+                        [e datoms])))
+              entity-datoms-coll)]
+    (mapv second (sort-by first < id->datoms))))
+
 (defn generate-rtc-ops
   [repo db-before db-after datoms]
   (let [same-entity-datoms-coll (->> datoms
                                      (map vec)
                                      (group-by first)
-                                     vals)
+                                     vals
+                                     sort-entity-datoms-coll)
         ops (mapcat (partial entity-datoms=>ops repo db-before db-after) same-entity-datoms-coll)]
     (when (seq ops)
       (swap! *ops-pending-to-store conj {:ops ops :repo repo}))))

+ 8 - 6
src/main/frontend/db/rtc/ops_idb_store.cljs

@@ -30,7 +30,7 @@
 (defn- <add-ops*!
   [repo ops]
   (let [store (ensure-store repo)
-        key* (tc/to-long (t/now))]
+        key* (* 1000 (tc/to-long (t/now)))]
     (p/loop [key* key* ops ops]
       (let [[op & other-ops] ops]
         (when op
@@ -42,11 +42,13 @@
 
 (defonce ^:private add-ops-ch (async/chan 100))
 (defonce #_:clj-kondo/ignore _add-ops-loop
-  (async/go-loop []
-    (if-let [[repo ops] (async/<! add-ops-ch)]
-      (do (async/<! (p->c (<add-ops*! repo ops)))
-          (recur))
-      (recur))))
+  (let [id (random-uuid)]
+    (async/go-loop []
+      (prn ::add-ops-loop id)
+      (if-let [[repo ops] (async/<! add-ops-ch)]
+        (do (async/<! (p->c (<add-ops*! repo ops)))
+            (recur))
+        (recur)))))
 
 (defn <add-ops!
   [repo ops]

+ 1 - 1
src/test/frontend/db/rtc/rtc_effects_test.cljs

@@ -91,7 +91,7 @@
        (let [conn (conn/get-db test-helper/test-db false)
              ws @(:*ws @rtc-fixture/*test-rtc-state)
              push-data-to-client-chan (:push-data-to-client-chan ws)]
-       ;; set local-t & graph-uuid in mock-indexeddb-store
+         ;; set local-t & graph-uuid in mock-indexeddb-store
          (<! (rtc-op/<update-local-tx! test-helper/test-db rtc-fixture/test-graph-init-local-t))
          (<! (rtc-op/<update-graph-uuid! test-helper/test-db rtc-fixture/test-graph-uuid))
          (>! push-data-to-client-chan {:req-id "push-updates"