changelog shortlog graph tags branches files raw help

Mercurial > core / changeset: rocksdb load opts and env updates

changeset 679: 12287fab15d0
parent 678: 2b7d5a8d63ac
child 680: 5f88b237ce29
author: Richard Westhaver <ellis@rwest.io>
date: Thu, 26 Sep 2024 21:16:45 -0400
files: lisp/ffi/rocksdb/env.lisp lisp/ffi/rocksdb/macs.lisp lisp/ffi/rocksdb/opts.lisp lisp/ffi/rocksdb/pkg.lisp lisp/ffi/rocksdb/rocksdb.asd lisp/lib/obj/pkg.lisp lisp/lib/rdb/macs.lisp lisp/lib/rdb/obj.lisp lisp/lib/rdb/pkg.lisp lisp/lib/rdb/proto.lisp lisp/lib/rt/tracing.lisp
description: rocksdb load opts and env updates
     1.1--- /dev/null	Thu Jan 01 00:00:00 1970 +0000
     1.2+++ b/lisp/ffi/rocksdb/env.lisp	Thu Sep 26 21:16:45 2024 -0400
     1.3@@ -0,0 +1,18 @@
     1.4+;;; env.lisp --- RocksDB Env
     1.5+
     1.6+;; 
     1.7+
     1.8+;;; Code:
     1.9+(in-package :rocksdb)
    1.10+
    1.11+(define-alien-routine rocksdb-create-default-env (* rocksdb-env))
    1.12+(define-alien-routine rocksdb-create-mem-env (* rocksdb-env))
    1.13+(define-alien-routine rocksdb-env-set-background-threads void 
    1.14+  (env (* rocksdb-env))
    1.15+  (n int))
    1.16+(define-alien-routine rocksdb-env-get-background-threads int
    1.17+  (env (* rocksdb-env)))
    1.18+(define-alien-routine rocksdb-env-destroy void (opt (* rocksdb-env)))
    1.19+(def-with-errptr rocksdb-create-dir-if-missing void
    1.20+  (env (* rocksdb-env))
    1.21+  (path c-string))
     2.1--- a/lisp/ffi/rocksdb/macs.lisp	Wed Sep 25 21:39:39 2024 -0400
     2.2+++ b/lisp/ffi/rocksdb/macs.lisp	Thu Sep 26 21:16:45 2024 -0400
     2.3@@ -18,6 +18,37 @@
     2.4 (deftype rocksdb-logger-function ()
     2.5   '(function (unsigned-byte string) (values)))
     2.6 
     2.7+;;; Options
     2.8+(defmacro with-latest-options (db-path (db-opts-var cf-names-var cf-opts-var) &body body)
     2.9+  ;;  TODO 2024-09-26: ignore unknown?
    2.10+  (with-gensyms (db-opts cf-names cf-opts)
    2.11+    `(with-alien ((,db-opts (* rocksdb-options))
    2.12+                  (,cf-names (* c-string))
    2.13+                  (,cf-opts (* (* rocksdb-options)))
    2.14+                  (ncols size-t)
    2.15+                  (errptr rocksdb-errptr))
    2.16+       (rocksdb-load-latest-options 
    2.17+        ,db-path 
    2.18+        (rocksdb-create-default-env) 
    2.19+        t
    2.20+        (rocksdb-cache-create-lru 1080)
    2.21+        (addr ,db-opts)
    2.22+        (addr ncols)
    2.23+        (addr ,cf-names)
    2.24+        (addr ,cf-opts)
    2.25+        errptr)
    2.26+       (let ((,db-opts-var ,db-opts)
    2.27+             (,cf-names-var (coerce
    2.28+                             (loop for i below ncols
    2.29+                                   collect (deref ,cf-names i))
    2.30+                             'vector))
    2.31+             (,cf-opts-var (coerce
    2.32+                            (loop for i below ncols
    2.33+                                  collect (deref ,cf-opts i))
    2.34+                            'vector)))
    2.35+         (unwind-protect ,@body
    2.36+           (rocksdb-load-latest-options-destroy ,db-opts ,cf-names ,cf-opts ncols))))))
    2.37+      
    2.38 ;;; Merge Ops
    2.39 (defmacro define-full-merge-op (name &body body)
    2.40   `(define-alien-callable ,name (* t)
     3.1--- a/lisp/ffi/rocksdb/opts.lisp	Wed Sep 25 21:39:39 2024 -0400
     3.2+++ b/lisp/ffi/rocksdb/opts.lisp	Thu Sep 26 21:16:45 2024 -0400
     3.3@@ -231,8 +231,12 @@
     3.4 ;; TODO 2024-04-17: 
     3.5 ;; may need to be an int -- check src
     3.6 (define-opt-accessor rocksdb-options use-fsync boolean)
     3.7-(define-opt-accessor rocksdb-options db-log-dir c-string)
     3.8-(define-opt-accessor rocksdb-options wal-dir c-string)
     3.9+(define-alien-routine rocksdb-options-set-db-log-dir void
    3.10+  (opts (* rocksdb-options))
    3.11+  (dir c-string))
    3.12+(define-alien-routine rocksdb-options-set-wal-dir void
    3.13+  (opts (* rocksdb-options))
    3.14+  (dir c-string))
    3.15 (define-opt-accessor rocksdb-options wal-ttl-seconds unsigned-long)
    3.16 (define-opt-accessor rocksdb-options wal-size-limit-mb unsigned-long)
    3.17 (define-opt-accessor rocksdb-options manifest-preallocation-size size-t)
    3.18@@ -384,6 +388,18 @@
    3.19                       num-shard-bits
    3.20                       memory-allocator)
    3.21 
    3.22+#|
    3.23+Load the latest rocksdb options from the specified db_path.
    3.24+
    3.25+On success, num_column_families will be updated with a non-zero
    3.26+number indicating the number of column families.
    3.27+The returned db_options, column_family_names, and column_family_options
    3.28+should be released via rocksdb_load_latest_options_destroy().
    3.29+
    3.30+On error, a non-null errptr that includes the error message will be
    3.31+returned.  db_options, column_family_names, and column_family_options
    3.32+will be set to NULL.
    3.33+|#
    3.34 (def-with-errptr rocksdb-load-latest-options 
    3.35   void
    3.36   (db-path c-string)
    3.37@@ -396,7 +412,7 @@
    3.38   (column-family-options (* (* (* rocksdb-options)))))
    3.39 
    3.40 (define-alien-routine rocksdb-load-latest-options-destroy void
    3.41-  (db-options (* (* rocksdb-options)))
    3.42+  (db-options (* rocksdb-options))
    3.43   (list-column-family-names (* c-string))
    3.44   (list-column-family-options (* (* rocksdb-options)))
    3.45   (len size-t))
     4.1--- a/lisp/ffi/rocksdb/pkg.lisp	Wed Sep 25 21:39:39 2024 -0400
     4.2+++ b/lisp/ffi/rocksdb/pkg.lisp	Thu Sep 26 21:16:45 2024 -0400
     4.3@@ -321,7 +321,14 @@
     4.4    :rocksdb-put-cf-function
     4.5    :rocksdb-deleted-function
     4.6    :rocksdb-put-function
     4.7-   :rocksdb-open-column-families))
     4.8+   :rocksdb-open-column-families
     4.9+   :rocksdb-create-default-env
    4.10+   :rocksdb-create-mem-env
    4.11+   :rocksdb-env-set-background-threads
    4.12+   :rocksdb-env-get-background-threads
    4.13+   :rocksdb-env-destroy
    4.14+   :rocksdb-create-dir-if-missing
    4.15+   :rocksdb-options-set-wal-dir))
    4.16 
    4.17 (in-package :rocksdb)
    4.18 
     5.1--- a/lisp/ffi/rocksdb/rocksdb.asd	Wed Sep 25 21:39:39 2024 -0400
     5.2+++ b/lisp/ffi/rocksdb/rocksdb.asd	Thu Sep 26 21:16:45 2024 -0400
     5.3@@ -14,6 +14,7 @@
     5.4                (:file "prim")
     5.5                (:file "types")
     5.6                (:file "opts")
     5.7+               (:file "env")
     5.8                (:file "sst")
     5.9                (:file "db")
    5.10                (:file "checkpoint")
     6.1--- a/lisp/lib/obj/pkg.lisp	Wed Sep 25 21:39:39 2024 -0400
     6.2+++ b/lisp/lib/obj/pkg.lisp	Thu Sep 26 21:16:45 2024 -0400
     6.3@@ -322,7 +322,6 @@
     6.4   (:nicknames :db)
     6.5   (:use :cl :std :id :seq :sb-mop :sb-pcl)
     6.6   (:export
     6.7-   :load-db
     6.8    :get-val
     6.9    :set-val
    6.10    :dbs
     7.1--- a/lisp/lib/rdb/macs.lisp	Wed Sep 25 21:39:39 2024 -0400
     7.2+++ b/lisp/lib/rdb/macs.lisp	Thu Sep 26 21:16:45 2024 -0400
     7.3@@ -14,9 +14,7 @@
     7.4                            (lambda (c)
     7.5                              (handle-errptr ,e ,errtyp ,params))))
     7.6             (progn ,@body))
     7.7-       (handle-errptr ,e ,errtyp ,params)
     7.8-       )))
     7.9-     
    7.10+       (handle-errptr ,e ,errtyp ,params))))
    7.11 
    7.12 ;;; opts
    7.13 (defmacro rdb-opt-setter (key)
    7.14@@ -88,11 +86,11 @@
    7.15        (rocksdb-backup-engine-close ,be-var))))
    7.16 
    7.17 ;;; top-level
    7.18+;; TODO 2024-09-26: 
    7.19 (defmacro do-db ((db opts) accessors &body body)
    7.20   "Database Iteration construct. OPTS are used to provide top-level
    7.21   options dynamically bound to DB. ACCESSORS is a list of database
    7.22-   accessors which are available to call in BODY."
    7.23-  )
    7.24+   accessors which are available to call in BODY.")
    7.25 
    7.26 ;;; temp-db
    7.27 (defvar *temp-db-path-generator*
    7.28@@ -139,3 +137,19 @@
    7.29      ,@(when file `((open-sst ,sst ,file)))
    7.30      ,@body
    7.31      ,@(when destroy `((destroy-sst ,sst)))))
    7.32+
    7.33+;;; opts
    7.34+(defmacro with-latest-opts ((db-var db-path) &body body)
    7.35+  `(rocksdb::with-latest-options ,(string db-path) (db-opts cf-names cf-opts)
    7.36+     (let ((opts (make-rdb-opts)))
    7.37+       (setf (rdb-opts-sap opts) db-opts)
    7.38+       (let ((cfs (coerce 
    7.39+                   (loop for name across cf-names
    7.40+                         for opt across cf-opts
    7.41+                         collect 
    7.42+                            (let ((cf-opts (make-rdb-opts)))
    7.43+                              (setf (rdb-opts-sap cf-opts) opt)
    7.44+                              (make-rdb-cf name :opts cf-opts)))
    7.45+                   'vector)))
    7.46+         (let ((,db-var (make-rdb ,db-path opts cfs)))
    7.47+           ,@body)))))
     8.1--- a/lisp/lib/rdb/obj.lisp	Wed Sep 25 21:39:39 2024 -0400
     8.2+++ b/lisp/lib/rdb/obj.lisp	Thu Sep 26 21:16:45 2024 -0400
     8.3@@ -159,7 +159,7 @@
     8.4      tslen)))
     8.5 
     8.6 ;;; column family
     8.7-(defstruct (rdb-cf (:constructor make-rdb-cf (name &key key-type val-type sap)))
     8.8+(defstruct (rdb-cf (:constructor make-rdb-cf (name &key opts key-type val-type sap)))
     8.9   "RDB Column Family structure. Contains a name, key-type, val-type,
    8.10 and a system-area-pointer to the underlying rocksdb_cf_t handle.
    8.11 
    8.12@@ -167,6 +167,7 @@
    8.13 'octet-vector. This is needed to distinguish the value 'octet-vector being
    8.14 supplied by the user from the default value."
    8.15   (name "" :type string)
    8.16+  (opts (default-rdb-opts) :type rdb-opts)
    8.17   (key-type nil :type (or list symbol))
    8.18   (val-type nil :type (or list symbol))
    8.19   (sap nil :type (or null alien)))
    8.20@@ -380,12 +381,12 @@
    8.21 (defmethod create-cf ((db rdb) (cf rdb-cf))
    8.22   (create-cf-raw (rdb-db db) (rdb-cf-name cf) (rdb-opts-sap (rdb-opts db))))
    8.23 
    8.24-(defmethod open-cf ((db rdb) (cf rdb-cf) &optional error)
    8.25+(defmethod open-cf ((db rdb) (cf rdb-cf) &optional (error t))
    8.26   (unless (null (rdb-cf-sap cf))
    8.27     (if error
    8.28         (rdb-error "column family is already open - close before re-opening.")
    8.29         cf)
    8.30-    (setf (rdb-cf-sap cf) (open-cf-raw (rdb-db db) (default-rocksdb-options) (rdb-cf-name cf)))))
    8.31+    (setf (rdb-cf-sap cf) (open-cf-raw (rdb-db db) (rdb-cf-opts cf) (rdb-cf-name cf)))))
    8.32 
    8.33 (defmethod open-cf ((db rdb) (cf string) &optional (error t))
    8.34   (if-let ((cf (find-cf cf db)))
     9.1--- a/lisp/lib/rdb/pkg.lisp	Wed Sep 25 21:39:39 2024 -0400
     9.2+++ b/lisp/lib/rdb/pkg.lisp	Thu Sep 26 21:16:45 2024 -0400
     9.3@@ -120,7 +120,9 @@
     9.4    :rdb-cf-val-type
     9.5    :close-cf
     9.6    :open-cf
     9.7-   :close-cfs))
     9.8+   :close-cfs
     9.9+   :rdb-cf-opts
    9.10+   :with-latest-opts))
    9.11 
    9.12 (in-package :rdb)
    9.13 (rocksdb:load-rocksdb nil)
    10.1--- a/lisp/lib/rdb/proto.lisp	Wed Sep 25 21:39:39 2024 -0400
    10.2+++ b/lisp/lib/rdb/proto.lisp	Thu Sep 26 21:16:45 2024 -0400
    10.3@@ -36,7 +36,7 @@
    10.4   (:documentation "Implicitly pull foreign values from the sap associated with SELF."))
    10.5 (defgeneric push-cf (cf self)
    10.6   (:documentation "Push a column-family to a sap."))
    10.7-(defgeneric open-cf (self cf &optional error)
    10.8+(defgeneric open-cf (self cf &optional opts)
    10.9   (:documentation "Open column-family CF in SELF. When ERROR is non-nil signal an error if the
   10.10 column-family is already open."))
   10.11 (defgeneric open-cfs (self)
    11.1--- a/lisp/lib/rt/tracing.lisp	Wed Sep 25 21:39:39 2024 -0400
    11.2+++ b/lisp/lib/rt/tracing.lisp	Thu Sep 26 21:16:45 2024 -0400
    11.3@@ -264,7 +264,7 @@
    11.4         (symbol-function 'sb-debug::trace-end-breakpoint-fun) *original-trace-end-breakpoint-fun*)
    11.5   (sb-ext:lock-package (find-package 'sb-debug)))
    11.6 
    11.7-(defun start-tracing (&rest specs)
    11.8+(defun start-tracing (specs)
    11.9   (install-tracing-overrides)
   11.10   `(progn
   11.11      (trace :encapsulate t :methods t ,@specs)))
   11.12@@ -317,7 +317,7 @@
   11.13   `(unwind-protect
   11.14         (progn
   11.15           (reset-tracing)
   11.16-          (start-tracing ,@specs)
   11.17+          (start-tracing ',specs)
   11.18           (progn
   11.19             ,@body))
   11.20      (stop-tracing)))