[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