[rhmessaging-commits] rhmessaging commits: r2059 - in store/trunk/cpp/lib: jrnl and 1 other directory.
rhmessaging-commits at lists.jboss.org
rhmessaging-commits at lists.jboss.org
Fri May 16 10:32:46 EDT 2008
Author: kpvdr
Date: 2008-05-16 10:32:46 -0400 (Fri, 16 May 2008)
New Revision: 2059
Modified:
store/trunk/cpp/lib/JournalImpl.cpp
store/trunk/cpp/lib/jrnl/rmgr.cpp
store/trunk/cpp/lib/jrnl/wmgr.cpp
Log:
Logic fix for BZ446096 "flow to disk not working with journal". This fixes the JERR_RMGR_UNKNOWNMAGIC exception.
Modified: store/trunk/cpp/lib/JournalImpl.cpp
===================================================================
--- store/trunk/cpp/lib/JournalImpl.cpp 2008-05-15 23:03:35 UTC (rev 2058)
+++ store/trunk/cpp/lib/JournalImpl.cpp 2008-05-16 14:32:46 UTC (rev 2059)
@@ -237,20 +237,22 @@
::free(_datap);
_datap = 0;
}
- _dlen = 0;
- _dtok.reset();
- _dtok.set_rid(rid);
- _dtok.set_wstate(DataTokenImpl::ENQ);
_external = false;
size_t xlen = 0;
bool transient = false;
bool done = false;
+ bool rid_found = false;
unsigned aio_sleep_cnt = 0;
while (!done)
{
- iores res = read_data_record(&_datap, _dlen, &_xidp, xlen, transient, _external,
- &_dtok);
- if (res == journal::RHM_IORES_SUCCESS) {
+ _dlen = 0;
+ _dtok.reset();
+ _dtok.set_wstate(DataTokenImpl::ENQ);
+ _dtok.set_rid(0);
+ iores res = read_data_record(&_datap, _dlen, &_xidp, xlen, transient, _external, &_dtok);
+ bool rid_low = _dtok.rid() < rid;
+ rid_found = _dtok.rid() == rid;
+ if (res == journal::RHM_IORES_SUCCESS && !rid_low) {
done = true;
} else if (res == journal::RHM_IORES_PAGE_AIOWAIT) {
if (++aio_sleep_cnt <= MAX_AIO_SLEEPS) {
@@ -262,12 +264,17 @@
ss << "; exceeded maximum wait time";
throw jexception(0, ss.str().c_str(), "JournalImpl", "loadMsgContent");
}
- } else {
+ } else if (!rid_low) {
std::stringstream ss;
ss << "read_data_record() returned " << journal::iores_str(res);
throw jexception(0, ss.str().c_str(), "JournalImpl", "loadMsgContent");
}
}
+ if (!rid_found) {
+ std::stringstream ss;
+ ss << "read_data_record() was unable to find rid " << rid << "; last rid found was " << _dtok.rid();
+ throw jexception(0, ss.str().c_str(), "JournalImpl", "loadMsgContent");
+ }
}
if (_external)
return false;
Modified: store/trunk/cpp/lib/jrnl/rmgr.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/rmgr.cpp 2008-05-15 23:03:35 UTC (rev 2058)
+++ store/trunk/cpp/lib/jrnl/rmgr.cpp 2008-05-16 14:32:46 UTC (rev 2059)
@@ -89,8 +89,8 @@
}
iores
-rmgr::read(void** const datapp, std::size_t& dsize, void** const xidpp, std::size_t& xidsize, bool& transient,
- bool& external, data_tok* dtokp)
+rmgr::read(void** const datapp, std::size_t& dsize, void** const xidpp, std::size_t& xidsize,
+ bool& transient, bool& external, data_tok* dtokp)
{
iores res = pre_read_check(dtokp);
if (res != RHM_IORES_SUCCESS)
Modified: store/trunk/cpp/lib/jrnl/wmgr.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/wmgr.cpp 2008-05-15 23:03:35 UTC (rev 2058)
+++ store/trunk/cpp/lib/jrnl/wmgr.cpp 2008-05-16 14:32:46 UTC (rev 2059)
@@ -117,9 +117,9 @@
}
iores
-wmgr::enqueue(const void* const data_buff, const std::size_t tot_data_len, const std::size_t this_data_len,
- data_tok* dtokp, const void* const xid_ptr, const std::size_t xid_len, const bool transient,
- const bool external)
+wmgr::enqueue(const void* const data_buff, const std::size_t tot_data_len,
+ const std::size_t this_data_len, data_tok* dtokp, const void* const xid_ptr,
+ const std::size_t xid_len, const bool transient, const bool external)
{
if (xid_len)
assert(xid_ptr != 0);
More information about the rhmessaging-commits
mailing list