fix: view blocks not deleted

This commit is contained in:
Tienson Qin
2026-01-16 11:46:52 +08:00
parent d409805e26
commit 63fb758e37
6 changed files with 49 additions and 23 deletions

View File

@@ -190,7 +190,6 @@
[db-after db-before tx-data]
(->> tx-data
remove-ignored-attrs
db-normalize/replace-attr-retract-with-retract-entity
(db-normalize/normalize-tx-data db-after db-before)))
(defn- reverse-tx-data
@@ -340,7 +339,7 @@
[db deleted-ids tx-data]
(let [tx-data (vec tx-data)
sanitized-tx-data (->> tx-data
db-normalize/replace-attr-retract-with-retract-entity-v2
;; db-normalize/replace-attr-retract-with-retract-entity-v2
(keep-last-update db)
(drop-invalid-refs deleted-ids))]
(when (not= tx-data sanitized-tx-data)
@@ -605,8 +604,7 @@
local-txs (pending-txs repo)
reversed-tx-data (->> local-txs
(mapcat :reversed-tx)
reverse
db-normalize/replace-attr-retract-with-retract-entity-v2)
reverse)
has-local-changes? (seq reversed-tx-data)
*rebased-tx-data (atom [])
*remote-tx-report (atom nil)
@@ -620,12 +618,15 @@
;; 1. reverse local pending txs
reversed-tx-report (when has-local-changes?
(ldb/transact! temp-conn reversed-tx-data tx-meta))
_ (prn :debug :tx-data (distinct tx-data))
;; 2. transact remote tx-data
remote-tx-report (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)]
(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))
(fail-fast :db-sync/compare-tx-data-mismatch
{:repo repo
:tx-data tx-data

View File

@@ -464,7 +464,8 @@
(defn transact-pipeline
"Compute extra tx-data and block/refs, should ensure it's a pure function and
doesn't call `d/transact!` or `ldb/transact!`."
[repo {:keys [db-after tx-meta] :as tx-report}]
[repo {:keys [db-before db-after tx-meta] :as tx-report}]
(prn :debug :pipeline)
(let [extra-tx-data (compute-extra-tx-data tx-report)
tx-report* (if (seq extra-tx-data)
(let [result (d/with db-after extra-tx-data)]
@@ -474,7 +475,12 @@
tx-report)
{:keys [pages blocks]} (ds-report/get-blocks-and-pages tx-report*)
deleted-blocks (outliner-pipeline/filter-deleted-blocks (:tx-data tx-report*))
deleted-block-ids (set (map :db/id deleted-blocks))
delete-views (mapcat
(fn [item]
(let [block (d/entity db-before (:db/id item))]
(:logseq.property/_view-for block)))
deleted-blocks)
deleted-block-ids (set (map :db/id (concat deleted-blocks delete-views)))
blocks' (remove (fn [b] (deleted-block-ids (:db/id b))) blocks)
block-refs (when (seq blocks')
(rebuild-block-refs repo tx-report* blocks'))
@@ -487,7 +493,8 @@
(when (:block/uuid (d/entity db-after db-id))
{:db/id db-id
:block/tx-id tx-id}))) updated-blocks))
block-refs-tx-id-data (concat block-refs tx-id-data)
delete-views-tx-data (map (fn [b] [:db/retractEntity (:db/id b)]) delete-views)
block-refs-tx-id-data (concat delete-views-tx-data block-refs tx-id-data)
replace-tx-report (when (seq block-refs-tx-id-data)
(d/with (:db-after tx-report*) block-refs-tx-id-data))
tx-report' (or replace-tx-report tx-report*)