Author: astitcher
Date: 2007-09-06 06:40:13 -0400 (Thu, 06 Sep 2007)
New Revision: 909
Modified:
store/trunk/cpp/lib/BdbMessageStore.cpp
store/trunk/cpp/lib/BindingDbt.cpp
store/trunk/cpp/lib/BindingDbt.h
store/trunk/cpp/lib/BufferValue.cpp
store/trunk/cpp/lib/BufferValue.h
Log:
* Fixed bdbstore for changes in framing::Buffer class in qpid
* There are still test assertion failures though
Modified: store/trunk/cpp/lib/BdbMessageStore.cpp
===================================================================
--- store/trunk/cpp/lib/BdbMessageStore.cpp 2007-09-05 19:22:25 UTC (rev 908)
+++ store/trunk/cpp/lib/BdbMessageStore.cpp 2007-09-06 10:40:13 UTC (rev 909)
@@ -333,14 +333,14 @@
IdDbt key;
size_t preamble_length = sizeof(u_int32_t)/*header size*/;
- BufferValue value(preamble_length, 0);
-
u_int64_t maxMessageId(1);
+ BufferValue value(preamble_length, 0);
+ value.buffer.record();
while (messages.next(key, value)) {
//read header only to begin with
u_int32_t headerSize = value.buffer.getLong();
- value.buffer.clear();
+ value.buffer.restore();
BufferValue header(headerSize, preamble_length);
messages.current(key, header);
@@ -612,13 +612,14 @@
void BdbMessageStore::store(DbTxn* txn, Dbt& messageId, PersistableMessage&
message)
{
- Buffer buffer(message.encodedSize() + sizeof(u_int32_t)/*header length*/);
u_int32_t headerSize = message.encodedHeaderSize();
+ char* buff = static_cast<char*>(::alloca(headerSize + sizeof(u_int32_t)/*header
length*/));
+ Buffer buffer(buff, headerSize + sizeof(u_int32_t));
buffer.putLong(headerSize);
message.encode(buffer);
- buffer.flip();
+ //buffer.flip();
- Dbt data(buffer.start(), buffer.available());
+ Dbt data(buff, headerSize + sizeof(u_int32_t));
try {
/// cct message db
Modified: store/trunk/cpp/lib/BindingDbt.cpp
===================================================================
--- store/trunk/cpp/lib/BindingDbt.cpp 2007-09-05 19:22:25 UTC (rev 908)
+++ store/trunk/cpp/lib/BindingDbt.cpp 2007-09-06 10:40:13 UTC (rev 909)
@@ -31,18 +31,22 @@
BindingDbt::BindingDbt(const PersistableExchange& e, const PersistableQueue& q,
const string& k, const FieldTable& a)
- : buffer(encodedSize(e, q, k, a))
+ : data(new char[encodedSize(e, q, k, a)]),
+ buffer(data, encodedSize(e, q, k, a))
{
buffer.putLongLong(q.getPersistenceId());
buffer.putShortString(q.getName());
buffer.putShortString(k);
buffer.putFieldTable(a);
- buffer.flip();
- set_data(buffer.start());
- set_size(buffer.available());
+ set_data(data);
+ set_size(encodedSize(e, q, k, a));
}
+BindingDbt::~BindingDbt()
+{
+ delete [] data;
+}
uint32_t BindingDbt::encodedSize(const PersistableExchange& /*not used*/, const
PersistableQueue& q, const string& k, const FieldTable& a)
{
Modified: store/trunk/cpp/lib/BindingDbt.h
===================================================================
--- store/trunk/cpp/lib/BindingDbt.h 2007-09-05 19:22:25 UTC (rev 908)
+++ store/trunk/cpp/lib/BindingDbt.h 2007-09-06 10:40:13 UTC (rev 909)
@@ -35,6 +35,7 @@
class BindingDbt : public Dbt
{
+ char* data;
qpid::framing::Buffer buffer;
static uint32_t encodedSize(const qpid::broker::PersistableExchange& e,
@@ -48,6 +49,8 @@
const std::string& k,
const qpid::framing::FieldTable& a);
+ ~BindingDbt();
+
};
}}
Modified: store/trunk/cpp/lib/BufferValue.cpp
===================================================================
--- store/trunk/cpp/lib/BufferValue.cpp 2007-09-05 19:22:25 UTC (rev 908)
+++ store/trunk/cpp/lib/BufferValue.cpp 2007-09-06 10:40:13 UTC (rev 909)
@@ -26,22 +26,29 @@
using namespace rhm::bdbstore;
using qpid::broker::Persistable;
-BufferValue::BufferValue(u_int32_t size, u_int64_t offset) : buffer(size)
+BufferValue::BufferValue(u_int32_t size, u_int64_t offset)
+ : data(new char[size]),
+ buffer(data, size)
{
- set_data(buffer.start());
- set_size(buffer.available());
+ set_data(data);
+ set_size(size);
set_flags(DB_DBT_USERMEM | DB_DBT_PARTIAL);
set_doff(offset);
- set_dlen(buffer.available());
- set_ulen(buffer.available());
+ set_dlen(size);
+ set_ulen(size);
}
-BufferValue::BufferValue(const Persistable& p) : buffer(p.encodedSize())
+BufferValue::BufferValue(const Persistable& p)
+ : data(new char[p.encodedSize()]),
+ buffer(data, p.encodedSize())
{
p.encode(buffer);
- buffer.flip();
- set_data(buffer.start());
- set_size(buffer.available());
+ set_data(data);
+ set_size(p.encodedSize());
}
+BufferValue::~BufferValue()
+{
+ delete [] data;
+}
Modified: store/trunk/cpp/lib/BufferValue.h
===================================================================
--- store/trunk/cpp/lib/BufferValue.h 2007-09-05 19:22:25 UTC (rev 908)
+++ store/trunk/cpp/lib/BufferValue.h 2007-09-06 10:40:13 UTC (rev 909)
@@ -33,11 +33,14 @@
class BufferValue : public Dbt
{
+ char* data;
+
public:
qpid::framing::Buffer buffer;
BufferValue(u_int32_t size, u_int64_t offset);
BufferValue(const qpid::broker::Persistable& p);
+ ~BufferValue();
};
}}