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@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 > _______________________________________________ elephant-devel site list elephant-devel@common-lisp.net http://common-lisp.net/mailman/listinfo/elephant-devel