changelog shortlog graph tags branches files raw help

Mercurial > core / changeset: rocksdb logger function and callback macros

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