[elephant-devel] Berkeley DB 4.4.20 Patch

Ian Eslick eslick at csail.mit.edu
Mon Sep 4 05:10:46 UTC 2006


Ah, this was a false alarm.  Vladimir, the latest HEAD should fix the
problems you reported.

As mentioned in my last note this was actually a bug I introduced in
fixing some memory problems that crop up when using add-index on a large
primary index with the populate option (it used to exhaust BDB's
transaction memory so I had to break up the transaction into chunks).  I
accidentally introduced a non-local exit through with-transaction
leading to the last transaction to populate the secondary index aborting
instead of committing.  This only affects the BDB backend.

For the record, the current measure of a successful body within
(with-transaction ()) is an ordinary exit.  _ANY_ non-local exit such as
throw, error, etc as well as goto labels, or (return-from <function>)
all result in aborts.  More technically the test is written as:

(with-transaction ()
    <txn-body>)

=>

(unwind-protect
  (prog1
      <txn-body>
      (setf success t)
      (db-transaction-commit ...))
  (unless success
    (db-transaction-abort ...)))

Should this policy be changed?  Should all conditions and throws result
in aborts but other non-local exits in success?

Regards,
Ian

Ian Eslick wrote:
> Vladimir,
>
> I applied your changes, cleaned up some other changes for a check in.  I
> found the same errors as you on Mac OS using Allegro.  Digging deeper
> into this it appears there are genuine issues cropping up in these two
> tests. 
>
> It appears that a pcursor-next operation returns nil instead of t and
> prematurely terminates the walk of an index.  This may be related to the
> advertised change in the auto-commit behavior.  Auto-commit used to be a
> default that could be overridden within a transaction.  The new behavior
> is global so either you always auto-commit or you have to wrap
> transactions around everything.  BDB users relying on the old
> interleaving behavior may be heavily effected by the 4.4 upgrade.
>
> I'll continue to look into this tomorrow so I better understand the
> implications.
>
> Regards,
> Ian
>
> Vladimir Sedach wrote:
>   
>> Hi everybody,
>>
>> Unless the BDB people are lying in their Changelog, the only thing
>> that changed between 4.3 and 4.4 as far as Elephant should be
>> concerned are the constants in db.h. Diff information provided below.
>> I don't use Elephant for anything right now (but I am planning to in
>> the future, and what better way to get familiar than fixing things
>> like this?), so the test suite is the only thing I have to go by. For
>> both BDB 4.3 and 4.4, do-backend-tests passes everything but PCURSOR2
>> and INDEXING-REDEF-CLASS. Should I be worried?
>>
>> Vladimir
>>
>> cd /home/viper/programming/CL/elephant-work/src/db-bdb/
>> diff -c /home/viper/programming/CL/elephant/src/db-bdb/sleepycat.lisp
>> /home/viper/programming/CL/elephant-work/src/db-bdb/sleepycat.lisp
>> *** /home/viper/programming/CL/elephant/src/db-bdb/sleepycat.lisp   
>> 2006-04-29
>> 19:03:49.000000000 -0600
>> ---
>> /home/viper/programming/CL/elephant-work/src/db-bdb/sleepycat.lisp   
>> 2006-09-02
>> 22:05:23.000000000 -0600
>> ***************
>> *** 119,151 ****
>>  (defconstant DB-UNKNOWN               5)
>>
>>  (defconstant DB_AUTO_COMMIT   #x1000000)
>> ! (defconstant DB_JOINENV          #x0040000)
>> ! (defconstant DB_INIT_CDB      #x0001000)
>> ! (defconstant DB_INIT_LOCK     #x0002000)
>> ! (defconstant DB_INIT_LOG      #x0004000)
>> ! (defconstant DB_INIT_MPOOL    #x0008000)
>> ! (defconstant DB_INIT_REP      #x0010000)
>> ! (defconstant DB_INIT_TXN      #x0020000)
>>  (defconstant DB_RECOVER          #x0000020)
>>  (defconstant DB_RECOVER_FATAL #x0200000)
>>  (defconstant DB_LOCKDOWN      #x0080000)
>>  (defconstant DB_PRIVATE          #x0100000)
>> ! (defconstant DB_SYSTEM_MEM    #x0400000)
>>  (defconstant DB_THREAD          #x0000040)
>>  (defconstant DB_FORCE          #x0000004)
>> ! (defconstant DB_DEGREE_2      #x2000000)
>>  (defconstant DB_DIRTY_READ    #x4000000)
>>  (defconstant DB_CREATE          #x0000001)
>> ! (defconstant DB_EXCL          #x0001000)
>>  (defconstant DB_NOMMAP          #x0000008)
>>  (defconstant DB_RDONLY          #x0000010)
>>  (defconstant DB_TRUNCATE      #x0000080)
>>  (defconstant DB_TXN_NOSYNC    #x0000100)
>> ! (defconstant DB_TXN_NOWAIT    #x0001000)
>> ! (defconstant DB_TXN_SYNC      #x0002000)
>>  (defconstant DB_LOCK_NOWAIT   #x002)
>> ! (defconstant DB_DUP          #x0000002)
>> ! (defconstant DB_DUPSORT          #x0000004)
>>
>>  (defconstant DB_CURRENT              7)
>>  (defconstant DB_FIRST              9)
>> --- 119,152 ----
>>  (defconstant DB-UNKNOWN               5)
>>
>>  (defconstant DB_AUTO_COMMIT   #x1000000)
>> ! (defconstant DB_JOINENV          #x0000000)
>> ! (defconstant DB_INIT_CDB      #x0002000)
>> ! (defconstant DB_INIT_LOCK     #x0004000)
>> ! (defconstant DB_INIT_LOG      #x0008000)
>> ! (defconstant DB_INIT_MPOOL    #x0010000)
>> ! (defconstant DB_INIT_REP      #x0020000)
>> ! (defconstant DB_INIT_TXN      #x0040000)
>>  (defconstant DB_RECOVER          #x0000020)
>>  (defconstant DB_RECOVER_FATAL #x0200000)
>>  (defconstant DB_LOCKDOWN      #x0080000)
>>  (defconstant DB_PRIVATE          #x0100000)
>> ! (defconstant DB_SYSTEM_MEM    #x0800000)
>>  (defconstant DB_THREAD          #x0000040)
>>  (defconstant DB_FORCE          #x0000004)
>> ! (defconstant DB_DEGREE_2      #x2000000) ;; DEPRECATED, now called
>> DB_READ_COMMITTED
>> ! (defconstant DB_READ_COMMITTED #x2000000)
>>  (defconstant DB_DIRTY_READ    #x4000000)
>>  (defconstant DB_CREATE          #x0000001)
>> ! (defconstant DB_EXCL          #x0002000)
>>  (defconstant DB_NOMMAP          #x0000008)
>>  (defconstant DB_RDONLY          #x0000010)
>>  (defconstant DB_TRUNCATE      #x0000080)
>>  (defconstant DB_TXN_NOSYNC    #x0000100)
>> ! (defconstant DB_TXN_NOWAIT    #x0002000)
>> ! (defconstant DB_TXN_SYNC      #x0004000)
>>  (defconstant DB_LOCK_NOWAIT   #x002)
>> ! (defconstant DB_DUP          #x0004000)
>> ! (defconstant DB_DUPSORT          #x0008000)
>>
>>  (defconstant DB_CURRENT              7)
>>  (defconstant DB_FIRST              9)
>>
>> Diff finished at Sat Sep  2 22:26:08
>> _______________________________________________
>> 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