Good catch. I'll see if there is a clean way to avoid these kinds of errors in the new version of class indexing I'm wrapping up.

Ian

On Mar 11, 2008, at 6:18 AM, Alex Mizrahi wrote:

suppose following scenario:

1. with store closed (i'm not sure that's essential),
 we create new class definition with persistent slot:

(defclass tsst (persistent-object) ((i :index t)) (:metaclass
persistent-metaclass))

2. (open-store *spec*)

3. (with-transaction ()
      (find-inverted-index 'tsst 'i)
      (error "bugoga"))

find-inverted-index does two things: creates DB object representing index
and caches it.
then transaction is aborted -- all DB changes are effectively wiped.

but we still have references to DB object in %index-cache, and accessing
it's slots produces errors:

4. (find-inverted-index 'tsst 'i)

The slot DB-POSTMODERN::INDICES is unbound in the object
#<DB-POSTMODERN::PM-INDEXED-BTREE db-table:tree10173 {12746D71}>.
  [Condition of type UNBOUND-SLOT]

i've only tested this on db-postmodern, but it seems other backends might be
vulnerable too.

i don't see fix to this problem other than disabling index caching
altogether.

as for workaround, we could catch slot-unbound error when trying to access
cached index.



_______________________________________________
elephant-devel site list
elephant-devel@common-lisp.net
http://common-lisp.net/mailman/listinfo/elephant-devel

_______________________________________________
elephant-devel site list
elephant-devel@common-lisp.net
http://common-lisp.net/mailman/listinfo/elephant-devel

Reply via email to