changeset 282: | da580c7fe954 |
parent: | 10faf95f90dd |
child: | 00d1c8afcdbb |
author: | Richard Westhaver <ellis@rwest.io> |
date: | Wed, 17 Apr 2024 22:53:44 -0400 |
permissions: | -rw-r--r-- |
description: | upgrades |
93 | 1 | (in-package :rdb) |
2 | ||
3 | ;;; rdb-opts |
|
94 | 4 | (defvar *rdb-opts-lookup-table* |
5 | (let ((table (make-hash-table :test #'equal))) |
|
6 | (mapc (lambda (x) (setf (gethash (car x) table) (cdr x))) |
|
7 | (loop for y across *rocksdb-options* |
|
225 | 8 | collect (cons y (format nil "~:@(rocksdb-options-set-~x~)" y)))) |
94 | 9 | table)) |
10 | ||
11 | (defun %set-rocksdb-option (opt key val) |
|
12 | (funcall (rdb-opt-setter key) opt val)) |
|
13 | ||
269 | 14 | (defun %get-rocksdb-option (opt key) |
15 | (if-let ((g (rdb-opt-getter key))) |
|
16 | (funcall g opt) |
|
17 | (warn 'opt-handler-missing :message key))) |
|
94 | 18 | |
282 | 19 | (defun opt-no-setter-p (k) |
20 | (let ((k (typecase k |
|
21 | (string (string-downcase k)) |
|
22 | (symbol (string-downcase (symbol-name k))) |
|
23 | (t (string-downcase (format nil "~s" k)))))) |
|
24 | (member t |
|
25 | (mapcar (lambda (x) (equal k x)) (list "parallelism" "enable-statistics"))))) |
|
26 | ||
94 | 27 | (defclass rdb-opts () |
102 | 28 | ((table :initarg :table :type hash-table :accessor rdb-opts-table) |
29 | (sap :initarg :sap :type (or null alien) :accessor rdb-opts-sap))) |
|
93 | 30 | |
112 | 31 | (defmethod initialize-instance ((self rdb-opts) &rest initargs &key &allow-other-keys) |
102 | 32 | (with-slots (sap table) self |
282 | 33 | ;; initialize slots - remember, initargs doesn't refer to slot |
34 | ;; names, they're opt names. |
|
102 | 35 | (unless (getf initargs :table) (setf table (make-hash-table :test #'equal))) |
94 | 36 | (unless (getf initargs :sap) (setf sap (rocksdb-options-create))) |
37 | (loop for (k v) on initargs by #'cddr while v |
|
38 | do (let ((k (typecase k |
|
39 | (string (string-downcase k)) |
|
40 | (symbol (string-downcase (symbol-name k))) |
|
102 | 41 | (t (string-downcase (format nil "~s" k)))))) |
94 | 42 | (set-opt self k v))) |
43 | self)) |
|
44 | ||
99 | 45 | (defun make-rdb-opts (&rest values) |
225 | 46 | (let ((opts (apply #'make-instance 'rdb-opts values))) |
47 | (push-sap* opts) |
|
48 | opts)) |
|
99 | 49 | |
94 | 50 | (defmethod get-opt ((self rdb-opts) key) |
51 | "Return the current value of KEY in SELF if found, else return nil." |
|
52 | (gethash key (rdb-opts-table self))) |
|
53 | ||
54 | (defmethod set-opt ((self rdb-opts) key val &key push) |
|
55 | "Set the VAL of KEY in SELF with '(setf (gethash SELF KEY) VAL)'." |
|
56 | (prog1 |
|
57 | (setf (gethash key (rdb-opts-table self)) val) |
|
58 | (when push (push-sap self key)))) |
|
59 | ||
60 | (defmethod push-sap ((self rdb-opts) key) |
|
61 | "Push KEY from slot :TABLE to the instance :SAP." |
|
102 | 62 | (%set-rocksdb-option (rdb-opts-sap self) key (get-opt self key))) |
267
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
63 | |
94 | 64 | (defmethod push-sap* ((self rdb-opts)) |
65 | "Initialized the SAP slot with values from TABLE." |
|
66 | (with-slots (table) self |
|
225 | 67 | (loop for k in (hash-table-keys table) |
282 | 68 | ;; note how we don't handle any special cases here - we can |
69 | ;; always set an opt but sometimes we can't get it. |
|
94 | 70 | do (push-sap self k)))) |
71 | ||
269 | 72 | (defmethod pull-sap ((self rdb-opts) key) |
73 | (setf (gethash key (rdb-opts-table self)) (%get-rocksdb-option (rdb-opts-sap self) key))) |
|
74 | ||
75 | (defmethod pull-sap* ((self rdb-opts)) |
|
76 | (with-slots (table) self |
|
77 | (loop for k in (hash-table-keys table) |
|
282 | 78 | unless (opt-no-setter-p k) |
79 | do (pull-sap self k)) |
|
269 | 80 | table)) |
81 | ||
82 | (defmethod backfill-opts ((self rdb-opts) &key full) |
|
83 | "Backfill the TABLE slot with values from SAP. |
|
84 | ||
85 | When FULL is non-nil, retrieve the full set of options available, not |
|
86 | just the keys currently present in TABLE." |
|
87 | (if full |
|
88 | (loop for k across *rocksdb-options* |
|
282 | 89 | unless (opt-no-setter-p k) |
269 | 90 | do (pull-sap self k)) |
91 | (pull-sap* self)) |
|
92 | (rdb-opts-table self)) |
|
93 | |
|
93 | 94 | (defun default-rdb-opts () |
282 | 95 | (make-rdb-opts :create-if-missing t :create-missing-column-families t |
96 | :parallelism (num-cpus))) |
|
93 | 97 | |
267
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
98 | (defclass rdb-kv () |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
99 | ((key :initarg :key :type octet-vector :accessor rdb-key) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
100 | (val :initarg :val :type octet-vector :accessor rdb-val))) |
94 | 101 | |
267
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
102 | (defmethod make-kv (key val) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
103 | (make-instance 'rdb-kv |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
104 | :key (make-key key) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
105 | :val (make-val val))) |
94 | 106 | |
267
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
107 | (defvar *default-rdb-kv* (make-kv #() #())) |
224 | 108 | |
273
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
109 | ;;; iterator |
282 | 110 | (defclass rdb-iter (sequence) |
111 | ((sap :initform nil :initarg :sap :type (or null alien) :accessor rdb-iter-sap))) |
|
112 | ||
113 | (defmethod iter-valid-p ((self rdb-iter)) |
|
114 | (rocksdb-iter-valid (rdb-iter-sap self))) |
|
115 | ||
116 | (defmethod iter-seek-to-first ((self rdb-iter)) |
|
117 | (rocksdb-iter-seek-to-first (rdb-iter-sap self))) |
|
118 | ||
119 | (defmethod iter-seek-to-last ((self rdb-iter)) |
|
120 | (rocksdb-iter-seek-to-last (rdb-iter-sap self))) |
|
121 | ||
122 | (defmethod iter-seek-for-prev ((self rdb-iter) (key vector) &key) |
|
123 | (rocksdb-iter-seek-for-prev (rdb-iter-sap self) key (length key))) |
|
124 | ||
125 | (defmethod iter-seek ((self rdb-iter) (key simple-vector) &key) |
|
126 | (rocksdb-iter-seek (rdb-iter-sap self) key (length key))) |
|
127 | ||
128 | (defmethod iter-next ((self rdb-iter)) |
|
129 | (rocksdb-iter-next (log:info! (rdb-iter-sap self)))) |
|
130 | ||
131 | (defmethod iter-prev ((self rdb-iter)) |
|
132 | (rocksdb-iter-prev (rdb-iter-sap self))) |
|
133 | ||
134 | (defmethod iter-key ((self rdb-iter)) |
|
135 | (with-alien ((klen size-t)) |
|
136 | (let ((key (rocksdb-iter-key (rdb-iter-sap self) (addr klen)))) |
|
137 | (let ((k (make-array klen :element-type 'octet))) |
|
138 | (clone-octets-from-alien key k klen) |
|
139 | (values |
|
140 | k |
|
141 | klen))))) |
|
142 | ||
143 | (defmethod iter-val ((self rdb-iter)) |
|
144 | (with-alien ((vlen size-t)) |
|
145 | (let ((val (rocksdb-iter-value (rdb-iter-sap self) (addr vlen)))) |
|
146 | (let ((v (make-array vlen :element-type 'octet))) |
|
147 | (clone-octets-from-alien val v vlen) |
|
148 | (values |
|
149 | v |
|
150 | vlen))))) |
|
151 | ||
152 | (defmethod iter-kv ((self rdb-iter)) |
|
153 | (make-kv (iter-key self) (iter-val self))) |
|
154 | ||
155 | (defmethod iter-timestamp ((self rdb-iter)) |
|
156 | (with-alien ((tslen size-t)) |
|
157 | (values |
|
158 | (rocksdb-iter-timestamp (rdb-iter-sap self) (addr tslen)) |
|
159 | tslen))) |
|
273
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
160 | |
226 | 161 | ;;; column family |
277
10faf95f90dd
stream and basic type upgrades. fixed some bugs and improved csv parsing
Richard Westhaver <ellis@rwest.io>
parents:
274
diff
changeset
|
162 | (defstruct (rdb-cf (:constructor make-rdb-cf (name &key #+nil kv sap))) |
94 | 163 | "RDB Column Family structure. Contains a name, a cons of (rdb-key-type |
164 | . rdb-val-type), and a system-area-pointer to the underlying |
|
165 | rocksdb_cf_t handle." |
|
93 | 166 | (name "" :type string) |
277
10faf95f90dd
stream and basic type upgrades. fixed some bugs and improved csv parsing
Richard Westhaver <ellis@rwest.io>
parents:
274
diff
changeset
|
167 | ;; (kv *default-rdb-kv* :type rdb-kv) |
93 | 168 | (sap nil :type (or null alien))) |
267
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
169 | |
273
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
170 | ;;; rdb-stats |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
171 | (defstruct (rdb-stats (:constructor make-rdb-stats (&optional sap))) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
172 | (sap nil :type (or null alien))) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
173 | |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
174 | ;;; metadata |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
175 | (defstruct rdb-cf-metadata |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
176 | (name "default" :type string) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
177 | (size 0 :type fixnum) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
178 | (level-count 7 :type fixnum) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
179 | (file-count 0 :type fixnum) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
180 | (sap nil :type (or null alien))) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
181 | |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
182 | (defmethod get-metadata ((self rdb-cf-metadata) &optional (level 0)) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
183 | (with-slots (sap) self |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
184 | (if (null sap) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
185 | (warn 'metadata-missing :message "ignoring attempt to pull fields from null sap.") |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
186 | (make-rdb-level-metadata :sap (rocksdb-column-family-metadata-get-level-metadata sap level))))) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
187 | |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
188 | (defmethod print-object ((self rdb-cf-metadata) stream) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
189 | (print-unreadable-object (self stream :type t) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
190 | (with-slots (name size level-count file-count) self |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
191 | (format stream "~A :size ~A :levels ~A :files ~A" name size level-count file-count)))) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
192 | |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
193 | (defmethod pull-sap* ((self rdb-cf-metadata)) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
194 | (with-slots (name size level-count file-count sap) self |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
195 | (if (null sap) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
196 | (warn 'metadata-missing :message "ignoring attempt to pull fields from null sap.") |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
197 | (setf name (rocksdb-column-family-metadata-get-name sap) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
198 | size (rocksdb-column-family-metadata-get-size sap) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
199 | level-count (rocksdb-column-family-metadata-get-level-count sap) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
200 | file-count (rocksdb-column-family-metadata-get-file-count sap))) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
201 | self)) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
202 | |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
203 | (defstruct rdb-level-metadata |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
204 | (level 0 :type fixnum) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
205 | (size 0 :type fixnum) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
206 | (file-count 0 :type fixnum) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
207 | (sap nil :type (or null alien))) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
208 | |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
209 | (defmethod get-metadata ((self rdb-level-metadata) &optional (file 0)) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
210 | (with-slots (sap) self |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
211 | (if (null sap) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
212 | (warn 'metadata-missing :message "ignoring attempt to pull fields from null sap.") |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
213 | (make-rdb-sst-file-metadata :sap (rocksdb-level-metadata-get-sst-file-metadata sap file))))) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
214 | |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
215 | (defmethod print-object ((self rdb-level-metadata) stream) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
216 | (print-unreadable-object (self stream :type t) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
217 | (with-slots (level size file-count) self |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
218 | (format stream "~A :size ~A :files ~A" level size file-count)))) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
219 | |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
220 | (defmethod pull-sap* ((self rdb-level-metadata)) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
221 | (with-slots (level size file-count sap) self |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
222 | (if (null sap) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
223 | (warn 'metadata-missing :message "ignoring attempt to pull fields from null sap.") |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
224 | (setf level (rocksdb-level-metadata-get-level sap) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
225 | size (rocksdb-level-metadata-get-size sap) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
226 | file-count (rocksdb-level-metadata-get-file-count sap))) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
227 | self)) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
228 | |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
229 | ;; NOTE: we only store the sizes of largest and smallest key, not the |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
230 | ;; keys themselves. This may change in the future. |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
231 | (defstruct rdb-sst-file-metadata |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
232 | (relative-filename "" :type string) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
233 | (directory "" :type string) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
234 | (size 0 :type fixnum) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
235 | (smallestkey 0 :type fixnum) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
236 | (largestkey 0 :type fixnum) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
237 | (sap nil :type (or null alien))) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
238 | |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
239 | (defmethod print-object ((self rdb-sst-file-metadata) stream) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
240 | (print-unreadable-object (self stream :type t) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
241 | (with-slots (relative-filename directory size smallestkey largestkey) self |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
242 | (format stream "~A :dir ~A :size ~A :smallest ~A :largest ~A" |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
243 | relative-filename directory size smallestkey largestkey)))) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
244 | |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
245 | (defmethod pull-sap* ((self rdb-sst-file-metadata)) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
246 | (with-slots (relative-filename directory size smallestkey largestkey sap) self |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
247 | (if (null sap) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
248 | (warn 'metadata-missing :message "ignoring attempt to pull fields from null sap.") |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
249 | (with-alien ((ssize size-t 0) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
250 | (lsize size-t 0)) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
251 | (rocksdb-sst-file-metadata-get-largestkey sap (addr lsize)) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
252 | (rocksdb-sst-file-metadata-get-smallestkey sap (addr ssize)) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
253 | (setf relative-filename (rocksdb-sst-file-metadata-get-relative-filename sap) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
254 | directory (rocksdb-sst-file-metadata-get-directory sap) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
255 | size (rocksdb-sst-file-metadata-get-size sap) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
256 | largestkey lsize |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
257 | smallestkey ssize))) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
258 | self)) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
259 | |
93 | 260 | ;;; rdb |
267
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
261 | (defstruct (rdb (:constructor make-rdb (name opts &optional cfs db))) |
93 | 262 | (name "" :type string) |
263 | (opts (default-rdb-opts) :type rdb-opts) |
|
100 | 264 | (cfs (make-array 0 :element-type 'rdb-cf :adjustable t :fill-pointer 0) :type (array rdb-cf)) |
272
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
265 | (db nil :type (or null alien)) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
266 | (backup nil :type (or null alien)) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
267 | (snapshots #() :type (array alien))) |
93 | 268 | |
277
10faf95f90dd
stream and basic type upgrades. fixed some bugs and improved csv parsing
Richard Westhaver <ellis@rwest.io>
parents:
274
diff
changeset
|
269 | (defvar *default-rdb-opts* (default-rdb-opts)) |
225 | 270 | |
267
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
271 | (defmethod print-object ((self rdb) stream) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
272 | (print-unreadable-object (self stream :type t :identity t) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
273 | (format stream ":cfs ~A" (length (rdb-cfs self))))) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
274 | |
225 | 275 | (defun create-db (name &key opts cfs open) |
226 | 276 | "Construct a new RDB instance from NAME. |
277 | ||
278 | OPTS = rdb-opts |
|
279 | CFS = (sequence rdb-cf) |
|
280 | OPEN = boolean |
|
281 | ||
282 | When OPEN is non-nil, the database and all column families are opened |
|
283 | and internal sap slots are initialized." |
|
224 | 284 | (when (probe-file name) (log:warn! "directory already exists: " name)) |
225 | 285 | (let* ((opts (or opts (default-rdb-opts))) |
286 | (obj |
|
267
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
287 | (make-rdb (string-right-trim '(#\/) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
288 | (typecase name |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
289 | (pathname (namestring name)) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
290 | (string name) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
291 | (t (error "invalid NAME: ~S" name)))) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
292 | opts |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
293 | (or (when cfs |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
294 | (typecase cfs |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
295 | (list (coerce cfs 'vector)) |
272
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
296 | ((array rdb-cf) cfs) |
267
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
297 | (rdb-cf (vector cfs)) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
298 | (t (log:warn! "invalid CF passed to create-db")))) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
299 | (make-array 0 :element-type 'rdb-cf :fill-pointer 0))))) |
225 | 300 | (when open |
273
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
301 | (open-db obj)) |
225 | 302 | obj)) |
99 | 303 | |
282 | 304 | (defmethod backfill-opts ((self rdb) &key full) |
305 | (with-slots (opts) self |
|
306 | (if full |
|
307 | (loop for k across *rocksdb-options* |
|
308 | unless (opt-no-setter-p k) |
|
309 | do (pull-sap opts k)) |
|
310 | (pull-sap* opts)) |
|
311 | (rdb-opts-table opts))) |
|
312 | ||
93 | 313 | (defmethod push-cf ((cf rdb-cf) (db rdb)) |
314 | (vector-push cf (rdb-cfs db))) |
|
315 | ||
225 | 316 | ;; TODO: fix |
317 | (defmethod create-cf ((db rdb) (cf rdb-cf)) |
|
318 | (setf (rdb-cf-sap cf) |
|
272
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
319 | (create-cf-raw (rdb-db db) (rdb-cf-name cf) (rdb-opts-sap (rdb-opts db))))) |
93 | 320 | |
272
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
321 | (defmacro unless-null-db (slots self &body body) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
322 | `(with-slots (db ,@slots) ,self |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
323 | (unless (null db) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
324 | ,@body))) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
325 | |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
326 | (defmethod destroy-cf ((cf rdb-cf)) |
225 | 327 | (with-slots (sap) cf |
267
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
328 | (unless (null sap) |
272
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
329 | (setf sap (destroy-cf-raw sap))))) |
225 | 330 | |
273
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
331 | (defmethod set-opt ((self rdb) key val &key push) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
332 | (with-slots (opts) self |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
333 | (set-opt opts key val :push push))) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
334 | |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
335 | (defmethod get-opt ((self rdb) key) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
336 | (with-slots (opts) self |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
337 | (get-opt opts key))) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
338 | |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
339 | (defmethod push-opts ((self rdb)) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
340 | (with-slots (opts) self |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
341 | (push-sap* opts))) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
342 | |
225 | 343 | (defmethod open-db ((self rdb)) |
344 | (with-slots (name db opts) self |
|
272
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
345 | (if db |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
346 | (rdb-error "DB already opened - close before re-opening") |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
347 | (setf db (open-db-raw name (rdb-opts-sap opts)))))) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
348 | |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
349 | (defmethod get-prop ((self rdb) (propname string)) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
350 | (unless-null-db () self |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
351 | (get-property-raw db propname))) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
352 | |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
353 | (defmethod repair-db ((self rdb) &key) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
354 | (repair-db-raw (rdb-name self))) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
355 | |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
356 | (defmethod open-backup-db ((self rdb) &key path) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
357 | (with-slots (opts) self |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
358 | (setf (rdb-backup self) (open-backup-engine-raw path (rdb-opts-sap opts))))) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
359 | |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
360 | (defmethod close-backup-db ((self rdb)) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
361 | (with-slots (backup) self |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
362 | (unless (null backup) |
274
5f782d361e08
threads and db tweaks. fixed a tricky macro error caused by string-case, dat/html now works.
Richard Westhaver <ellis@rwest.io>
parents:
273
diff
changeset
|
363 | (setf backup (close-backup-engine-raw backup))))) |
272
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
364 | |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
365 | (defmethod backup-db ((self rdb) &key path) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
366 | (unless-null-db (opts backup) self |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
367 | (when (null backup) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
368 | (if (null path) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
369 | (error 'open-backup-engine-error :db db) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
370 | (open-backup-db self :path path))) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
371 | (create-new-backup-raw backup db))) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
372 | |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
373 | (defmethod restore-db ((self rdb) (from string) &key id opts) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
374 | (unless-null-db (name backup) self |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
375 | (when (null backup) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
376 | (open-backup-db self :path from)) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
377 | (restore-from-backup-raw backup name from id opts))) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
378 | |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
379 | (defmethod snapshot-db ((self rdb)) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
380 | (unless-null-db (snapshots) self |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
381 | (vector-push-extend (create-snapshot-raw db) snapshots))) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
382 | |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
383 | (defmethod get-metadata ((self rdb) &optional cf) |
273
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
384 | (make-rdb-cf-metadata :sap (get-metadata-raw (rdb-db self) cf))) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
385 | |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
386 | (defmethod get-stats ((self rdb) &optional (htype (rocksdb-statistics-level "all"))) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
387 | (make-rdb-stats (get-stats-raw (rdb-opts-sap (rdb-opts self)) htype))) |
272
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
388 | |
273
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
389 | (defmethod create-iter ((self rdb) &optional cf (opts (rocksdb-readoptions-create))) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
390 | (unless-null-db () self |
282 | 391 | (make-instance 'rdb-iter :sap (if cf |
392 | (create-cf-iter-raw db cf opts) |
|
393 | (create-iter-raw db opts))))) |
|
273
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
394 | |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
395 | (defmethod print-stats ((self rdb) &optional stream) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
396 | (print (rocksdb-options-statistics-get-string (rdb-opts-sap (rdb-opts self))) stream)) |
272
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
397 | |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
398 | (defmethod flush-db ((self rdb) &key) ;; todo flushopts |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
399 | (flush-db-raw (rdb-db self))) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
400 | |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
401 | (defmethod sync-db ((self rdb) (other null) &key) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
402 | (flush-db self)) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
403 | |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
404 | (defmethod shutdown-db ((self rdb) &key wait) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
405 | (log:debug! "shutting down database" (rdb-name self)) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
406 | (when-let ((db (rdb-db self))) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
407 | (rocksdb-cancel-all-background-work db wait) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
408 | (close-db self))) |
93 | 409 | |
225 | 410 | (defmethod create-cfs ((self rdb) &key &allow-other-keys) |
273
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
411 | (if (null (rdb-db self)) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
412 | (warn 'db-missing :message "ignoring attempt to create column-families before opening") |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
413 | (loop for cf across (rdb-cfs self) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
414 | do (create-cf self cf)))) |
93 | 415 | |
272
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
416 | (defmethod destroy-cfs ((self rdb) &key &allow-other-keys) |
226 | 417 | (with-slots (cfs) self |
418 | (declare (type (array rdb-cf) cfs)) |
|
419 | (loop for cf across cfs |
|
272
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
420 | do (setf cf (destroy-cf cf))))) |
225 | 421 | |
422 | (defmethod close-db ((self rdb) &key &allow-other-keys) |
|
272
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
423 | (with-slots (db cfs backup snapshots) self |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
424 | (close-backup-db self) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
425 | (unless (zerop (length snapshots)) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
426 | (loop for s across snapshots do (release-snapshot-raw db s))) |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
427 | (destroy-cfs self) |
225 | 428 | (unless (null db) |
274
5f782d361e08
threads and db tweaks. fixed a tricky macro error caused by string-case, dat/html now works.
Richard Westhaver <ellis@rwest.io>
parents:
273
diff
changeset
|
429 | (setf db (close-db-raw db))))) |
225 | 430 | |
267
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
431 | (defmethod destroy-db ((self rdb)) |
272
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
432 | ;; close all handles before destruction ensues |
0a5e37693fdf
db protocol stuff, prep for tao, tests, with-temp-db
Richard Westhaver <ellis@rwest.io>
parents:
269
diff
changeset
|
433 | (close-db self) |
267
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
434 | (destroy-db-raw (rdb-name self))) |
225 | 435 | |
226 | 436 | (defmethod put-key ((self rdb) key val) |
437 | (put-kv-raw |
|
438 | (rdb-db self) |
|
439 | key |
|
440 | val)) |
|
441 | ||
442 | (defmethod put-kv ((self rdb) (kv rdb-kv)) |
|
443 | (put-kv-raw |
|
444 | (rdb-db self) |
|
445 | (rdb-key kv) |
|
446 | (rdb-val kv))) |
|
447 | ||
94 | 448 | (defmethod insert-key ((self rdb) key val &key cf) |
93 | 449 | (if cf |
267
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
450 | (put-cf-raw |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
451 | (rdb-db self) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
452 | (rdb-cf-sap (find cf (rdb-cfs self) :key #'rdb-cf-name :test #'equal)) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
453 | key |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
454 | val) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
455 | (put-key self key val))) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
456 | |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
457 | (defmethod insert-key ((self rdb) (key string) (val string) &key cf) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
458 | (insert-key self (string-to-octets key) (string-to-octets val) :cf cf)) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
459 | |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
460 | (defmethod insert-key ((self rdb) (key string) val &key cf) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
461 | (insert-key self (string-to-octets key) val :cf cf)) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
462 | |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
463 | (defmethod insert-key ((self rdb) key (val string) &key cf) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
464 | (insert-key self key (string-to-octets val) :cf cf)) |
225 | 465 | |
282 | 466 | (defmethod insert-kv ((self rdb) (kv rdb-kv) &key cf opts) |
226 | 467 | (if cf |
282 | 468 | (let ((cf (etypecase cf |
469 | (rdb-cf cf) |
|
470 | (t (find cf (rdb-cfs self) |
|
471 | :key #'rdb-cf-name |
|
472 | :test #'string=))))) |
|
473 | (put-cf-raw (rdb-db self) |
|
474 | (rdb-cf-sap cf) |
|
475 | (rdb-key kv) |
|
476 | (rdb-val kv) |
|
477 | opts)) |
|
226 | 478 | (put-kv self kv))) |
267
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
479 | |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
480 | (defmethod get-key ((self rdb) (key string) &key (opts (rocksdb-readoptions-create)) cf) |
f3d814fb136a
db upgrades, alik, ignoring c files (for now)
Richard Westhaver <ellis@rwest.io>
parents:
230
diff
changeset
|
481 | (with-slots (db) self |
273
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
482 | (if cf |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
483 | (get-cf-str-raw db cf key opts) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
484 | (get-kv-str-raw db key opts)))) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
485 | |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
486 | (defmethod get-key ((self rdb) key &key (opts (rocksdb-readoptions-create)) cf) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
487 | (with-slots (db) self |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
488 | (if cf |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
489 | (get-cf-raw db cf key opts) |
6d56c4950fa2
rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents:
272
diff
changeset
|
490 | (get-kv-raw db key opts)))) |