[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