From 3dddc4323aade6502e116ce2af22e8803eca213a Mon Sep 17 00:00:00 2001 From: rcmerci Date: Thu, 6 Feb 2025 15:47:34 +0800 Subject: [PATCH] enhance(rtc): show more info in debug-ui --- deps/db/src/logseq/db/frontend/kv_entity.cljs | 2 +- deps/db/src/logseq/db/frontend/schema.cljs | 25 ++++++++++--------- src/main/frontend/db/rtc/debug_ui.cljs | 6 ++++- src/main/frontend/worker/rtc/core.cljs | 11 ++++++-- src/main/frontend/worker/rtc/skeleton.cljs | 3 ++- 5 files changed, 30 insertions(+), 17 deletions(-) diff --git a/deps/db/src/logseq/db/frontend/kv_entity.cljs b/deps/db/src/logseq/db/frontend/kv_entity.cljs index e9e794c904..03fd8f4e8a 100644 --- a/deps/db/src/logseq/db/frontend/kv_entity.cljs +++ b/deps/db/src/logseq/db/frontend/kv_entity.cljs @@ -15,7 +15,7 @@ :rtc/ignore-entity-when-init-download true}} :logseq.kv/schema-version {:doc "Graph's current schema version"} :logseq.kv/remote-schema-version {:doc "Graph's remote schema version. -RTC won't start when (not= local-schema-version remote-schema-version)" +RTC won't start when major-schema-versions don't match" :rtc {:rtc/ignore-entity-when-init-upload true :rtc/ignore-entity-when-init-download true}} :logseq.kv/graph-created-at {:doc "Graph's created at time"} diff --git a/deps/db/src/logseq/db/frontend/schema.cljs b/deps/db/src/logseq/db/frontend/schema.cljs index 72fb307521..52999ca1f4 100644 --- a/deps/db/src/logseq/db/frontend/schema.cljs +++ b/deps/db/src/logseq/db/frontend/schema.cljs @@ -9,18 +9,6 @@ (str major "." minor) (str major)))) -;;; nbb not support extend-protocol ICompareable for defrecord -(defn compare-schema-version - [x y] - (assert (instance? SchemaVersion x) x) - (cond - (number? y) (compare (.-major x) y) - (sequential? y) (compare [(.-major x) (.-minor x)] [(first y) (second y)]) - (instance? SchemaVersion y) - (compare [(.-major x) (.-minor x)] [(.-major y) (.-minor y)]) - :else - (throw (js/Error. (str "Cannot compare " x " to " y))))) - (defn parse-schema-version "schema-version-old: 10, a number schema-version-new: \"12.34\", string, ." @@ -35,6 +23,19 @@ :else (throw (ex-info (str "Bad schema version: " string-or-compatible-number) {:data string-or-compatible-number})))) +;;; nbb not support extend-protocol ICompareable for defrecord +(defn compare-schema-version + [x y] + (if (instance? SchemaVersion x) + (cond + (number? y) (compare (.-major x) y) + (sequential? y) (compare [(.-major x) (.-minor x)] [(first y) (second y)]) + (instance? SchemaVersion y) + (compare [(.-major x) (.-minor x)] [(.-major y) (.-minor y)]) + :else + (throw (js/Error. (str "Cannot compare " x " to " y)))) + (compare-schema-version (parse-schema-version x) y))) + (def version (parse-schema-version "63")) (defn major-version diff --git a/src/main/frontend/db/rtc/debug_ui.cljs b/src/main/frontend/db/rtc/debug_ui.cljs index c807e4b328..226f266606 100644 --- a/src/main/frontend/db/rtc/debug_ui.cljs +++ b/src/main/frontend/db/rtc/debug_ui.cljs @@ -10,6 +10,7 @@ [frontend.ui :as ui] [frontend.util :as util] [logseq.db :as ldb] + [logseq.db.frontend.schema :as db-schema] [logseq.shui.ui :as shui] [missionary.core :as m] [promesa.core :as p] @@ -107,7 +108,10 @@ :remote-profile? (:remote-profile? debug-state*) :current-page (state/get-current-page) :blocks-count (when-let [page (state/get-current-page)] - (count (:block/_page (db/get-page page))))} + (count (:block/_page (db/get-page page)))) + :schema-version {:app (str db-schema/version) + :local-graph (:local-graph-schema-version debug-state*) + :remote-graph (:remote-graph-schema-version debug-state*)}} (fipp/pprint {:width 20}) with-out-str)]] diff --git a/src/main/frontend/worker/rtc/core.cljs b/src/main/frontend/worker/rtc/core.cljs index 862847c92e..c46296dc99 100644 --- a/src/main/frontend/worker/rtc/core.cljs +++ b/src/main/frontend/worker/rtc/core.cljs @@ -254,6 +254,8 @@ (def ^:private empty-rtc-loop-metadata {:repo nil :graph-uuid nil + :local-graph-schema-version nil + :remote-graph-schema-version nil :user-uuid nil :rtc-state-flow nil :*rtc-auto-push? nil @@ -314,7 +316,7 @@ (m/sp ;; ensure device metadata existing first (m/? (worker-device/new-task--ensure-device-metadata! token)) - (let [{:keys [conn user-uuid graph-uuid schema-version _remote-schema-version date-formatter] :as r} + (let [{:keys [conn user-uuid graph-uuid schema-version remote-schema-version date-formatter] :as r} (validate-rtc-start-conditions repo token)] (if (instance? ExceptionInfo r) (do (prn r) (r.ex/->map r)) @@ -330,6 +332,8 @@ (do (prn start-ex) (r.ex/->map start-ex)) (do (reset! *rtc-loop-metadata {:repo repo :graph-uuid graph-uuid + :local-graph-schema-version schema-version + :remote-graph-schema-version remote-schema-version :user-uuid user-uuid :rtc-state-flow rtc-state-flow :*rtc-auto-push? *rtc-auto-push? @@ -413,7 +417,8 @@ (let [rtc-loop-metadata-flow (m/watch *rtc-loop-metadata)] (m/ap (let [{rtc-lock :*rtc-lock - :keys [repo graph-uuid user-uuid rtc-state-flow *rtc-auto-push? *rtc-remote-profile? + :keys [repo graph-uuid local-graph-schema-version remote-graph-schema-version + user-uuid rtc-state-flow *rtc-auto-push? *rtc-remote-profile? *online-users *last-stop-exception]} (m/?< rtc-loop-metadata-flow)] (try @@ -423,6 +428,8 @@ (fn [rtc-state rtc-auto-push? rtc-remote-profile? rtc-lock online-users pending-local-ops-count local-tx remote-tx] {:graph-uuid graph-uuid + :local-graph-schema-version (str local-graph-schema-version) + :remote-graph-schema-version (str remote-graph-schema-version) :user-uuid user-uuid :unpushed-block-update-count pending-local-ops-count :local-tx local-tx diff --git a/src/main/frontend/worker/rtc/skeleton.cljs b/src/main/frontend/worker/rtc/skeleton.cljs index c76df740b1..8d19b98b44 100644 --- a/src/main/frontend/worker/rtc/skeleton.cljs +++ b/src/main/frontend/worker/rtc/skeleton.cljs @@ -5,6 +5,7 @@ [frontend.worker.rtc.ws-util :as ws-util] [frontend.worker.util :as worker-util] [logseq.db :as ldb] + [logseq.db.frontend.schema :as db-schema] [missionary.core :as m])) (defn- get-builtin-db-idents @@ -34,7 +35,7 @@ (let [{:keys [server-schema-version server-builtin-db-idents]} r client-builtin-db-idents (set (get-builtin-db-idents db)) client-schema-version (ldb/get-graph-schema-version db)] - (when (not= client-schema-version server-schema-version) + (when-not (zero? (db-schema/compare-schema-version client-schema-version server-schema-version)) (worker-util/post-message :notification [[:div [:p (str :client-schema-version client-schema-version)]