[elephant-devel] Problem on the upgrade path
Ian Eslick
eslick at media.mit.edu
Sun May 18 13:33:34 UTC 2008
That's interesting. I'll have to look into that further because any
existing database should either have the btree already or create it on
startup...
yes, add-class-derived-index has been deprecated in favor of a
defclass form. There is a more detailed e-mail I sent out on this
awhile back with some of the tradeoffs and the rationale behind the
decisions.
((slot1 :accessor slot1)
(slot2 :accessor slot2)
(dslot :accessor dslot :derived-fn 'my-fn :slots-deps (slot1 slot2)))
my-fn is the usual derived index key function.
The property that I wanted most is that classes in the store will
always be updated to match the current defclass definition.
Thanks,
Ian
On May 18, 2008, at 9:05 AM, Leslie P. Polzer wrote:
>
> Loading a BDB database created by stable with the new branch gives me:
>
> debugger invoked on a UNBOUND-SLOT in thread #<THREAD "initial
> thread" {A725821}>:
> The slot DB-BDB::INDICES is unbound in the object #<BDB-INDEXED-
> BTREE oid:-3>.
>
> Type HELP for debugger help, or (SB-EXT:QUIT) to exit from SBCL.
>
> restarts (invokable by number or by possibly-abbreviated name):
> 0: [USE-VALUE ] Return a value as the slot-value.
> 1: [STORE-VALUE] Store and return a value as the slot-value.
> 2: [ABORT ] Exit debugger, returning to top level.
>
> ((SB-PCL::FAST-METHOD SLOT-UNBOUND (T T T))
> #<unavailable argument>
> #<unavailable argument>
> #<unavailable argument>
> #<BDB-INDEXED-BTREE oid:-3>
> DB-BDB::INDICES)
> 0] :ba
>
> 0: ((SB-PCL::FAST-METHOD SLOT-UNBOUND (T T T))
> #<unavailable argument>
> #<unavailable argument>
> #<unavailable argument>
> #<BDB-INDEXED-BTREE oid:-3>
> DB-BDB::INDICES)
> 1: ((SB-PCL::FAST-METHOD ELEPHANT::PERSISTENT-SLOT-READER
> (DB-BDB::BDB-STORE-CONTROLLER T T))
> #<unavailable argument>
> #<unavailable argument>
> #<unavailable argument>
> #<unavailable argument>
> #<unavailable argument>)
> 2: (SLOT-VALUE #<BDB-INDEXED-BTREE oid:-3> DB-BDB::INDICES)
> 3: ((SB-PCL::FAST-METHOD SHARED-INITIALIZE :AFTER
> (DB-BDB::BDB-INDEXED-BTREE T)) #<unavailable lambda list>)
> [:EXTERNAL]
> 4: ((LAMBDA
> (SB-PCL::.PV. SB-PCL::.NEXT-METHOD-CALL. SB-PCL::.ARG0. SB-
> PCL::.ARG1.
> SB-INT:&MORE SB-PCL::.DFUN-MORE-CONTEXT. SB-PCL::.DFUN-MORE-
> COUNT.))
> #<unused argument>
> #<unused argument>
> #<BDB-INDEXED-BTREE oid:-3>
> (ELEPHANT::OID ELEPHANT::SPEC ELEPHANT:CACHE-MODE DB-BDB::INDICES-
> CACHE)
> -304096854
> 4)
> 5: ((SB-PCL::FAST-METHOD SHARED-INITIALIZE :AROUND
> (ELEPHANT:PERSISTENT-OBJECT T))
> #<unavailable argument>
> #<unavailable argument>
> #<unavailable argument>
> #<unavailable argument>)[:EXTERNAL]
> 6: ((LAMBDA
> (SB-PCL::.PV. SB-PCL::.NEXT-METHOD-CALL. SB-PCL::.ARG0. SB-
> INT:&MORE
> SB-PCL::.DFUN-MORE-CONTEXT. SB-PCL::.DFUN-MORE-COUNT.))
> #<unused argument>
> #<unused argument>
> #<BDB-INDEXED-BTREE oid:-3>
> -304096814
> 4)
> 7: ((SB-PCL::FAST-METHOD MAKE-INSTANCE (CLASS))
> #<unavailable argument>
> #<unavailable argument>
> #<ELEPHANT:PERSISTENT-METACLASS DB-BDB::BDB-INDEXED-BTREE>)
> [:EXTERNAL]
> 8: ((LAMBDA ()) #<unavailable lambda list>)
> 9: ((SB-PCL::FAST-METHOD ELEPHANT::EXECUTE-TRANSACTION
> (DB-BDB::BDB-STORE-CONTROLLER T))
> #<unavailable argument>
> #<unavailable argument>
> #<BDB-STORE-CONTROLLER /home/sky/projects/mystic/backup-world.bdb/>
> #<CLOSURE (LAMBDA #) {B69A775}>)[:EXTERNAL]
> 10: ((SB-PCL::FAST-METHOD ELEPHANT::OPEN-CONTROLLER
> (DB-BDB::BDB-STORE-CONTROLLER)) #<unavailable lambda list>)
> [:EXTERNAL]
> 11: ((LAMBDA
> (SB-PCL::.PV. SB-PCL::.NEXT-METHOD-CALL. SB-PCL::.ARG0. SB-
> INT:&MORE
> SB-PCL::.DFUN-MORE-CONTEXT. SB-PCL::.DFUN-MORE-COUNT.))
> #<unused argument>
> #<unused argument>
> #<BDB-STORE-CONTROLLER /home/sky/projects/mystic/backup-
> world.bdb/>
> -304096650
> 6)
> 12: (ELEPHANT:OPEN-STORE (:BDB "/home/sky/projects/mystic/backup-
> world.bdb/"))[:EXTERNAL]
> 13: (MYSTIC-ENGINE:START)[:EXTERNAL]
> 14: (SB-INT:SIMPLE-EVAL-IN-LEXENV (MYSTIC-ENGINE:START) #<NULL-
> LEXENV>)
> 15: (INTERACTIVE-EVAL (MYSTIC-ENGINE:START))
> 16: (SB-ACLREPL::REP-ONE)
> 17: (SB-ACLREPL::REPL)[:EXTERNAL]
> 18: ((LAMBDA (SB-ACLREPL::NOPRINT)) NIL)
> 19: ((LAMBDA ()))
> 20: ((LAMBDA ()))[:EXTERNAL]
> 21: (SB-IMPL::%WITH-REBOUND-IO-SYNTAX #<CLOSURE (LAMBDA #) {AB6E79D}>)
> 22: (SB-IMPL::TOPLEVEL-REPL NIL)
> 23: (SB-IMPL::TOPLEVEL-INIT)
> 24: ((LABELS SB-IMPL::RESTART-LISP))
>
> Amending SHARED-INITIALIZE :AFTER in bdb-collections.lisp to read:
>
> (defmethod shared-initialize :after ((instance bdb-indexed-btree)
> slot-names
> &rest rest)
> (declare (ignore slot-names rest))
> (unless (slot-boundp instance 'indices)
> (setf (indices instance) (make-hash-table)))
> (setf (indices-cache instance) (indices instance)))
>
> seems to do the job. How I hate uninitialized slots.
>
> The next issue I encountered was the absence of ADD-CLASS-DERIVED-
> INDEX.
> So this is really gone now? What's the replacement?
>
> I'm going to answer your messages regarding caching later today, Ian.
>
> Leslie
>
> _______________________________________________
> elephant-devel site list
> elephant-devel at common-lisp.net
> http://common-lisp.net/mailman/listinfo/elephant-devel
More information about the elephant-devel
mailing list