changelog shortlog graph tags branches changeset files file revisions raw help

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

changeset 112: 430e69339ac3
parent: 6e5caf0c68a1
child: afcb1f02bb66
author: ellis <ellis@rwest.io>
date: Tue, 19 Dec 2023 18:10:02 -0500
permissions: -rw-r--r--
description: fixed rdb tests
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
 (define-condition rdb-error (error)
99
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
4
   ((message :initarg :message
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
5
             :reader rdb-error-message))
93
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
6
   (:documentation "Error signaled by the RDB system"))
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
7
 
99
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
8
 (define-condition rocksdb-error (rdb-error)
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
9
   ((db :initarg :db :reader rdb-error-db))
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
10
   (:documentation "Error signaled by RocksDB subsystem"))
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
11
 
93
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
12
 (defmethod print-object ((obj rdb-error) stream)
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
13
   (print-unreadable-object (obj stream :type t :identity t)
99
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
14
     (format stream "~A" (rdb-error-message obj))))
93
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
15
 
99
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
16
 (define-condition open-db-error (rocksdb-error)
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
17
   ()
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
18
   (:documentation "Error signaled while opening a database"))
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
19
 
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
20
 (define-condition destroy-db-error (rocksdb-error)
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
21
   ()
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
22
   (:documentation "Error signaled while destroying a database"))
93
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
23
 
102
db52ddb25d7f progress
ellis <ellis@rwest.io>
parents: 100
diff changeset
24
 (define-condition cf-error (rocksdb-error)
db52ddb25d7f progress
ellis <ellis@rwest.io>
parents: 100
diff changeset
25
   ((cf :initarg :cf :reader rdb-error-cf)))
db52ddb25d7f progress
ellis <ellis@rwest.io>
parents: 100
diff changeset
26
 
93
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
27
 (define-condition put-kv-error (rdb-error)
99
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
28
   ((kv :initarg :kv :reader rdb-error-kv))
93
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
29
   (:documentation "Error signaled while processing a PUT-KV request"))
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
30
 
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
31
 (define-condition get-kv-error (rdb-error)
99
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
32
   ((key :initarg :key :reader key))
93
17b6d1f39506 rdb refactor, skel stuff
ellis <ellis@rwest.io>
parents:
diff changeset
33
   (:documentation "Error signaled while processing a GET-KV request"))
99
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
34
 
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
35
 (defun handle-errptr (errptr &optional errtyp params)
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
36
   "Handle ERRPTR, a ROCKSDB-ERRPTR type which is a pointer to NULL,
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
37
 indicating a success or a pointer to a C-STRING.
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
38
 
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
39
 ERRTYP if present must be a condition which sub-classes RDB-ERROR. If
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
40
 an error is detected, the resulting string from ERRPTR and the
40d91ba5a115 rdb stuff
ellis <ellis@rwest.io>
parents: 93
diff changeset
41
 additional PARAMS will be used to signal a lisp error condition."
102
db52ddb25d7f progress
ellis <ellis@rwest.io>
parents: 100
diff changeset
42
   ;; if NULL, return nil
db52ddb25d7f progress
ellis <ellis@rwest.io>
parents: 100
diff changeset
43
   (unless (null-alien errptr)
db52ddb25d7f progress
ellis <ellis@rwest.io>
parents: 100
diff changeset
44
     (apply #'signal (or errtyp 'rdb-error)
db52ddb25d7f progress
ellis <ellis@rwest.io>
parents: 100
diff changeset
45
            (nconc (list :message errptr) params))))
db52ddb25d7f progress
ellis <ellis@rwest.io>
parents: 100
diff changeset
46
 
db52ddb25d7f progress
ellis <ellis@rwest.io>
parents: 100
diff changeset
47
 (defmacro with-errptr ((e &optional errtyp params) &body body)
db52ddb25d7f progress
ellis <ellis@rwest.io>
parents: 100
diff changeset
48
   `(with-alien ((,e rocksdb-errptr nil))
104
6e5caf0c68a1 obj tree, id, hash, seq, graph.. added cli/progress and init cli/repl
ellis <ellis@rwest.io>
parents: 102
diff changeset
49
      (unwind-protect 
6e5caf0c68a1 obj tree, id, hash, seq, graph.. added cli/progress and init cli/repl
ellis <ellis@rwest.io>
parents: 102
diff changeset
50
           (handler-bind ((sb-sys:memory-fault-error 
6e5caf0c68a1 obj tree, id, hash, seq, graph.. added cli/progress and init cli/repl
ellis <ellis@rwest.io>
parents: 102
diff changeset
51
                            (lambda (condition)
6e5caf0c68a1 obj tree, id, hash, seq, graph.. added cli/progress and init cli/repl
ellis <ellis@rwest.io>
parents: 102
diff changeset
52
                              (error 'rdb-error
6e5caf0c68a1 obj tree, id, hash, seq, graph.. added cli/progress and init cli/repl
ellis <ellis@rwest.io>
parents: 102
diff changeset
53
                                     :message
6e5caf0c68a1 obj tree, id, hash, seq, graph.. added cli/progress and init cli/repl
ellis <ellis@rwest.io>
parents: 102
diff changeset
54
                                     (format nil
112
430e69339ac3 fixed rdb tests
ellis <ellis@rwest.io>
parents: 104
diff changeset
55
                                             "~a" condition))))
104
6e5caf0c68a1 obj tree, id, hash, seq, graph.. added cli/progress and init cli/repl
ellis <ellis@rwest.io>
parents: 102
diff changeset
56
                          (error 
6e5caf0c68a1 obj tree, id, hash, seq, graph.. added cli/progress and init cli/repl
ellis <ellis@rwest.io>
parents: 102
diff changeset
57
                            (lambda (condition)
6e5caf0c68a1 obj tree, id, hash, seq, graph.. added cli/progress and init cli/repl
ellis <ellis@rwest.io>
parents: 102
diff changeset
58
                              (error 'rdb-error 
6e5caf0c68a1 obj tree, id, hash, seq, graph.. added cli/progress and init cli/repl
ellis <ellis@rwest.io>
parents: 102
diff changeset
59
                                     :message 
6e5caf0c68a1 obj tree, id, hash, seq, graph.. added cli/progress and init cli/repl
ellis <ellis@rwest.io>
parents: 102
diff changeset
60
                                     (format nil 
112
430e69339ac3 fixed rdb tests
ellis <ellis@rwest.io>
parents: 104
diff changeset
61
                                             "unhandled exception in body of WITH-ERRPTR: ~a"
104
6e5caf0c68a1 obj tree, id, hash, seq, graph.. added cli/progress and init cli/repl
ellis <ellis@rwest.io>
parents: 102
diff changeset
62
                                             condition)))))
6e5caf0c68a1 obj tree, id, hash, seq, graph.. added cli/progress and init cli/repl
ellis <ellis@rwest.io>
parents: 102
diff changeset
63
             (progn ,@body))
102
db52ddb25d7f progress
ellis <ellis@rwest.io>
parents: 100
diff changeset
64
        (handle-errptr ,e ,errtyp ,params))))
db52ddb25d7f progress
ellis <ellis@rwest.io>
parents: 100
diff changeset
65
         
db52ddb25d7f progress
ellis <ellis@rwest.io>
parents: 100
diff changeset
66