changelog shortlog graph tags branches files raw help

Mercurial > core / changeset: more rdb errptr manging

changeset 97: cc8100641c10
parent 96: 301fd45bbe73
child 98: 91a382b59e5c
author: ellis <ellis@rwest.io>
date: Wed, 13 Dec 2023 22:25:47 -0500
files: lisp/ffi/rocksdb/opts.lisp lisp/ffi/rocksdb/pkg.lisp lisp/ffi/rocksdb/tests.lisp lisp/lib/rdb/obj.lisp lisp/lib/rdb/pkg.lisp lisp/lib/rdb/tests.lisp lisp/lib/rdb/util.lisp
description: more rdb errptr manging
     1.1--- a/lisp/ffi/rocksdb/opts.lisp	Wed Dec 13 20:02:36 2023 -0500
     1.2+++ b/lisp/ffi/rocksdb/opts.lisp	Wed Dec 13 22:25:47 2023 -0500
     1.3@@ -85,7 +85,7 @@
     1.4 
     1.5 (define-opaque rocksdb-block-based-table-options)
     1.6 (define-alien-routine rocksdb-block-based-options-create (* rocksdb-block-based-table-options))
     1.7-(define-alien-routine rocksdb-block-based-options-destroy void (* rocksdb-block-based-table-options))
     1.8+(define-alien-routine rocksdb-block-based-options-destroy void (self (* rocksdb-block-based-table-options)))
     1.9 
    1.10 (define-alien-routine rocksdb-block-based-options-set-checksum void
    1.11   (opt (* rocksdb-block-based-table-options)) (val char))
     2.1--- a/lisp/ffi/rocksdb/pkg.lisp	Wed Dec 13 20:02:36 2023 -0500
     2.2+++ b/lisp/ffi/rocksdb/pkg.lisp	Wed Dec 13 22:25:47 2023 -0500
     2.3@@ -358,10 +358,9 @@
     2.4 
     2.5 (in-package :rocksdb)
     2.6 
     2.7-(eval-always
     2.8-  (defun load-rocksdb () 
     2.9-    (unless (member :rocksdb *features*)
    2.10-      (sb-alien:load-shared-object "librocksdb.so" :dont-save t)
    2.11-      (push :rocksdb *features*)))
    2.12+(defun load-rocksdb () 
    2.13+  (unless (member :rocksdb *features*)
    2.14+    (sb-alien:load-shared-object "librocksdb.so" :dont-save t)
    2.15+    (push :rocksdb *features*)))
    2.16 
    2.17-  (load-rocksdb))
    2.18+(load-rocksdb)
     3.1--- a/lisp/ffi/rocksdb/tests.lisp	Wed Dec 13 20:02:36 2023 -0500
     3.2+++ b/lisp/ffi/rocksdb/tests.lisp	Wed Dec 13 22:25:47 2023 -0500
     3.3@@ -2,7 +2,7 @@
     3.4 
     3.5 ;;; Code:
     3.6 (defpackage :rocksdb/tests
     3.7-  (:use :cl :std :rt :rocksdb :sb-ext))
     3.8+  (:use :cl :std :rt :rocksdb :sb-ext :sb-alien))
     3.9 
    3.10 (in-package :rocksdb/tests)
    3.11 
    3.12@@ -43,6 +43,9 @@
    3.13     (rocksdb-readoptions-destroy ropts)
    3.14     (rocksdb-block-based-options-destroy bopts)))
    3.15 
    3.16+(defun make-errptr ()
    3.17+  (make-alien rocksdb-errptr))
    3.18+
    3.19 (deftest db-basic ()
    3.20   "Test basic RocksDB functionality. Inserts KV pair into a temporary
    3.21 DB where K and V are both Lisp strings."
    3.22@@ -57,7 +60,7 @@
    3.23          (ropts (rocksdb-readoptions-create)))
    3.24       (with-alien ((k (* char) (make-alien char klen))
    3.25                    (v (* char) (make-alien char vlen))
    3.26-                   (errptr rocksdb-errptr nil))
    3.27+                   (errptr (* (* t)) (make-errptr)))
    3.28         ;; copy KEY to K
    3.29         (setfa k key)
    3.30         ;; copy VAL to V
    3.31@@ -70,23 +73,23 @@
    3.32                      v
    3.33                      vlen
    3.34                      errptr)
    3.35-	(is (null-alien errptr))
    3.36+	(is (null-alien (deref errptr)))
    3.37         ;; get V from DB given K
    3.38         (rocksdb:rocksdb-cancel-all-background-work db t)
    3.39         (rocksdb-get db ropts k klen (make-alien size-t vlen) errptr)
    3.40-	(is (null-alien errptr))
    3.41+	(is (null-alien (deref errptr)))
    3.42         ;; copy V to RVAL and validate
    3.43 	(let ((rval (make-array vlen :element-type 'unsigned-byte)))
    3.44 	  (loop for i from 0 below vlen do (let ((x (deref v i))) (setf (aref rval i) x)))
    3.45 	  (is (string= (octets-to-string val) (concatenate 'string (map 'vector #'code-char rval)))))
    3.46         ;; cleanup
    3.47         (rocksdb-delete db wopts k klen errptr)
    3.48-	(is (null-alien errptr))
    3.49+	(is (null-alien (deref errptr)))
    3.50         (rocksdb-writeoptions-destroy wopts)
    3.51         (rocksdb-readoptions-destroy ropts)
    3.52         ;; final cleanup
    3.53         (rocksdb-cancel-all-background-work db nil)
    3.54         (rocksdb-close db)
    3.55         (rocksdb-destroy-db opts path errptr)
    3.56-	(is (null-alien errptr))
    3.57+	(is (null-alien (deref errptr)))
    3.58         (rocksdb-options-destroy opts))))
     4.1--- a/lisp/lib/rdb/obj.lisp	Wed Dec 13 20:02:36 2023 -0500
     4.2+++ b/lisp/lib/rdb/obj.lisp	Wed Dec 13 22:25:47 2023 -0500
     4.3@@ -58,11 +58,7 @@
     4.4     :total-threads 4
     4.5     :max-open-files 10000))
     4.6 
     4.7-;;; rdb-cf
     4.8-
     4.9-;; NOTE: read-sequence and write-sequence now accept user-extended
    4.10-;; sequences
    4.11-
    4.12+;;; bytes
    4.13 (defclass rdb-bytes (sequence)
    4.14     ((buffer :initarg :buffer :type (array unsigned-byte) :accessor rdb-bytes-buffer))
    4.15   (:documentation "RDB unsigned-byte array. Implements the iterator protocol."))
    4.16@@ -96,20 +92,31 @@
    4.17 
    4.18 Values must be able to be encoded to and from (array unsigned-byte)."))
    4.19 
    4.20+(defun make-rdb-val (val)
    4.21+  "Convert VAL to an object of type RDB-VAL."
    4.22+  (make-instance 'rdb-val :buffer val))
    4.23+
    4.24 (defclass rdb-key (rdb-bytes)
    4.25   ()
    4.26   (:documentation "RDB key protocol.
    4.27 
    4.28 Keys must be able to be encoded to and from (array unsigned-byte)."))
    4.29 
    4.30+(defun make-rdb-key (key)
    4.31+  "Convert KEY to an object of type RDB-KEY."
    4.32+  (make-instance 'rdb-key :buffer key))
    4.33+
    4.34 (defclass rdb-kv (rdb-bytes)
    4.35   ((key :initarg :key :type rdb-key)
    4.36    (val :initarg :val :type rdb-val)))
    4.37 
    4.38-(defun make-rdb-key (key)
    4.39-  "Convert KEY to an object of type RDB-KEY."
    4.40-  (make-instance 'rdb-key :buffer key))
    4.41+(defun make-rdb-kv (key val)
    4.42+  "Generate a new RDB-KV pair."
    4.43+  (make-instance 'rdb-kv 
    4.44+    :key (make-rdb-key key) 
    4.45+    :val (make-rdb-val val)))
    4.46 
    4.47+;;; rdb-cf
    4.48 (defstruct rdb-cf
    4.49   "RDB Column Family structure. Contains a name, a cons of (rdb-key-type
    4.50 . rdb-val-type), and a system-area-pointer to the underlying
    4.51@@ -145,7 +152,7 @@
    4.52   (setf (rdb-db self) nil))
    4.53 
    4.54 (defmethod destroy-db ((self rdb))  
    4.55-  (when (rdb-db self) (close-rdb self))
    4.56+  (when (rdb-db self) (close-db self))
    4.57   (destroy-db-raw (rdb-name self)))
    4.58 
    4.59 (defmethod init-db ((self rdb))
     5.1--- a/lisp/lib/rdb/pkg.lisp	Wed Dec 13 20:02:36 2023 -0500
     5.2+++ b/lisp/lib/rdb/pkg.lisp	Wed Dec 13 22:25:47 2023 -0500
     5.3@@ -38,7 +38,7 @@
     5.4    :rdb :make-rdb 
     5.5    :rdb-db :rdb-name :rdb-cfs :rdb-opts
     5.6    :rdb-bytes :rdb-bytes-buffer
     5.7-   :make-rdb-key :rdb-kv :rdb-key :rdb-val 
     5.8+   :make-rdb-key :make-rdb-kv :make-rdb-val :rdb-kv :rdb-key :rdb-val 
     5.9    :rdb-opts :make-rdb-opts
    5.10    :default-rdb-opts
    5.11    :rdb-cf :make-rdb-cf :create-cf
     6.1--- a/lisp/lib/rdb/tests.lisp	Wed Dec 13 20:02:36 2023 -0500
     6.2+++ b/lisp/lib/rdb/tests.lisp	Wed Dec 13 22:25:47 2023 -0500
     6.3@@ -1,5 +1,5 @@
     6.4 (defpackage :rdb/tests
     6.5-  (:use :cl :std :rt :rdb :rocksdb))
     6.6+  (:use :cl :std :rt :rocksdb :rdb :sb-ext :sb-alien))
     6.7 
     6.8 (in-package :rdb/tests)
     6.9 
    6.10@@ -8,34 +8,33 @@
    6.11 
    6.12 (rocksdb:load-rocksdb)
    6.13 
    6.14-(defmacro with-test-db-raw ((db-var path) &body body)
    6.15-  `(let* ((opt (rdb::default-rocksdb-options))
    6.16-          (,db-var (open-db-raw ,path opt)))
    6.17-     (unwind-protect (progn ,@body)
    6.18-       (with-errptr e
    6.19-         (rocksdb-close ,db-var)
    6.20-         (rocksdb-destroy-db opt ,path e)))))
    6.21+(defvar *rdb-test-opts* (rdb::default-rocksdb-options))
    6.22+
    6.23+(defun test-cleanup (db opt path)
    6.24+  (with-errptr err
    6.25+    (rocksdb-close db)
    6.26+    (rocksdb-destroy-db opt path err)))
    6.27 
    6.28 (deftest rdb ()
    6.29   "Test RDB struct and methods."
    6.30   (let ((db (make-rdb :name "/tmp/rdb" :opts (make-rdb-opts :create-if-missing t))))
    6.31-    (open-rdb db)
    6.32+    (open-db db)
    6.33     (put-kv-str-raw (rdb-db db) "key" "val")
    6.34     (is (equal (get-kv-str-raw (rdb-db db) "key") "val"))
    6.35     (let ((cfs (list (make-rdb-cf :name "foo") (make-rdb-cf :name "bar") (make-rdb-cf :name "baz"))))
    6.36       (dolist (cf cfs)
    6.37         (push-cf cf db)))
    6.38-    (init-cfs db)
    6.39+    (init-db db)
    6.40     (loop for cf across (rdb-cfs db)
    6.41           do
    6.42              (progn
    6.43-               (insert-kv-str db "key" "val" :cf (rdb-cf-name cf))
    6.44+               (insert-kv db (make-rdb-kv "key" "val") :cf (rdb-cf-name cf))
    6.45                (is (equal (get-cf-str-raw (rdb-db db) (rdb-cf-sap cf) "key") "val"))))
    6.46     (rocksdb:rocksdb-cancel-all-background-work (rdb-db db) t)
    6.47-    (insert-kv-str db "test" "zaa")
    6.48+    ;; (insert-kv-str db "test" "zaa")
    6.49     ;; cleanup
    6.50-    (close-rdb db)
    6.51-    (destroy-rdb db)))
    6.52+    (close-db db)
    6.53+    (destroy-db db)))
    6.54 
    6.55 (deftest with-db-raw ()
    6.56   "Test the WITH-OPEN-DB macro and some basic functions."
    6.57@@ -68,7 +67,7 @@
    6.58 
    6.59 (deftest with-cf ()
    6.60   "Test rdb-cf operations"
    6.61-  (with-open-db-raw (db "/tmp/rdb-with-cf")
    6.62+  (with-test-db-raw (db "/tmp/rdb-with-cf")
    6.63     (with-cf (cf (make-rdb-cf :name "foobar"))
    6.64       (is (create-cf db cf))
    6.65       (is (null (put-cf-str-raw db (rdb-cf-sap cf) "key" "val")))
     7.1--- a/lisp/lib/rdb/util.lisp	Wed Dec 13 20:02:36 2023 -0500
     7.2+++ b/lisp/lib/rdb/util.lisp	Wed Dec 13 22:25:47 2023 -0500
     7.3@@ -1,9 +1,9 @@
     7.4 (in-package :rdb)
     7.5 
     7.6 (defmacro with-errptr (e &body body)
     7.7-    `(with-alien ((,e rocksdb-errptr (make-alien rocksdb-errptr)))
     7.8-       ,@body))
     7.9-
    7.10+  `(progn
    7.11+     (with-alien ((,e (* (* t)) (make-alien rocksdb-errptr)))
    7.12+       ,@body)))
    7.13 
    7.14 (defun default-rocksdb-options ()
    7.15   (let ((opts (rocksdb-options-create)))
    7.16@@ -11,16 +11,16 @@
    7.17     opts))
    7.18 
    7.19 (defun open-db-raw (db-path opts)
    7.20-  (with-errptr e
    7.21+  (with-errptr err
    7.22     (let* ((db-path (if (pathnamep db-path)
    7.23                         (namestring db-path)
    7.24                         db-path))
    7.25-           (db (rocksdb-open opts db-path e))
    7.26-           (err e))
    7.27+           (db (rocksdb-open opts db-path err))
    7.28+           (err (deref err)))
    7.29       (unless (null-alien err)
    7.30         (error 'open-db-error
    7.31                :db-path db-path
    7.32-               :error-message e))
    7.33+               :error-message (cast err c-string)))
    7.34       db)))
    7.35 
    7.36 (defun close-db-raw (db)
    7.37@@ -36,8 +36,8 @@
    7.38   `(let ((,db-var (open-db-raw ,db-path ,opt)))
    7.39      (unwind-protect (progn ,@body)
    7.40        (rocksdb-close ,db-var)
    7.41-         (with-errptr e
    7.42-           (rocksdb-destroy-db ,opt ,db-path e))
    7.43+       (with-errptr err
    7.44+         (rocksdb-destroy-db ,opt ,db-path err))
    7.45        (rocksdb-options-destroy ,opt))))
    7.46 
    7.47 (defun put-kv-raw (db key val &optional (opts (rocksdb-writeoptions-create)))
    7.48@@ -98,7 +98,7 @@
    7.49 (defun get-kv-raw (db key &optional (opt (rocksdb-readoptions-create)))
    7.50   (let ((klen (length key)))
    7.51     (with-alien ((vlen (* size-t) (make-alien size-t 0))
    7.52-		 (errptr rocksdb-errptr nil)
    7.53+		 (errptr rocksdb-errptr)
    7.54 		 (k (* char) (make-alien char klen)))
    7.55       (setfa k key)
    7.56       (let* ((val (rocksdb-get db
    7.57@@ -111,7 +111,7 @@
    7.58           (error 'get-kv-error
    7.59 		 :db db
    7.60 		 :key key
    7.61-		 :error-message (alien-sap errptr)))
    7.62+		 :error-message errptr))
    7.63 	;; helps if we know the vlen beforehand, would need a custom
    7.64 	;; C-side function probably.
    7.65 	(let ((v (make-array (deref vlen) :element-type 'unsigned-byte)))