Procházet zdrojové kódy

fix: prefer server graph id

Tienson Qin před 1 měsícem
rodič
revize
dcff007590

+ 3 - 3
deps/worker-sync/src/logseq/worker_sync/worker.cljs

@@ -476,14 +476,14 @@
       (and (= method "POST") (= path "/graphs"))
       (.then (common/read-json request)
              (fn [result]
-               (let [graph-id (aget result "graph_id")
+               (let [graph-id (str (random-uuid))
                      graph-name (aget result "graph_name")
                      schema-version (aget result "schema_version")]
-                 (if (and (string? graph-id) (string? graph-name))
+                 (if (string? graph-name)
                    (do
                      (index-upsert! sql graph-id graph-name schema-version)
                      (common/json-response {:graph_id graph-id}))
-                   (common/bad-request "missing graph_id or graph_name")))))
+                   (common/bad-request "missing graph_name")))))
 
       (and (= method "DELETE") (string/starts-with? path "/graphs/"))
       (let [graph-id (subs path (count "/graphs/"))]

+ 19 - 7
src/main/frontend/handler/db_based/sync.cljs

@@ -1,9 +1,12 @@
 (ns frontend.handler.db-based.sync
   "Dispatch RTC calls between legacy RTC and worker-sync implementations."
   (:require [frontend.config :as config]
+            [frontend.db :as db]
             [frontend.handler.db-based.rtc :as rtc-handler]
             [frontend.handler.db-based.worker-sync :as worker-sync-handler]
-            [frontend.state :as state]))
+            [frontend.state :as state]
+            [logseq.db :as ldb]
+            [promesa.core :as p]))
 
 (defn- worker-sync-enabled? []
   config/worker-sync-enabled?)
@@ -23,12 +26,6 @@
     (worker-sync-handler/<rtc-download-graph! graph-name graph-uuid graph-schema-version timeout-ms)
     (rtc-handler/<rtc-download-graph! graph-name graph-uuid graph-schema-version timeout-ms)))
 
-(defn <rtc-upload-graph! [repo token remote-graph-name]
-  (if (worker-sync-enabled?)
-    (state/<invoke-db-worker :thread-api/worker-sync-upload-graph repo)
-    (state/<invoke-db-worker :thread-api/rtc-async-upload-graph
-                             repo token remote-graph-name)))
-
 (defn <rtc-stop! []
   (if (worker-sync-enabled?)
     (worker-sync-handler/<rtc-stop!)
@@ -51,6 +48,21 @@
     (worker-sync-handler/<rtc-start! repo :stop-before-start? stop-before-start?)
     (rtc-handler/<rtc-start! repo :stop-before-start? stop-before-start?)))
 
+(defn <rtc-upload-graph! [repo token remote-graph-name]
+  (if (worker-sync-enabled?)
+    (p/let [graph-uuid (some-> (db/get-db repo) ldb/get-graph-rtc-uuid)
+            graph-id (or (when-not graph-uuid
+                           (worker-sync-handler/<rtc-create-graph! repo))
+                         (str graph-uuid))]
+      (when (nil? graph-id)
+        (throw (ex-info "graph id doesn't exist when uploading to server" {:graph-uuid graph-uuid
+                                                                           :repo repo})))
+      (p/do!
+       (state/<invoke-db-worker :thread-api/worker-sync-upload-graph repo)
+       (<rtc-start! repo)))
+    (state/<invoke-db-worker :thread-api/rtc-async-upload-graph
+                             repo token remote-graph-name)))
+
 (defn <get-remote-graphs []
   (if (worker-sync-enabled?)
     (worker-sync-handler/<get-remote-graphs)

+ 13 - 18
src/main/frontend/handler/db_based/worker_sync.cljs

@@ -28,14 +28,6 @@
   (or config/worker-sync-http-base
       (ws->http-base config/worker-sync-ws-url)))
 
-(defn- get-graph-id [repo]
-  (let [db (db/get-db repo)]
-    (or (ldb/get-graph-rtc-uuid db)
-        (ldb/get-graph-local-uuid db)
-        (let [new-id (random-uuid)]
-          (ldb/transact! repo [(sqlite-util/kv :logseq.kv/local-graph-uuid new-id)])
-          new-id))))
-
 (defn- fetch-json
   [url opts]
   (p/let [resp (js/fetch url (clj->js opts))
@@ -64,23 +56,26 @@
 
 (defn <rtc-create-graph!
   [repo]
-  (let [graph-id (get-graph-id repo)
-        schema-version (some-> (ldb/get-graph-schema-version (db/get-db)) :major str)
+  (let [schema-version (some-> (ldb/get-graph-schema-version (db/get-db)) :major str)
         base (http-base)]
-    (if (and graph-id base)
+    (if base
       (p/let [result (fetch-json (str base "/graphs")
                                  {:method "POST"
                                   :headers {"content-type" "application/json"}
                                   :body (js/JSON.stringify
-                                         #js {:graph_id (str graph-id)
-                                              :graph_name (string/replace repo config/db-version-prefix "")
-                                              :schema_version schema-version})})]
-        (ldb/transact! repo [(sqlite-util/kv :logseq.kv/db-type "db")
-                             (sqlite-util/kv :logseq.kv/graph-uuid graph-id)])
-        result)
+                                         #js {:graph_name (string/replace repo config/db-version-prefix "")
+                                              :schema_version schema-version})})
+              graph-id (aget result "graph_id")]
+        (if graph-id
+          (p/do!
+           (ldb/transact! repo [(sqlite-util/kv :logseq.kv/db-type "db")
+                                (sqlite-util/kv :logseq.kv/graph-uuid (uuid graph-id))])
+           graph-id)
+          (p/rejected (ex-info "worker-sync missing graph id in create response"
+                               {:type :worker-sync/invalid-graph
+                                :response result}))))
       (p/rejected (ex-info "worker-sync missing graph info"
                            {:type :worker-sync/invalid-graph
-                            :graph-id graph-id
                             :base base})))))
 
 (defn <rtc-delete-graph!

+ 0 - 4
src/main/frontend/worker/db_worker.cljs

@@ -546,10 +546,6 @@
                        tx-data)
             _ (when context (worker-state/set-context! context))
             tx-meta' (cond-> tx-meta
-                       (and (not (:whiteboard/transact? tx-meta))
-                            (not (:rtc-download-graph? tx-meta))) ; delay writes to the disk
-                       (assoc :skip-store? true)
-
                        true
                        (dissoc :insert-blocks?))]
         (when-not (and (:create-today-journal? tx-meta)

+ 3 - 12
src/main/frontend/worker/worker_sync.cljs

@@ -51,18 +51,9 @@
 (defn- get-graph-id [repo]
   (when-let [conn (worker-state/get-datascript-conn repo)]
     (let [db @conn
-          graph-uuid (ldb/get-graph-rtc-uuid db)
-          local-uuid (ldb/get-graph-local-uuid db)
-          new-local (when (and (nil? graph-uuid) (nil? local-uuid))
-                      (random-uuid))]
-      (when new-local
-        (try
-          (d/transact! conn [(sqlite-util/kv :logseq.kv/local-graph-uuid new-local)])
-          (catch :default e
-            (log/error :worker-sync/graph-uuid-write-failed {:error e}))))
-      (or (some-> graph-uuid str)
-          (some-> (or local-uuid new-local) str)
-          (when (string? repo) repo)))))
+          graph-uuid (ldb/get-graph-rtc-uuid db)]
+      (when graph-uuid
+        (str graph-uuid)))))
 
 (defn- ensure-client-graph-uuid! [repo graph-id]
   (when (seq graph-id)