1
0
Эх сурвалжийг харах

full-gc run when from user command

Also, update gc to run every 3 days
Tienson Qin 4 сар өмнө
parent
commit
ad190a0f3a

+ 2 - 0
deps/db/.carve/ignore

@@ -42,3 +42,5 @@ logseq.db.sqlite.debug/find-missing-addresses-node-version
 logseq.db.sqlite.gc/gc-kvs-table!
 ;; API
 logseq.db.sqlite.gc/gc-kvs-table-node-version!
+;; API
+logseq.db.sqlite.gc/ensure-no-garbage

+ 5 - 3
deps/db/src/logseq/db/sqlite/gc.cljs

@@ -4,7 +4,7 @@
             [clojure.set :as set]
             [logseq.db.sqlite.util :as sqlite-util]))
 
-(defn walk-addresses
+(defn- walk-addresses
   "Given a map of parent address to children addresses and a root address,
    returns a set of all used addresses including the root and its descendants."
   [root addr->children]
@@ -42,7 +42,7 @@
 
 (defn gc-kvs-table!
   "WASM version to GC kvs table to remove unused addresses"
-  [^Object db]
+  [^Object db {:keys [full-gc?] :as opts}]
   (when db
     (let [unused-addresses (get-unused-addresses db)]
       (if (seq unused-addresses)
@@ -51,7 +51,9 @@
           (.transaction db (fn [tx]
                              (doseq [addr unused-addresses]
                                (.exec tx #js {:sql "Delete from kvs where addr = ?"
-                                              :bind #js [addr]})))))
+                                              :bind #js [addr]}))))
+          (when full-gc?
+            (gc-kvs-table! db opts)))
         (println :debug :db-gc "There's no garbage data that's need to be collected.")))))
 
 (defn- get-unused-addresses-node-version

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

@@ -244,15 +244,15 @@
 
 (defn- gc-sqlite-dbs!
   "Gc main db weekly and rtc ops db each time when opening it"
-  [sqlite-db client-ops-db datascript-conn {:keys [from-user?]}]
+  [sqlite-db client-ops-db datascript-conn {:keys [full-gc?]}]
   (let [last-gc-at (:kv/value (d/entity @datascript-conn :logseq.kv/graph-last-gc-at))]
-    (when (or from-user?
+    (when (or full-gc?
               (nil? last-gc-at)
               (not (number? last-gc-at))
-              (> (- (common-util/time-ms) last-gc-at) (* 7 24 3600 1000))) ; 1 week ago
-      (prn :debug "gc current graph")
+              (> (- (common-util/time-ms) last-gc-at) (* 3 24 3600 1000))) ; 3 days ago
+      (println :debug "gc current graph")
       (doseq [db [sqlite-db client-ops-db]]
-        (sqlite-gc/gc-kvs-table! db))
+        (sqlite-gc/gc-kvs-table! db {:full-gc? full-gc?}))
       (d/transact! datascript-conn [{:db/ident :logseq.kv/graph-last-gc-at
                                      :kv/value (common-util/time-ms)}]))))
 
@@ -734,7 +734,7 @@
   (let [{:keys [db client-ops]} (get @*sqlite-conns repo)
         conn (get @*datascript-conns repo)]
     (when (and db conn)
-      (gc-sqlite-dbs! db client-ops conn {:from-user? true})
+      (gc-sqlite-dbs! db client-ops conn {:full-gc? true})
       nil)))
 
 (comment