Browse Source

enhance(rtc): create new graph branch when major-schema-version changed

rcmerci 10 months ago
parent
commit
0f55ab4a76

+ 1 - 1
src/main/frontend/db/rtc/debug_ui.cljs

@@ -230,7 +230,7 @@
                                     token (state/get-auth-id-token)
                                     remote-graph-name (:upload-as-graph-name debug-state*)
                                     ^js worker @db-browser/*worker]
-                                (.rtc-async-upload-graph worker repo token remote-graph-name false)))})
+                                (.rtc-async-upload-graph worker repo token remote-graph-name)))})
       [:b "➡️"]
       [:input.form-input.my-2.py-1.w-32
        {:on-change (fn [e] (swap! debug-state assoc :upload-as-graph-name (util/evalue e)))

+ 18 - 8
src/main/frontend/handler/db_based/rtc.cljs

@@ -17,13 +17,13 @@
             [promesa.core :as p]))
 
 (defn <rtc-create-graph!
-  [repo & {:keys [remote-repo-name reset-rtc-data-in-conn?]}]
+  [repo]
   (when-let [^js worker @state/*db-worker]
     (p/do!
      (js/Promise. user-handler/task--ensure-id&access-token)
      (let [token (state/get-auth-id-token)
-           repo-name (sqlite-common-db/sanitize-db-name (or remote-repo-name repo))]
-       (.rtc-async-upload-graph worker repo token repo-name reset-rtc-data-in-conn?)))))
+           repo-name (sqlite-common-db/sanitize-db-name repo)]
+       (.rtc-async-upload-graph worker repo token repo-name)))))
 
 (defn <rtc-delete-graph!
   [graph-uuid schema-version]
@@ -62,6 +62,16 @@
   (when-let [^js worker @state/*db-worker]
     (.rtc-stop worker)))
 
+(defn <rtc-branch-graph!
+  [repo]
+  (when-let [^js worker @state/*db-worker]
+    (p/let [_ (js/Promise. user-handler/task--ensure-id&access-token)
+            token (state/get-auth-id-token)
+            result (.rtc-async-branch-graph worker repo token)
+            start-ex (ldb/read-transit-str result)]
+      (when-let [ex-data* (:ex-data start-ex)]
+        (throw (ex-info (:ex-message start-ex) ex-data*))))))
+
 (defn- notification-download-higher-schema-graph!
   [graph-name graph-uuid schema-version]
   (let [graph-name* (str graph-name "-" schema-version)]
@@ -75,17 +85,17 @@
        "Download")]
      :warning false)))
 
+(declare <rtc-start!)
 (defn- notification-upload-higher-schema-graph!
-  [repo schema-version]
+  [repo]
   (notification/show!
    [:div "The local graph has a higher schema version than the graph on the server."
     (shui/button
      {:on-click
       (fn [e]
         (util/stop e)
-        (<rtc-create-graph! repo
-                            :remote-repo-name (str repo "-" schema-version)
-                            :reset-rtc-data-in-conn? true))}
+        (p/do! (<rtc-branch-graph! repo)
+               (<rtc-start! repo)))}
      "Upload to server")]
    :warning false))
 
@@ -110,7 +120,7 @@
                        :download
                        (notification-download-higher-schema-graph! repo graph-uuid (:remote ex-data*))
                        :create-branch
-                       (notification-upload-higher-schema-graph! repo (:local ex-data*))
+                       (notification-upload-higher-schema-graph! repo)
                        ;; else
                        (notification/show! (:ex-message start-ex) :error))
 

+ 2 - 2
src/main/frontend/worker/db_worker.cljs

@@ -831,9 +831,9 @@
      (rtc-core/new-task--get-debug-state)))
 
   (rtc-async-upload-graph
-   [this repo token remote-graph-name reset-rtc-data-in-conn?]
+   [this repo token remote-graph-name]
    (with-write-transit-str
-     (rtc-core/new-task--upload-graph token repo remote-graph-name reset-rtc-data-in-conn?)))
+     (rtc-core/new-task--upload-graph token repo remote-graph-name)))
 
   (rtc-async-branch-graph
    [this repo token]

+ 4 - 4
src/main/frontend/worker/rtc/core.cljs

@@ -317,7 +317,7 @@
     (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)
-        (r.ex/->map r)
+        (do (prn r) (r.ex/->map r))
         (let [{:keys [rtc-state-flow *rtc-auto-push? *rtc-remote-profile? rtc-loop-task *online-users onstarted-task]}
               (create-rtc-loop graph-uuid schema-version repo conn date-formatter token)
               *last-stop-exception (atom nil)
@@ -327,7 +327,7 @@
                                              (js/console.log :rtc-loop-task e)))
               start-ex (m/? onstarted-task)]
           (if-let [start-ex (:ex-data start-ex)]
-            (r.ex/->map start-ex)
+            (do (prn start-ex) (r.ex/->map start-ex))
             (do (reset! *rtc-loop-metadata {:repo repo
                                             :graph-uuid graph-uuid
                                             :user-uuid user-uuid
@@ -448,7 +448,7 @@
   (m/reduce {} nil (m/eduction (take 1) create-get-state-flow)))
 
 (defn new-task--upload-graph
-  [token repo remote-graph-name reset-rtc-data-in-conn?]
+  [token repo remote-graph-name]
   (let [{:keys [conn schema-version] :as r}
         (if-let [conn (worker-state/get-datascript-conn repo)]
           (if-let [schema-version (ldb/get-graph-schema-version @conn)]
@@ -461,7 +461,7 @@
         (let [major-schema-version (db-schema/major-version schema-version)
               {:keys [get-ws-create-task]} (gen-get-ws-create-map--memoized (ws-util/get-ws-url token))]
           (m/? (r.upload-download/new-task--upload-graph
-                get-ws-create-task repo conn remote-graph-name major-schema-version reset-rtc-data-in-conn?)))))))
+                get-ws-create-task repo conn remote-graph-name major-schema-version)))))))
 
 (defn new-task--branch-graph
   [token repo]

+ 1 - 2
src/main/frontend/worker/rtc/full_upload_download_graph.cljs

@@ -126,11 +126,10 @@
                        [:db/retractEntity :logseq.kv/remote-schema-version]])))
 
 (defn new-task--upload-graph
-  [get-ws-create-task repo conn remote-graph-name major-schema-version reset-rtc-data-in-conn?]
+  [get-ws-create-task repo conn remote-graph-name major-schema-version]
   (m/sp
     (rtc-log-and-state/rtc-log :rtc.log/upload {:sub-type :fetching-presigned-put-url
                                                 :message "fetching presigned put-url"})
-    (when reset-rtc-data-in-conn? (remove-rtc-data-in-conn! repo))
     (let [[{:keys [url key]} all-blocks-str]
           (m/?
            (m/join

+ 5 - 0
src/main/frontend/worker/rtc/malli_schema.cljs

@@ -209,6 +209,11 @@
         [:s3-key :string]
         [:graph-name :string]
         [:schema-version :string]]]
+      ["branch-graph"
+       [:map
+        [:s3-key :string]
+        [:graph-uuid :uuid]
+        [:schema-version :string]]]
       ["download-graph"
        [:map
         [:graph-uuid :string]

+ 1 - 1
src/rtc_e2e_test/helper.cljs

@@ -20,7 +20,7 @@
   (apply println (if const/is-client1? "[client1]" "[client2]") objs))
 
 (def new-task--upload-example-graph
-  (rtc.core/new-task--upload-graph const/test-token const/test-repo const/test-graph-name false))
+  (rtc.core/new-task--upload-graph const/test-token const/test-repo const/test-graph-name))
 
 (defn new-task--wait-creating-graph
   [graph-uuid]