mirror of
https://github.com/logseq/logseq.git
synced 2026-05-20 19:02:23 +00:00
enhance(rtc): sync rename-db-ident ops
This commit is contained in:
@@ -285,6 +285,17 @@
|
||||
[update-kv-value-ops-map-coll]
|
||||
(mapcat local-update-kv-value-ops->remote-ops update-kv-value-ops-map-coll))
|
||||
|
||||
(defn- local-rename-db-ident-ops->remote-ops
|
||||
[rename-db-ident-ops-map]
|
||||
(keep (fn [[op-type op]]
|
||||
(when (keyword-identical? :rename-db-ident op-type)
|
||||
[:rename-db-ident (select-keys (last op) [:db-ident :new-db-ident])]))
|
||||
rename-db-ident-ops-map))
|
||||
|
||||
(defn- gen-rename-db-ident-remote-ops
|
||||
[rename-db-ident-ops-map-coll]
|
||||
(mapcat local-rename-db-ident-ops->remote-ops rename-db-ident-ops-map-coll))
|
||||
|
||||
(defn- merge-remove-remove-ops
|
||||
[remote-remove-ops]
|
||||
(when-let [block-uuids (->> remote-remove-ops
|
||||
@@ -343,7 +354,7 @@
|
||||
(concat update-schema-ops update-page-ops remove-ops sorted-move-ops update-ops remove-page-ops)))
|
||||
|
||||
(defn- rollback
|
||||
[repo block-ops-map-coll update-kv-value-ops-map-coll]
|
||||
[repo block-ops-map-coll update-kv-value-ops-map-coll rename-db-ident-ops-map-coll]
|
||||
(let [block-ops
|
||||
(mapcat
|
||||
(fn [m]
|
||||
@@ -359,9 +370,18 @@
|
||||
(when (keyword-identical? :update-kv-value k)
|
||||
op))
|
||||
m))
|
||||
update-kv-value-ops-map-coll)]
|
||||
update-kv-value-ops-map-coll)
|
||||
rename-db-ident-ops
|
||||
(mapcat
|
||||
(fn [m]
|
||||
(keep (fn [[k op]]
|
||||
(when (keyword-identical? :rename-db-ident k)
|
||||
op))
|
||||
m))
|
||||
rename-db-ident-ops-map-coll)]
|
||||
(client-op/add-ops! repo block-ops)
|
||||
(client-op/add-ops! repo update-kv-value-ops)
|
||||
(client-op/add-ops! repo rename-db-ident-ops)
|
||||
nil))
|
||||
|
||||
(defn new-task--push-local-ops
|
||||
@@ -370,10 +390,14 @@
|
||||
(m/sp
|
||||
(let [block-ops-map-coll (client-op/get&remove-all-block-ops repo)
|
||||
update-kv-value-ops-map-coll (client-op/get&remove-all-update-kv-value-ops repo)
|
||||
rename-db-ident-ops-map-coll (client-op/get&remove-all-rename-db-ident-ops repo)
|
||||
block-uuid->remote-ops (not-empty (gen-block-uuid->remote-ops @conn block-ops-map-coll))
|
||||
rename-db-ident-remote-ops (gen-rename-db-ident-remote-ops rename-db-ident-ops-map-coll)
|
||||
other-remote-ops (gen-update-kv-value-remote-ops update-kv-value-ops-map-coll)
|
||||
remote-ops (concat (when block-uuid->remote-ops (sort-remote-ops block-uuid->remote-ops))
|
||||
other-remote-ops)]
|
||||
remote-ops (concat
|
||||
rename-db-ident-remote-ops
|
||||
(when block-uuid->remote-ops (sort-remote-ops block-uuid->remote-ops))
|
||||
other-remote-ops)]
|
||||
(when-let [ops-for-remote (rtc-schema/to-ws-ops-decoder remote-ops)]
|
||||
(let [local-tx (client-op/get-local-tx repo)
|
||||
r (try
|
||||
@@ -383,7 +407,7 @@
|
||||
:ops ops-for-remote :t-before (or local-tx 1)}
|
||||
(true? @*remote-profile?) (assoc :profile true))))
|
||||
(catch :default e
|
||||
(rollback repo block-ops-map-coll update-kv-value-ops-map-coll)
|
||||
(rollback repo block-ops-map-coll update-kv-value-ops-map-coll rename-db-ident-ops-map-coll)
|
||||
(throw e)))]
|
||||
(if-let [remote-ex (:ex-data r)]
|
||||
(do (add-log-fn :rtc.log/push-local-update remote-ex)
|
||||
@@ -392,18 +416,18 @@
|
||||
;; conflict-update remote-graph, keep these local-pending-ops
|
||||
;; and try to send ops later
|
||||
:graph-lock-failed
|
||||
(rollback repo block-ops-map-coll update-kv-value-ops-map-coll)
|
||||
(rollback repo block-ops-map-coll update-kv-value-ops-map-coll rename-db-ident-ops-map-coll)
|
||||
;; - :graph-lock-missing
|
||||
;; this case means something wrong in remote-graph data,
|
||||
;; nothing to do at client-side
|
||||
:graph-lock-missing
|
||||
(do (rollback repo block-ops-map-coll update-kv-value-ops-map-coll)
|
||||
(do (rollback repo block-ops-map-coll update-kv-value-ops-map-coll rename-db-ident-ops-map-coll)
|
||||
(throw r.ex/ex-remote-graph-lock-missing))
|
||||
|
||||
:rtc.exception/get-s3-object-failed
|
||||
(rollback repo block-ops-map-coll update-kv-value-ops-map-coll)
|
||||
(rollback repo block-ops-map-coll update-kv-value-ops-map-coll rename-db-ident-ops-map-coll)
|
||||
;; else
|
||||
(do (rollback repo block-ops-map-coll update-kv-value-ops-map-coll)
|
||||
(do (rollback repo block-ops-map-coll update-kv-value-ops-map-coll rename-db-ident-ops-map-coll)
|
||||
(throw (ex-info "Unavailable1" {:remote-ex remote-ex})))))
|
||||
|
||||
(do (assert (pos? (:t r)) r)
|
||||
|
||||
@@ -322,8 +322,24 @@
|
||||
(contains? update-kv-value-op-types a))
|
||||
[a (:v datom)]))))
|
||||
datoms)]
|
||||
(when (and (:db-ident op-map)
|
||||
(> (count op-map) 1))
|
||||
(when (and (:db-ident op-map) (> (count op-map) 1))
|
||||
[e op-map]))))
|
||||
(into {}))))
|
||||
|
||||
(defn- get-all-rename-db-ident-ops*
|
||||
[db]
|
||||
(let [db-ident-datoms (d/datoms db :avet :db-ident)
|
||||
es (map :e db-ident-datoms)]
|
||||
(->> (map (fn [e] [e (d/datoms db :eavt e)]) es)
|
||||
(keep (fn [[e datoms]]
|
||||
(let [op-map (into {}
|
||||
(keep (fn [datom]
|
||||
(let [a (:a datom)]
|
||||
(when (or (keyword-identical? :db-ident a)
|
||||
(contains? db-ident-rename-op-types a))
|
||||
[a (:v datom)]))))
|
||||
datoms)]
|
||||
(when (and (:db-ident op-map) (> (count op-map) 1))
|
||||
[e op-map]))))
|
||||
(into {}))))
|
||||
|
||||
@@ -343,6 +359,14 @@
|
||||
(d/transact! conn retract-all-tx-data)
|
||||
(vals e->op-map)))
|
||||
|
||||
(defn- get&remove-all-rename-db-ident-ops*
|
||||
[conn]
|
||||
(let [e->op-map (get-all-rename-db-ident-ops* @conn)
|
||||
retract-all-tx-data (mapcat (fn [e] (map (fn [a] [:db.fn/retractAttribute e a]) db-ident-rename-op-types))
|
||||
(keys e->op-map))]
|
||||
(d/transact! conn retract-all-tx-data)
|
||||
(vals e->op-map)))
|
||||
|
||||
(defn get-all-block-ops
|
||||
[repo]
|
||||
(when-let [conn (worker-state/get-client-ops-conn repo)]
|
||||
@@ -374,6 +398,11 @@
|
||||
(when-let [conn (worker-state/get-client-ops-conn repo)]
|
||||
(get&remove-all-update-kv-value-ops* conn)))
|
||||
|
||||
(defn get&remove-all-rename-db-ident-ops
|
||||
[repo]
|
||||
(when-let [conn (worker-state/get-client-ops-conn repo)]
|
||||
(get&remove-all-rename-db-ident-ops* conn)))
|
||||
|
||||
(defn get-unpushed-block-ops-count
|
||||
[repo]
|
||||
(when-let [conn (worker-state/get-client-ops-conn repo)]
|
||||
|
||||
@@ -33,7 +33,7 @@
|
||||
[:rename-db-ident
|
||||
[:cat :keyword
|
||||
[:map
|
||||
[:db/ident :keyword]
|
||||
[:db-ident :keyword]
|
||||
[:new-db-ident :keyword]]]]
|
||||
[:move
|
||||
[:cat :keyword
|
||||
|
||||
Reference in New Issue
Block a user