changeset 607: |
1a5828267b90 |
parent 606: |
6fc04c4d465c |
child 608: |
d91556aa3dae |
author: |
Richard Westhaver <ellis@rwest.io> |
date: |
Sun, 18 Aug 2024 21:37:07 -0400 |
files: |
lisp/ffi/rocksdb/logger.lisp lisp/ffi/rocksdb/macs.lisp lisp/ffi/rocksdb/merge.lisp lisp/ffi/rocksdb/pkg.lisp |
description: |
rocksdb logger function and callback macros |
1.1--- a/lisp/ffi/rocksdb/logger.lisp Sun Aug 18 20:34:26 2024 -0400
1.2+++ b/lisp/ffi/rocksdb/logger.lisp Sun Aug 18 21:37:07 2024 -0400
1.3@@ -5,4 +5,30 @@
1.4 ;;; Code:
1.5 (in-package :rocksdb)
1.6
1.7+(define-alien-routine rocksdb-logger-destroy void
1.8+ (logger (* rocksdb-logger)))
1.9+
1.10+(define-alien-type rocksdb-log-function
1.11+ (function void
1.12+ (* t)
1.13+ unsigned
1.14+ c-string
1.15+ size-t))
1.16+
1.17+(define-alien-routine rocksdb-logger-create-stderr-logger (* rocksdb-logger)
1.18+ (log-level int)
1.19+ (prefix c-string))
1.20+
1.21+(define-alien-routine rocksdb-logger-create-callback-logger (* rocksdb-logger)
1.22+ (log-level int)
1.23+ (fn (* rocksdb-log-function))
1.24+ (priv (* t)))
1.25+
1.26 ;; logger callback
1.27+
1.28+(define-alien-callable rocksdb-log-default void
1.29+ ((priv (* t))
1.30+ (lev unsigned)
1.31+ (msg c-string)
1.32+ (len size-t))
1.33+ (log:debug! priv lev msg len))
2.1--- a/lisp/ffi/rocksdb/macs.lisp Sun Aug 18 20:34:26 2024 -0400
2.2+++ b/lisp/ffi/rocksdb/macs.lisp Sun Aug 18 21:37:07 2024 -0400
2.3@@ -5,5 +5,38 @@
2.4 ;;; Code:
2.5 (in-package :rocksdb)
2.6
2.7+(defmacro define-full-merge-op (name &body body)
2.8+ `(define-alien-callable ,name (* t)
2.9+ ,*rocksdb-full-merge-lambda-list*
2.10+ ,@body))
2.11
2.12-(defmacro define-merge-operator-callbacks (name full partial state destructor delete-fn))
2.13+(defmacro define-partial-merge-op (name &body body)
2.14+ `(define-alien-callable ,name (* t)
2.15+ ,*rocksdb-partial-merge-lambda-list*
2.16+ ,@body))
2.17+
2.18+(defvar *rocksdb-destructor-callback* (alien-callable-function 'rocksdb-destructor))
2.19+(defvar *rocksdb-delete-callback* (alien-callable-function 'rocksdb-delete-value))
2.20+
2.21+(defmacro define-merge-operator (name state &key full
2.22+ partial
2.23+ (destructor 'rocksdb-destructor)
2.24+ (delete 'rocksdb-delete-value))
2.25+ (with-gensyms (fmerge pmerge mcreate mname)
2.26+ (setf fmerge (symbolicate name "-FULL-MERGE")
2.27+ pmerge (symbolicate name "-PARTIAL-MERGE")
2.28+ mcreate (symbolicate "CREATE-" name "-MERGEOPERATOR")
2.29+ mname (symbolicate name "-MERGEOPERATOR-NAME"))
2.30+ `(progn
2.31+ (define-full-merge-op ,fmerge ,@full)
2.32+ (define-partial-merge-op ,pmerge ,@partial)
2.33+ (define-alien-callable ,mname c-string () ,name)
2.34+ (defun ,mcreate ()
2.35+ (rocksdb-mergeoperator-create ,state
2.36+ (alien-sap (alien-callable-function ',destructor))
2.37+ (alien-sap (alien-callable-function ',fmerge))
2.38+ (alien-sap (alien-callable-function ',pmerge))
2.39+ (alien-sap (alien-callable-function ',delete))
2.40+ (alien-sap (alien-callable-function ',mname)))))))
2.41+
2.42+
3.1--- a/lisp/ffi/rocksdb/merge.lisp Sun Aug 18 20:34:26 2024 -0400
3.2+++ b/lisp/ffi/rocksdb/merge.lisp Sun Aug 18 21:37:07 2024 -0400
3.3@@ -34,6 +34,26 @@
3.4 ;;; Code:
3.5 (in-package :rocksdb)
3.6
3.7+(defvar *rocksdb-partial-merge-lambda-list*
3.8+ '((key (array unsigned-char))
3.9+ (klen size-t)
3.10+ (ops (array (array unsigned-char)))
3.11+ (ops-length (* size-t))
3.12+ (num-ops size-t)
3.13+ (success (array unsigned-char))
3.14+ (new-vlen (* size-t))))
3.15+
3.16+(defvar *rocksdb-full-merge-lambda-list*
3.17+ '((key (array unsigned-char))
3.18+ (klen size-t)
3.19+ (existing-val (array unsigned-char))
3.20+ (existing-vlen size-t)
3.21+ (ops (array (array unsigned-char)))
3.22+ (ops-length (* size-t))
3.23+ (num-ops size-t)
3.24+ (success (array unsigned-char))
3.25+ (new-vlen (* size-t))))
3.26+
3.27 #|
3.28 Gives the client a way to express the read -> modify -> write semantics
3.29 key: (IN) The key that's associated with this merge operation.
4.1--- a/lisp/ffi/rocksdb/pkg.lisp Sun Aug 18 20:34:26 2024 -0400
4.2+++ b/lisp/ffi/rocksdb/pkg.lisp Sun Aug 18 21:37:07 2024 -0400
4.3@@ -280,7 +280,16 @@
4.4 :rocksdb-compacitonfilterfactory-destroy
4.5 :rocksdb-compactionfilterfactory-create
4.6 :rocksdb-filter-never
4.7- :rocksdb-delete-value))
4.8+ :rocksdb-delete-value
4.9+ :define-merge-operator
4.10+ :*rocksdb-partial-merge-lambda-list*
4.11+ :*rocksdb-full-merge-lambda-list*
4.12+ :define-partial-merge-op
4.13+ :define-full-merge-op
4.14+ :rocksdb-logger-destroy
4.15+ :rocksdb-log-function
4.16+ :rocksdb-logger-create-callback-logger
4.17+ :rocksdb-log-default))
4.18
4.19 (in-package :rocksdb)
4.20