Commit 3c7d25e9 authored by ieslick's avatar ieslick
Browse files

Implement a mark and sweep garbage collector; improve drop-instance

darcs-hash:603da26e236b28621c577a5acb8e2337502c1656
parent 7a681ea9
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -193,7 +193,7 @@ et cetera."))
		 :auto-commit t :type DB-BTREE :create t :thread thread
		 :multiversion mvcc)
	(let ((oid-seq (db-sequence-create db)))
	  (db-sequence-set-cachesize oid-seq 100)
	  (db-sequence-set-cachesize oid-seq 50)
	  (db-sequence-set-flags oid-seq :seq-inc t :seq-wrap t)
	  (db-sequence-set-range oid-seq 0 most-positive-fixnum)
	  (db-sequence-initial-value oid-seq 0)
@@ -201,7 +201,7 @@ et cetera."))
	  (setf (controller-oid-seq sc) oid-seq))

	(let ((cid-seq (db-sequence-create db)))
	  (db-sequence-set-cachesize cid-seq 100)
	  (db-sequence-set-cachesize cid-seq 50)
	  (db-sequence-set-flags cid-seq :seq-inc t :seq-wrap t)
	  (db-sequence-set-range cid-seq 0 most-positive-fixnum)
	  (db-sequence-initial-value cid-seq 5)
@@ -318,6 +318,8 @@ et cetera."))
    (3 'bdb-indexed-btree)
    (4 'bdb-btree-index)))

(defmethod reserved-oid-p ((sc bdb-store-controller) oid)
  (< oid 2))

;;
;; Store the database version
+5 −0
Original line number Diff line number Diff line
@@ -508,6 +508,11 @@
      ;;      )
      )
  )

(defmethod reserved-oid-p ((sc sql-store-controller) oid)
  (< oid 3))

	 
(defmethod connection-ok-p ((sc sql-store-controller))
  (connection-ok-p-con (controller-db sc)))

+3 −0
Original line number Diff line number Diff line
@@ -311,6 +311,9 @@
	(51 4))  ;  instances and schemas
      (call-next-method)))

(defmethod reserved-oid-p ((sc postmodern-store-controller) oid)
  (<= oid 51))

(defmethod default-class-id (type (sc postmodern-store-controller))
  (ecase type
    ('pm-btree 1)
+2 −2
Original line number Diff line number Diff line
@@ -52,7 +52,7 @@
  (register-instance sc class instance))

(defun check-valid-store-controller (sc)
  (unless (subtypep (type-of sc) 'store-controller)
  (ifret (subtypep (type-of sc) 'store-controller)
	 (error "This function requires a valid store controller")))

(defclass persistent-object (persistent) ()
+19 −0
Original line number Diff line number Diff line
@@ -59,6 +59,12 @@
(defmethod optimize-layout ((bt t) &key &allow-other-keys)
  t)

(defmethod drop-instance ((bt btree))
  "The standard method for reclaiming storage of persistent objects"
  (ensure-transaction (:store-controller *store-controller*)
    (drop-btree bt)
    (call-next-method)))

(defgeneric drop-btree (bt)
  (:documentation "Delete all key-value pairs from the btree and
   render it an invalid object in the data store"))
@@ -112,6 +118,13 @@ existing primary entries (may be expensive!)"))
  (ifret (get-index ibt idxname)
	 (add-index ibt :index-name idxname :key-form key-form :populate populate)))

(defmethod drop-btree ((bt indexed-btree))
  (map-indices (lambda (name index)
		 (declare (ignore index))
		 (remove-index bt name))
	       bt)
  (call-next-method))

;;
;; Secondary Indices
;;
@@ -127,6 +140,11 @@ existing primary entries (may be expensive!)"))
  (:metaclass persistent-metaclass)
  (:documentation "Secondary index to an indexed-btree."))

(defmethod drop-btree ((index btree-index))
  "Btree indices don't need to have values removed,
   this happens on the primary when remove-kv is called"
  nil)

(define-condition invalid-keyform (error)
  ((key-form :reader key-form-of :initarg :key-form))
  (:report (lambda (c s)
@@ -577,6 +595,7 @@ not), evaluates the forms, then closes the cursor."

(defmethod map-btree (fn (btree btree) &rest args &key start end (value nil value-set-p) 
		      from-end collect &allow-other-keys)
  (declare (ignorable args))
  (validate-map-call start end)
  (cond (value-set-p (map-btree-values fn btree value collect))
	(from-end (map-btree-from-end fn btree start end collect))
Loading