[bknr-devel] problem deleting datastore objects and multiple inheritance

Hans Huebner hans.huebner at gmail.com
Fri Sep 15 14:28:16 UTC 2006


Hi Kamen,

I commited a workaround that fixes the problem.  It has only been
quickly tested by me and I cannot promise much.

Note that my BKNR based projects are currently in maintenance mode and
I cannot promise to fix all bugs.  I will try my best, but for example
this present case would require a deeper analysis to see what really
goes wrong.  It would be great if you could try the fix and let me
know if it works for you or if it creates new problems.

The bad thing about this fix is that it may obscure other bugs, as a
condition that should not normally occur is now handled as a normal
case (i.e. a lower layer returns NIL and if so, the function just does
nothing).

Cheers,
Hans

On 9/15/06, Kamen TOMOV <kamen at cybuild.com> wrote:
> Hi,
>
> I have the following problem with bknr-datastore:
>
> (define-persistent-class a ()
>   ())
>
> (define-persistent-class b ()
>   ())
>
> (define-persistent-class c (a)
>   ())
>
> (define-persistent-class d (a b)
>   ())
>
> (delete-object (make-object 'a))
> => T
>
> (delete-object (make-object 'c))
> => T
>
> (delete-object (make-object 'd))
> =>
>
> Type-error in KERNEL::OBJECT-NOT-SIMPLE-VECTOR-ERROR-HANDLER:
>    NIL is not of type SIMPLE-VECTOR
>    [Condition of type TYPE-ERROR]
>
> Restarts:
>   0: [RETRY-TRANSACTION] Retry the transaction #<TRANSACTION 15.09.2006 15:37:18 TX-DELETE-OBJECT 75>.
>   1: [ABORT-REQUEST] Abort handling SLIME request.
>   2: [ABORT] Return to Top-Level.
>
> Backtrace:
>   0: ((METHOD BKNR.SKIP-LIST:SKIP-LIST-DELETE NIL (BKNR.SKIP-LIST:SKIP-LIST T)) (#(2) . #(#)) #<unused-arg> #<BKNR.SKIP-LIST:SKIP-LIST length = 15 {5A483CDD}> 75)
>   1: ((METHOD INDEX-REMOVE NIL (CLASS-SKIP-INDEX T)) (#(2 0 1) . #()) #<unused-arg> #<CLASS-SKIP-INDEX {5A42962D}> #<D ID: 75>)
>   2: ((METHOD BKNR.INDICES::DESTROY-OBJECT-WITH-CLASS NIL (INDEXED-CLASS T)) (#(17) . #()) #<unused-arg> #<PERSISTENT-CLASS D {58E9228D}> #<D ID: 75>)
>   3: ("DEFMETHOD EXECUTE-UNLOGGED (TRANSACTION)")
>   4: ("DEFCLASS MP-STORE" #<Closure Over Function "DEFMETHOD EXECUTE-UNLOGGED (TRANSACTION)" {58EB87C1}>)
>   5: ((METHOD BKNR.DATASTORE::EXECUTE-UNLOGGED (:AROUND) (TRANSACTION)) #<unused-arg> #S(PCL::FAST-METHOD-CALL :FUNCTION #<Closure Over Function "LAMBDA (#:G4209 #:G4210 #:G4211)" {5819E5D9}> :PV-CELL NIL :NEXT-METHOD-CALL NIL :ARG-INFO (1)) #<TRANSACTION 15.09.2006 15:37:18 TX-DELETE-OBJECT 75>)
>   6: ("DEFMETHOD EXECUTE-TRANSACTION (STORE TRANSACTION)")
>   7: ("DEFCLASS MP-STORE" #<Closure Over Function "DEFMETHOD EXECUTE-TRANSACTION (STORE TRANSACTION)" {58EB8749}>)
>   8: ((METHOD BKNR.DATASTORE::EXECUTE-TRANSACTION NIL (STORE TRANSACTION)) (#(0) . #(#)) #<#1=unused-arg> #<#1#> #<TRANSACTION 15.09.2006 15:37:18 TX-DELETE-OBJECT 75>)
>
>
> I'm using the latest bknr and CMUCL 19a-release-20040728 . Here is how
> the store is defined:
>
> (make-instance 'mp-store
>                  :directory "/tmp/ams-object-store/"
>                  :subsystems (list (make-instance 'store-object-subsystem))
>
> Could please advice? Thanks!
>
> --
> Kamen TOMOV
> _______________________________________________
> bknr-devel mailing list
> bknr-devel at common-lisp.net
> http://common-lisp.net/cgi-bin/mailman/listinfo/bknr-devel
>



More information about the Bknr-devel mailing list