[elephant-devel] Strange behavior with indexed-btree

Kevin Raison raison at chatsubo.net
Thu Jan 8 02:35:00 UTC 2009


I apologize for replying to my own reply, but in the process of 
recreating this from a fresh bdb, i noticed another artifact of the 
error condition.  Before the unbound slot errors begin to appear, I get 
an ELEPHANT:ELEPHANT-TYPE-DESERIALIZATION-ERROR;  just once, and then 
the unbound slot errors start happening.  A trace of the deserialization 
error follows:

Condition ELEPHANT:ELEPHANT-TYPE-DESERIALIZATION-ERROR was signalled.
    [Condition of type ELEPHANT:ELEPHANT-TYPE-DESERIALIZATION-ERROR]

Restarts:
  0: [TERMINATE-THREAD] Terminate this thread (#<THREAD 
"pcall-worker-50" RUNNING {1003C18CE1}>)

Backtrace:
   0: ((LABELS ELEPHANT-SERIALIZER2::%DESERIALIZE) #<unavailable lambda 
list>)
   1: ((LABELS ELEPHANT-SERIALIZER2::%DESERIALIZE) #<unavailable lambda 
list>)
   2: (ELEPHANT-SERIALIZER2::DESERIALIZE #<unavailable lambda list>)
   3: (ELEPHANT::DESERIALIZE ..)
   4: ((SB-PCL::FAST-METHOD ELEPHANT::PERSISTENT-SLOT-READER 
(DB-BDB::BDB-STORE-CONTROLLER T T)) #<unavailable lambda list>)
   5: (SLOT-VALUE #<BDB-INDEXED-BTREE oid:7565> DB-BDB::INDICES)
   6: ((SB-PCL::FAST-METHOD SHARED-INITIALIZE :AFTER 
(DB-BDB::BDB-INDEXED-BTREE T)) #<unavailable lambda list>)[:EXTERNAL]
   7: ((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.)) ..)
   8: ((SB-PCL::FAST-METHOD SHARED-INITIALIZE :AROUND 
(ELEPHANT:PERSISTENT-OBJECT T)) #<unavailable argument> #<unavailable 
argument> #<unavailable argument> #<unavailable argument>)[:EXTERNAL]
   9: ((SB-PCL::FAST-METHOD ELEPHANT::RECREATE-INSTANCE 
(ELEPHANT:PERSISTENT-COLLECTION)) #<unavailable argument> #<unavailable 
argument> #<unavailable argument>)[:EXTERNAL]
  10: ((SB-PCL::FAST-METHOD ELEPHANT::CONTROLLER-RECREATE-INSTANCE 
(ELEPHANT:STORE-CONTROLLER T)) #<unused argument> #<unused argument> 
#<BDB-STORE-CONTROLLER /srv/console/syslog/> 7565 NIL)
  11: ((LABELS ELEPHANT-SERIALIZER2::%DESERIALIZE) #<unavailable lambda 
list>)
  12: (ELEPHANT-SERIALIZER2::DESERIALIZE #<unavailable lambda list>)
  13: (ELEPHANT::DESERIALIZE ..)
  14: ((SB-PCL::FAST-METHOD ELEPHANT:GET-VALUE (T DB-BDB::BDB-BTREE)) 
#<unavailable lambda list>)
  15: ((SB-PCL::FAST-METHOD CONSOLE::INDEX-LOG-ENTRY 
(CONSOLE::LOG-ENTRY)) #<unavailable argument> #<unavailable argument> 
#<LOG-ENTRY oid:10076>)
  16: ((LAMBDA ()))
  17: ((SB-PCL::FAST-METHOD ELEPHANT::EXECUTE-TRANSACTION 
(DB-BDB::BDB-STORE-CONTROLLER T)) #<unavailable argument> #<unavailable 
argument> #<unavailable argument> #<unavailable argument>)[:EXTERNAL]
  18: (CONSOLE::ADD-LOG-ENTRY ..)


Kevin Raison wrote:
> I was finally able to recreate this in the repl (as opposed to seeing it 
> in my error logs), so here is a trace:
> 
> The slot DB-BDB::INDICES-CACHE is unbound in the object 
> #<BDB-INDEXED-BTREE oid:2>.
>     [Condition of type UNBOUND-SLOT]
> 
> Backtrace:
>    0: ((SB-PCL::FAST-METHOD SLOT-UNBOUND (T T T)) #<unavailable 
> argument> #<unavailable argument> #<unavailable argument> 
> #<BDB-INDEXED-BTREE oid:2> DB-BDB::INDICES-CACHE)
>    1: (SB-PCL::SLOT-UNBOUND-INTERNAL #<BDB-INDEXED-BTREE oid:2> 2)
>    2: ((SB-PCL::FAST-METHOD (SETF GET-VALUE) (T T 
> DB-BDB::BDB-INDEXED-BTREE)) #<unavailable lambda list>)
>    3: ((LAMBDA (WORD)) "34766")
>    4: (SB-IMPL::MAP1 #<CLOSURE (LAMBDA #) {1003CA4ED9}> (("" "asa" 
> "106007" "deny" "inbound" "udp" ...)) :LIST T)
>    5: (MAPCAR #<CLOSURE (LAMBDA #) {1003CA4ED9}> ("" "asa" "106007" 
> "deny" "inbound" "udp" ...))[:EXTERNAL]
>    6: ((SB-PCL::FAST-METHOD INDEX-LOG-ENTRY (LOG-ENTRY)) #<unavailable 
> argument> #<unavailable argument> #<LOG-ENTRY oid:6373>)
>    7: ((LAMBDA ()))
>    8: ((SB-PCL::FAST-METHOD ELEPHANT::EXECUTE-TRANSACTION 
> (DB-BDB::BDB-STORE-CONTROLLER T)) #<unavailable argument> #<unavailable 
> argument> #<unavailable argument> #<unavailable argument>)[:EXTERNAL]
>    9: (ADD-LOG-ENTRY ..)
>   10: (SB-INT:SIMPLE-EVAL-IN-LEXENV ..)
> 
> And here is the code that sometimes causes the issue:
> (defmethod index-log-entry ((log-entry log-entry))
>    (let ((*store-controller* *syslog-controller*))
>      (let ((btree (get-from-root "log-entry-index" :sc 
> *syslog-controller*)))
>        (map-words #'(lambda (word)
>                       (unless (or (member word *superfluous-words* :test 
> #'string-equal)
>                                   (< (length word) 2))
>                         (unless (existsp word btree)
>                           (setf (get-value word btree) (make-pset :sc 
> *syslog-controller*)))
>                         (insert-item log-entry
>                                      (get-value word btree))))
>                   (text log-entry)))))
> 
> 
> If I drop and recreate the btree, everything runs smoothly (no errors) 
> for a few hours and then the above error message starts showing up about 
> half to three quarters of the time.
> 
> Thanks again,
> Kevin
> 
> 
> Kevin Raison wrote:
>> I am seeing an intermittent error with 1.0 alpha when trying to write to 
>>   an indexed btree (using BerkeleyDB 4.7 as provided by Ubuntu's package 
>> repositories):
>>
>> The slot DB-BDB::INDICES-CACHE is unbound in the object 
>> #<BDB-INDEXED-BTREE oid:2>
>>
>> Within the same thread, sometimes this happens and sometimes I am able 
>> to read and write to the btree.  I am using sbcl 1.0.24 on 32 bit intel 
>> linux.  Is there something obvious that might help alleviate this or 
>> should I provide more context?
>>
>> Thanks!
>> Kevin
>>
>> _______________________________________________
>> elephant-devel site list
>> elephant-devel at common-lisp.net
>> http://common-lisp.net/mailman/listinfo/elephant-devel
> 
> _______________________________________________
> 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