The 108-based bdbstore shared library module now works with qpidd -s and passes its self tests. I've just checked in this change:
system_test.sh didn't work at all (would seg-fault) * lib/BdbMessageStore.cpp: Comment out all attempts to write diagnostics to std::cout. A shared library must not do that, and this one would segfault when invoked via qpidd -s .... (~BdbMessageStore): Rather than simply writing to std::cout, re-throw any close-provoked exception. Index: lib/BdbMessageStore.cpp =================================================================== --- lib/BdbMessageStore.cpp (revision 673) +++ lib/BdbMessageStore.cpp (working copy) @@ -67,10 +67,10 @@ txn.commit(); } catch (DbException& e) { - std::cout << "Error opening databases: " << e.what() << std::endl; + // std::cout << "Error opening databases: " << e.what() << std::endl; THROW_STORE_EXCEPTION_2("Error opening databases", e); } catch (std::exception& e) { - std::cout << "Error opening databases: " << e.what() << std::endl; + // std::cout << "Error opening databases: " << e.what() << std::endl; throw e; } } @@ -85,9 +85,11 @@ dequeueXidDb.close(0); prepareXidDb.close(0); } catch (DbException& e) { - std::cout << "Error closing databases: " << e.what() << std::endl; + // std::cout << "Error closing databases: " << e.what() << std::endl; + THROW_STORE_EXCEPTION_2("Error closing databases", e); } catch (std::exception& e) { - std::cout << "Error closing databases: " << e.what() << std::endl; + // std::cout << "Error closing databases: " << e.what() << std::endl; + throw e; } } @@ -239,7 +241,7 @@ //find all the queues into which this message has been enqueued if (enqueueMessage(key, msg, index) == 0) { //message not referenced anywhere - can delete - std::cout << "Deleting unused message " << id << std::endl; + // std::cout << "Deleting unused message " << id << std::endl; messages->del(0); } else { if (id > maxMessageId) { @@ -265,7 +267,7 @@ for (int status = mappings->get(&msgId, &value, DB_SET); status == 0; status = mappings->get(&msgId, &value, DB_NEXT_DUP)) { Queue::shared_ptr queue = index[queueId]; if (!queue) { - std::cout << "Missing queue for id: " << queueId << std::endl; + // std::cout << "Missing queue for id: " << queueId << std::endl; THROW_STORE_EXCEPTION("Missing queue"); } queue->recover(msg); @@ -605,13 +607,13 @@ extern "C" MessageStore* create() { - std::cout << "creating BdbMessageStore" <<std::endl; + // std::cout << "creating BdbMessageStore" <<std::endl; return new BdbMessageStore(); } extern "C" void destroy(MessageStore* store) { - std::cout << "destroying BdbMessageStore" <<std::endl; + // std::cout << "destroying BdbMessageStore" <<std::endl; delete store; }