changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate lisp/lib/rdb/obj.lisp

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
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
1
 (in-package :rdb)
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
2
 
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
3
 ;;; rdb-opts
94
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
4
 (defvar *rdb-opts-lookup-table*
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
5
   (let ((table (make-hash-table :test #'equal)))
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
6
     (mapc (lambda (x) (setf (gethash (car x) table) (cdr x)))
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
7
           (loop for y across *rocksdb-options*
225
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
8
                 collect (cons y (format nil "~:@(rocksdb-options-set-~x~)" y))))
94
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
9
     table))
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
10
 
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
11
 (defun %set-rocksdb-option (opt key val)
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
12
   (funcall (rdb-opt-setter key) opt val))
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
13
 
269
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
14
 (defun %get-rocksdb-option (opt key)
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
15
   (if-let ((g (rdb-opt-getter key)))
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
16
     (funcall g opt)
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
17
     (warn 'opt-handler-missing :message key)))
94
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
18
 
282
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
19
 (defun opt-no-setter-p (k)
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
20
   (let ((k (typecase k
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
21
              (string (string-downcase k))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
22
              (symbol (string-downcase (symbol-name k)))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
23
              (t (string-downcase (format nil "~s" k))))))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
24
     (member t
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
25
             (mapcar (lambda (x) (equal k x)) (list "parallelism" "enable-statistics")))))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
26
 
94
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
27
 (defclass rdb-opts ()
102
db52ddb25d7f progress
ellis <ellis@rwest.io>
parents: 100
diff changeset
28
   ((table :initarg :table :type hash-table :accessor rdb-opts-table)
db52ddb25d7f progress
ellis <ellis@rwest.io>
parents: 100
diff changeset
29
    (sap :initarg :sap :type (or null alien) :accessor rdb-opts-sap)))
93
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
30
 
112
430e69339ac3 fixed rdb tests
ellis <ellis@rwest.io>
parents: 111
diff changeset
31
 (defmethod initialize-instance ((self rdb-opts) &rest initargs &key &allow-other-keys)
102
db52ddb25d7f progress
ellis <ellis@rwest.io>
parents: 100
diff changeset
32
   (with-slots (sap table) self
282
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
33
     ;; initialize slots - remember, initargs doesn't refer to slot
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
34
     ;; names, they're opt names.
102
db52ddb25d7f progress
ellis <ellis@rwest.io>
parents: 100
diff changeset
35
     (unless (getf initargs :table) (setf table (make-hash-table :test #'equal)))
94
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
36
     (unless (getf initargs :sap) (setf sap (rocksdb-options-create)))
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
37
     (loop for (k v) on initargs by #'cddr while v
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
38
           do (let ((k (typecase k
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
39
                         (string (string-downcase k))
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
40
                         (symbol (string-downcase (symbol-name k)))
102
db52ddb25d7f progress
ellis <ellis@rwest.io>
parents: 100
diff changeset
41
                         (t (string-downcase (format nil "~s" k))))))
94
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
42
                (set-opt self k v)))
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
43
     self))
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
44
 
99
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 97
diff changeset
45
 (defun make-rdb-opts (&rest values)
225
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
46
   (let ((opts (apply #'make-instance 'rdb-opts values)))
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
47
     (push-sap* opts)
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
48
     opts))
99
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 97
diff changeset
49
 
94
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
50
 (defmethod get-opt ((self rdb-opts) key)
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
51
   "Return the current value of KEY in SELF if found, else return nil."
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
52
   (gethash key (rdb-opts-table self)))
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
53
 
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
54
 (defmethod set-opt ((self rdb-opts) key val &key push)
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
55
   "Set the VAL of KEY in SELF with '(setf (gethash SELF KEY) VAL)'."
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
56
   (prog1
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
57
       (setf (gethash key (rdb-opts-table self)) val)
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
58
     (when push (push-sap self key))))
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
59
 
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
60
 (defmethod push-sap ((self rdb-opts) key)
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
61
   "Push KEY from slot :TABLE to the instance :SAP."
102
db52ddb25d7f progress
ellis <ellis@rwest.io>
parents: 100
diff changeset
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
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
64
 (defmethod push-sap* ((self rdb-opts))
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
65
   "Initialized the SAP slot with values from TABLE."
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
66
   (with-slots (table) self
225
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
67
     (loop for k in (hash-table-keys table)
282
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
68
           ;; note how we don't handle any special cases here - we can
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
69
           ;; always set an opt but sometimes we can't get it.
94
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
70
           do (push-sap self k))))
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
71
 
269
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
72
 (defmethod pull-sap ((self rdb-opts) key)
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
73
   (setf (gethash key (rdb-opts-table self)) (%get-rocksdb-option (rdb-opts-sap self) key)))
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
74
 
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
75
 (defmethod pull-sap* ((self rdb-opts))
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
76
   (with-slots (table) self
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
77
     (loop for k in (hash-table-keys table)
282
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
78
           unless (opt-no-setter-p k)
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
79
             do (pull-sap self k))
269
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
80
     table))
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
81
 
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
82
 (defmethod backfill-opts ((self rdb-opts) &key full)
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
83
   "Backfill the TABLE slot with values from SAP.
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
84
 
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
85
 When FULL is non-nil, retrieve the full set of options available, not
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
86
 just the keys currently present in TABLE."
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
87
   (if full
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
88
       (loop for k across *rocksdb-options*
282
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
89
             unless (opt-no-setter-p k)
269
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
90
             do (pull-sap self k))
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
91
       (pull-sap* self))
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
92
   (rdb-opts-table self))
87f503c7a365 more rocksdb
Richard Westhaver <ellis@rwest.io>
parents: 267
diff changeset
93
     
93
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
94
 (defun default-rdb-opts () 
282
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
95
   (make-rdb-opts :create-if-missing t :create-missing-column-families t
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
96
                  :parallelism (num-cpus)))
93
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
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
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
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
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
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
fdea20982c25 deferror
Richard Westhaver <ellis@rwest.io>
parents: 214
diff changeset
108
 
273
6d56c4950fa2 rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents: 272
diff changeset
109
 ;;; iterator
282
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
110
 (defclass rdb-iter (sequence)
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
111
   ((sap :initform nil :initarg :sap :type (or null alien) :accessor rdb-iter-sap)))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
112
 
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
113
 (defmethod iter-valid-p ((self rdb-iter))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
114
   (rocksdb-iter-valid (rdb-iter-sap self)))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
115
 
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
116
 (defmethod iter-seek-to-first ((self rdb-iter))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
117
   (rocksdb-iter-seek-to-first (rdb-iter-sap self))) 
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
118
 
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
119
 (defmethod iter-seek-to-last ((self rdb-iter))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
120
   (rocksdb-iter-seek-to-last (rdb-iter-sap self)))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
121
 
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
122
 (defmethod iter-seek-for-prev ((self rdb-iter) (key vector) &key)
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
123
   (rocksdb-iter-seek-for-prev (rdb-iter-sap self) key (length key)))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
124
 
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
125
 (defmethod iter-seek ((self rdb-iter) (key simple-vector) &key)
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
126
   (rocksdb-iter-seek (rdb-iter-sap self) key (length key)))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
127
 
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
128
 (defmethod iter-next ((self rdb-iter))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
129
   (rocksdb-iter-next (log:info! (rdb-iter-sap self))))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
130
 
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
131
 (defmethod iter-prev ((self rdb-iter))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
132
   (rocksdb-iter-prev (rdb-iter-sap self)))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
133
 
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
134
 (defmethod iter-key ((self rdb-iter))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
135
   (with-alien ((klen size-t))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
136
     (let ((key (rocksdb-iter-key (rdb-iter-sap self) (addr klen))))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
137
       (let ((k (make-array klen :element-type 'octet)))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
138
         (clone-octets-from-alien key k klen)
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
139
         (values
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
140
          k
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
141
          klen)))))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
142
 
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
143
 (defmethod iter-val ((self rdb-iter))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
144
   (with-alien ((vlen size-t))     
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
145
     (let ((val (rocksdb-iter-value (rdb-iter-sap self) (addr vlen))))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
146
       (let ((v (make-array vlen :element-type 'octet)))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
147
         (clone-octets-from-alien val v vlen)
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
148
         (values
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
149
          v
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
150
          vlen)))))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
151
 
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
152
 (defmethod iter-kv ((self rdb-iter))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
153
   (make-kv (iter-key self) (iter-val self)))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
154
 
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
155
 (defmethod iter-timestamp ((self rdb-iter))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
156
   (with-alien ((tslen size-t))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
157
     (values
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
158
      (rocksdb-iter-timestamp (rdb-iter-sap self) (addr tslen))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
159
      tslen)))
273
6d56c4950fa2 rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents: 272
diff changeset
160
 
226
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
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
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
163
   "RDB Column Family structure. Contains a name, a cons of (rdb-key-type
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
164
 . rdb-val-type), and a system-area-pointer to the underlying
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
165
 rocksdb_cf_t handle."
93
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
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
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
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
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
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
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
262
   (name "" :type string)
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
263
   (opts (default-rdb-opts) :type rdb-opts)
100
9c535e6b3d99 getting closer
ellis <ellis@rwest.io>
parents: 99
diff changeset
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
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
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
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
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
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
275
 (defun create-db (name &key opts cfs open)
226
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
276
   "Construct a new RDB instance from NAME.
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
277
 
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
278
 OPTS = rdb-opts
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
279
 CFS = (sequence rdb-cf)
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
280
 OPEN = boolean
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
281
 
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
282
 When OPEN is non-nil, the database and all column families are opened
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
283
 and internal sap slots are initialized."
224
fdea20982c25 deferror
Richard Westhaver <ellis@rwest.io>
parents: 214
diff changeset
284
   (when (probe-file name) (log:warn! "directory already exists: " name))
225
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
285
   (let* ((opts (or opts (default-rdb-opts)))
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
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
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
300
     (when open
273
6d56c4950fa2 rocksdb iter,metadata,and more
Richard Westhaver <ellis@rwest.io>
parents: 272
diff changeset
301
       (open-db obj))
225
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
302
     obj))
99
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 97
diff changeset
303
 
282
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
304
 (defmethod backfill-opts ((self rdb) &key full)
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
305
   (with-slots (opts) self
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
306
     (if full
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
307
         (loop for k across *rocksdb-options*
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
308
               unless (opt-no-setter-p k)
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
309
               do (pull-sap opts k))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
310
         (pull-sap* opts))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
311
     (rdb-opts-table opts)))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
312
 
93
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
313
 (defmethod push-cf ((cf rdb-cf) (db rdb))
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
314
   (vector-push cf (rdb-cfs db)))
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
315
 
225
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
316
 ;; TODO: fix
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
317
 (defmethod create-cf ((db rdb) (cf rdb-cf))
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
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
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
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
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
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
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
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
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
343
 (defmethod open-db ((self rdb))
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
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
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
391
     (make-instance 'rdb-iter :sap (if cf
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
392
                                       (create-cf-iter-raw db cf opts)
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
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
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
409
 
225
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
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
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
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
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
417
   (with-slots (cfs) self
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
418
     (declare (type (array rdb-cf) cfs))
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
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
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
421
 
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
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
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
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
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
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
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
435
 
226
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
436
 (defmethod put-key ((self rdb) key val)
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
437
   (put-kv-raw
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
438
    (rdb-db self)
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
439
    key 
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
440
    val))
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
441
 
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
442
 (defmethod put-kv ((self rdb) (kv rdb-kv))
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
443
   (put-kv-raw
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
444
    (rdb-db self)
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
445
    (rdb-key kv)
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
446
    (rdb-val kv)))
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
447
 
94
01051403700f rdb work
ellis <ellis@rwest.io>
parents: 93
diff changeset
448
 (defmethod insert-key ((self rdb) key val &key cf)
93
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
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
Richard Westhaver <ellis@rwest.io>
parents: 224
diff changeset
465
 
282
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
466
 (defmethod insert-kv ((self rdb) (kv rdb-kv) &key cf opts)
226
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
467
   (if cf
282
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
468
       (let ((cf (etypecase cf
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
469
                   (rdb-cf cf)
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
470
                   (t (find cf (rdb-cfs self)
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
471
                            :key #'rdb-cf-name
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
472
                            :test #'string=)))))
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
473
         (put-cf-raw (rdb-db self)
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
474
                     (rdb-cf-sap cf)
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
475
                     (rdb-key kv)
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
476
                     (rdb-val kv)
da580c7fe954 upgrades
Richard Westhaver <ellis@rwest.io>
parents: 277
diff changeset
477
                     opts))
226
956fe7929a7c temps, db, etc
Richard Westhaver <ellis@rwest.io>
parents: 225
diff changeset
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))))