[rhmessaging-commits] rhmessaging commits: r1576 - in store/trunk/cpp: tests/jrnl/jtt and 1 other directory.
rhmessaging-commits at lists.jboss.org
rhmessaging-commits at lists.jboss.org
Fri Jan 18 16:42:51 EST 2008
Author: kpvdr
Date: 2008-01-18 16:42:51 -0500 (Fri, 18 Jan 2008)
New Revision: 1576
Modified:
store/trunk/cpp/lib/jrnl/data_tok.cpp
store/trunk/cpp/lib/jrnl/wmgr.cpp
store/trunk/cpp/tests/jrnl/jtt/jrnl_instance.cpp
store/trunk/cpp/tests/jrnl/jtt/jrnl_instance.hpp
store/trunk/cpp/tests/jrnl/jtt/main.cpp
Log:
Further bugfixes
Modified: store/trunk/cpp/lib/jrnl/data_tok.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/data_tok.cpp 2008-01-18 20:49:35 UTC (rev 1575)
+++ store/trunk/cpp/lib/jrnl/data_tok.cpp 2008-01-18 21:42:51 UTC (rev 1576)
@@ -51,6 +51,7 @@
_dblks_read(0),
_rid(0),
_xid(),
+ _dequeue_rid(0),
_external_rid(false)
{
pthread_mutex_init(&_mutex, 0);
Modified: store/trunk/cpp/lib/jrnl/wmgr.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/wmgr.cpp 2008-01-18 20:49:35 UTC (rev 1575)
+++ store/trunk/cpp/lib/jrnl/wmgr.cpp 2008-01-18 21:42:51 UTC (rev 1576)
@@ -37,6 +37,8 @@
#include <jrnl/jcntl.hpp>
#include <jrnl/jerrno.hpp>
+#include <iostream> // debug
+
namespace rhm
{
namespace journal
@@ -149,6 +151,7 @@
if (!cont)
{
dtokp->set_rid(rid);
+ dtokp->set_dequeue_rid(0);
if (xid_len)
dtokp->set_xid(xid_ptr, xid_len);
else
@@ -425,17 +428,19 @@
}
}
else
+ {
_abort_busy = true;
+ dtokp->set_dblocks_written(0); // Reset dblks_written from previous op
+ }
- u_int64_t rid = dtokp->rid() ? dtokp->rid() : (cont ? _wrfc.rid() - 1 : _wrfc.get_incr_rid());
+ u_int64_t rid = dtokp->external_rid() ? dtokp->rid() :
+ (cont ? _wrfc.rid() - 1 : _wrfc.get_incr_rid());
_txn_rec.reset(RHM_JDAT_TXA_MAGIC, rid, xid_ptr, xid_len, _wrfc.owi());
if (!cont)
{
dtokp->set_rid(rid);
- if (xid_len)
- dtokp->set_xid(xid_ptr, xid_len);
- else
- dtokp->clear_xid();
+ dtokp->set_dequeue_rid(0);
+ dtokp->set_xid(xid_ptr, xid_len);
}
bool done = false;
while (!done)
@@ -571,17 +576,19 @@
}
}
else
+ {
_commit_busy = true;
+ dtokp->set_dblocks_written(0); // Reset dblks_written from previous op
+ }
- u_int64_t rid = dtokp->rid() ? dtokp->rid() : (cont ? _wrfc.rid() - 1 : _wrfc.get_incr_rid());
+ u_int64_t rid = dtokp->external_rid() ? dtokp->rid() :
+ (cont ? _wrfc.rid() - 1 : _wrfc.get_incr_rid());
_txn_rec.reset(RHM_JDAT_TXC_MAGIC, rid, xid_ptr, xid_len, _wrfc.owi());
if (!cont)
{
dtokp->set_rid(rid);
- if (xid_len)
- dtokp->set_xid(xid_ptr, xid_len);
- else
- dtokp->clear_xid();
+ dtokp->set_dequeue_rid(0);
+ dtokp->set_xid(xid_ptr, xid_len);
}
bool done = false;
while (!done)
@@ -844,7 +851,7 @@
break;
default:
std::ostringstream oss;
- oss << "dtok_id=" << dtp->id() << "dtok_state=" << dtp->wstate_str();
+ oss << "dtok_id=" << dtp->id() << " dtok_state=" << dtp->wstate_str();
throw jexception(jerrno::JERR_WMGR_BADDTOKSTATE, oss.str(), "wmgr",
"get_events");
}
Modified: store/trunk/cpp/tests/jrnl/jtt/jrnl_instance.cpp
===================================================================
--- store/trunk/cpp/tests/jrnl/jtt/jrnl_instance.cpp 2008-01-18 20:49:35 UTC (rev 1575)
+++ store/trunk/cpp/tests/jrnl/jtt/jrnl_instance.cpp 2008-01-18 21:42:51 UTC (rev 1576)
@@ -113,9 +113,9 @@
void
jrnl_instance::tc_wait_compl()
{
+ ::pthread_join(_read_thread, 0);
+ ::pthread_join(_deq_thread, 0);
::pthread_join(_enq_thread, 0);
- ::pthread_join(_deq_thread, 0);
- ::pthread_join(_read_thread, 0);
stop(true);
_tcrp->set_stop_time();
_tcp->add_result(_tcrp);
@@ -231,6 +231,7 @@
{
sleep_cnt = 0U;
_tcrp->incr_num_deq();
+ commit(dtokp);
}
else
{
@@ -261,6 +262,44 @@
jrnl_instance::run_read() throw ()
{}
+void
+jrnl_instance::abort(const rhm::journal::data_tok* dtokp)
+{
+ txn(dtokp, false);
+}
+
+void
+jrnl_instance::commit(const rhm::journal::data_tok* dtokp)
+{
+ txn(dtokp, true);
+}
+
+void
+jrnl_instance::txn(const rhm::journal::data_tok* dtokp, const bool commit)
+{
+ if (dtokp->has_xid())
+ {
+ rhm::journal::data_tok* p = prep_txn_dtok(dtokp);
+ rhm::journal::iores res = commit ? txn_commit(p, p->xid()) : txn_abort(p, p->xid());
+ if (res != rhm::journal::RHM_IORES_SUCCESS)
+ {
+ std::ostringstream oss;
+ oss << "ERROR: " << (commit ? "commit" : "abort") << " operation in journal \"";
+ oss << _jid << "\" returned " << rhm::journal::iores_str(res) << ".";
+ _tcrp->set_exception(oss.str());
+ }
+ }
+}
+
+rhm::journal::data_tok*
+jrnl_instance::prep_txn_dtok(const rhm::journal::data_tok* dtokp)
+{
+ dtok_ptr p(new rhm::journal::data_tok);
+ _dtok_master_list.push_back(p);
+ p->set_xid(dtokp->xid());
+ return p.get();
+}
+
// static AIO callback fns
void
Modified: store/trunk/cpp/tests/jrnl/jtt/jrnl_instance.hpp
===================================================================
--- store/trunk/cpp/tests/jrnl/jtt/jrnl_instance.hpp 2008-01-18 20:49:35 UTC (rev 1575)
+++ store/trunk/cpp/tests/jrnl/jtt/jrnl_instance.hpp 2008-01-18 21:42:51 UTC (rev 1576)
@@ -90,6 +90,11 @@
void run_read() throw ();
inline static void* run_read(void* p)
{ static_cast<jrnl_instance*>(p)->run_read(); return 0; }
+
+ void abort(const rhm::journal::data_tok* dtokp);
+ void commit(const rhm::journal::data_tok* dtokp);
+ void txn(const rhm::journal::data_tok* dtokp, const bool commit);
+ rhm::journal::data_tok* prep_txn_dtok(const rhm::journal::data_tok* dtokp);
// static callbacks
static void aio_wr_callback(jcntl* journal, std::vector<journal::data_tok*>& dtokl);
Modified: store/trunk/cpp/tests/jrnl/jtt/main.cpp
===================================================================
--- store/trunk/cpp/tests/jrnl/jtt/main.cpp 2008-01-18 20:49:35 UTC (rev 1575)
+++ store/trunk/cpp/tests/jrnl/jtt/main.cpp 2008-01-18 21:42:51 UTC (rev 1576)
@@ -51,21 +51,21 @@
po::options_description od(oss.str());
od.add_options()
("help", "This help message")
- ("num_jrnls", po::value<unsigned>(&num_jrnls)->default_value(1),
+ ("num-jrnls", po::value<unsigned>(&num_jrnls)->default_value(1),
"Number of simultaneous journal instances to test")
- ("test_case_csv", po::value<std::string>(&test_case_csv_file_name)->default_value("jtt.csv"),
+ ("csv", po::value<std::string>(&test_case_csv_file_name)->default_value("jtt.csv"),
"CSV file containing test cases")
- ("jrnl_format_chk", po::value<bool>(&jrnl_format_chk)->zero_tokens(),
+ ("jrnl-format-chk", po::value<bool>(&jrnl_format_chk)->zero_tokens(),
"If true, will check the format of each journal file")
- ("reuse_instance", po::value<bool>(&reuse_instance)->zero_tokens(),
+ ("reuse-instance", po::value<bool>(&reuse_instance)->zero_tokens(),
"If true, will cause first journal instance to be reused for all test cases")
- ("recover_mode", po::value<bool>(&recover_mode)->zero_tokens(),
+ ("recover-mode", po::value<bool>(&recover_mode)->zero_tokens(),
"If true, will cause the journal from the previous test to be recovered")
- ("random_test_order", po::value<bool>(&random_test_order)->zero_tokens(),
+ ("random-test-order", po::value<bool>(&random_test_order)->zero_tokens(),
"If true, will randomize the order of the tests in the csv file")
("repeat", po::value<bool>(&repeat_flag)->zero_tokens(),
"If true, will repeat tests in csv file indefinitely")
- ("keep_jrnls", po::value<bool>(&keep_jrnls)->zero_tokens(),
+ ("keep-jrnls", po::value<bool>(&keep_jrnls)->zero_tokens(),
"If true, will keep all test journals in backup dirs");
po::variables_map vmap;
try
@@ -114,8 +114,12 @@
return 0;
}
- rhm::jtt::test_mgr tm(num_jrnls);
- tm.run(test_case_csv_file_name, jrnl_format_chk, reuse_instance, recover_mode,
- random_test_order, repeat_flag, keep_jrnls);
+ try
+ {
+ rhm::jtt::test_mgr tm(num_jrnls);
+ tm.run(test_case_csv_file_name, jrnl_format_chk, reuse_instance, recover_mode,
+ random_test_order, repeat_flag, keep_jrnls);
+ }
+ catch (const std::exception& e) { std::cerr << e.what() << std::endl; return 1; }
return 0;
}
More information about the rhmessaging-commits
mailing list