|
@@ -14,6 +14,7 @@
|
|
|
[frontend.common.missionary :as c.m]
|
|
|
[frontend.common.thread-api :as thread-api :refer [def-thread-api]]
|
|
|
[frontend.worker.db-listener :as db-listener]
|
|
|
+ [frontend.worker.db-metadata :as worker-db-metadata]
|
|
|
[frontend.worker.db.fix :as db-fix]
|
|
|
[frontend.worker.db.migrate :as db-migrate]
|
|
|
[frontend.worker.db.validate :as worker-db-validate]
|
|
@@ -326,7 +327,7 @@
|
|
|
(.exec db "PRAGMA journal_mode=WAL"))
|
|
|
|
|
|
(defn- create-or-open-db!
|
|
|
- [repo {:keys [config import-type datoms]}]
|
|
|
+ [repo {:keys [config import-type datoms] :as opts}]
|
|
|
(when-not (worker-state/get-sqlite-conn repo)
|
|
|
(p/let [[db search-db client-ops-db :as dbs] (get-dbs repo)
|
|
|
storage (new-sqlite-storage db)
|
|
@@ -363,7 +364,7 @@
|
|
|
(when (and db-based? (not initial-data-exists?) (not datoms))
|
|
|
(let [config (or config "")
|
|
|
initial-data (sqlite-create-graph/build-db-initial-data config
|
|
|
- (when import-type {:import-type import-type}))]
|
|
|
+ (select-keys opts [:import-type :graph-git-sha]))]
|
|
|
(d/transact! conn initial-data {:initial-db? true})))
|
|
|
|
|
|
;; TODO: remove this once we can ensure there's no bug for missing addresses
|
|
@@ -407,13 +408,14 @@
|
|
|
|
|
|
(defn- <list-all-dbs
|
|
|
[]
|
|
|
- (let [dir? #(= (.-kind %) "directory")]
|
|
|
+ (let [dir? #(= (.-kind %) "directory")
|
|
|
+ db-dir-prefix ".logseq-pool-"]
|
|
|
(p/let [^js root (.getDirectory js/navigator.storage)
|
|
|
values-iter (when (dir? root) (.values root))
|
|
|
values (when values-iter (iter->vec values-iter))
|
|
|
current-dir-dirs (filter dir? values)
|
|
|
db-dirs (filter (fn [file]
|
|
|
- (string/starts-with? (.-name file) ".logseq-pool-"))
|
|
|
+ (string/starts-with? (.-name file) db-dir-prefix))
|
|
|
current-dir-dirs)]
|
|
|
(prn :debug
|
|
|
:db-dirs (map #(.-name %) db-dirs)
|
|
@@ -424,9 +426,8 @@
|
|
|
;; TODO: DRY
|
|
|
(string/replace "+3A+" ":")
|
|
|
(string/replace "++" "/"))
|
|
|
- metadata-file-handle (.getFileHandle dir "metadata.edn" #js {:create true})
|
|
|
- metadata-file (.getFile metadata-file-handle)
|
|
|
- metadata (.text metadata-file)]
|
|
|
+ repo (str sqlite-util/db-version-prefix graph-name)
|
|
|
+ metadata (worker-db-metadata/<get repo)]
|
|
|
{:name graph-name
|
|
|
:metadata (edn/read-string metadata)})) db-dirs)))))
|
|
|
|
|
@@ -467,7 +468,6 @@
|
|
|
;; [graph service]
|
|
|
(defonce *service (atom []))
|
|
|
(defonce fns {"remoteInvoke" thread-api/remote-function})
|
|
|
-(declare <init-service!)
|
|
|
|
|
|
(defn- start-db!
|
|
|
[repo {:keys [close-other-db?]
|
|
@@ -846,14 +846,14 @@
|
|
|
(js/console.error (str "DB is not found for " repo))))))))
|
|
|
|
|
|
(defn- on-become-master
|
|
|
- [repo config import?]
|
|
|
+ [repo start-opts]
|
|
|
(js/Promise.
|
|
|
(m/sp
|
|
|
- (c.m/<? (init-sqlite-module!))
|
|
|
- (when-not import?
|
|
|
- (c.m/<? (start-db! repo {:config config}))
|
|
|
- (assert (some? (worker-state/get-datascript-conn repo))))
|
|
|
- (m/? (rtc.core/new-task--rtc-start true)))))
|
|
|
+ (c.m/<? (init-sqlite-module!))
|
|
|
+ (when-not (:import-type start-opts)
|
|
|
+ (c.m/<? (start-db! repo start-opts))
|
|
|
+ (assert (some? (worker-state/get-datascript-conn repo))))
|
|
|
+ (m/? (rtc.core/new-task--rtc-start true)))))
|
|
|
|
|
|
(def broadcast-data-types
|
|
|
(set (map
|
|
@@ -866,7 +866,7 @@
|
|
|
:rtc-sync-state])))
|
|
|
|
|
|
(defn- <init-service!
|
|
|
- [graph config import?]
|
|
|
+ [graph start-opts]
|
|
|
(let [[prev-graph service] @*service]
|
|
|
(some-> prev-graph close-db!)
|
|
|
(when graph
|
|
@@ -874,9 +874,9 @@
|
|
|
service
|
|
|
(p/let [service (shared-service/<create-service graph
|
|
|
(bean/->js fns)
|
|
|
- #(on-become-master graph config import?)
|
|
|
+ #(on-become-master graph start-opts)
|
|
|
broadcast-data-types
|
|
|
- {:import? import?})]
|
|
|
+ {:import? (:import-type? start-opts)})]
|
|
|
(assert (p/promise? (get-in service [:status :ready])))
|
|
|
(reset! *service [graph service])
|
|
|
service)))))
|
|
@@ -897,7 +897,7 @@
|
|
|
;; because shared-service operates at the graph level,
|
|
|
;; creating a new database or switching to another one requires re-initializing the service.
|
|
|
(let [[graph opts] (ldb/read-transit-str (last args))]
|
|
|
- (p/let [service (<init-service! graph (:config opts) (some? (:import-type opts)))]
|
|
|
+ (p/let [service (<init-service! graph opts)]
|
|
|
(get-in service [:status :ready])
|
|
|
;; wait for service ready
|
|
|
(js-invoke (:proxy service) k args)))
|