summaryrefslogtreecommitdiff
path: root/cpp/src/qpid/linearstore/journal/RecoveryManager.cpp
diff options
context:
space:
mode:
authorKim van der Riet <kpvdr@apache.org>2014-01-09 17:26:10 +0000
committerKim van der Riet <kpvdr@apache.org>2014-01-09 17:26:10 +0000
commit27a33cae759d317658a46fa5afe22adaa4aed594 (patch)
treee5bdc059a322b4f73a9c171e82fefe14dd7e0497 /cpp/src/qpid/linearstore/journal/RecoveryManager.cpp
parent01eb49eba283d02dd7291eff5b276e2d3a638521 (diff)
downloadqpid-python-27a33cae759d317658a46fa5afe22adaa4aed594.tar.gz
QPID-5460: [linearstore] Recovery of store which contains prepared but incomplete transactions results in message loss
git-svn-id: https://svn.apache.org/repos/asf/qpid/trunk/qpid@1556892 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'cpp/src/qpid/linearstore/journal/RecoveryManager.cpp')
-rw-r--r--cpp/src/qpid/linearstore/journal/RecoveryManager.cpp19
1 files changed, 9 insertions, 10 deletions
diff --git a/cpp/src/qpid/linearstore/journal/RecoveryManager.cpp b/cpp/src/qpid/linearstore/journal/RecoveryManager.cpp
index 6050d6e899..67ad8a04a0 100644
--- a/cpp/src/qpid/linearstore/journal/RecoveryManager.cpp
+++ b/cpp/src/qpid/linearstore/journal/RecoveryManager.cpp
@@ -117,14 +117,13 @@ void RecoveryManager::analyzeJournals(const std::vector<std::string>* preparedTr
std::vector<std::string>::const_iterator pitr =
std::find(preparedTransactionListPtr->begin(), preparedTransactionListPtr->end(), *itr);
if (pitr == preparedTransactionListPtr->end()) { // not found in prepared list
- txn_data_list tdl = transactionMapRef_.get_remove_tdata_list(*itr); // tdl will be empty if xid not found
+ txn_data_list_t tdl = transactionMapRef_.get_remove_tdata_list(*itr); // tdl will be empty if xid not found
// Unlock any affected enqueues in emap
- for (tdl_itr i=tdl.begin(); i<tdl.end(); i++) {
+ for (tdl_itr_t i=tdl.begin(); i<tdl.end(); i++) {
if (i->enq_flag_) { // enq op - decrement enqueue count
fileNumberMap_[i->pfid_]->decrEnqueuedRecordCount();
} else if (enqueueMapRef_.is_enqueued(i->drid_, true)) { // deq op - unlock enq record
- int16_t ret = enqueueMapRef_.unlock(i->drid_);
- if (ret < enq_map::EMAP_OK) { // fail
+ if (enqueueMapRef_.unlock(i->drid_) < enq_map::EMAP_OK) { // fail
// enq_map::unlock()'s only error is enq_map::EMAP_RID_NOT_FOUND
std::ostringstream oss;
oss << std::hex << "_emap.unlock(): drid=0x\"" << i->drid_;
@@ -669,8 +668,8 @@ bool RecoveryManager::getNextRecordHeader()
throw jexception(jerrno::JERR_RCVM_NULLXID, "ABT", "RecoveryManager", "getNextRecordHeader");
}
std::string xid((char*)xidp, ar.xid_size());
- txn_data_list tdl = transactionMapRef_.get_remove_tdata_list(xid); // tdl will be empty if xid not found
- for (tdl_itr itr = tdl.begin(); itr != tdl.end(); itr++) {
+ txn_data_list_t tdl = transactionMapRef_.get_remove_tdata_list(xid); // tdl will be empty if xid not found
+ for (tdl_itr_t itr = tdl.begin(); itr != tdl.end(); itr++) {
if (itr->enq_flag_) {
fileNumberMap_[itr->pfid_]->decrEnqueuedRecordCount();
} else {
@@ -697,8 +696,8 @@ bool RecoveryManager::getNextRecordHeader()
throw jexception(jerrno::JERR_RCVM_NULLXID, "CMT", "RecoveryManager", "getNextRecordHeader");
}
std::string xid((char*)xidp, cr.xid_size());
- txn_data_list tdl = transactionMapRef_.get_remove_tdata_list(xid); // tdl will be empty if xid not found
- for (tdl_itr itr = tdl.begin(); itr != tdl.end(); itr++) {
+ txn_data_list_t tdl = transactionMapRef_.get_remove_tdata_list(xid); // tdl will be empty if xid not found
+ for (tdl_itr_t itr = tdl.begin(); itr != tdl.end(); itr++) {
if (itr->enq_flag_) { // txn enqueue
//std::cout << "[rid=0x" << std::hex << itr->rid_ << std::dec << " fid=" << itr->pfid_ << " fpos=0x" << std::hex << itr->foffs_ << "]" << std::dec << std::flush; // DEBUG
if (enqueueMapRef_.insert_pfid(itr->rid_, itr->pfid_, itr->foffs_) < enq_map::EMAP_OK) { // fail
@@ -766,8 +765,8 @@ void RecoveryManager::prepareRecordList() {
std::vector<std::string> xidList;
transactionMapRef_.xid_list(xidList);
for (std::vector<std::string>::const_iterator j=xidList.begin(); j!=xidList.end(); ++j) {
- qpid::linearstore::journal::txn_data_list tdsl = transactionMapRef_.get_tdata_list(*j);
- for (qpid::linearstore::journal::tdl_itr k=tdsl.begin(); k!=tdsl.end(); ++k) {
+ qpid::linearstore::journal::txn_data_list_t tdsl = transactionMapRef_.get_tdata_list(*j);
+ for (qpid::linearstore::journal::tdl_itr_t k=tdsl.begin(); k!=tdsl.end(); ++k) {
if (k->enq_flag_) {
recordIdList_.push_back(RecoveredRecordData_t(k->rid_, k->pfid_, k->foffs_, true));
}