fix: rtc extra offline e2e tests

This commit is contained in:
Tienson Qin
2026-01-27 17:05:57 +08:00
parent d0813af686
commit d6392538be
4 changed files with 30 additions and 8 deletions

View File

@@ -13,6 +13,7 @@
[logseq.db.common.delete-blocks :as delete-blocks] ;; Load entity extensions
[logseq.db.common.entity-plus :as entity-plus]
[logseq.db.common.initial-data :as common-initial-data]
[logseq.db.common.normalize :as db-normalize]
[logseq.db.frontend.class :as db-class]
[logseq.db.frontend.db :as db-db]
[logseq.db.frontend.entity-util :as entity-util]
@@ -216,7 +217,8 @@
(if (fn? filter-tx-data)
(filter-tx-data temp-after-db tx-data)
tx-data)
remove-conflict-datoms)]
remove-conflict-datoms
(db-normalize/remove-deleted-add-datoms temp-after-db))]
(transact! conn tx-data' tx-meta))))))
(def page? entity-util/page?)

View File

@@ -79,9 +79,31 @@
3))
datoms))
(defn remove-deleted-add-datoms
[db tx-data]
(let [deleted (->>
(keep
(fn [d]
(when (and (false? (:added d))
(= :block/uuid (:a d))
(nil? (d/entity db (:e d))))
[(:e d) (:v d)]))
tx-data))
deleted-eids (set (map first deleted))
deleted-uuids (set (map (fn [item] [:block/uuid (second item)]) deleted))]
(if (seq deleted-eids)
(remove (fn [d]
(or (and (:added d) (contains? deleted-eids (:e d)))
(and (not (= (:a d) :block/uuid))
(or
(contains? deleted-uuids (:e d))
(contains? deleted-uuids (:v d)))))) tx-data)
tx-data)))
(defn normalize-tx-data
[db-after db-before tx-data]
(->> tx-data
(remove-deleted-add-datoms db-after)
replace-attr-retract-with-retract-entity
sort-datoms
(keep

View File

@@ -336,7 +336,7 @@
[:db/retract (:db/id block) :block/order]
[:db/retract (:db/id block) :block/page]])
(let [ids (cons (:db/id this) (ldb/get-block-full-children-ids db (:db/id block)))
txs (map (fn [id] [:db.fn/retractEntity id]) ids)]
txs (map (fn [id] [:db/retractEntity id]) ids)]
(swap! *txs-state concat txs)
block-id)))))

View File

@@ -1129,9 +1129,7 @@
(defn- apply-remote-tx-with-local-changes!
[{:keys [conn local-txs reversed-tx-data safe-remote-tx-data remote-deleted-blocks
temp-tx-meta *remote-tx-report *reversed-tx-report *remote-deleted-ids *rebase-tx-data]}]
(let [batch-tx-meta {:rtc-tx? true
;; Reverse/rebase batches can temporarily violate block schema.
:skip-validate-db? true}]
(let [batch-tx-meta {:rtc-tx? true}]
(ldb/transact-with-temp-conn!
conn
batch-tx-meta
@@ -1158,11 +1156,11 @@
(set (map :block/uuid local-deleted-blocks)))]
(when (seq rebased-tx-data)
(ldb/transact! temp-conn rebased-tx-data (assoc tx-meta :op :rebase)))))
;; 4. delete nodes and fix tx data
;; 4. fix tx data and delete nodes
db @temp-conn
deleted-nodes (keep (fn [id] (d/entity db [:block/uuid id])) deleted-ids)]
(delete-nodes! temp-conn deleted-nodes (assoc tx-meta :op :delete-blocks))
(fix-tx! temp-conn remote-tx-report rebase-tx-report (assoc tx-meta :op :fix))))
(fix-tx! temp-conn remote-tx-report rebase-tx-report (assoc tx-meta :op :fix))
(delete-nodes! temp-conn deleted-nodes (assoc tx-meta :op :delete-blocks))))
{:listen-db (fn [{:keys [tx-meta tx-data]}]
(when-not (contains? #{:reverse :transact-remote-tx-data} (:op tx-meta))
(swap! *rebase-tx-data into tx-data)))})))