changelog shortlog graph tags branches changeset files file revisions raw help

Mercurial > core / annotate lisp/bin/rdb.lisp

changeset 439: ea4f008ad13f
parent: 8a312fa72406
child: b9c64be96888
author: Richard Westhaver <ellis@rwest.io>
date: Wed, 12 Jun 2024 17:34:07 -0400
permissions: -rw-r--r--
description: packy work, added json-trailing-whitespace-p variable for json readers
308
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
1
 ;;; rdb.lisp --- RocksDB client
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
2
 
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
3
 ;;; Code:
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
4
 (uiop:define-package :bin/rdb
439
ea4f008ad13f packy work, added json-trailing-whitespace-p variable for json readers
Richard Westhaver <ellis@rwest.io>
parents: 427
diff changeset
5
     (:use :cl :rdb :std :cli/clap :log)
308
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
6
   (:export :main))
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
7
 
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
8
 (in-package :bin/rdb)
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
9
 (rocksdb:load-rocksdb t)
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
10
 (defopt rdb-help (print-help $cli))
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
11
 (defopt rdb-version (print-version $cli))
309
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
12
 (defopt rdb-log-level (when $val (setq *log-level* :debug)))
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
13
 (defvar *rdb*)
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
14
 (defopt rdb-target-db (setq *rdb* (create-db (or $val "rdb") :open nil)))
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
15
 
308
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
16
 ;; (defopt rdb-config (init-rdb-user-config (parse-file-opt $val)))
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
17
 
310
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
18
 (defcmd rdb-new
309
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
19
   (set-opt *rdb* :error-if-exists t)
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
20
   (open-db *rdb*)
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
21
   (println (rdb-name *rdb*)))
308
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
22
 
310
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
23
 (defcmd rdb-show
439
ea4f008ad13f packy work, added json-trailing-whitespace-p variable for json readers
Richard Westhaver <ellis@rwest.io>
parents: 427
diff changeset
24
   (let ((db-path (cli-opt-val (car (find-opts $cli "db")))))
310
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
25
     (if (and (null db-path) (zerop $argc))
309
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
26
         (mapc (lambda (x) (println (format nil "~a ~a" (car x) (cdr x))))
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
27
               (hash-table-alist (backfill-opts (default-rdb-opts) :full t)))
310
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
28
         (with-db (db (create-db db-path :open t))
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
29
           (println (hash-table-alist (backfill-opts db)))
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
30
           (with-iter (it (create-iter db))
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
31
             (iter-seek-to-first it)
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
32
             (loop while (iter-valid-p it)
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
33
                   do (progn
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
34
                        (format t "~A : ~A~%"
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
35
                                (sb-ext:octets-to-string (iter-key it) :external-format '(:ascii :replacement #\_))
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
36
                                (iter-val it))
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
37
                        (iter-next it))
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
38
                   finally (rocksdb::rocksdb-iter-destroy %it)))))))
309
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
39
 
310
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
40
 (defcmd rdb-set
309
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
41
   (if (> 2 $argc)
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
42
       (rdb-error "missing args: KEY VAL")
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
43
       (with-db (db *rdb*)
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
44
         (open-db db)
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
45
         (insert-key  db (pop $args) (pop $args)))))
308
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
46
 
310
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
47
 (defcmd rdb-get
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
48
   (if (> 1 $argc)
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
49
       (rdb-error "missing arg: KEY")
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
50
       (with-db (db *rdb*)
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
51
         (open-db db)
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
52
         (when-let ((val (get-key db (car $args))))
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
53
           (println val)))))
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
54
 
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
55
 (defcmd rdb-destroy
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
56
   (destroy-db *rdb*))
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
57
 
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
58
 (defcmd rdb-fuzz
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
59
   (with-db (db *rdb*)
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
60
     (open-db db)
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
61
     (let ((val (make-array 32 :element-type 'octet)))
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
62
       (dotimes (i (if (zerop $argc) 1000 (parse-integer (car $args))))
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
63
         (nreversef val)
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
64
         (let ((seed (random 32)))
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
65
           (dotimes (ii seed)
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
66
             (setf (aref val ii) (random 256))))
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
67
           (nreversef val)
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
68
           (put-key db
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
69
                    (sb-ext:string-to-octets (string (gensym "foo")))
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
70
                    val)))))
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
71
 
308
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
72
 (define-cli $cli
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
73
   :name "rdb"
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
74
   :version "0.1.0"
310
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
75
   :thunk rdb-show
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
76
   :description "A simple helper for RocksDB."
308
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
77
   :opts (make-opts
309
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
78
           (:name "level" :global t :description "set the log level" :thunk rdb-log-level)
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
79
           (:name "help" :global t :description "print help" :thunk rdb-help)
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
80
           (:name "version" :global t :description "print version" :thunk rdb-version)
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
81
           (:name "db" :global t :description "target db" :thunk rdb-target-db :kind dir))
308
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
82
   :cmds (make-cmds
310
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
83
           (:name new :thunk rdb-new)
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
84
           (:name show :thunk rdb-show)
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
85
           (:name set :thunk rdb-set)
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
86
           (:name get :thunk rdb-get)
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
87
           (:name fuzz :thunk rdb-fuzz)
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
88
           (:name destroy :thunk rdb-destroy)))
308
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
89
 
e912dc076208 refactor lisp apps
Richard Westhaver <ellis@rwest.io>
parents:
diff changeset
90
 (defmain ()
309
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
91
   (let ((*log-level* :info))
94d358919982 refactor rust, fixing cli issues and rdb error handling
Richard Westhaver <ellis@rwest.io>
parents: 308
diff changeset
92
     (with-cli (opts cmds args) $cli
310
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
93
       ;; FIXME 2024-05-07: needs to be triggered explicitly - need to support
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
94
       ;; running global opt thunks even when no arg present - macro key
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
95
       (if (active-cmds $cli)
439
ea4f008ad13f packy work, added json-trailing-whitespace-p variable for json readers
Richard Westhaver <ellis@rwest.io>
parents: 427
diff changeset
96
           (prog2 (do-opt (car (find-opts $cli "db")))
310
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
97
               (do-cmd $cli)
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
98
             (close-db *rdb*))
ab9e41953ae2 rdb fuzz
Richard Westhaver <ellis@rwest.io>
parents: 309
diff changeset
99
           (print-help $cli)))))