Mercurial > core / lisp/lib/rdb/raw.lisp
changeset 624: |
97dd03beda03 |
parent: |
e2e5c4831389
|
child: |
5f88b237ce29 |
author: |
Richard Westhaver <ellis@rwest.io> |
date: |
Sun, 25 Aug 2024 20:28:57 -0400 |
permissions: |
-rw-r--r-- |
description: |
rocksdb updates in coordination with infra/scripts/org-graph-db-init.lisp |
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 get-stats-raw (opt htype) 20 (with-alien ((hist (* rocksdb-statistics-histogram-data) (rocksdb-statistics-histogram-data-create))) 21 (rocksdb-options-statistics-get-histogram-data opt htype hist) 25 (defun open-db-raw (db-path &optional (opts (default-rocksdb-options))) 26 (with-errptr (err 'open-db-error (list :db db-path)) 27 (let* ((db-path (if (pathnamep db-path) 30 (rocksdb-open opts db-path err)))) 32 (defun close-db-raw (db) 35 (defun destroy-db-raw (path &optional (opt (rocksdb-options-create))) 36 (with-errptr (err 'destroy-db-error (list :db path)) 37 (rocksdb-destroy-db opt (namestring (uiop:ensure-directory-pathname path)) err) 38 (rocksdb-options-destroy opt))) 40 (defun get-property-raw (db str) 41 (rocksdb-property-value db (make-alien-string str))) 43 (defun get-metadata-raw (db &optional cf) 45 (rocksdb-get-column-family-metadata-cf db cf) 46 (rocksdb-get-column-family-metadata db))) 48 (defun flush-db-raw (db &optional (opts (rocksdb-flushoptions-create))) 49 (with-errptr (err 'flush-db-error (list :db db)) 50 (rocksdb-flush db opts err))) 52 (defun repair-db-raw (name &optional (opts (rocksdb-options-create))) 53 (with-errptr (err 'repair-db-error (list :name name)) 54 (rocksdb-repair-db opts name err))) 56 (defun ingest-db-raw (db files &optional (opts (rocksdb-ingestexternalfileoptions-create))) 57 (let ((flen (length files))) 58 (with-errptr (err 'ingest-db-error) 59 (with-alien ((flist (* c-string) (make-alien c-string flen))) 62 do (setf (deref flist i) (make-alien-string f :null-terminate nil))) 63 (rocksdb-ingest-external-file db flist flen opts err))))) 65 (defun ingest-db-cf-raw (db cf files &optional (opts (rocksdb-ingestexternalfileoptions-create))) 66 (let ((flen (length files))) 67 (with-errptr (err 'ingest-db-error) 68 (with-alien ((flist (* c-string) (make-alien c-string flen))) 71 do (setf (deref flist i) (make-alien-string f :null-terminate nil))) 72 (rocksdb-ingest-external-file-cf db cf flist flen opts err))))) 75 (defun put-kv-raw (db key val &optional (opts (rocksdb-writeoptions-create))) 76 (let ((klen (length key)) 78 (with-alien ((k (* unsigned-char) (make-alien unsigned-char klen)) 79 (v (* unsigned-char) (make-alien unsigned-char vlen))) 82 (with-errptr (err 'put-kv-error (list :db db :kv (cons key val))) 91 (defun put-kv-str-raw (db key val &optional (opts (rocksdb-writeoptions-create))) 92 (let ((key-octets (string-to-octets key :null-terminate nil)) 93 (val-octets (string-to-octets val :null-terminate nil))) 94 (put-kv-raw db key-octets val-octets opts))) 96 (defun get-kv-raw (db key &optional (opt (rocksdb-readoptions-create))) 97 (let ((klen (length key))) 98 (with-errptr (err 'get-kv-error (list :db db :key key)) 99 (with-alien ((vlen size-t) 100 (k (* unsigned-char) (make-alien unsigned-char klen))) 102 (let* ((val (rocksdb-get db 107 ;; helps if we know the vlen beforehand, would need a custom 108 ;; C-side function probably. 109 (let ((v (make-array vlen :element-type 'octet))) 110 (clone-octets-from-alien val v vlen) 111 (coerce v 'octet-vector))))))) 113 (defun get-kv-str-raw (db key &optional (opt (rocksdb-readoptions-create))) 114 (let ((k (string-to-octets key))) 115 (let ((v (get-kv-raw db k opt))) 116 (when v (octets-to-string v))))) 119 (defun open-cf-raw (db name &optional (opt (rocksdb-options-create))) 120 (with-errptr (err 'rocksdb-cf-error (list :db db :cf name)) 121 (rocksdb-open-column-families opt name 1 nil nil nil err))) 123 (defun create-cf-raw (db name &optional (opt (rocksdb-options-create))) 124 (with-errptr (err 'rocksdb-cf-error (list :db db :cf name)) 125 (rocksdb-create-column-family db opt name err))) 127 (defun destroy-cf-raw (cf) 128 (rocksdb-column-family-handle-destroy cf)) 130 (defun get-cf-raw (db cf key &optional (opt (rocksdb-readoptions-create))) 131 (let ((klen (length key))) 132 (with-errptr (err 'get-kv-error (list :db db :key key)) 133 (with-alien ((vlen (* size-t) (make-alien size-t 0)) 134 (k (* unsigned-char) (make-alien unsigned-char klen))) 136 (let* ((val (rocksdb-get-cf db 142 ;; helps if we know the vlen beforehand, would need a custom 143 ;; C-side function probably. 144 (let ((v (make-array (deref vlen) :element-type 'unsigned-byte))) 145 (clone-octets-from-alien val v (deref vlen)) 148 (defun get-cf-str-raw (db cf key &optional (opt (rocksdb-readoptions-create))) 149 (let ((k (string-to-octets key :null-terminate nil))) 150 (let ((v (get-cf-raw db cf k opt))) 151 (when v (concatenate 'string (map 'vector #'code-char v)))))) 153 (defun put-cf-raw (db cf key val &optional (opts (rocksdb-writeoptions-create))) 154 (let ((klen (length key)) 156 (with-errptr (err 'put-kv-error (list :db db :kv (cons key val))) 157 (with-alien ((k (* unsigned-char) (make-alien unsigned-char klen)) 158 (v (* unsigned-char) (make-alien unsigned-char vlen))) 168 (defun put-cf-str-raw (db cf key val &optional (opt (rocksdb-writeoptions-create))) 169 (let ((key-octets (string-to-octets key :null-terminate nil)) 170 (val-octets (string-to-octets val :null-terminate nil))) 171 (put-cf-raw db cf key-octets val-octets opt))) 174 (defun create-iter-raw (db &optional (opt (rocksdb-readoptions-create))) 175 (rocksdb-create-iterator db opt)) 177 (defun create-cf-iter-raw (db cf &optional (opt (rocksdb-readoptions-create))) 178 (rocksdb-create-iterator-cf db opt cf)) 180 (defun destroy-iter-raw (iter) 181 (rocksdb-iter-destroy iter)) 183 (defun iter-key-raw (iter) 184 (with-alien ((klen-ptr (* size-t) (make-alien size-t 0))) 185 (let* ((key-ptr (rocksdb-iter-key iter klen-ptr)) 186 (klen (deref klen-ptr)) 187 (k (make-array klen :element-type '(unsigned-byte 8)))) 188 (clone-octets-from-alien key-ptr k klen) 191 (defun iter-key-str-raw (iter) 192 (when-let ((k (iter-key-raw iter))) 193 (octets-to-string k))) 195 (defun iter-val-raw (iter) 196 (with-alien ((vlen-ptr (* size-t) (make-alien size-t 0))) 197 (let* ((val-ptr (rocksdb-iter-value iter vlen-ptr)) 198 (vlen (deref vlen-ptr)) 199 (v (make-array vlen :element-type '(unsigned-byte 8)))) 200 (clone-octets-from-alien val-ptr v vlen) 203 (defun iter-val-str-raw (iter) 204 (when-let ((v (iter-val-raw iter))) 205 (octets-to-string v))) 208 (defun open-backup-engine-raw (be-path &optional (opts (rocksdb-options-create))) 209 (with-errptr (err 'open-backup-engine-error (list :db be-path)) 210 (let ((be-path (if (pathnamep be-path) 213 (rocksdb-backup-engine-open opts be-path err)))) 215 (defun close-backup-engine-raw (be) 216 (rocksdb-backup-engine-close be)) 218 (defun create-new-backup-raw (be db) 219 (with-errptr (err 'rocksdb-error) 220 (rocksdb-backup-engine-create-new-backup be db err))) 222 (defun restore-from-latest-backup-raw (be db-path backup-path &optional (opt (rocksdb-restore-options-create))) 223 (with-errptr (err 'rocksdb-error) 224 (rocksdb-backup-engine-restore-db-from-latest-backup be db-path backup-path opt err))) 226 (defun restore-from-backup-raw (be db-path backup-path backup-id &optional (opt (rocksdb-restore-options-create))) 227 (with-errptr (err 'rocksdb-error) 228 (rocksdb-backup-engine-restore-db-from-backup be db-path backup-path opt backup-id err))) 231 (defun create-snapshot-raw (db) 232 (rocksdb-create-snapshot db)) 234 (defun release-snapshot-raw (db snapshot) 235 (rocksdb-release-snapshot db snapshot)) 238 (defun create-sst-writer-raw (&optional (env-opts (rocksdb-envoptions-create)) (io-opts (rocksdb-options-create))) 239 (rocksdb-sstfilewriter-create env-opts io-opts)) 241 (defun create-sst-writer-with-comparator-raw (comparator 243 (env-opts (rocksdb-envoptions-create)) 244 (io-opts (rocksdb-options-create))) 245 (rocksdb-sstfilewriter-create-with-comparator env-opts io-opts comparator)) 247 (defun finish-sst-writer-raw (writer) 248 (with-errptr (err 'rocksdb-error) 249 (rocksdb-sstfilewriter-finish writer err))) 251 (defun destroy-sst-writer-raw (writer) 252 (rocksdb-sstfilewriter-destroy writer)) 254 (defun open-sst-writer-raw (writer name) 255 (with-errptr (err 'rocksdb-error) 256 (rocksdb-sstfilewriter-open writer name err))) 258 ;; this function is deprecated in the Java API: 259 ;; https://javadoc.io/doc/org.rocksdb/rocksdbjni/6.6.4/org/rocksdb/SstFileWriter.html 261 ;; (defun sst-add-raw (writer key val) 262 ;; (with-errptr (err 'rocksdb-error) 263 ;; (rocksdb-sstfilewriter-add writer key (length key) val (length val) err))) 265 (defun sst-put-raw (writer key val) 266 (let ((klen (length key)) 268 (with-errptr (err 'rocksdb-error) 269 (with-alien ((k (* unsigned-char) (make-alien unsigned-char klen)) 270 (v (* unsigned-char) (make-alien unsigned-char vlen))) 273 (rocksdb-sstfilewriter-put writer k klen v vlen err))))) 275 (defun sst-put-str-raw (writer key val) 276 (let ((key-octets (string-to-octets key :null-terminate nil)) 277 (val-octets (string-to-octets val :null-terminate nil))) 278 (sst-put-raw writer key-octets val-octets))) 280 (defun sst-put-ts-raw (writer key val ts) 281 (with-errptr (err 'rocksdb-error) 282 (rocksdb-sstfilewriter-put-with-ts writer key (length key) val (length val) ts (length ts) err))) 284 (defun sst-delete-raw (writer key) 285 (with-errptr (err 'rocksdb-error) 286 (rocksdb-sstfilewriter-delete writer key (length key) err))) 288 (defun sst-delete-ts-raw (writer key ts) 289 (with-errptr (err 'rocksdb-error) 290 (rocksdb-sstfilewriter-delete-with-ts writer key (length key) ts (length ts) err))) 292 (defun sst-delete-range-raw (writer start-key end-key) 293 (with-errptr (err 'rocksdb-error) 294 (rocksdb-sstfilewriter-delete-range writer start-key (length start-key) end-key (length end-key) err))) 296 (defun sst-file-size-raw (writer) 297 (with-errptr (err 'rocksdb-error) 298 (with-alien ((ret unsigned-long)) 299 (rocksdb-sstfilewriter-file-size writer (addr ret) err)