Update of /project/elephant/cvsroot/elephant/src/elephant In directory clnet:/tmp/cvs-serv9022/src/elephant
Modified Files: classes.lisp classindex-utils.lisp classindex.lisp controller.lisp migrate.lisp package.lisp serializer2.lisp unicode2.lisp Log Message: Remove or document NOTE comments in Elephant & BDB code
--- /project/elephant/cvsroot/elephant/src/elephant/classes.lisp 2007/02/21 06:29:31 1.15 +++ /project/elephant/cvsroot/elephant/src/elephant/classes.lisp 2007/02/24 14:51:59 1.16 @@ -184,8 +184,6 @@ ;;
(defmethod update-instance-for-redefined-class :around ((instance persistent-object) added-slots discarded-slots property-list &rest initargs &key &allow-other-keys) - ;; NOTE: probably should delete discarded slots, but we'll worry about that later - ;; (also will want to delete discarded indices since we don't have a good GC) (declare (ignore property-list discarded-slots added-slots)) (prog1 (call-next-method) @@ -215,7 +213,7 @@ (retained-persistent-slots (set-difference raw-retained-persistent-slots retained-unbound-slots))) ;; Apply default values for unbound & new slots (updates class index) (apply #'shared-initialize current (append new-persistent-slots retained-unbound-slots) initargs) - ;; Copy values from old class (NOTE: should delete discarded slots?) (updates class index) + ;; Copy values from old class (updates class index) (ensure-transaction (:store-controller (get-con current)) (loop for slot-def in (class-slots new-class) when (member (slot-definition-name slot-def) retained-persistent-slots) @@ -270,7 +268,6 @@
;; ====================================================== ;; Handling metaclass overrides of normal slot operation -;; NOTE: Closer to MOP should replace this need... ;; ======================================================
;; --- /project/elephant/cvsroot/elephant/src/elephant/classindex-utils.lisp 2007/02/18 23:38:18 1.5 +++ /project/elephant/cvsroot/elephant/src/elephant/classindex-utils.lisp 2007/02/24 14:51:59 1.6 @@ -190,18 +190,21 @@ (mapcar #'(lambda (rule-specs) (cons (car rule-specs) (mapcar #'make-synch-rule (cdr rule-specs)))) - '((:class ;; class changes db + '((:class ;; class overwrites db ((not db-slot) class-indexed => add-slot-index) (db-slot (not class-indexed) => remove-slot-index) (db-derived (not class-indexed) (not class-persistent) (not class-transient) => register-derived-index)) - (:union ;; merge both sides + (:union ;; merge both sides - conflicts favor class (db-slot (not class-indexed) => register-indexed-slot) ((not db-slot) class-indexed => add-slot-index) (db-derived (not class-derived) => register-derived-index) (db-derived class-persistent => remove-derived-index warn)) - ;; NOTE: What about cases where we need to remove things as below? - (:db ;; db changes class + (:db + ;; :db updates indexing in classes when indexes and + ;; slots overlapped there may still be problems with + ;; derived indices that refer to missing slots or + ;; conflict with new slotnames ((not db-slot) class-indexed => unregister-indexed-slot) ((not db-derived) class-derived => unregister-derived-index) (db-slot class-persistent => register-indexed-slot) --- /project/elephant/cvsroot/elephant/src/elephant/classindex.lisp 2007/02/22 20:19:57 1.23 +++ /project/elephant/cvsroot/elephant/src/elephant/classindex.lisp 2007/02/24 14:51:59 1.24 @@ -68,7 +68,10 @@ (defmethod indexed-slot-writer ((class persistent-metaclass) (instance persistent-object) (slot-def persistent-slot-definition) new-value) "Anything that side effects a persistent-object slot should call this to keep the dependant indices in synch. Only classes with derived indices need to - update on writes to non-indexed slots." + update on writes to non-indexed slots. This is a side effect of user-managed + indices in Elephant - a necessity because we allow arbitrary lisp expressions to + determine index value so without bi-directional pointers, the indices cannot + automatically update a changed indexed value in derived slots" (let ((slot-name (slot-definition-name slot-def)) (oid (oid instance)) (con (get-con instance))) @@ -77,8 +80,6 @@ (persistent-slot-writer con new-value instance slot-name) (let ((class-idx (find-class-index class))) (ensure-transaction (:store-controller con) - ;; NOTE: Quick and dirty hack to ensure consistency -- needs performance improvement - (when (get-value oid class-idx) (remove-kv oid class-idx)) (persistent-slot-writer con new-value instance slot-name) @@ -279,8 +280,6 @@ (defmethod remove-class-slot-index ((class persistent-metaclass) slot-name &key (sc *store-controller*) (update-class t)) - ;; NOTE: Write routines to recover BDB storage when you've wiped an index... - ;; NOTE: If the transaction aborts we should not update class slots? (if (find-inverted-index class slot-name :null-on-fail t) (progn (when update-class (unregister-indexed-slot class slot-name)) @@ -357,7 +356,7 @@
;; ==================================== -;; User level Mapping API +;; Low Level Mapping API ;; ====================================
(defun map-class (fn class) @@ -373,7 +372,7 @@ (declare (dynamic-extent map-fn)) (map-btree #'map-fn class-idx))))
-(defun map-instances (fn class index start end) +(defun map-class-index (fn class index start end) "If you want to map over a subset of instances, pick an index and specify bounds for the traversal. Otherwise use map-class for all instances" --- /project/elephant/cvsroot/elephant/src/elephant/controller.lisp 2007/02/21 04:47:42 1.36 +++ /project/elephant/cvsroot/elephant/src/elephant/controller.lisp 2007/02/24 14:51:59 1.37 @@ -82,9 +82,8 @@ (setf (gethash spec *dbconnection-spec*) sc)) sc)))
- -;; NOTE: Check for asdf loaded rather than rely on asdf to? (defun load-backend (type) + (assert (find-package :asdf)) (let ((record (assoc type *elephant-backends*))) (when (or (null record) (not (consp record))) (error "Unknown backend type ~A, cannot load" type)) @@ -177,9 +176,9 @@ then it should return nil"))
(defmethod database-version :around (sc) - "Default version assumption for unmarked databases is 0.6.0" -;; NOTE: It is possible to check for 0.5.0 databases, but it is not -;; implemented now due to the low (none?) number of users still on 0.5.0" + "Default version assumption for unmarked databases is 0.6.0. + It is possible to check for 0.5.0 databases, but it is not implemented + now due to the low (none?) number of users still on 0.5.0" (declare (ignorable sc)) (let ((db-version (call-next-method))) (if db-version db-version @@ -497,7 +496,8 @@ ;; Callback hooks for persistent variables ;;
-;; NOTE: Design sketch; not sure I'll promote this... +;; Design sketch; not sure I'll promote this. +;; To be looked at again for 0.6.2 or 0.7.0
;;(defvar *variable-hooks* nil ;; "An alist (specs -> varlist) where varlist is tuple of --- /project/elephant/cvsroot/elephant/src/elephant/migrate.lisp 2007/02/17 12:13:19 1.7 +++ /project/elephant/cvsroot/elephant/src/elephant/migrate.lisp 2007/02/24 14:51:59 1.8 @@ -24,7 +24,7 @@ ;; repositories and is used by the upgrade interface. ;;
-;; NOTES AND LIMITATIONS: +;; LIMITATIONS: ;; - Migrate currently will not handle circular list objects ;; - Migrate does not support arrays or standard objects with nested persistent objects ;; - There are potential problems with graphs and other deep structures --- /project/elephant/cvsroot/elephant/src/elephant/package.lisp 2007/02/22 20:19:57 1.17 +++ /project/elephant/cvsroot/elephant/src/elephant/package.lisp 2007/02/24 14:51:59 1.18 @@ -110,7 +110,7 @@
;; Class mapping API #:map-class - #:map-instances + #:map-class-index
;; Instance query API #:get-instances-by-class --- /project/elephant/cvsroot/elephant/src/elephant/serializer2.lisp 2007/02/21 04:47:42 1.26 +++ /project/elephant/cvsroot/elephant/src/elephant/serializer2.lisp 2007/02/24 14:51:59 1.27 @@ -89,14 +89,6 @@ (defconstant +adjustable-p+ #x40)
;; -;; NOTE: Used bad coding practice here: without-interrupts is a single-CPU -;; construct, but most lisps are not native multi-CPU capable so -;; no problems in near term. I used it to avoid general locking overhead -;; as queues are an effective lock-free structure when combined with -;; an allocate-on-empty policy -;; - -;; ;; Circularity Hash for Serializer ;;
--- /project/elephant/cvsroot/elephant/src/elephant/unicode2.lisp 2007/02/03 04:09:13 1.4 +++ /project/elephant/cvsroot/elephant/src/elephant/unicode2.lisp 2007/02/24 14:51:59 1.5 @@ -13,7 +13,7 @@ ;;; as governed by the terms of the Lisp Lesser GNU Public License ;;; (http://opensource.franz.com/preamble.html), also known as the LLGPL. ;;; -;;; NOTE: Here UTF8 means 8-bit < #x79 only for efficiency, UTF16 means UTF16 format +;;; Here UTF8 means 8-bit < #x79 only for efficiency, UTF16 means UTF16 format ;;; but only for values < #xFFFF. In the odd cases of non-0 unicode planes we just ;;; use UTF-32 to avoid the time cost of translation. Only when converting from a ;;; serialized UTF-X do we worry about encoding (UTF32->UTF16). If an ascii/utf8 lisp