Mercurial > core / lisp/lib/rdb/raw.lisp
changeset 698: |
96958d3eb5b0 |
parent: |
5f88b237ce29
|
author: |
Richard Westhaver <ellis@rwest.io> |
date: |
Fri, 04 Oct 2024 22:04:59 -0400 |
permissions: |
-rw-r--r-- |
description: |
fixes |
1 ;;; rdb/raw.lisp --- Raw wrappers for ROCKSDB alien interface 7 (defun make-rocksdb-options (&optional init-fn) 8 "Make and return RDB-OPTS. INIT-FN is an optional argument which must be a 9 lambda which takes a single parameter (the RDB-OPTS sap). It is used 10 to initialize the instance with custom configuration." 11 (let ((opts (rocksdb-options-create))) 12 (when init-fn (funcall init-fn opts)) 15 (defun default-rocksdb-options () 17 (lambda (o) (rocksdb-options-set-create-if-missing o t)))) 19 (defun load-opts-raw (dir) 20 (rocksdb::with-latest-options dir (db-opts names cf-opts) 21 (values db-opts names cf-opts))) 23 (defun get-stats-raw (opt htype) 24 (with-alien ((hist (* rocksdb-statistics-histogram-data) (rocksdb-statistics-histogram-data-create))) 25 (rocksdb-options-statistics-get-histogram-data opt htype hist) 29 (defun open-db-raw (db-path &optional (opts (default-rocksdb-options))) 30 (with-errptr (err 'open-db-error (list :db db-path)) 31 (let* ((db-path (if (pathnamep db-path) 34 (rocksdb-open opts db-path err)))) 36 (defun close-db-raw (db) 39 (defun destroy-db-raw (path &optional (opt (rocksdb-options-create))) 40 (with-errptr (err 'destroy-db-error (list :db path)) 41 (rocksdb-destroy-db opt (namestring (uiop:ensure-directory-pathname path)) err) 42 (rocksdb-options-destroy opt))) 44 (defun get-property-raw (db str) 45 (rocksdb-property-value db (make-alien-string str))) 47 (defun get-metadata-raw (db &optional cf) 49 (rocksdb-get-column-family-metadata-cf db cf) 50 (rocksdb-get-column-family-metadata db))) 52 (defun flush-db-raw (db &optional (opts (rocksdb-flushoptions-create))) 53 (with-errptr (err 'flush-db-error (list :db db)) 54 (rocksdb-flush db opts err))) 56 (defun repair-db-raw (name &optional (opts (rocksdb-options-create))) 57 (with-errptr (err 'repair-db-error (list :name name)) 58 (rocksdb-repair-db opts name err))) 60 (defun ingest-db-raw (db files &optional (opts (rocksdb-ingestexternalfileoptions-create))) 61 (let ((flen (length files))) 62 (with-errptr (err 'ingest-db-error) 63 (with-alien ((flist (* c-string) (make-alien c-string flen))) 66 do (setf (deref flist i) (make-alien-string f :null-terminate nil))) 67 (rocksdb-ingest-external-file db flist flen opts err))))) 69 (defun ingest-db-cf-raw (db cf files &optional (opts (rocksdb-ingestexternalfileoptions-create))) 70 (let ((flen (length files))) 71 (with-errptr (err 'ingest-db-error) 72 (with-alien ((flist (* c-string) (make-alien c-string flen))) 75 do (setf (deref flist i) (make-alien-string f :null-terminate nil))) 76 (rocksdb-ingest-external-file-cf db cf flist flen opts err))))) 79 (defun put-kv-raw (db key val &optional (opts (rocksdb-writeoptions-create))) 80 (let ((klen (length key)) 82 (with-alien ((k (* unsigned-char) (make-alien unsigned-char klen)) 83 (v (* unsigned-char) (make-alien unsigned-char vlen))) 86 (with-errptr (err 'put-kv-error (list :db db :kv (cons key val))) 95 (defun put-kv-str-raw (db key val &optional (opts (rocksdb-writeoptions-create))) 96 (let ((key-octets (string-to-octets key :null-terminate nil)) 97 (val-octets (string-to-octets val :null-terminate nil))) 98 (put-kv-raw db key-octets val-octets opts))) 100 (defun get-kv-raw (db key &optional (opt (rocksdb-readoptions-create))) 101 (let ((klen (length key))) 102 (with-errptr (err 'get-kv-error (list :db db :key key)) 103 (with-alien ((vlen size-t) 104 (k (* unsigned-char) (make-alien unsigned-char klen))) 106 (let* ((val (rocksdb-get db 111 ;; helps if we know the vlen beforehand, would need a custom 112 ;; C-side function probably. 113 (let ((v (make-array vlen :element-type 'octet))) 114 (clone-octets-from-alien val v vlen) 115 (coerce v 'octet-vector))))))) 117 (defun get-kv-str-raw (db key &optional (opt (rocksdb-readoptions-create))) 118 (let ((k (string-to-octets key))) 119 (let ((v (get-kv-raw db k opt))) 120 (when v (octets-to-string v))))) 123 (defun open-cfs-raw (db-opt name names opts) 124 (let ((n (length names))) 125 (with-alien ((cf-names (* c-string) (clone-strings names)) 126 (cf-opts (* (* rocksdb-options))) 127 (cf-handles (* (* rocksdb-column-family-handle)))) 128 (loop for opt in opts 130 do (setf (deref cf-opts i) opt)) 131 (with-errptr (err 'rocksdb-cf-error (list :cf name)) 132 (let ((db (rocksdb-open-column-families db-opt name n cf-names cf-opts cf-handles err))) 133 (values db cf-handles)))))) 135 (defun create-cf-raw (db name &optional (opt (rocksdb-options-create))) 136 (with-errptr (err 'rocksdb-cf-error (list :db db :cf name)) 137 (rocksdb-create-column-family db opt name err))) 139 (defun destroy-cf-raw (cf) 140 (rocksdb-column-family-handle-destroy cf)) 142 (defun get-cf-raw (db cf key &optional (opt (rocksdb-readoptions-create))) 143 (let ((klen (length key))) 144 (with-errptr (err 'get-kv-error (list :db db :key key)) 145 (with-alien ((vlen (* size-t) (make-alien size-t 0)) 146 (k (* unsigned-char) (make-alien unsigned-char klen))) 148 (let* ((val (rocksdb-get-cf db 154 ;; helps if we know the vlen beforehand, would need a custom 155 ;; C-side function probably. 156 (let ((v (make-array (deref vlen) :element-type 'unsigned-byte))) 157 (clone-octets-from-alien val v (deref vlen)) 160 (defun get-cf-str-raw (db cf key &optional (opt (rocksdb-readoptions-create))) 161 (let ((k (string-to-octets key :null-terminate nil))) 162 (let ((v (get-cf-raw db cf k opt))) 163 (when v (concatenate 'string (map 'vector #'code-char v)))))) 165 (defun put-cf-raw (db cf key val &optional (opts (rocksdb-writeoptions-create))) 166 (let ((klen (length key)) 168 (with-errptr (err 'put-kv-error (list :db db :kv (cons key val))) 169 (with-alien ((k (* unsigned-char) (make-alien unsigned-char klen)) 170 (v (* unsigned-char) (make-alien unsigned-char vlen))) 180 (defun put-cf-str-raw (db cf key val &optional (opt (rocksdb-writeoptions-create))) 181 (let ((key-octets (string-to-octets key :null-terminate nil)) 182 (val-octets (string-to-octets val :null-terminate nil))) 183 (put-cf-raw db cf key-octets val-octets opt))) 185 (defun cf-name-raw (cf-handle) 186 (rocksdb-column-family-handle-get-name cf-handle (make-alien unsigned-long))) 188 (defun cf-id-raw (cf-handle) 189 (rocksdb-column-family-handle-get-id cf-handle)) 192 (defun create-iter-raw (db &optional (opt (rocksdb-readoptions-create))) 193 (rocksdb-create-iterator db opt)) 195 (defun create-cf-iter-raw (db cf &optional (opt (rocksdb-readoptions-create))) 196 (rocksdb-create-iterator-cf db opt cf)) 198 (defun destroy-iter-raw (iter) 199 (rocksdb-iter-destroy iter)) 201 (defun iter-key-raw (iter) 202 (with-alien ((klen-ptr (* size-t) (make-alien size-t 0))) 203 (let* ((key-ptr (rocksdb-iter-key iter klen-ptr)) 204 (klen (deref klen-ptr)) 205 (k (make-array klen :element-type '(unsigned-byte 8)))) 206 (clone-octets-from-alien key-ptr k klen) 209 (defun iter-key-str-raw (iter) 210 (when-let ((k (iter-key-raw iter))) 211 (octets-to-string k))) 213 (defun iter-val-raw (iter) 214 (with-alien ((vlen-ptr (* size-t) (make-alien size-t 0))) 215 (let* ((val-ptr (rocksdb-iter-value iter vlen-ptr)) 216 (vlen (deref vlen-ptr)) 217 (v (make-array vlen :element-type '(unsigned-byte 8)))) 218 (clone-octets-from-alien val-ptr v vlen) 221 (defun iter-val-str-raw (iter) 222 (when-let ((v (iter-val-raw iter))) 223 (octets-to-string v))) 226 (defun open-backup-engine-raw (be-path &optional (opts (rocksdb-options-create))) 227 (with-errptr (err 'open-backup-engine-error (list :db be-path)) 228 (let ((be-path (if (pathnamep be-path) 231 (rocksdb-backup-engine-open opts be-path err)))) 233 (defun close-backup-engine-raw (be) 234 (rocksdb-backup-engine-close be)) 236 (defun create-new-backup-raw (be db) 237 (with-errptr (err 'rocksdb-error) 238 (rocksdb-backup-engine-create-new-backup be db err))) 240 (defun restore-from-latest-backup-raw (be db-path backup-path &optional (opt (rocksdb-restore-options-create))) 241 (with-errptr (err 'rocksdb-error) 242 (rocksdb-backup-engine-restore-db-from-latest-backup be db-path backup-path opt err))) 244 (defun restore-from-backup-raw (be db-path backup-path backup-id &optional (opt (rocksdb-restore-options-create))) 245 (with-errptr (err 'rocksdb-error) 246 (rocksdb-backup-engine-restore-db-from-backup be db-path backup-path opt backup-id err))) 249 (defun create-snapshot-raw (db) 250 (rocksdb-create-snapshot db)) 252 (defun release-snapshot-raw (db snapshot) 253 (rocksdb-release-snapshot db snapshot)) 256 (defun create-sst-writer-raw (&optional (env-opts (rocksdb-envoptions-create)) (io-opts (rocksdb-options-create))) 257 (rocksdb-sstfilewriter-create env-opts io-opts)) 259 (defun create-sst-writer-with-comparator-raw (comparator 261 (env-opts (rocksdb-envoptions-create)) 262 (io-opts (rocksdb-options-create))) 263 (rocksdb-sstfilewriter-create-with-comparator env-opts io-opts comparator)) 265 (defun finish-sst-writer-raw (writer) 266 (with-errptr (err 'rocksdb-error) 267 (rocksdb-sstfilewriter-finish writer err))) 269 (defun destroy-sst-writer-raw (writer) 270 (rocksdb-sstfilewriter-destroy writer)) 272 (defun open-sst-writer-raw (writer name) 273 (with-errptr (err 'rocksdb-error) 274 (rocksdb-sstfilewriter-open writer name err))) 276 ;; this function is deprecated in the Java API: 277 ;; https://javadoc.io/doc/org.rocksdb/rocksdbjni/6.6.4/org/rocksdb/SstFileWriter.html 279 ;; (defun sst-add-raw (writer key val) 280 ;; (with-errptr (err 'rocksdb-error) 281 ;; (rocksdb-sstfilewriter-add writer key (length key) val (length val) err))) 283 (defun sst-put-raw (writer key val) 284 (let ((klen (length key)) 286 (with-errptr (err 'rocksdb-error) 287 (with-alien ((k (* unsigned-char) (make-alien unsigned-char klen)) 288 (v (* unsigned-char) (make-alien unsigned-char vlen))) 291 (rocksdb-sstfilewriter-put writer k klen v vlen err))))) 293 (defun sst-put-str-raw (writer key val) 294 (let ((key-octets (string-to-octets key :null-terminate nil)) 295 (val-octets (string-to-octets val :null-terminate nil))) 296 (sst-put-raw writer key-octets val-octets))) 298 (defun sst-put-ts-raw (writer key val ts) 299 (with-errptr (err 'rocksdb-error) 300 (rocksdb-sstfilewriter-put-with-ts writer key (length key) val (length val) ts (length ts) err))) 302 (defun sst-delete-raw (writer key) 303 (with-errptr (err 'rocksdb-error) 304 (rocksdb-sstfilewriter-delete writer key (length key) err))) 306 (defun sst-delete-ts-raw (writer key ts) 307 (with-errptr (err 'rocksdb-error) 308 (rocksdb-sstfilewriter-delete-with-ts writer key (length key) ts (length ts) err))) 310 (defun sst-delete-range-raw (writer start-key end-key) 311 (with-errptr (err 'rocksdb-error) 312 (rocksdb-sstfilewriter-delete-range writer start-key (length start-key) end-key (length end-key) err))) 314 (defun sst-file-size-raw (writer) 315 (with-errptr (err 'rocksdb-error) 316 (with-alien ((ret unsigned-long)) 317 (rocksdb-sstfilewriter-file-size writer (addr ret) err)