Author: kpvdr
Date: 2007-10-05 16:46:46 -0400 (Fri, 05 Oct 2007)
New Revision: 965
Modified:
store/trunk/cpp/lib/TxnCtxt.h
store/trunk/cpp/lib/jrnl/README
store/trunk/cpp/lib/jrnl/data_tok.cpp
store/trunk/cpp/lib/jrnl/data_tok.hpp
store/trunk/cpp/lib/jrnl/deq_rec.cpp
store/trunk/cpp/lib/jrnl/deq_rec.hpp
store/trunk/cpp/lib/jrnl/enq_rec.cpp
store/trunk/cpp/lib/jrnl/enq_rec.hpp
store/trunk/cpp/lib/jrnl/file_hdr.hpp
store/trunk/cpp/lib/jrnl/jcfg.hpp
store/trunk/cpp/lib/jrnl/jcntl.cpp
store/trunk/cpp/lib/jrnl/jcntl.hpp
store/trunk/cpp/lib/jrnl/pmgr.cpp
store/trunk/cpp/lib/jrnl/pmgr.hpp
store/trunk/cpp/lib/jrnl/txn_rec.cpp
store/trunk/cpp/lib/jrnl/txn_rec.hpp
store/trunk/cpp/lib/jrnl/wmgr.cpp
store/trunk/cpp/lib/jrnl/wmgr.hpp
store/trunk/cpp/tests/jrnl/janalyze.py
store/trunk/cpp/tests/jrnl/jtest.cpp
store/trunk/cpp/tests/jrnl/msg_producer.cpp
store/trunk/cpp/tests/jrnl/msg_producer.hpp
store/trunk/cpp/tests/jrnl/rtest
store/trunk/cpp/tests/jrnl/rtests.csv
store/trunk/cpp/tests/jrnl/rwtests.csv
store/trunk/cpp/tests/jrnl/tests.ods
store/trunk/cpp/tests/jrnl/wtests.csv
Log:
Transaction encoding path complete, txn decode path still incomplete
Modified: store/trunk/cpp/lib/TxnCtxt.h
===================================================================
--- store/trunk/cpp/lib/TxnCtxt.h 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/lib/TxnCtxt.h 2007-10-05 20:46:46 UTC (rev 965)
@@ -62,11 +62,13 @@
void completeTXN(bool commit){
for (TxnCtxt::ipqdef::iterator i = impactedQueues.begin(); i != impactedQueues.end();
i++) {
journal::jcntl* jc =
static_cast<journal::jcntl*>((*i)->getExternalQueueStore());
- if (jc) /* if using journal */
+ if (jc) { /* if using journal */
+ journal::data_tok* dtokp = new journal::data_tok;
if (commit)
- jc->txn_commit(getXid());
+ jc->txn_commit(dtokp, getXid());
else
- jc->txn_abort(getXid());
+ jc->txn_abort(dtokp, getXid());
+ }
}
deleteXidRecord();
sync();
Modified: store/trunk/cpp/lib/jrnl/README
===================================================================
--- store/trunk/cpp/lib/jrnl/README 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/lib/jrnl/README 2007-10-05 20:46:46 UTC (rev 965)
@@ -7,6 +7,8 @@
libaio-dev (run "yum install libaio-dev" as root to install)
doxygen (required to generate documentation)
+TODO: *** THIS DOC IS OUT OF DATE ****
+
Building:
---------
For manual building, use the makefile Makefile.rtest in the tests/jrnl directory.
Modified: store/trunk/cpp/lib/jrnl/data_tok.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/data_tok.cpp 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/lib/jrnl/data_tok.cpp 2007-10-05 20:46:46 UTC (rev 965)
@@ -51,6 +51,7 @@
_dblks_written(0),
_dblks_read(0),
_rid(0),
+ _xid(),
_sourceMsg(NULL)
{
pthread_mutex_init(&_mutex, NULL);
@@ -93,6 +94,22 @@
return "DEQ_SUBM";
case DEQ:
return "DEQ";
+ case ABORT_CACHED:
+ return "ABORT_CACHED";
+ case ABORT_PART:
+ return "ABORT_PART";
+ case ABORT_SUBM:
+ return "ABORT_SUBM";
+ case ABORTED:
+ return "ABORTED";
+ case COMMIT_CACHED:
+ return "COMMIT_CACHED";
+ case COMMIT_PART:
+ return "COMMIT_PART";
+ case COMMIT_SUBM:
+ return "COMMIT_SUBM";
+ case COMMITTED:
+ return "COMMITTED";
}
// Not using default: forces compiler to ensure all cases are covered.
return "<wstate unknown>";
@@ -144,6 +161,7 @@
_dblks_written = 0;
_dblks_read = 0;
_rid = 0;
+ _xid.clear();
}
} // namespace journal
Modified: store/trunk/cpp/lib/jrnl/data_tok.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/data_tok.hpp 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/lib/jrnl/data_tok.hpp 2007-10-05 20:46:46 UTC (rev 965)
@@ -67,6 +67,9 @@
class data_tok
{
public:
+ // TODO: Fix this, separate write state from operation
+ // ie: wstate = NONE, CACHED, PART, SUBM, COMPL
+ // op = ENQUEUE, DEQUEUE, ABORT, COMMIT
enum write_state
{
NONE, ///< Data block not sent to journal
@@ -77,7 +80,15 @@
DEQ_CACHED, ///< Data block dequeue written to page cache
DEQ_PART, ///< Data block part-submitted to AIO, waiting for page buffer
to free up
DEQ_SUBM, ///< Data block dequeue submitted to AIO
- DEQ ///< Data block dequeue AIO write complete (dequeue complete)
+ DEQ, ///< Data block dequeue AIO write complete (dequeue complete)
+ ABORT_CACHED,
+ ABORT_PART,
+ ABORT_SUBM,
+ ABORTED,
+ COMMIT_CACHED,
+ COMMIT_PART,
+ COMMIT_SUBM,
+ COMMITTED
};
enum read_state
@@ -98,6 +109,7 @@
u_int32_t _dblks_written; ///< Data blocks read/written
u_int32_t _dblks_read; ///< Data blocks read/written
u_int64_t _rid; ///< RID of data set by enqueue operation
+ std::string _xid; ///< XID set by enqueue operation
u_int64_t _dequeue_rid; ///< RID of data set by dequeue operation
qpid::broker::PersistableMessage* _sourceMsg; ///< Pointer back to source
Message in Broker
@@ -109,10 +121,10 @@
inline void setSourceMessage(qpid::broker::PersistableMessage* msg) {_sourceMsg =
msg;}
inline const u_int64_t id() const { return _icnt; }
- inline const write_state wstate() const {return _wstate; }
+ inline const write_state wstate() const { return _wstate; }
const char* wstate_str() const;
static const char* wstate_str(write_state wstate);
- inline const read_state rstate() const {return _rstate; }
+ inline const read_state rstate() const { return _rstate; }
const char* rstate_str() const;
static const char* rstate_str(read_state rstate);
inline const bool is_writable() const { return _wstate == NONE || _wstate ==
ENQ_PART; }
@@ -138,6 +150,14 @@
inline void set_rid(const u_int64_t rid) { _rid = rid; }
inline const u_int64_t dequeue_rid() const throw (jexception) {return
_dequeue_rid; }
inline void set_dequeue_rid(const u_int64_t rid) { _dequeue_rid = rid; }
+
+ inline const bool has_xid() const { return !_xid.empty(); }
+ inline const std::string& xid() const { return _xid; }
+ inline void clear_xid() { _xid.clear(); }
+ inline void set_xid(const std::string& xid) { _xid.assign(xid); }
+ inline void set_xid(const void* xidp, const size_t xid_len)
+ { _xid.assign((const char*)xidp, xid_len); }
+
void reset();
};
Modified: store/trunk/cpp/lib/jrnl/deq_rec.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/deq_rec.cpp 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/lib/jrnl/deq_rec.cpp 2007-10-05 20:46:46 UTC (rev 965)
@@ -33,6 +33,7 @@
#include <jrnl/deq_rec.hpp>
#include <assert.h>
+#include <errno.h>
#include <iomanip>
#include <sstream>
#include <jrnl/jerrno.hpp>
@@ -44,41 +45,54 @@
deq_rec::deq_rec():
_deq_hdr(RHM_JDAT_DEQ_MAGIC, RHM_JDAT_VERSION, 0, 0, 0, 0),
- _xid(),
- _deq_tail()
-{}
-
-deq_rec::deq_rec(const u_int64_t rid, const u_int64_t drid):
- _deq_hdr(RHM_JDAT_DEQ_MAGIC, RHM_JDAT_VERSION, 0, rid, drid, 0),
- _xid(),
+ _xidp(NULL),
+ _buff(NULL),
_deq_tail(_deq_hdr._hdr)
{}
-deq_rec::deq_rec(const u_int64_t rid, const u_int64_t drid, const std::string& xid):
- _deq_hdr(RHM_JDAT_DEQ_MAGIC, RHM_JDAT_VERSION, 0, rid, drid, xid.size()),
- _xid(xid),
+deq_rec::deq_rec(const u_int64_t rid, const u_int64_t drid, const void* const xidp,
+ const size_t xidlen):
+ _deq_hdr(RHM_JDAT_DEQ_MAGIC, RHM_JDAT_VERSION, 0, rid, drid, xidlen),
+ _xidp(xidp),
+ _buff(NULL),
_deq_tail(_deq_hdr._hdr)
{}
deq_rec::~deq_rec()
-{}
+{
+ if (_buff)
+ ::free(_buff);
+}
void
-deq_rec::reset(const u_int64_t rid, const u_int64_t drid)
+deq_rec::reset()
{
- _deq_hdr._hdr._rid = rid;
- _deq_hdr._deq_rid = drid;
+ _deq_hdr._hdr._rid = 0;
+ _deq_hdr._deq_rid = 0;
_deq_hdr._xidsize = 0;
- _deq_tail._rid = rid;
+ _deq_tail._rid = 0;
+ _xidp = NULL;
+ if (_buff)
+ {
+ ::free(_buff);
+ _buff = NULL;
+ }
}
void
-deq_rec::reset(const u_int64_t rid, const u_int64_t drid, const std::string& xid)
+deq_rec::reset(const u_int64_t rid, const u_int64_t drid, const void* const xidp,
+ const size_t xidlen)
{
_deq_hdr._hdr._rid = rid;
_deq_hdr._deq_rid = drid;
- _deq_hdr._xidsize = xid.size();
+ _deq_hdr._xidsize = xidlen;
_deq_tail._rid = rid;
+ _xidp = xidp;
+ if (_buff)
+ {
+ ::free(_buff);
+ _buff = NULL;
+ }
}
u_int32_t
@@ -86,7 +100,8 @@
{
assert(wptr != NULL);
assert(max_size_dblks > 0);
- assert(_xid.size() == _deq_hdr._xidsize);
+ if (_xidp == NULL)
+ assert(_deq_hdr._xidsize == 0);
size_t rec_offs = rec_offs_dblks * JRNL_DBLK_SIZE;
size_t rem = max_size_dblks * JRNL_DBLK_SIZE;
@@ -102,7 +117,7 @@
{
if (wsize > rem)
wsize = rem;
- ::memcpy(wptr, (const char*)_xid.c_str() + rec_offs, wsize);
+ ::memcpy(wptr, (char*)_xidp + rec_offs, wsize);
wr_cnt += wsize;
rem -= wsize;
}
@@ -130,7 +145,7 @@
size_t wsize = _deq_hdr._xidsize > rec_offs ? _deq_hdr._xidsize - rec_offs
: 0;
if (wsize)
{
- ::memcpy(wptr, _xid.c_str() + rec_offs, wsize);
+ ::memcpy(wptr, (char*)_xidp + rec_offs, wsize);
wr_cnt += wsize;
}
rec_offs -= _deq_hdr._xidsize - wsize;
@@ -140,9 +155,9 @@
::memcpy((char*)wptr + wr_cnt, (char*)&_deq_tail + rec_offs, wsize);
wr_cnt += wsize;
#ifdef RHM_CLEAN
- ::memset((char*)wptr + wr_cnt, RHM_CLEAN_CHAR,
- (size_dblks(rec_size()) * JRNL_DBLK_SIZE) -
- (rec_offs_dblks * JRNL_DBLK_SIZE) - wr_cnt);
+ size_t rec_offs = rec_offs_dblks * JRNL_DBLK_SIZE;
+ size_t dblk_rec_size = size_dblks(rec_size() - rec_offs) *
JRNL_DBLK_SIZE;
+ ::memset((char*)wptr + wr_cnt, RHM_CLEAN_CHAR, dblk_rec_size - wr_cnt);
#endif
}
rec_offs -= sizeof(_deq_tail) - wsize;
@@ -161,7 +176,7 @@
if (rem)
{
wsize = rem >= _deq_hdr._xidsize ? _deq_hdr._xidsize : rem;
- ::memcpy((char*)wptr + wr_cnt, _xid.c_str(), wsize);
+ ::memcpy((char*)wptr + wr_cnt, _xidp, wsize);
wr_cnt += wsize;
rem -= wsize;
}
@@ -178,14 +193,14 @@
{
if (_deq_hdr._xidsize)
{
- ::memcpy((char*)wptr + wr_cnt, _xid.c_str(), _deq_hdr._xidsize);
+ ::memcpy((char*)wptr + wr_cnt, _xidp, _deq_hdr._xidsize);
wr_cnt += _deq_hdr._xidsize;
::memcpy((char*)wptr + wr_cnt, (void*)&_deq_tail,
sizeof(_deq_tail));
wr_cnt += sizeof(_deq_tail);
}
#ifdef RHM_CLEAN
- ::memset((char*)wptr + wr_cnt, RHM_CLEAN_CHAR,
- (size_dblks(rec_size()) * JRNL_DBLK_SIZE) - wr_cnt);
+ size_t dblk_rec_size = size_dblks(rec_size()) * JRNL_DBLK_SIZE;
+ ::memset((char*)wptr + wr_cnt, RHM_CLEAN_CHAR, dblk_rec_size - wr_cnt);
#endif
}
}
@@ -215,7 +230,7 @@
// Part of xid still outstanding, copy remainder of xid and tail
const size_t xid_offs = rec_offs - deq_hdr::size();
const size_t xid_rem = _deq_hdr._xidsize - xid_offs;
- _xid.append((char*)rptr, xid_rem);
+ ::memcpy((char*)_buff + xid_offs, rptr, xid_rem);
rd_cnt = xid_rem;
::memcpy((void*)&_deq_tail, ((char*)rptr + rd_cnt),
sizeof(_deq_tail));
chk_tail();
@@ -236,7 +251,7 @@
// Remainder of xid fits within this page, tail split
const size_t xid_offs = rec_offs - deq_hdr::size();
const size_t xid_rem = _deq_hdr._xidsize - xid_offs;
- _xid.append((char*)rptr, xid_rem);
+ ::memcpy((char*)_buff + xid_offs, rptr, xid_rem);
rd_cnt += xid_rem;
const size_t tail_rem = (max_size_dblks * JRNL_DBLK_SIZE) - rd_cnt;
if (tail_rem)
@@ -249,7 +264,7 @@
{
// Remainder of xid split
const size_t xid_cp_size = (max_size_dblks * JRNL_DBLK_SIZE);
- _xid.append((char*)rptr, xid_cp_size);
+ ::memcpy((char*)_buff + rec_offs - deq_hdr::size(), rptr, xid_cp_size);
rd_cnt += xid_cp_size;
}
}
@@ -268,6 +283,13 @@
chk_hdr();
if (_deq_hdr._xidsize)
{
+ _buff = ::malloc(_deq_hdr._xidsize);
+ if (_buff == NULL)
+ {
+ std::stringstream ss;
+ ss << "_buff malloc(): errno=" << errno;
+ throw jexception(jerrno::JERR__MALLOC, ss.str(), "deq_rec",
"decode");
+ }
const u_int32_t hdr_xid_dblks = size_dblks(deq_hdr::size() +
_deq_hdr._xidsize);
const u_int32_t hdr_xid_tail_dblks = size_dblks(enq_hdr::size() +
_deq_hdr._xidsize +
rec_tail::size());
@@ -277,16 +299,16 @@
if (hdr_xid_tail_dblks <= max_size_dblks)
{
// Entire header, xid and tail fits within this page
- ::memcpy((void*)&_deq_tail, (char*)rptr + rd_cnt +
_deq_hdr._xidsize,
- sizeof(_deq_tail));
+ ::memcpy(_buff, (char*)rptr + rd_cnt, _deq_hdr._xidsize);
+ rd_cnt += _deq_hdr._xidsize;
+ ::memcpy((void*)&_deq_tail, (char*)rptr + rd_cnt,
sizeof(_deq_tail));
+ rd_cnt += sizeof(_deq_tail);
chk_tail();
- _xid.assign((char*)rptr + rd_cnt, _deq_hdr._xidsize);
- rd_cnt += _deq_hdr._xidsize + sizeof(_deq_tail);
}
else if (hdr_xid_dblks <= max_size_dblks)
{
// Entire header and xid fit within this page, tail split
- _xid.assign((char*)rptr + rd_cnt, _deq_hdr._xidsize);
+ ::memcpy(_buff, (char*)rptr + rd_cnt, _deq_hdr._xidsize);
rd_cnt += _deq_hdr._xidsize;
const size_t tail_rem = (max_size_dblks * JRNL_DBLK_SIZE) - rd_cnt;
if (tail_rem)
@@ -299,7 +321,7 @@
{
// Header fits within this page, xid split
const size_t xid_cp_size = (max_size_dblks * JRNL_DBLK_SIZE) - rd_cnt;
- _xid.assign((char*)rptr + rd_cnt, xid_cp_size);
+ ::memcpy(_buff, (char*)rptr + rd_cnt, xid_cp_size);
rd_cnt += xid_cp_size;
}
}
@@ -314,9 +336,9 @@
ss << "deq_rec: m=" << _deq_hdr._hdr._magic;
ss << " v=" << (int)_deq_hdr._hdr._version;
ss << " rid=" << _deq_hdr._hdr._rid;
- ss << " dren=" << _deq_hdr._deq_rid;
- if (_deq_hdr._xidsize)
- ss << " xid=\"" << _xid << "\"";
+ ss << " drid=" << _deq_hdr._deq_rid;
+ if (_xidp)
+ ss << " xid=\"" << _xidp <<
"\"";
str.append(ss.str());
return str;
}
Modified: store/trunk/cpp/lib/jrnl/deq_rec.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/deq_rec.hpp 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/lib/jrnl/deq_rec.hpp 2007-10-05 20:46:46 UTC (rev 965)
@@ -55,22 +55,29 @@
class deq_rec : public jrec
{
private:
- deq_hdr _deq_hdr; ///< Dequeue header
- std::string _xid; ///< XID - empty string means no XID is set
- rec_tail _deq_tail; ///< Record tail, only encoded if XID is present
+ deq_hdr _deq_hdr; ///< Dequeue header
+ const void* _xidp; ///< xid pointer for encoding (writing to disk)
+ void* _buff; ///< Pointer to buffer to receive data read from
disk
+ rec_tail _deq_tail; ///< Record tail, only encoded if XID is present
public:
+ // constructor used for read operations and xid must have memory allocated
deq_rec();
- deq_rec(const u_int64_t rid, const u_int64_t drid);
- deq_rec(const u_int64_t rid, const u_int64_t drid, const std::string& xid);
+ // constructor used for write operations, where xid already exists
+ deq_rec(const u_int64_t rid, const u_int64_t drid, const void* const xidp,
+ const size_t xidlen);
~deq_rec();
- void reset(const u_int64_t rid, const u_int64_t drid);
- void reset(const u_int64_t rid, const u_int64_t drid, const std::string&
xid);
+ // Prepare instance for use in reading data from journal
+ void reset();
+ // Prepare instance for use in writing data to journal
+ void reset(const u_int64_t rid, const u_int64_t drid, const void* const xidp,
+ const size_t xidlen);
u_int32_t encode(void* wptr, u_int32_t rec_offs_dblks, u_int32_t max_size_dblks)
throw (jexception);
u_int32_t decode(hdr& h, void* rptr, u_int32_t rec_offs_dblks, u_int32_t
max_size_dblks)
throw (jexception);
+ inline const void* const get_xid() { return _buff; }
std::string& str(std::string& str) const;
inline const size_t data_size() const { return 0; } // This record never carries
data
const size_t xid_size() const;
Modified: store/trunk/cpp/lib/jrnl/enq_rec.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/enq_rec.cpp 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/lib/jrnl/enq_rec.cpp 2007-10-05 20:46:46 UTC (rev 965)
@@ -349,6 +349,10 @@
rd_cnt = _enq_hdr.size();
chk_hdr();
_data_size = _enq_hdr._dsize;
+ if (_enq_hdr._xidsize)
+ {
+ // TODO: Decode xid here
+ }
if (_data_size)
{
Modified: store/trunk/cpp/lib/jrnl/enq_rec.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/enq_rec.hpp 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/lib/jrnl/enq_rec.hpp 2007-10-05 20:46:46 UTC (rev 965)
@@ -56,12 +56,12 @@
{
private:
enq_hdr _enq_hdr;
- const void* _xidp; ///< xid pointer
- const void* _data; ///< Pointer to data to be written to disk
- void* _buff; ///< Pointer to buffer to receive data read
from disk
+ const void* _xidp; ///< xid pointer for encoding (for writing to
disk)
+ const void* _data; ///< Pointer to data to be written to disk
+ void* _buff; ///< Pointer to buffer to receive data read from
disk
rec_tail _enq_tail;
- size_t _max_data_size; ///< Max buffer size for decoding into during
read
- size_t _data_size; ///< Size of data (bytes)
+ size_t _max_data_size; ///< Max buffer size for decoding into during
read
+ size_t _data_size; ///< Size of data (bytes)
public:
/**
Modified: store/trunk/cpp/lib/jrnl/file_hdr.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/file_hdr.hpp 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/lib/jrnl/file_hdr.hpp 2007-10-05 20:46:46 UTC (rev 965)
@@ -336,7 +336,7 @@
* The rid field below is the rid of the dequeue record itself; the deq-rid field is
the rid of a
* previous enqueue record being dequeued by this record.
*
- * Record header info in binary format (24 bytes):
+ * Record header info in binary format (32 bytes):
* <pre>
* 0 7
* +---+---+---+---+---+---+---+---+ -+
@@ -389,7 +389,7 @@
/**
- * \brief Struct for DTX commit and abort records.
+ * \brief Struct for transaction commit and abort records.
*
* Struct for DTX commit and abort records. Only the magic distinguishes between them.
Since
* this record must be used in the context of a valid XID, the xidsize field must not
be zero.
Modified: store/trunk/cpp/lib/jrnl/jcfg.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/jcfg.hpp 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/lib/jrnl/jcfg.hpp 2007-10-05 20:46:46 UTC (rev 965)
@@ -75,8 +75,8 @@
#define JRNL_INFO_EXTENSION "jinf" ///< Extension for journal info
files
#define JRNL_DATA_EXTENSION "jdat" ///< Extension for journal data
files
-#define RHM_JDAT_DTXA_MAGIC 0x614d4852 ///< ("RHMa" in little endian)
Magic for dtx abort hdrs
-#define RHM_JDAT_DTXC_MAGIC 0x634d4852 ///< ("RHMc" in little endian)
Magic for dtx commit hdrs
+#define RHM_JDAT_TXA_MAGIC 0x614d4852 ///< ("RHMa" in little endian)
Magic for dtx abort hdrs
+#define RHM_JDAT_TXC_MAGIC 0x634d4852 ///< ("RHMc" in little endian)
Magic for dtx commit hdrs
#define RHM_JDAT_DEQ_MAGIC 0x644d4852 ///< ("RHMd" in little endian)
Magic for deq rec hdrs
#define RHM_JDAT_ENQ_MAGIC 0x654d4852 ///< ("RHMe" in little endian)
Magic for enq rec hdrs
#define RHM_JDAT_FILE_MAGIC 0x664d4852 ///< ("RHMf" in little endian)
Magic for file hdrs
Modified: store/trunk/cpp/lib/jrnl/jcntl.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/jcntl.cpp 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/lib/jrnl/jcntl.cpp 2007-10-05 20:46:46 UTC (rev 965)
@@ -245,15 +245,17 @@
}
const iores
-jcntl::txn_abort(const std::string& /*xid*/) throw (jexception)
+jcntl::txn_abort(data_tok* const dtokp, const std::string& xid) throw (jexception)
{
- return RHM_IORES_NOTIMPL;
+ check_wstatus("txn_abort");
+ return _wmgr.abort(dtokp, xid.c_str(), xid.size());
}
const iores
-jcntl::txn_commit(const std::string& /*xid*/) throw (jexception)
+jcntl::txn_commit(data_tok* const dtokp, const std::string& xid) throw (jexception)
{
- return RHM_IORES_NOTIMPL;
+ check_wstatus("txn_commit");
+ return _wmgr.commit(dtokp, xid.c_str(), xid.size());
}
const bool
Modified: store/trunk/cpp/lib/jrnl/jcntl.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/jcntl.hpp 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/lib/jrnl/jcntl.hpp 2007-10-05 20:46:46 UTC (rev 965)
@@ -447,7 +447,7 @@
*
* \exception TODO
*/
- const iores txn_abort(const std::string& xid) throw (jexception);
+ const iores txn_abort(data_tok* const dtokp, const std::string& xid) throw
(jexception);
/**
* \brief Commit the transaction for all records enqueued or dequeued with the
matching xid.
@@ -460,7 +460,7 @@
*
* \exception TODO
*/
- const iores txn_commit(const std::string& xid) throw (jexception);
+ const iores txn_commit(data_tok* const dtokp, const std::string& xid) throw
(jexception);
/**
* \brief Check whether all the enqueue records for the given xid have reached
disk.
Modified: store/trunk/cpp/lib/jrnl/pmgr.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/pmgr.cpp 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/lib/jrnl/pmgr.cpp 2007-10-05 20:46:46 UTC (rev 965)
@@ -89,6 +89,9 @@
_pg_cntr(0),
_pg_offset_dblks(0),
_aio_evt_rem(0),
+ _enq_rec(),
+ _deq_rec(),
+ _txn_rec(),
_cb(NULL)
{}
@@ -110,6 +113,8 @@
_pg_offset_dblks(0),
_aio_evt_rem(0),
_enq_rec(),
+ _deq_rec(),
+ _txn_rec(),
_cb(NULL)
{
initialize();
Modified: store/trunk/cpp/lib/jrnl/pmgr.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/pmgr.hpp 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/lib/jrnl/pmgr.hpp 2007-10-05 20:46:46 UTC (rev 965)
@@ -132,8 +132,6 @@
deq_rec _deq_rec; ///< Dequeue record used for
encoding/decoding
txn_rec _txn_rec; ///< Transaction record used for
encoding/decoding
- // TODO: move _cb down to wmgr, it is the only class that uses it There is no
need for
- // read callbacks based on AIO. - (check this asertion)
aio_cb _cb; ///< Callback function pointer for AIO events
public:
Modified: store/trunk/cpp/lib/jrnl/txn_rec.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/txn_rec.cpp 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/lib/jrnl/txn_rec.cpp 2007-10-05 20:46:46 UTC (rev 965)
@@ -33,6 +33,7 @@
#include <jrnl/txn_rec.hpp>
#include <assert.h>
+#include <errno.h>
#include <iomanip>
#include <sstream>
#include <jrnl/jerrno.hpp>
@@ -44,39 +45,58 @@
txn_rec::txn_rec():
_txn_hdr(),
- _xid(),
- _dtx_tail()
-{}
+ _xidp(NULL),
+ _buff(NULL),
+ _txn_tail()
+{
+ _txn_hdr._hdr._version = RHM_JDAT_VERSION;
+}
-txn_rec::txn_rec(const u_int32_t magic, const u_int64_t rid):
- _txn_hdr(magic, RHM_JDAT_VERSION, 0, rid, 0),
- _xid(),
- _dtx_tail(_txn_hdr._hdr)
+txn_rec::txn_rec(const u_int32_t magic, const u_int64_t rid, const void* const xidp,
+ const size_t xidlen):
+ _txn_hdr(magic, RHM_JDAT_VERSION, 0, rid, xidlen),
+ _xidp(xidp),
+ _buff(NULL),
+ _txn_tail(_txn_hdr._hdr)
{}
-txn_rec::txn_rec(const u_int32_t magic, const u_int64_t rid, const std::string&
xid):
- _txn_hdr(magic, RHM_JDAT_VERSION, 0, rid, xid.size()),
- _xid(xid),
- _dtx_tail(_txn_hdr._hdr)
-{}
-
txn_rec::~txn_rec()
-{}
+{
+ if (_buff)
+ ::free(_buff);
+}
void
-txn_rec::reset(const u_int64_t rid)
+txn_rec::reset(const u_int32_t magic)
{
- _txn_hdr._hdr._rid = rid;
+ _txn_hdr._hdr._magic = magic;
+ _txn_hdr._hdr._rid = 0;
_txn_hdr._xidsize = 0;
- _dtx_tail._rid = rid;
+ _xidp = NULL;
+ if (_buff)
+ {
+ ::free(_buff);
+ _buff = NULL;
+ }
+ _txn_tail._xmagic = ~magic;
+ _txn_tail._rid = 0;
}
void
-txn_rec::reset(const u_int64_t rid, const std::string& xid)
+txn_rec::reset(const u_int32_t magic, const u_int64_t rid, const void* const xidp,
+ const size_t xidlen)
{
+ _txn_hdr._hdr._magic = magic;
_txn_hdr._hdr._rid = rid;
- _txn_hdr._xidsize = xid.size();
- _dtx_tail._rid = rid;
+ _txn_hdr._xidsize = xidlen;
+ _xidp = xidp;
+ if (_buff)
+ {
+ ::free(_buff);
+ _buff = NULL;
+ }
+ _txn_tail._xmagic = ~magic;
+ _txn_tail._rid = rid;
}
u_int32_t
@@ -84,8 +104,7 @@
{
assert(wptr != NULL);
assert(max_size_dblks > 0);
- assert(_xid.size() == _txn_hdr._xidsize);
- assert(_txn_hdr._xidsize > 0);
+ assert(_xidp != NULL && _txn_hdr._xidsize > 0);
size_t rec_offs = rec_offs_dblks * JRNL_DBLK_SIZE;
size_t rem = max_size_dblks * JRNL_DBLK_SIZE;
@@ -101,24 +120,24 @@
{
if (wsize > rem)
wsize = rem;
- ::memcpy(wptr, (const char*)_xid.c_str() + rec_offs, wsize);
+ ::memcpy(wptr, (char*)_xidp + rec_offs, wsize);
wr_cnt += wsize;
rem -= wsize;
}
rec_offs -= _txn_hdr._xidsize - wsize2;
if (rem)
{
- wsize = sizeof(_dtx_tail) > rec_offs ? sizeof(_dtx_tail) - rec_offs :
0;
+ wsize = sizeof(_txn_tail) > rec_offs ? sizeof(_txn_tail) - rec_offs :
0;
wsize2 = wsize;
if (wsize)
{
if (wsize > rem)
wsize = rem;
- ::memcpy((char*)wptr + wr_cnt, (char*)&_dtx_tail + rec_offs,
wsize);
+ ::memcpy((char*)wptr + wr_cnt, (char*)&_txn_tail + rec_offs,
wsize);
wr_cnt += wsize;
rem -= wsize;
}
- rec_offs -= sizeof(_dtx_tail) - wsize2;
+ rec_offs -= sizeof(_txn_tail) - wsize2;
}
assert(rem == 0);
assert(rec_offs == 0);
@@ -129,22 +148,22 @@
size_t wsize = _txn_hdr._xidsize > rec_offs ? _txn_hdr._xidsize - rec_offs
: 0;
if (wsize)
{
- ::memcpy(wptr, _xid.c_str() + rec_offs, wsize);
+ ::memcpy(wptr, (char*)_xidp + rec_offs, wsize);
wr_cnt += wsize;
}
rec_offs -= _txn_hdr._xidsize - wsize;
- wsize = sizeof(_dtx_tail) > rec_offs ? sizeof(_dtx_tail) - rec_offs : 0;
+ wsize = sizeof(_txn_tail) > rec_offs ? sizeof(_txn_tail) - rec_offs : 0;
if (wsize)
{
- ::memcpy((char*)wptr + wr_cnt, (char*)&_dtx_tail + rec_offs, wsize);
+ ::memcpy((char*)wptr + wr_cnt, (char*)&_txn_tail + rec_offs, wsize);
wr_cnt += wsize;
#ifdef RHM_CLEAN
- ::memset((char*)wptr + wr_cnt, RHM_CLEAN_CHAR,
- (size_dblks(rec_size()) * JRNL_DBLK_SIZE) -
- (rec_offs_dblks * JRNL_DBLK_SIZE) - wr_cnt);
+ size_t rec_offs = rec_offs_dblks * JRNL_DBLK_SIZE;
+ size_t dblk_rec_size = size_dblks(rec_size() - rec_offs) *
JRNL_DBLK_SIZE;
+ ::memset((char*)wptr + wr_cnt, RHM_CLEAN_CHAR, dblk_rec_size - wr_cnt);
#endif
}
- rec_offs -= sizeof(_dtx_tail) - wsize;
+ rec_offs -= sizeof(_txn_tail) - wsize;
assert(rec_offs == 0);
}
}
@@ -160,14 +179,14 @@
if (rem)
{
wsize = rem >= _txn_hdr._xidsize ? _txn_hdr._xidsize : rem;
- ::memcpy((char*)wptr + wr_cnt, _xid.c_str(), wsize);
+ ::memcpy((char*)wptr + wr_cnt, _xidp, wsize);
wr_cnt += wsize;
rem -= wsize;
}
if (rem)
{
- wsize = rem >= sizeof(_dtx_tail) ? sizeof(_dtx_tail) : rem;
- ::memcpy((char*)wptr + wr_cnt, (void*)&_dtx_tail, wsize);
+ wsize = rem >= sizeof(_txn_tail) ? sizeof(_txn_tail) : rem;
+ ::memcpy((char*)wptr + wr_cnt, (void*)&_txn_tail, wsize);
wr_cnt += wsize;
rem -= wsize;
}
@@ -175,16 +194,13 @@
}
else // No split required
{
- if (_txn_hdr._xidsize)
- {
- ::memcpy((char*)wptr + wr_cnt, _xid.c_str(), _txn_hdr._xidsize);
- wr_cnt += _txn_hdr._xidsize;
- ::memcpy((char*)wptr + wr_cnt, (void*)&_dtx_tail,
sizeof(_dtx_tail));
- wr_cnt += sizeof(_dtx_tail);
- }
+ ::memcpy((char*)wptr + wr_cnt, _xidp, _txn_hdr._xidsize);
+ wr_cnt += _txn_hdr._xidsize;
+ ::memcpy((char*)wptr + wr_cnt, (void*)&_txn_tail, sizeof(_txn_tail));
+ wr_cnt += sizeof(_txn_tail);
#ifdef RHM_CLEAN
- ::memset((char*)wptr + wr_cnt, RHM_CLEAN_CHAR,
- (size_dblks(rec_size()) * JRNL_DBLK_SIZE) - wr_cnt);
+ size_t dblk_rec_size = size_dblks(rec_size()) * JRNL_DBLK_SIZE;
+ ::memset((char*)wptr + wr_cnt, RHM_CLEAN_CHAR, dblk_rec_size - wr_cnt);
#endif
}
}
@@ -214,18 +230,18 @@
// Part of xid still outstanding, copy remainder of xid and tail
const size_t xid_offs = rec_offs - deq_hdr::size();
const size_t xid_rem = _txn_hdr._xidsize - xid_offs;
- _xid.append((char*)rptr, xid_rem);
+ ::memcpy((char*)_buff + xid_offs, rptr, xid_rem);
rd_cnt = xid_rem;
- ::memcpy((void*)&_dtx_tail, ((char*)rptr + rd_cnt),
sizeof(_dtx_tail));
+ ::memcpy((void*)&_txn_tail, ((char*)rptr + rd_cnt),
sizeof(_txn_tail));
chk_tail();
- rd_cnt += sizeof(_dtx_tail);
+ rd_cnt += sizeof(_txn_tail);
}
else
{
// Tail or part of tail only outstanding, complete tail
const size_t tail_offs = rec_offs - deq_hdr::size() - _txn_hdr._xidsize;
const size_t tail_rem = rec_tail::size() - tail_offs;
- ::memcpy((char*)&_dtx_tail + tail_offs, rptr, tail_rem);
+ ::memcpy((char*)&_txn_tail + tail_offs, rptr, tail_rem);
chk_tail();
rd_cnt = tail_rem;
}
@@ -235,12 +251,12 @@
// Remainder of xid fits within this page, tail split
const size_t xid_offs = rec_offs - deq_hdr::size();
const size_t xid_rem = _txn_hdr._xidsize - xid_offs;
- _xid.append((char*)rptr, xid_rem);
+ ::memcpy((char*)_buff + xid_offs, rptr, xid_rem);
rd_cnt += xid_rem;
const size_t tail_rem = (max_size_dblks * JRNL_DBLK_SIZE) - rd_cnt;
if (tail_rem)
{
- ::memcpy((void*)&_dtx_tail, ((char*)rptr + xid_rem), tail_rem);
+ ::memcpy((void*)&_txn_tail, ((char*)rptr + xid_rem), tail_rem);
rd_cnt += tail_rem;
}
}
@@ -248,7 +264,7 @@
{
// Remainder of xid split
const size_t xid_cp_size = (max_size_dblks * JRNL_DBLK_SIZE);
- _xid.append((char*)rptr, xid_cp_size);
+ ::memcpy((char*)_buff + rec_offs - deq_hdr::size(), rptr, xid_cp_size);
rd_cnt += xid_cp_size;
}
}
@@ -263,8 +279,15 @@
_txn_hdr._xidsize = *(size_t*)((char*)rptr + rd_cnt);
rd_cnt = _txn_hdr.size();
chk_hdr();
+ _buff = ::malloc(_txn_hdr._xidsize);
+ if (_buff == NULL)
+ {
+ std::stringstream ss;
+ ss << "_buff malloc(): errno=" << errno;
+ throw jexception(jerrno::JERR__MALLOC, ss.str(), "txn_rec",
"decode");
+ }
const u_int32_t hdr_xid_dblks = size_dblks(deq_hdr::size() + _txn_hdr._xidsize);
- const u_int32_t hdr_xid_tail_dblks = size_dblks(enq_hdr::size() +
_txn_hdr._xidsize +
+ const u_int32_t hdr_xid_tail_dblks = size_dblks(enq_hdr::size() +
_txn_hdr._xidsize +
rec_tail::size());
// Check if record (header + xid + tail) fits within this page, we can check the
@@ -272,21 +295,21 @@
if (hdr_xid_tail_dblks <= max_size_dblks)
{
// Entire header, xid and tail fits within this page
- ::memcpy((void*)&_dtx_tail, (char*)rptr + rd_cnt + _txn_hdr._xidsize,
- sizeof(_dtx_tail));
+ ::memcpy(_buff, (char*)rptr + rd_cnt, _txn_hdr._xidsize);
+ rd_cnt += _txn_hdr._xidsize;
+ ::memcpy((void*)&_txn_tail, (char*)rptr + rd_cnt, sizeof(_txn_tail));
+ rd_cnt += sizeof(_txn_tail);
chk_tail();
- _xid.assign((char*)rptr + rd_cnt, _txn_hdr._xidsize);
- rd_cnt += _txn_hdr._xidsize + sizeof(_dtx_tail);
}
else if (hdr_xid_dblks <= max_size_dblks)
{
// Entire header and xid fit within this page, tail split
- _xid.assign((char*)rptr + rd_cnt, _txn_hdr._xidsize);
+ ::memcpy(_buff, (char*)rptr + rd_cnt, _txn_hdr._xidsize);
rd_cnt += _txn_hdr._xidsize;
const size_t tail_rem = (max_size_dblks * JRNL_DBLK_SIZE) - rd_cnt;
if (tail_rem)
{
- ::memcpy((void*)&_dtx_tail, (char*)rptr + rd_cnt, tail_rem);
+ ::memcpy((void*)&_txn_tail, (char*)rptr + rd_cnt, tail_rem);
rd_cnt += tail_rem;
}
}
@@ -294,7 +317,7 @@
{
// Header fits within this page, xid split
const size_t xid_cp_size = (max_size_dblks * JRNL_DBLK_SIZE) - rd_cnt;
- _xid.assign((char*)rptr + rd_cnt, xid_cp_size);
+ ::memcpy(_buff, (char*)rptr + rd_cnt, xid_cp_size);
rd_cnt += xid_cp_size;
}
}
@@ -305,13 +328,13 @@
txn_rec::str(std::string& str) const
{
std::stringstream ss;
- if (_txn_hdr._hdr._magic == RHM_JDAT_DTXA_MAGIC)
+ if (_txn_hdr._hdr._magic == RHM_JDAT_TXA_MAGIC)
ss << "dtxa_rec: m=" << _txn_hdr._hdr._magic;
else
ss << "dtxc_rec: m=" << _txn_hdr._hdr._magic;
ss << " v=" << (int)_txn_hdr._hdr._version;
ss << " rid=" << _txn_hdr._hdr._rid;
- ss << " xid=\"" << _xid << "\"";
+ ss << " xid=\"" << _xidp << "\"";
str.append(ss.str());
return str;
}
@@ -332,13 +355,13 @@
txn_rec::chk_hdr() const throw (jexception)
{
jrec::chk_hdr(_txn_hdr._hdr);
- if (_txn_hdr._hdr._magic != RHM_JDAT_DTXA_MAGIC && _txn_hdr._hdr._magic !=
RHM_JDAT_DTXC_MAGIC)
+ if (_txn_hdr._hdr._magic != RHM_JDAT_TXA_MAGIC && _txn_hdr._hdr._magic !=
RHM_JDAT_TXC_MAGIC)
{
std::stringstream ss;
ss << std::hex << std::setfill('0');
ss << "dtx magic: rid=0x" << std::setw(16) <<
_txn_hdr._hdr._rid;
- ss << ": expected=(0x" << std::setw(8) <<
RHM_JDAT_DTXA_MAGIC;
- ss << " or 0x" << RHM_JDAT_DTXC_MAGIC;
+ ss << ": expected=(0x" << std::setw(8) <<
RHM_JDAT_TXA_MAGIC;
+ ss << " or 0x" << RHM_JDAT_TXC_MAGIC;
ss << ") read=0x" << std::setw(2) <<
(int)_txn_hdr._hdr._magic;
throw jexception(jerrno::JERR_DREC_INVRHDR, ss.str(), "txn_rec",
"chk_hdr");
}
@@ -354,7 +377,7 @@
void
txn_rec::chk_tail() const throw (jexception)
{
- jrec::chk_tail(_dtx_tail, _txn_hdr._hdr);
+ jrec::chk_tail(_txn_tail, _txn_hdr._hdr);
}
} // namespace journal
Modified: store/trunk/cpp/lib/jrnl/txn_rec.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/txn_rec.hpp 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/lib/jrnl/txn_rec.hpp 2007-10-05 20:46:46 UTC (rev 965)
@@ -56,21 +56,28 @@
{
private:
txn_hdr _txn_hdr; ///< transaction header
- std::string _xid; ///< XID
- rec_tail _dtx_tail; ///< Record tail
+ const void* _xidp; ///< xid pointer for encoding (writing to disk)
+ void* _buff; ///< Pointer to buffer to receive data read from disk
+ rec_tail _txn_tail; ///< Record tail
public:
+ // constructor used for read operations and xid must have memory allocated
txn_rec();
- txn_rec(const u_int32_t magic, const u_int64_t rid);
- txn_rec(const u_int32_t magic, const u_int64_t rid, const std::string& xid);
+ // constructor used for write operations, where xid already exists
+ txn_rec(const u_int32_t magic, const u_int64_t rid, const void* const xidp,
+ const size_t xidlen);
~txn_rec();
- void reset(const u_int64_t rid);
- void reset(const u_int64_t rid, const std::string& xid);
+ // Prepare instance for use in reading data from journal
+ void reset(const u_int32_t magic);
+ // Prepare instance for use in writing data to journal
+ void reset(const u_int32_t magic, const u_int64_t rid, const void* const xidp,
+ const size_t xidlen);
u_int32_t encode(void* wptr, u_int32_t rec_offs_dblks, u_int32_t max_size_dblks)
throw (jexception);
u_int32_t decode(hdr& h, void* rptr, u_int32_t rec_offs_dblks, u_int32_t
max_size_dblks)
throw (jexception);
+ inline const void* const get_xid() { return _buff; }
std::string& str(std::string& str) const;
inline const size_t data_size() const { return 0; } // This record never carries
data
const size_t xid_size() const;
Modified: store/trunk/cpp/lib/jrnl/wmgr.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/wmgr.cpp 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/lib/jrnl/wmgr.cpp 2007-10-05 20:46:46 UTC (rev 965)
@@ -50,7 +50,9 @@
_fhdr_buff(NULL),
_cached_offset_dblks(0),
_enq_busy(false),
- _deq_busy(false)
+ _deq_busy(false),
+ _abort_busy(false),
+ _commit_busy(false)
{}
wmgr::wmgr(jcntl* jc, enq_map& emap, wrfc& wrfc, std::deque<data_tok*>*
const dtokl,
@@ -62,7 +64,9 @@
_fhdr_buff(NULL),
_cached_offset_dblks(0),
_enq_busy(false),
- _deq_busy(false)
+ _deq_busy(false),
+ _abort_busy(false),
+ _commit_busy(false)
{}
wmgr::~wmgr()
@@ -96,10 +100,10 @@
if (this_data_len != tot_data_len)
return RHM_IORES_NOTIMPL;
- if (_deq_busy)
+ if (_deq_busy || _abort_busy || _commit_busy)
return RHM_IORES_BUSY;
- iores res = pre_write_check(true, dtokp);
+ iores res = pre_write_check(WMGR_ENQUEUE, dtokp);
if (res != RHM_IORES_SUCCESS)
return res;
@@ -118,18 +122,17 @@
else
_enq_busy = true;
- u_int64_t rid;
- if (dtokp->getSourceMessage())
- {
- rid = dtokp->rid();
- assert(rid != 0);
- }
- else
- rid = cont ? _wrfc.rid() - 1 : _wrfc.get_incr_rid();
+ u_int64_t rid = initialize_rid(cont, dtokp);
_enq_rec.reset(rid, data_buff, tot_data_len, xid_ptr, xid_len, transient);
if (!cont)
+ {
dtokp->set_rid(rid);
+ if (xid_len)
+ dtokp->set_xid(xid_ptr, xid_len);
+ else
+ dtokp->clear_xid();
+ }
bool done = false;
while (!done)
{
@@ -224,10 +227,10 @@
if (xid_len)
assert(xid_ptr != NULL);
- if (_enq_busy)
+ if (_enq_busy || _abort_busy || _commit_busy)
return RHM_IORES_BUSY;
- iores res = pre_write_check(false, dtokp);
+ iores res = pre_write_check(WMGR_DEQUEUE, dtokp);
if (res != RHM_IORES_SUCCESS)
return res;
@@ -246,19 +249,12 @@
else
{
_deq_busy = true;
- dtokp->set_dblocks_written(0); // Reset dblks_written from enqueue op
+ dtokp->set_dblocks_written(0); // Reset dblks_written from previous op
}
- u_int64_t rid;
- if (dtokp->getSourceMessage())
- {
- rid = dtokp->dequeue_rid();
- assert(rid != 0);
- }
- else
- rid = _wrfc.get_incr_rid();
+ u_int64_t rid = initialize_rid(cont, dtokp);
- _deq_rec.reset(rid, dtokp->rid());
+ _deq_rec.reset(rid, dtokp->rid(), xid_ptr, xid_len);
bool done = false;
while (!done)
{
@@ -290,7 +286,7 @@
// Has the file header been written (i.e. write pointers still at 0)?
if (_wrfc.empty())
{
- u_int32_t rec_dblks_rem = _enq_rec.rec_size_dblks() - data_offs_dblks;
+ u_int32_t rec_dblks_rem = _deq_rec.rec_size_dblks() - data_offs_dblks;
bool file_fit = rec_dblks_rem <= JRNL_FILE_SIZE * JRNL_SBLK_SIZE;
bool file_full = rec_dblks_rem == JRNL_FILE_SIZE * JRNL_SBLK_SIZE;
size_t fro = 0;
@@ -329,8 +325,8 @@
cont = true;
else
{
- // Set last data_tok in page only to state ENQ_PART
- dtokp->set_wstate(data_tok::ENQ_PART);
+ // Set last data_tok in page only to state DEQ_PART
+ dtokp->set_wstate(data_tok::DEQ_PART);
done = true;
}
}
@@ -344,6 +340,218 @@
}
const iores
+wmgr::abort(data_tok* dtokp, const void* const xid_ptr, const size_t xid_len) throw
(jexception)
+{
+ // commit and abort MUST have a valid xid
+ assert(xid_ptr != NULL && xid_len > 0);
+
+ if (_enq_busy || _deq_busy || _commit_busy)
+ return RHM_IORES_BUSY;
+
+ iores res = pre_write_check(WMGR_ABORT, dtokp);
+ if (res != RHM_IORES_SUCCESS)
+ return res;
+
+ bool cont = false;
+ if (_abort_busy) // If abort() exited last time with RHM_IORES_FULL or
RHM_IORES_AIO_WAIT
+ {
+ if (dtokp->wstate() == data_tok::ABORT_PART)
+ cont = true;
+ else
+ {
+ std::stringstream ss;
+ ss << "This data_tok: id=" << dtokp->id() <<
" state=" << dtokp->wstate_str();
+ throw jexception(jerrno::JERR_WMGR_DEQDISCONT, ss.str(), "wmgr",
"abort");
+ }
+ }
+ else
+ _abort_busy = true;
+
+ u_int64_t rid = initialize_rid(cont, dtokp);
+ _txn_rec.reset(RHM_JDAT_TXA_MAGIC, rid, xid_ptr, xid_len);
+ bool done = false;
+ while (!done)
+ {
+ assert(_pg_offset_dblks < JRNL_WMGR_PAGE_SIZE * JRNL_SBLK_SIZE);
+ void* wptr = (void*)((char*)_page_ptr_arr[_pg_index] + _pg_offset_dblks *
JRNL_DBLK_SIZE);
+ u_int32_t data_offs_dblks = dtokp->dblocks_written();
+ u_int32_t ret = _txn_rec.encode(wptr, data_offs_dblks,
+ (JRNL_WMGR_PAGE_SIZE * JRNL_SBLK_SIZE) - _pg_offset_dblks);
+ _pg_offset_dblks += ret;
+ _cached_offset_dblks += ret;
+ dtokp->incr_dblocks_written(ret);
+
+ // Is the encoding of this record complete?
+ if (dtokp->dblocks_written() >= _txn_rec.rec_size_dblks())
+ {
+ dtokp->set_wstate(data_tok::ABORT_SUBM);
+ _page_cb_arr[_pg_index]._pdtokl->push_back(dtokp);
+ done = true;
+ }
+
+ // Has the file header been written (i.e. write pointers still at 0)?
+ if (_wrfc.empty())
+ {
+ u_int32_t rec_dblks_rem = _txn_rec.rec_size_dblks() - data_offs_dblks;
+ bool file_fit = rec_dblks_rem <= JRNL_FILE_SIZE * JRNL_SBLK_SIZE;
+ bool file_full = rec_dblks_rem == JRNL_FILE_SIZE * JRNL_SBLK_SIZE;
+ size_t fro = 0;
+ if (cont)
+ {
+ if (file_fit && !file_full)
+ fro = (rec_dblks_rem + JRNL_SBLK_SIZE) * JRNL_DBLK_SIZE;
+ }
+ else
+ fro = JRNL_SBLK_SIZE * JRNL_DBLK_SIZE;
+ write_fhdr(rid, _wrfc.index(), fro);
+ }
+
+ // Is the page full? If so, flush.
+ if (_pg_offset_dblks >= JRNL_WMGR_PAGE_SIZE * JRNL_SBLK_SIZE)
+ {
+ res = write_flush();
+ assert(res == RHM_IORES_SUCCESS);
+
+ if (_page_cb_arr[_pg_index]._state == AIO_PENDING && !done)
+ {
+ res = RHM_IORES_AIO_WAIT;
+ dtokp->set_wstate(data_tok::ABORT_PART);
+ done = true;
+ }
+
+ // File full?
+ if (_pg_cntr >= (JRNL_FILE_SIZE / JRNL_WMGR_PAGE_SIZE))
+ {
+ iores rfres = rotate_file();
+ if (rfres != RHM_IORES_SUCCESS)
+ res = rfres;
+ if (!done)
+ {
+ if (rfres == RHM_IORES_SUCCESS)
+ cont = true;
+ else
+ {
+ // Set last data_tok in page only to state ABORT_PART
+ dtokp->set_wstate(data_tok::ABORT_PART);
+ done = true;
+ }
+ }
+ }
+ }
+ }
+ if (dtokp->wstate() >= data_tok::ABORT_SUBM)
+ _abort_busy = false;
+
+ return res;
+}
+
+const iores
+wmgr::commit(data_tok* dtokp, const void* const xid_ptr, const size_t xid_len) throw
(jexception)
+{
+ // commit and abort MUST have a valid xid
+ assert(xid_ptr != NULL && xid_len > 0);
+
+ if (_enq_busy || _deq_busy || _abort_busy)
+ return RHM_IORES_BUSY;
+
+ iores res = pre_write_check(WMGR_COMMIT, dtokp);
+ if (res != RHM_IORES_SUCCESS)
+ return res;
+
+ bool cont = false;
+ if (_commit_busy) // If commit() exited last time with RHM_IORES_FULL or
RHM_IORES_AIO_WAIT
+ {
+ if (dtokp->wstate() == data_tok::COMMIT_PART)
+ cont = true;
+ else
+ {
+ std::stringstream ss;
+ ss << "This data_tok: id=" << dtokp->id() <<
" state=" << dtokp->wstate_str();
+ throw jexception(jerrno::JERR_WMGR_DEQDISCONT, ss.str(), "wmgr",
"commit");
+ }
+ }
+ else
+ _commit_busy = true;
+
+ u_int64_t rid = initialize_rid(cont, dtokp);
+ _txn_rec.reset(RHM_JDAT_TXC_MAGIC, rid, xid_ptr, xid_len);
+ bool done = false;
+ while (!done)
+ {
+ assert(_pg_offset_dblks < JRNL_WMGR_PAGE_SIZE * JRNL_SBLK_SIZE);
+ void* wptr = (void*)((char*)_page_ptr_arr[_pg_index] + _pg_offset_dblks *
JRNL_DBLK_SIZE);
+ u_int32_t data_offs_dblks = dtokp->dblocks_written();
+ u_int32_t ret = _txn_rec.encode(wptr, data_offs_dblks,
+ (JRNL_WMGR_PAGE_SIZE * JRNL_SBLK_SIZE) - _pg_offset_dblks);
+ _pg_offset_dblks += ret;
+ _cached_offset_dblks += ret;
+ dtokp->incr_dblocks_written(ret);
+
+ // Is the encoding of this record complete?
+ if (dtokp->dblocks_written() >= _txn_rec.rec_size_dblks())
+ {
+ dtokp->set_wstate(data_tok::COMMIT_SUBM);
+ _page_cb_arr[_pg_index]._pdtokl->push_back(dtokp);
+ done = true;
+ }
+
+ // Has the file header been written (i.e. write pointers still at 0)?
+ if (_wrfc.empty())
+ {
+ u_int32_t rec_dblks_rem = _txn_rec.rec_size_dblks() - data_offs_dblks;
+ bool file_fit = rec_dblks_rem <= JRNL_FILE_SIZE * JRNL_SBLK_SIZE;
+ bool file_full = rec_dblks_rem == JRNL_FILE_SIZE * JRNL_SBLK_SIZE;
+ size_t fro = 0;
+ if (cont)
+ {
+ if (file_fit && !file_full)
+ fro = (rec_dblks_rem + JRNL_SBLK_SIZE) * JRNL_DBLK_SIZE;
+ }
+ else
+ fro = JRNL_SBLK_SIZE * JRNL_DBLK_SIZE;
+ write_fhdr(rid, _wrfc.index(), fro);
+ }
+
+ // Is the page full? If so, flush.
+ if (_pg_offset_dblks >= JRNL_WMGR_PAGE_SIZE * JRNL_SBLK_SIZE)
+ {
+ res = write_flush();
+ assert(res == RHM_IORES_SUCCESS);
+
+ if (_page_cb_arr[_pg_index]._state == AIO_PENDING && !done)
+ {
+ res = RHM_IORES_AIO_WAIT;
+ dtokp->set_wstate(data_tok::COMMIT_PART);
+ done = true;
+ }
+
+ // File full?
+ if (_pg_cntr >= (JRNL_FILE_SIZE / JRNL_WMGR_PAGE_SIZE))
+ {
+ iores rfres = rotate_file();
+ if (rfres != RHM_IORES_SUCCESS)
+ res = rfres;
+ if (!done)
+ {
+ if (rfres == RHM_IORES_SUCCESS)
+ cont = true;
+ else
+ {
+ // Set last data_tok in page only to state COMMIT_PART
+ dtokp->set_wstate(data_tok::COMMIT_PART);
+ done = true;
+ }
+ }
+ }
+ }
+ }
+ if (dtokp->wstate() >= data_tok::COMMIT_SUBM)
+ _commit_busy = false;
+
+ return res;
+}
+
+const iores
wmgr::flush()
{
iores res = write_flush();
@@ -470,6 +678,14 @@
assert(dtp->wstate() == data_tok::DEQ_SUBM);
dtp->set_wstate(data_tok::DEQ);
break;
+ case data_tok::ABORT_SUBM:
+ assert(dtp->wstate() == data_tok::ABORT_SUBM);
+ dtp->set_wstate(data_tok::ABORTED);
+ break;
+ case data_tok::COMMIT_SUBM:
+ assert(dtp->wstate() == data_tok::COMMIT_SUBM);
+ dtp->set_wstate(data_tok::COMMITTED);
+ break;
default:
std::stringstream ss;
ss << "dtok_state=" << dtp->wstate_str();
@@ -519,7 +735,7 @@
}
const iores
-wmgr::pre_write_check(bool enqueue, data_tok* dtokp) throw (jexception)
+wmgr::pre_write_check(_op_type op, data_tok* dtokp) throw (jexception)
{
// Check status of current file
if (!_wrfc.is_reset())
@@ -528,7 +744,7 @@
return RHM_IORES_FULL;
}
- // Check status of current page
+ // Check status of current page is ok for writing
if (_page_cb_arr[_pg_index]._state != IN_USE)
{
if (_page_cb_arr[_pg_index]._state == UNUSED)
@@ -538,25 +754,56 @@
else
{
std::stringstream ss;
- ss << "op=" << (enqueue ? "enqueue" :
"dequeue") << " index=" << _pg_index;
- ss << " state=" <<
_page_cb_arr[_pg_index].state_str();
+ ss << "op=" << _op_str[op] << " index="
<< _pg_index << " state=";
+ ss << _page_cb_arr[_pg_index].state_str();
throw jexception(jerrno::JERR_WMGR_BADPGSTATE, ss.str(), "wmgr",
"pre_write_check");
}
}
- // Check state of data_tok
- bool res = enqueue ? dtokp->is_writable() : dtokp->is_dequeueable();
- if (!res)
+ // operation-specific checks
+ switch (op)
{
- std::stringstream ss;
- ss << "op=" << (enqueue ? "enqueue" :
"dequeue") << " dtok_id=" << dtokp->id();
- ss << " dtok_state=" << dtokp->wstate_str();
- throw jexception(jerrno::JERR_WMGR_BADDTOKSTATE, ss.str(), "wmgr",
"pre_write_check");
+ case WMGR_ENQUEUE:
+ if (!dtokp->is_writable())
+ {
+ std::stringstream ss;
+ ss << "op=" << _op_str[op] << "
dtok_id=" << dtokp->id();
+ ss << " dtok_state=" << dtokp->wstate_str();
+ throw jexception(jerrno::JERR_WMGR_BADDTOKSTATE, ss.str(),
"wmgr",
+ "pre_write_check");
+ }
+ break;
+ case WMGR_DEQUEUE:
+ if (!dtokp->is_dequeueable())
+ {
+ std::stringstream ss;
+ ss << "op=" << _op_str[op] << "
dtok_id=" << dtokp->id();
+ ss << " dtok_state=" << dtokp->wstate_str();
+ throw jexception(jerrno::JERR_WMGR_BADDTOKSTATE, ss.str(),
"wmgr",
+ "pre_write_check");
+ }
+ break;
+ case WMGR_ABORT:
+ break;
+ case WMGR_COMMIT:
+ break;
}
return RHM_IORES_SUCCESS;
}
+const u_int64_t
+wmgr::initialize_rid(const bool cont, data_tok* dtokp)
+{
+ if (dtokp->getSourceMessage())
+ {
+ u_int64_t rid = dtokp->rid();
+ assert(rid != 0);
+ return rid;
+ }
+ return cont ? _wrfc.rid() - 1 : _wrfc.get_incr_rid();
+}
+
void
wmgr::dblk_roundup()
{
@@ -590,5 +837,9 @@
_wrfc.add_subm_cnt_dblks(JRNL_SBLK_SIZE);
}
+// static
+
+const char* wmgr::_op_str[] = {"enqueue", "dequeue",
"abort", "commit"};
+
} // namespace journal
} // namespace rhm
Modified: store/trunk/cpp/lib/jrnl/wmgr.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/wmgr.hpp 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/lib/jrnl/wmgr.hpp 2007-10-05 20:46:46 UTC (rev 965)
@@ -75,10 +75,20 @@
iocb _fhdr_iocb; ///< IO control block for file header writes
u_int32_t _cached_offset_dblks; ///< Amount of unwritten data in page
(dblocks)
std::deque<data_tok*> _ddtokl; ///< Deferred dequeue data_tok list
- // TODO: Convert _enq_busy into a proper threadsafe lock
+ // TODO: Convert _enq_busy etc into a proper threadsafe lock
+ // TODO: Convert to enum? Are these encodes mutually exclusive?
bool _enq_busy; ///< Flag true if enqueue is in progress
bool _deq_busy; ///< Flag true if dequeue is in progress
+ bool _abort_busy; ///< Flag true if abort is in progress
+ bool _commit_busy; ///< Flag true if commit is in progress
+ enum _op_type { WMGR_ENQUEUE = 0, WMGR_DEQUEUE, WMGR_ABORT, WMGR_COMMIT };
+ static const char* _op_str[];
+ enq_rec _enq_rec; ///< Enqueue record used for
encoding/decoding
+ deq_rec _deq_rec; ///< Dequeue record used for
encoding/decoding
+ txn_rec _txn_rec; ///< Transaction record used for
encoding/decoding
+ aio_cb _cb; ///< Callback function pointer for AIO events
+
public:
wmgr(jcntl* jc, enq_map& emap, wrfc& wrfc);
wmgr(jcntl* jc, enq_map& emap, wrfc& wrfc, std::deque<data_tok*>*
const dtokl,
@@ -92,12 +102,17 @@
const size_t xid_len, const bool transient) throw (jexception);
const iores dequeue(data_tok* dtokp, const void* const xid_ptr, const size_t
xid_len)
throw (jexception);
+ const iores abort(data_tok* dtokp, const void* const xid_ptr, const size_t
xid_len)
+ throw (jexception);
+ const iores commit(data_tok* dtokp, const void* const xid_ptr, const size_t
xid_len)
+ throw (jexception);
const iores flush();
const u_int32_t get_events(page_state state) throw (jexception);
private:
void initialize() throw (jexception);
- const iores pre_write_check(bool enqueue, data_tok* dtokp) throw (jexception);
+ const iores pre_write_check(_op_type op, data_tok* dtokp) throw (jexception);
+ const u_int64_t initialize_rid(const bool cont, data_tok* dtokp);
const iores write_flush();
const iores rotate_file();
void dblk_roundup();
Modified: store/trunk/cpp/tests/jrnl/janalyze.py
===================================================================
--- store/trunk/cpp/tests/jrnl/janalyze.py 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/tests/jrnl/janalyze.py 2007-10-05 20:46:46 UTC (rev 965)
@@ -31,6 +31,16 @@
num_files = 8
hdr_ver = 1
+TEST_NUM_COL = 0
+NUM_MSGS_COL = 5
+MIN_MSG_SIZE_COL = 7
+MAX_MSG_SIZE_COL = 8
+MIN_XID_SIZE_COL = 9
+MAX_XID_SIZE_COL = 10
+AUTO_DEQ_COL = 11
+TRANSIENT_COL = 12
+COMMENT_COL = 19
+
transient_mask = 0x1
def load(f, klass):
@@ -215,6 +225,8 @@
self.deq_tail = None
self.xid_complete = False
self.tail_complete = False
+ self.tail_bin = None
+ self.tail_offs = 0
self.load(f)
def load(self, f):
@@ -245,16 +257,18 @@
return '%s %sdrid=%d' % (Hdr.__str__(self), print_xid(self.xidsize,
self.xid), self.deq_rid)
-class TxHdr(Hdr):
+class TxnHdr(Hdr):
format = '=Q'
def init(self, f, foffs, xidsize):
- self.xidsize = xid
+ self.xidsize = xidsize
self.xid = None
self.tx_tail = None
self.xid_complete = False
self.tail_complete = False
+ self.tail_bin = None
+ self.tail_offs = 0
self.load(f)
def load(self, f):
@@ -278,7 +292,7 @@
return self.xid_complete and self.tail_complete
def __str__(self):
- return '%s x=%d xid=\"%s\"' % (Hdr.__str__(self), self.xidsize,
self.xid)
+ return '%s %s' % (Hdr.__str__(self), print_xid(self.xidsize, self.xid))
class RecTail(Sizeable):
@@ -338,11 +352,16 @@
def complete(self):
return self.xid_complete and self.data_complete and self.tail_complete
+
+ def print_flags(self):
+ if self.flags & transient_mask > 0:
+ return '*TRANSIENT*'
+ return ''
def __str__(self):
- if self.enq_tail == None:
- return '%s %s [no tail]' % (Hdr.__str__(self), self.dsize, dstr)
- return '%s %s%s %s' % (Hdr.__str__(self), print_xid(self.xidsize,
self.xid), print_data(self.dsize, self.data), self.enq_tail)
+# if self.enq_tail == None:
+# return '%s %s [no tail]' % (Hdr.__str__(self), self.dsize, dstr)
+ return '%s %s%s %s %s' % (Hdr.__str__(self), print_xid(self.xidsize,
self.xid), print_data(self.dsize, self.data), self.enq_tail, self.print_flags())
class Main:
@@ -366,11 +385,11 @@
self.transient = tparams['transient']
else:
self.tnum = None
- self.num_msgs = 0
- self.msg_len = 0
- self.auto_deq = False
- self.xid_len = 0
- self.transient = False
+ self.num_msgs = None
+ self.msg_len = None
+ self.auto_deq = None
+ self.xid_len = None
+ self.transient = None
self.file_start = 0
self.file_num = 0
self.fro = 0x200
@@ -421,30 +440,46 @@
raise Exception('Message length (%d) incorrect; expected %d'
% (len(hdr.data), self.msg_len))
if self.xid_len > 0 and len(hdr.xid) != self.xid_len:
raise Exception('XID length (%d) incorrect; expected %d' %
(len(hdr.xidsize), self.xid_len))
- if self.transient:
- if hdr.flags & transient_mask == 0:
- raise Exception('Expected transient record, found
persistent')
- else:
- if hdr.flags & transient_mask != 0:
- raise Exception('Expected persistent record, found
transient')
+ if self.transient != None:
+ if self.transient:
+ if hdr.flags & transient_mask == 0:
+ raise Exception('Expected transient record, found
persistent')
+ else:
+ if hdr.flags & transient_mask != 0:
+ raise Exception('Expected persistent record, found
transient')
stop = not self.check_rid(hdr)
if stop:
- warn = ' (WARNING: rid out of order, last rid = %d - could be
overwrite boundary.)' % hdr.rid
+ warn = ' (WARNING: rid out of order, rid = %d; last rid = %d -
could be overwrite boundary.)' % (hdr.rid, self.last_rid)
else:
self.msg_cnt += 1
if self.auto_deq:
self.enqueued[hdr.rid] = hdr
elif isinstance(hdr, DeqHdr) and not stop:
+ while not hdr.complete():
+ stop = self.advance_file()
+ if stop:
+ break
+ hdr.load(self.f)
if self.auto_deq:
if hdr.deq_rid in self.enqueued:
del self.enqueued[hdr.deq_rid]
else:
warn = ' (WARNING: dequeue rid %d not found in enqueued
records)' % hdr.deq_rid
- stop = not self.check_rid(hdr)
+ stop = not self.check_rid(hdr)
+ if stop:
+ warn = ' (WARNING: rid out of order, rid = %d; last rid = %d -
could be overwrite boundary.)' % (hdr.rid, self.last_rid)
+ elif self.auto_deq != None:
+ if not self.auto_deq:
+ warn = ' WARNING: Dequeue record rid=%d found in non-dequeue
test - ignoring.' % hdr.rid
+ elif isinstance(hdr, TxnHdr) and not stop:
+ while not hdr.complete():
+ stop = self.advance_file()
if stop:
- warn = ' (WARNING: rid out of order, last rid = %d - could be
overwrite boundary.)' % hdr.rid
- elif self.tnum != None:
- warn = 'WARNING: Dequeue record rid=%d found in non-dequeue test
- ignoring.' % hdr.rid
+ break
+ hdr.load(self.f)
+ stop = not self.check_rid(hdr)
+ if stop:
+ warn = ' (WARNING: rid out of order, rid = %d; last rid = %d -
could be overwrite boundary.)' % (hdr.rid, self.last_rid)
print ' > %s%s' % (hdr, warn)
if not stop:
stop = (self.last_file and hdr.check()) or hdr.empty() or
self.fhdr.empty()
@@ -491,7 +526,7 @@
return self.file_num
def check_rid(self, hdr):
- if self.last_rid != -1 and hdr.rid != self.last_rid + 1:
+ if self.last_rid != -1 and hdr.rid != self.last_rid + 1:
return False
self.last_rid = hdr.rid
return True
@@ -500,16 +535,17 @@
f=open(filename, 'r')
for l in f:
sl = l.strip().split(',')
- if len(sl[1]) > 0: #Comments are in col 0, remaining cols are empty
+ if len(sl[0]) > 0 and sl[0][0] != '"':
try:
- if (int(sl[0]) == tnum):
- return { 'num_msgs':int(sl[1]),
- 'min_size':int(sl[2]),
- 'max_size':int(sl[3]),
- 'auto_deq':sl[4] != 'FALSE',
- 'xid_min_size':int(sl[5]),
- 'xid_max_size':int(sl[6]),
- 'transient':sl[7] != 'FALSE' }
+ if (int(sl[TEST_NUM_COL]) == tnum):
+ return { 'num_msgs':int(sl[NUM_MSGS_COL]),
+ 'min_size':int(sl[MIN_MSG_SIZE_COL]),
+ 'max_size':int(sl[MAX_MSG_SIZE_COL]),
+ 'auto_deq':not (sl[AUTO_DEQ_COL] ==
'FALSE' or sl[AUTO_DEQ_COL] == '0'),
+ 'xid_min_size':int(sl[MIN_XID_SIZE_COL]),
+ 'xid_max_size':int(sl[MAX_XID_SIZE_COL]),
+ 'transient':not (sl[TRANSIENT_COL] ==
'FALSE' or sl[TRANSIENT_COL] == '0'),
+ 'comment':sl[COMMENT_COL] }
except Exception:
pass
return None
@@ -541,8 +577,8 @@
CLASSES = {
- "a": TxHdr,
- "c": TxHdr,
+ "a": TxnHdr,
+ "c": TxnHdr,
"d": DeqHdr,
"e": EnqRec,
"f": FileHdr
Modified: store/trunk/cpp/tests/jrnl/jtest.cpp
===================================================================
--- store/trunk/cpp/tests/jrnl/jtest.cpp 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/tests/jrnl/jtest.cpp 2007-10-05 20:46:46 UTC (rev 965)
@@ -344,6 +344,17 @@
return NULL;
}
+// Set spreadsheet cols here: A=0, B=1...
+#define TEST_NUM_COL 0
+#define NUM_MSGS_COL 5
+#define MIN_MSG_SIZE_COL 7
+#define MAX_MSG_SIZE_COL 8
+#define MIN_XID_SIZE_COL 9
+#define MAX_XID_SIZE_COL 10
+#define AUTO_DEQ_COL 11
+#define TRANSIENT_COL 12
+#define COMMENT_COL 19
+
// static method
void
jtest::get_test(targs* tap, const std::string& filename, const unsigned tnum) throw
(rhm::journal::jexception)
@@ -369,21 +380,23 @@
toks.push_back(pch);
pch = strtok(NULL, ",");
}
- if (toks.size() >= 5)
+ if (toks.size() > TRANSIENT_COL && toks[TEST_NUM_COL][0] !=
'"')
{
- unsigned this_tnum = atoi(toks[0]);
+ unsigned this_tnum = atoi(toks[TEST_NUM_COL]);
if (this_tnum == tnum)
{
found = true;
- tap->_num_msgs = atol(toks[1]);
- tap->_min_msg_size = atol(toks[2]);
- tap->_max_msg_size = atol(toks[3]);
- tap->_auto_deq = strcmp(toks[4], "FALSE") != 0;
- tap->_min_xid_size = atol(toks[5]);
- tap->_max_xid_size = atol(toks[6]);
- tap->_transient = strcmp(toks[7], "FALSE") != 0;
- if (toks.size() > 8)
- tap->_comment = toks[8];
+ tap->_num_msgs = atol(toks[NUM_MSGS_COL]);
+ tap->_min_msg_size = atol(toks[MIN_MSG_SIZE_COL]);
+ tap->_max_msg_size = atol(toks[MAX_MSG_SIZE_COL]);
+ tap->_min_xid_size = atol(toks[MIN_XID_SIZE_COL]);
+ tap->_max_xid_size = atol(toks[MAX_XID_SIZE_COL]);
+ tap->_auto_deq = !(strcmp(toks[AUTO_DEQ_COL], "FALSE") == 0
||
+ strcmp(toks[AUTO_DEQ_COL], "0") == 0);
+ tap->_transient = !(strcmp(toks[TRANSIENT_COL], "FALSE") ==
0 ||
+ strcmp(toks[TRANSIENT_COL], "0") == 0);
+ if (toks.size() > COMMENT_COL)
+ tap->_comment = toks[COMMENT_COL];
else
tap->_comment = NULL;
std::cout << "Test " << tnum << ":
Messages=" << tap->_num_msgs << " Size=" <<
@@ -413,7 +426,8 @@
{
std::cout << "ERROR: Failed to find test " << tnum <<
" in test file \"" << filename <<
"\"." << std::endl;
- throw rhm::journal::jexception(EXCEPTION_BASE+6, "Test data not found in CSV
test data file.");
+ throw rhm::journal::jexception(EXCEPTION_BASE+6,
+ "Test data not found in CSV test data file.");
}
}
Modified: store/trunk/cpp/tests/jrnl/msg_producer.cpp
===================================================================
--- store/trunk/cpp/tests/jrnl/msg_producer.cpp 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/tests/jrnl/msg_producer.cpp 2007-10-05 20:46:46 UTC (rev 965)
@@ -56,6 +56,8 @@
_num_msgs_enq(0),
_num_msgs_deq_subm(0),
_num_msgs_deq(0),
+ _num_txn_subm(0),
+ _num_txn(0),
_dtok_master_list(dtok_master_list),
_tot_dblks(0),
_tot_dsize(0)
@@ -69,15 +71,6 @@
msg_producer::~msg_producer()
{
- for (u_int32_t i=0; i<_dtok_master_list.size(); i++)
- {
- if (_dtok_master_list[i])
- {
- delete _dtok_master_list[i];
- _dtok_master_list[i] = NULL;
- }
- }
- _dtok_master_list.clear();
instance_cnt--;
}
@@ -102,6 +95,8 @@
_num_msgs_enq = 0;
_num_msgs_deq_subm = 0;
_num_msgs_deq = 0;
+ _num_txn_subm = 0;
+ _num_txn = 0;
_tot_dblks = 0;
_tot_dsize = 0;
_aio_cmpl_dtok_list.clear();
@@ -161,6 +156,7 @@
if (ws >= rhm::journal::data_tok::ENQ_SUBM)
{
written = true;
+ _num_msgs_enq_subm++;
_tot_dblks += dtokp->dblocks_written();
_tot_dsize += dtokp->dsize();
}
@@ -177,7 +173,7 @@
if (aio_sleep_cnt >= MAX_AIO_SLEEPS)
throw rhm::journal::jexception(EXCEPTION_BASE+2,
"Page cache full (AIO events outstanding for all
pages); "
- "exceeced wait time for pages to free.",
"msg_producer",
+ "exceeded wait time for pages to free.",
"msg_producer",
"produce");
//std::cout << "$" << dtokp->id() << " "
<< std::flush;
usleep(AIO_SLEEP_TIME);
@@ -202,17 +198,15 @@
jfull_sleep_cnt++;
break;
default:
- std::cout << "msg_producer::produce() Unexpected msg
state: id=" <<
- dtokp->id() << " ws=" << wsstr
<< " eres=" << iores_str[eres] <<
- std::flush;
- throw rhm::journal::jexception(EXCEPTION_BASE+4,
- "Unknown return from enqueue() or
enqueue_tx()", "msg_producer",
- "produce");
+ std::stringstream ss;
+ ss << "msg_producer::produce() Unexpected msg state:
id=" <<
+ dtokp->id() << " ws=" << wsstr
<< " res=" << iores_str[eres];
+ throw rhm::journal::jexception(EXCEPTION_BASE+4, ss.str(),
"msg_producer",
+ "produce");
}
//print_dbug(msgCntr, size, (char*)msg, true);
}
- _num_msgs_enq_subm++;
// Submit deferred dequeues (if any)
if (_auto_dequeue)
@@ -265,11 +259,18 @@
if (st == rhm::journal::data_tok::ENQ)
{
_num_msgs_enq++;
-//std::cout << "^" << dtokp->id() << " "
<< std::flush;
+//std::cout << ">E" << dtokp->id() << " "
<< std::flush;
_dd_dtok_list.push_back(dtokp);
}
else if (dtokp->wstate() == rhm::journal::data_tok::DEQ)
+//{ std::cout << ">D" << dtokp->id() << " "
<< std::flush;
_num_msgs_deq++;
+//}
+ else if (dtokp->wstate() == rhm::journal::data_tok::ABORTED ||
+ dtokp->wstate() == rhm::journal::data_tok::COMMITTED)
+//{std::cout << ">T" << dtokp->id() << " "
<< std::flush;
+ _num_txn++;
+//} else std::cout << ">?" << dtokp->id() << "
st=" << dtokp->wstate_str() << " " << std::flush;
this_dtok_list.pop_front();
}
}
@@ -312,7 +313,12 @@
bool written = false;
while (!written)
{
- rhm::journal::iores dres = _jcptr->dequeue_data_record(ddtokp);
+ rhm::journal::iores dres;
+ if (ddtokp->has_xid())
+ dres = _jcptr->dequeue_txn_data_record(ddtokp, ddtokp->xid());
+ else
+ dres = _jcptr->dequeue_data_record(ddtokp);
+
const char* wsstr = ddtokp->wstate_str();
switch (dres)
{
@@ -324,7 +330,7 @@
if (aio_sleep_cnt >= MAX_AIO_SLEEPS)
throw rhm::journal::jexception(EXCEPTION_BASE+6,
"Page cache full (AIO events outstanding for all
pages); "
- "exceeced wait time for pages to free.",
"msg_producer",
+ "exceeded wait time for pages to free.",
"msg_producer",
"send_deferred_dequeues");
//std::cout << "$" << dres << " " <<
std::flush;
jc.get_wr_events();
@@ -332,11 +338,56 @@
aio_sleep_cnt++;
break;
default:
- std::cout <<
"msg_producer::send_deferred_dequeues()"
- " Unexpected msg state: id=" <<
ddtokp->id() << " ws=" << wsstr <<
- " dres=" << iores_str[dres] <<
std::flush;
+ std::stringstream ss;
+ ss << "msg_producer::send_deferred_dequeues()
Unexpected msg state: id=" <<
+ ddtokp->id() << " ws=" << wsstr
<< " res=" << iores_str[dres];
+ throw rhm::journal::jexception(EXCEPTION_BASE+7, ss.str(),
"msg_producer",
+ "send_deferred_dequeues");
}
}
+
+ // If transactional, commit for even rids, abort for odd rids
+ if (ddtokp->has_xid())
+ {
+ written = false;
+ // Create new data_tok, push to back of maseter list
+ rhm::journal::data_tok* txn_dtokp = new rhm::journal::data_tok;
+ _dtok_master_list.push_back(txn_dtokp);
+ while (!written)
+ {
+ rhm::journal::iores dres;
+ if (ddtokp->rid()%2)
+ dres = _jcptr->txn_abort(txn_dtokp, ddtokp->xid());
+ else
+ dres = _jcptr->txn_commit(txn_dtokp, ddtokp->xid());
+
+ const char* wsstr = ddtokp->wstate_str();
+ switch (dres)
+ {
+ case rhm::journal::RHM_IORES_SUCCESS:
+ written = true;
+ _num_txn_subm++;
+ break;
+ case rhm::journal::RHM_IORES_AIO_WAIT:
+ if (aio_sleep_cnt >= MAX_AIO_SLEEPS)
+ throw rhm::journal::jexception(EXCEPTION_BASE+8,
+ "Page cache full (AIO events outstanding for
all pages); "
+ "exceeded wait time for pages to
free.", "msg_producer",
+ "send_deferred_dequeues");
+ jc.get_wr_events();
+ usleep(AIO_SLEEP_TIME);
+ aio_sleep_cnt++;
+ break;
+ default:
+ std::stringstream ss;
+ ss << "msg_producer::send_deferred_dequeues()
"
+ "Unexpected msg state: id=" <<
ddtokp->id() << " ws=" <<
+ wsstr << " res=" <<
iores_str[dres];
+ throw rhm::journal::jexception(EXCEPTION_BASE+9, ss.str(),
+ "msg_producer",
"send_deferred_dequeues");
+ }
+ }
+ }
ditr = _dd_dtok_list.erase(ditr);
}
#ifndef RHM_WRONLY
@@ -361,7 +412,7 @@
std::stringstream ss;
ss << "Journal flush phase 1 failed, _num_msgs_enq="
<< _num_msgs_enq;
ss << " num_msgs_sent=" << num_msgs_sent;
- throw rhm::journal::jexception(EXCEPTION_BASE+7, ss.str(),
"msg_producer",
+ throw rhm::journal::jexception(EXCEPTION_BASE+10, ss.str(),
"msg_producer",
"jrnl_flush");
}
//std::cout << "+" << std::flush;
@@ -380,7 +431,7 @@
while (!_dd_dtok_list.empty() && !_interrupt_flag)
{
if (++cnt > 10000)
- throw rhm::journal::jexception(EXCEPTION_BASE+8,
+ throw rhm::journal::jexception(EXCEPTION_BASE+11,
"Timeout waiting for all messages to be read.",
"msg_producer",
"jrnl_flush");
usleep(1000);
@@ -400,7 +451,7 @@
std::stringstream ss;
ss << "Journal flush phase 2 failed, _num_msgs_deq="
<< _num_msgs_deq;
ss << " num_msgs_sent=" << num_msgs_sent;
- throw rhm::journal::jexception(EXCEPTION_BASE+9, ss.str(),
"msg_producer",
+ throw rhm::journal::jexception(EXCEPTION_BASE+12, ss.str(),
"msg_producer",
"jrnl_flush");
}
//std::cout << "*" << std::flush;
Modified: store/trunk/cpp/tests/jrnl/msg_producer.hpp
===================================================================
--- store/trunk/cpp/tests/jrnl/msg_producer.hpp 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/tests/jrnl/msg_producer.hpp 2007-10-05 20:46:46 UTC (rev 965)
@@ -75,6 +75,8 @@
u_int32_t _num_msgs_enq;
u_int32_t _num_msgs_deq_subm;
u_int32_t _num_msgs_deq;
+ u_int32_t _num_txn_subm;
+ u_int32_t _num_txn;
std::deque<rhm::journal::data_tok*>& _dtok_master_list; // One dtok per msg
to be sent
std::deque<rhm::journal::data_tok*> _aio_cmpl_dtok_list; // Dtoks from
completed AIOs go here
std::deque<rhm::journal::data_tok*> _dd_dtok_list; // Deferred dequeues
Modified: store/trunk/cpp/tests/jrnl/rtest
===================================================================
--- store/trunk/cpp/tests/jrnl/rtest 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/tests/jrnl/rtest 2007-10-05 20:46:46 UTC (rev 965)
@@ -36,21 +36,21 @@
W_DO_TEST=T
W_TEST_FILE=wtests.csv
W_TEST_START=0
-W_TEST_STOP=99
+W_TEST_STOP=196
W_NITER=5
# Read test
R_DO_TEST=T
R_TEST_FILE=rtests.csv
R_TEST_START=0
-R_TEST_STOP=45
+R_TEST_STOP=126
R_NITER=5
# Read-Write test
RW_DO_TEST=T
RW_TEST_FILE=rwtests.csv
RW_TEST_START=0
-RW_TEST_STOP=49
+RW_TEST_STOP=148
RW_NITER=5
RM=rm
Modified: store/trunk/cpp/tests/jrnl/rtests.csv
===================================================================
--- store/trunk/cpp/tests/jrnl/rtests.csv 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/tests/jrnl/rtests.csv 2007-10-05 20:46:46 UTC (rev 965)
@@ -1,72 +1,147 @@
-"Initialize only",,,,,,,,,
-0,0,0,0,FALSE,0,0,FALSE,,"No messages"
-,,,,,,,,,
-"Within first block, page, file",,,,,,,,,
-1,1,10,10,FALSE,0,0,FALSE,,"10-byte message"
-2,10,10,10,FALSE,0,0,FALSE,,"10-byte message"
-3,1,10,10,TRUE,0,0,FALSE,,"10-byte message"
-4,10,10,10,TRUE,0,0,FALSE,,"10-byte message"
-,,,,,,,,,
-"Transition from one d-block to two per message",,,,,,,,,
-5,10,84,84,FALSE,0,0,FALSE,,"1 dblk exact fit"
-6,10,85,85,FALSE,0,0,FALSE,,"1 dblk + 1 byte"
-7,10,84,84,TRUE,0,0,FALSE,,"1 dblk exact fit"
-8,10,85,85,TRUE,0,0,FALSE,,"1 dblk + 1 byte"
-,,,,,,,,,
-"Transition from one s-block to two per message",,,,,,,,,
-9,10,468,468,FALSE,0,0,FALSE,,"1 sblk exact fit"
-10,10,469,469,FALSE,0,0,FALSE,,"1 sblk + 1 byte"
-11,10,468,468,TRUE,0,0,FALSE,,"1 sblk exact fit"
-12,10,469,469,TRUE,0,0,FALSE,,"1 sblk + 1 byte"
-,,,,,,,,,
-"Transition from first page to second",,,,,,,,,
-13,8,8148,8148,FALSE,0,0,FALSE,,"8 * 1/8 page; Total = 1 page exact fit"
-14,9,8148,8148,FALSE,0,0,FALSE,,"9 * 1/8 page"
-15,8,8149,8149,FALSE,0,0,FALSE,,"8 * (1/8 page + 1 byte)"
-16,8,8020,8020,TRUE,0,0,FALSE,,"8 * (1/8 page – 1 dblk for deq record); Total = 1
page exact fit with deqs"
-17,9,8020,8020,TRUE,0,0,FALSE,,"9 * (1/8 page – 1 dblk for deq record)"
-18,8,8021,8021,TRUE,0,0,FALSE,,"8 * (1/8 page – 1 dblk for deq record + 1
byte)"
-,,,,,,,,,
-"Page cache rollover (from last page back to page 0) - no dequeues as exact sizes
are needed and dequeues are non-deterministic",,,,,,,,,
-19,16,65492,65492,FALSE,0,0,FALSE,,"16 * (1 page exact fit); Total = entire cache
exactly"
-20,17,65492,65492,FALSE,0,0,FALSE,,"17 * (1 page exact fit); Total = entire cache +
reuse of 1 page"
-21,11,98260,98260,FALSE,0,0,FALSE,,"11 * 1.5 pages"
-22,11,98132,98132,TRUE,0,0,FALSE,,"11 * (1.5 pages including 1 sblk for deq
record)"
-,,,,,,,,,
-"File transition (from file 0000 to 0001) - no dequeues as exact sizes are needed
and dequeues are non-deterministic",,,,,,,,,
-23,24,65492,65492,FALSE,0,0,FALSE,,"24 * (1 page exact fit); Total = entire file
exactly"
-24,25,65492,65492,FALSE,0,0,FALSE,,"25 * (1 page exact fit); Total = entire file + 1
page"
-25,10,163796,163796,FALSE,0,0,FALSE,,"10 * (2.5 pages); Total = entire file + 2
pages"
-26,10,163668,163668,TRUE,0,0,FALSE,,"10 * (2.5 pages including 1 sblk for deq
record); Total = entire file + 2 pages"
-,,,,,,,,,
-"File rollover (from file 0007 to 0000) - RHM_WRONLY req'd for auto-dequeue ==
FALSE",,,,,,,,,
-27,16,786388,786388,FALSE,0,0,FALSE,,"16 * (12 pages = ½ file); Total = 8 files
exactly"
-,,,,,,,,,
-"Multi-page messages (large messages) - tests various paths in encoder; no dequeues
required to test this functionality.",,,,,,,,,
-28,16,65492,65492,FALSE,0,0,FALSE,,"16 * (1 page exact fit)"
-29,16,65493,65493,FALSE,0,0,FALSE,,"16 * (1 page + 1 byte): tail split"
-30,16,65503,65503,FALSE,0,0,FALSE,,"16 * (1 page + 11 bytes): tail split"
-31,16,65504,65504,FALSE,0,0,FALSE,,"16 * (1 page + 12 bytes): tail separated
exactly"
-32,16,65505,65505,FALSE,0,0,FALSE,,"16 * (1 page + 13 bytes): data split"
-33,16,131028,131028,FALSE,0,0,FALSE,,"16 * (2 pages exact fit)"
-34,16,131029,131029,FALSE,0,0,FALSE,,"16 * (2 pages + 1 byte): tail split"
-35,16,131039,131039,FALSE,0,0,FALSE,,"16 * (2 pages + 11 bytes): tail split"
-36,16,131040,131040,FALSE,0,0,FALSE,,"16 * (2 pages + 12 bytes): tail separated
exactly"
-37,16,131041,131041,FALSE,0,0,FALSE,,"16 * (2 pages + 13 bytes) data split"
-38,16,262100,262100,FALSE,0,0,FALSE,,"16 * (4 pages exact fit)"
-39,16,262101,262101,FALSE,0,0,FALSE,,"16 * (4 pages + 1 byte: tail split)"
-40,16,262111,262111,FALSE,0,0,FALSE,,"16 * (4 pages + 1 byte: tail split)"
-41,16,262112,262112,FALSE,0,0,FALSE,,"16 * (4 pages + 12 bytes: tail
separated)"
-42,16,262113,262113,FALSE,0,0,FALSE,,"16 * (4 pages + 13 bytes: data split)"
-43,16,229332,229332,FALSE,0,0,FALSE,,"16 * (3.5 pages)"
-44,16,229333,229333,FALSE,0,0,FALSE,,"16 * (3.5 pages + 1 byte)"
-,,,,,,,,,
-"These set up journals for circular tests (repeatedly reading same journal) Make
sure value testing is off!",,,,,,,,,
-45,98304,0,84,FALSE,0,0,FALSE,,"1 dblk no dequeues"
-46,49152,0,84,TRUE,0,0,FALSE,,"1 dblk with dequeues"
-47,49152,0,212,FALSE,0,0,FALSE,,"2 dblk no dequeues"
-48,24576,0,212,TRUE,0,0,FALSE,,"2 dblk with dequeues"
-49,32768,212,212,TRUE,0,0,FALSE,,"2 dblk fixed with dequeues"
-,,,,,,,,,
-"Circular tests",,,,,,,,,
-50,10000000,0,0,FALSE,0,0,FALSE,,"Read 10,000,000 messages from one of the circular
test journals above"
+,,,,,,,"Msg size",,"Xid
size",,,,"enq-size",,"deq-size",,"txn-size",,
+"Test #","tf","pf","amn","mn
incr","#msgs","ms
incr","Min","Max","Min","Max","auto-deq","transient","bytes","dblks","bytes","dblks","bytes","dblks","comment"
+,,,,,,,,,,,,,,,,,,,
+"Initialize only",,,,,,,,,,,,,,,,,,,
+0,"L",,0,0,0,0,0,0,0,0,FALSE,FALSE,,,,,,,"No messages - journal
creation/initialization only"
+,,,,,,,,,,,,,,,,,,,
+"Simple message combinations of persistent/transient, dequeued/non-dequeued,
transactional/non-transactional",,,,,,,,,,,,,,,,,,,
+1,"L",,1,0,1,0,10,10,0,0,FALSE,FALSE,54,1,0,0,0,0,"1 * 10-byte
message"
+2,"L",,10,0,10,0,10,10,0,0,FALSE,FALSE,54,1,0,0,0,0,"10 * 10-byte
message"
+3,"L",,1,0,1,0,10,10,0,0,FALSE,TRUE,54,1,0,0,0,0,"1 * 10-byte message
[transient]"
+4,"L",,10,0,10,0,10,10,0,0,FALSE,TRUE,54,1,0,0,0,0,"10 * 10-byte message
[transient]"
+5,"L",,1,0,1,0,10,10,10,10,FALSE,FALSE,64,1,0,0,0,0,"1 * 10-byte message
[txn]"
+6,"L",,10,0,10,0,10,10,10,10,FALSE,FALSE,64,1,0,0,0,0,"10 * 10-byte
message [txn]"
+7,"L",,1,0,1,0,10,10,10,10,FALSE,TRUE,64,1,0,0,0,0,"1 * 10-byte message
[txn transient]"
+8,"L",,10,0,10,0,10,10,10,10,FALSE,TRUE,64,1,0,0,0,0,"10 * 10-byte message
[txn transient]"
+9,"L",,1,0,1,0,10,10,0,0,TRUE,FALSE,54,1,32,1,0,0,"1 * 10-byte message
[deq]"
+10,"L",,10,0,10,0,10,10,0,0,TRUE,FALSE,54,1,32,1,0,0,"10 * 10-byte message
[deq]"
+11,"L",,1,0,1,0,10,10,0,0,TRUE,TRUE,54,1,32,1,0,0,"1 * 10-byte message
[transient deq]"
+12,"L",,10,0,10,0,10,10,0,0,TRUE,TRUE,54,1,32,1,0,0,"10 * 10-byte message
[transient deq]"
+13,"L",,1,0,1,0,10,10,10,10,TRUE,FALSE,64,1,54,1,46,1,"1 * 10-byte message
[txn deq]"
+14,"L",,10,0,10,0,10,10,10,10,TRUE,FALSE,64,1,54,1,46,1,"10 * 10-byte
message [txn deq]"
+15,"L",,1,0,1,0,10,10,10,10,TRUE,TRUE,64,1,54,1,46,1,"1 * 10-byte message
[txn transient deq]"
+16,"L",,10,0,10,0,10,10,10,10,TRUE,TRUE,64,1,54,1,46,1,"10 * 10-byte
message [txn transient deq]"
+,,,,,,,,,,,,,,,,,,,
+"Transition from one d-block to two per message",,,,,,,,,,,,,,,,,,,
+17,"L",,10,0,10,0,84,84,0,0,FALSE,FALSE,128,1,0,0,0,0,"1 dblk exact
fit"
+18,"L",,10,0,10,1,85,85,0,0,FALSE,FALSE,129,2,0,0,0,0,"1 dblk + 1
byte"
+19,"L",,10,0,10,0,58,58,26,26,FALSE,FALSE,128,1,0,0,0,0,"1 dblk exact fit
[txn]"
+20,"L",,10,0,10,1,59,59,26,26,FALSE,FALSE,129,2,0,0,0,0,"1 dblk + 1 byte
[txn]"
+,,,,,,,,,,,,,,,,,,,
+"Transition from one s-block to two per message",,,,,,,,,,,,,,,,,,,
+21,"L",,10,0,10,0,468,468,0,0,FALSE,FALSE,512,4,0,0,0,0,"1 sblk exact
fit"
+22,"L",,10,0,10,1,469,469,0,0,FALSE,FALSE,513,5,0,0,0,0,"1 sblk + 1
byte"
+23,"L",,10,0,10,0,442,442,26,26,FALSE,FALSE,512,4,0,0,0,0,"1 sblk exact
fit [txn]"
+24,"L",,10,0,10,1,443,443,26,26,FALSE,FALSE,513,5,0,0,0,0,"1 sblk + 1 byte
[txn]"
+,,,,,,,,,,,,,,,,,,,
+"Transition from first page to second",,,,,,,,,,,,,,,,,,,
+25,"L",,8,0,8,0,4052,4052,0,0,FALSE,FALSE,4096,32,0,0,0,0,"1/8 page"
+26,"L",,8,1,9,0,4052,4052,0,0,FALSE,FALSE,4096,32,0,0,0,0,"1/8 page"
+27,"L",,8,0,8,1,4053,4053,0,0,FALSE,FALSE,4097,33,0,0,0,0,"1/8 page + 1
byte"
+28,"L",,8,0,8,0,3796,3796,256,256,FALSE,FALSE,4096,32,0,0,0,0,"1/8 page
[txn]"
+29,"L",,8,1,9,0,3796,3796,256,256,FALSE,FALSE,4096,32,0,0,0,0,"1/8 page
[txn]"
+30,"L",,8,0,8,1,3797,3797,256,256,FALSE,FALSE,4097,33,0,0,0,0,"1/8 page +
1 byte [txn]"
+31,"L",,8,0,8,0,3924,3924,0,0,TRUE,FALSE,3968,31,32,1,0,0,"1/8 page incl
deq [deq]"
+32,"L",,8,1,9,0,3924,3924,0,0,TRUE,FALSE,3968,31,32,1,0,0,"1/8 page incl
deq [deq]"
+33,"L",,8,0,8,1,3925,3925,0,0,TRUE,FALSE,3969,32,32,1,0,0,"1/8 page incl
deq + 1 byte [deq]"
+34,"L",,8,0,8,0,3028,3028,256,256,TRUE,FALSE,3328,26,300,3,292,3,"1/8 page
incl deq & txn [deq txn]"
+35,"L",,8,1,9,0,3028,3028,256,256,TRUE,FALSE,3328,26,300,3,292,3,"1/8 page
incl deq & txn [deq txn]"
+36,"L",,8,0,8,1,3029,3029,256,256,TRUE,FALSE,3329,27,300,3,292,3,"1/8 page
incl deq & txn + 1 byte [deq txn]"
+,,,,,,,,,,,,,,,,,,,
+"Page cache rollover (from page 32 back to page 0) - no dequeues as exact sizes are
needed and dequeues are non-deterministic",,,,,,,,,,,,,,,,,,,
+37,"L",1,32,0,32,0,32724,32724,0,0,FALSE,FALSE,32768,256,0,0,0,0,"1
page"
+38,"L",1,32,1,33,0,32724,32724,0,0,FALSE,FALSE,32768,256,0,0,0,0,"1
page"
+39,"L",1,32,0,32,1,32725,32725,0,0,FALSE,FALSE,32769,257,0,0,0,0,"1 page +
1 byte"
+40,"L",1.5,22,0,22,0,49108,49108,0,0,FALSE,FALSE,49152,384,0,0,0,0,"1.5
pages"
+41,"L",1,32,0,32,0,32468,32468,256,256,FALSE,FALSE,32768,256,0,0,0,0,"1
page [txn]"
+42,"L",1,32,1,33,0,32468,32468,256,256,FALSE,FALSE,32768,256,0,0,0,0,"1
page [txn]"
+43,"L",1,32,0,32,1,32469,32469,256,256,FALSE,FALSE,32769,257,0,0,0,0,"1
page + 1 byte [txn]"
+44,"L",1.5,22,0,22,0,48852,48852,256,256,FALSE,FALSE,49152,384,0,0,0,0,"1.5
pages [txn]"
+45,"L",1,32,0,32,0,32596,32596,0,0,TRUE,FALSE,32640,255,32,1,0,0,"1 page
incl deq [deq]"
+46,"L",1,32,1,33,0,32596,32596,0,0,TRUE,FALSE,32640,255,32,1,0,0,"1 page
incl deq [deq]"
+47,"L",1,32,0,32,1,32597,32597,0,0,TRUE,FALSE,32641,256,32,1,0,0,"1 page
incl deq + 1 byte [deq]"
+48,"L",1.5,22,0,22,0,48980,48980,0,0,TRUE,FALSE,49024,383,32,1,0,0,"1.5
pages incl deq [deq]"
+49,"L",1,32,0,32,0,31700,31700,256,256,TRUE,FALSE,32000,250,300,3,292,3,"1
page incl deq & txn [deq txn]"
+50,"L",1,32,1,33,0,31700,31700,256,256,TRUE,FALSE,32000,250,300,3,292,3,"1
page incl deq & txn [deq txn]"
+51,"L",1,32,0,32,1,31701,31701,256,256,TRUE,FALSE,32001,251,300,3,292,3,"1
page incl deq & txn + 1 byte [deq txn]"
+52,"L",1.5,22,0,22,0,48084,48084,256,256,TRUE,FALSE,48384,378,300,3,292,3,"1.5
pages incl deq & txn [deq txn]"
+,,,,,,,,,,,,,,,,,,,
+"File transition (from file 0000 to 0001) - no dequeues as exact sizes are needed
and dequeues are non-deterministic",,,,,,,,,,,,,,,,,,,
+53,"L",1,48,0,48,0,32724,32724,0,0,FALSE,FALSE,32768,256,0,0,0,0,"1
page"
+54,"L",1,48,1,49,0,32724,32724,0,0,FALSE,FALSE,32768,256,0,0,0,0,"1
page"
+55,"L",1,48,0,48,1,32725,32725,0,0,FALSE,FALSE,32769,257,0,0,0,0,"1 page +
1 byte"
+56,"L",2.5,20,0,20,0,81876,81876,0,0,FALSE,FALSE,81920,640,0,0,0,0,"2.5
pages"
+57,"L",1,48,0,48,0,32468,32468,256,256,FALSE,FALSE,32768,256,0,0,0,0,"1
page [txn]"
+58,"L",1,48,1,49,0,32468,32468,256,256,FALSE,FALSE,32768,256,0,0,0,0,"1
page [txn]"
+59,"L",1,48,0,48,1,32469,32469,256,256,FALSE,FALSE,32769,257,0,0,0,0,"1
page + 1 byte [txn]"
+60,"L",2.5,20,0,20,0,81620,81620,256,256,FALSE,FALSE,81920,640,0,0,0,0,"2.5
pages [txn]"
+61,"L",1,48,0,48,0,32596,32596,0,0,TRUE,FALSE,32640,255,32,1,0,0,"1 page
incl deq [deq]"
+62,"L",1,48,1,49,0,32596,32596,0,0,TRUE,FALSE,32640,255,32,1,0,0,"1 page
incl deq [deq]"
+63,"L",1,48,0,48,1,32597,32597,0,0,TRUE,FALSE,32641,256,32,1,0,0,"1 page
incl deq + 1 byte [deq]"
+64,"L",2.5,20,0,20,0,81748,81748,0,0,TRUE,FALSE,81792,639,32,1,0,0,"2.5
pages incl deq [deq]"
+65,"L",1,48,0,48,0,31700,31700,256,256,TRUE,FALSE,32000,250,300,3,292,3,"1
page incl deq & txn [deq txn]"
+66,"L",1,48,1,49,0,31700,31700,256,256,TRUE,FALSE,32000,250,300,3,292,3,"1
page incl deq & txn [deq txn]"
+67,"L",1,48,0,48,1,31701,31701,256,256,TRUE,FALSE,32001,251,300,3,292,3,"1
page incl deq & txn + 1 byte [deq txn]"
+68,"L",2.5,20,0,20,0,80852,80852,256,256,TRUE,FALSE,81152,634,300,3,292,3,"2.5
pages incl deq & txn [deq txn]"
+,,,,,,,,,,,,,,,,,,,
+"File rollover (from file 0007 to 0000) - RHM_WRONLY req'd for auto-dequeue ==
FALSE",,,,,,,,,,,,,,,,,,,
+69,"L",0.5,16,0,16,0,786388,786388,0,0,FALSE,FALSE,786432,6144,0,0,0,0,"24
pages = ½ file"
+70,"L",0.5,16,0,16,0,786132,786132,256,256,FALSE,FALSE,786432,6144,0,0,0,0,"24
pages = ½ file"
+,,,,,,,,,,,,,,,,,,,
+"Multi-page messages (large messages) - tests various paths in
encoder.",,,,,,,,,,,,,,,,,,,
+71,"L",1,16,0,16,0,32724,32724,0,0,FALSE,FALSE,32768,256,0,0,0,0,"data 1
page"
+72,"L",1,16,0,16,1,32725,32725,0,0,FALSE,FALSE,32769,257,0,0,0,0,"data 1
page + 1 byte (tail split; 1 byte over page boundary)"
+73,"L",1,16,0,16,11,32735,32735,0,0,FALSE,FALSE,32779,257,0,0,0,0,"data 1
page + 11 bytes (tail split; 11 bytes over page boundary)"
+74,"L",1,16,0,16,12,32736,32736,0,0,FALSE,FALSE,32780,257,0,0,0,0,"data 1
page + 12 bytes (tail separated exactly onto next page)"
+75,"L",1,16,0,16,13,32737,32737,0,0,FALSE,FALSE,32781,257,0,0,0,0,"data 1
page + 13 bytes (xid split; 1 byte over page boundary)"
+76,"L",1,16,0,16,0,32468,32468,256,256,FALSE,FALSE,32768,256,0,0,0,0,"data
1 page [txn]"
+77,"L",1,16,0,16,1,32469,32469,256,256,FALSE,FALSE,32769,257,0,0,0,0,"data
1 page + 1 byte (tail split; 1 byte over page boundary) [txn]"
+78,"L",1,16,0,16,11,32479,32479,256,256,FALSE,FALSE,32779,257,0,0,0,0,"data
1 page + 11 bytes (tail split; 11 bytes over page boundary) [txn]"
+79,"L",1,16,0,16,12,32480,32480,256,256,FALSE,FALSE,32780,257,0,0,0,0,"data
1 page + 12 bytes (tail separated exactly onto next page) [txn]"
+80,"L",1,16,0,16,13,32481,32481,256,256,FALSE,FALSE,32781,257,0,0,0,0,"data
1 page + 13 bytes (xid split; 1 byte over page boundary) [txn]"
+81,"L",2,16,0,16,0,65492,65492,0,0,FALSE,FALSE,65536,512,0,0,0,0,"data 2
pages"
+82,"L",2,16,0,16,1,65493,65493,0,0,FALSE,FALSE,65537,513,0,0,0,0,"data 2
pages + 1 byte (tail split; 1 byte over page boundary)"
+83,"L",2,16,0,16,11,65503,65503,0,0,FALSE,FALSE,65547,513,0,0,0,0,"data 2
pages + 11 bytes (tail split; 11 bytes over page boundary)"
+84,"L",2,16,0,16,12,65504,65504,0,0,FALSE,FALSE,65548,513,0,0,0,0,"data 2
pages + 12 bytes (tail separated exactly onto next page)"
+85,"L",2,16,0,16,13,65505,65505,0,0,FALSE,FALSE,65549,513,0,0,0,0,"data 2
pages + 13 bytes (xid split; 1 byte over page boundary)"
+86,"L",2,16,0,16,0,65236,65236,256,256,FALSE,FALSE,65536,512,0,0,0,0,"data
2 pages [txn]"
+87,"L",2,16,0,16,1,65237,65237,256,256,FALSE,FALSE,65537,513,0,0,0,0,"data
2 pages + 1 byte (tail split; 1 byte over page boundary) [txn]"
+88,"L",2,16,0,16,11,65247,65247,256,256,FALSE,FALSE,65547,513,0,0,0,0,"data
2 pages + 11 bytes (tail split; 11 bytes over page boundary) [txn]"
+89,"L",2,16,0,16,12,65248,65248,256,256,FALSE,FALSE,65548,513,0,0,0,0,"data
2 pages + 12 bytes (tail separated exactly onto next page) [txn]"
+90,"L",2,16,0,16,13,65249,65249,256,256,FALSE,FALSE,65549,513,0,0,0,0,"data
2 pages + 13 bytes (xid split; 1 byte over page boundary) [txn]"
+91,"L",4,16,0,16,0,131028,131028,0,0,FALSE,FALSE,131072,1024,0,0,0,0,"data
4 pages"
+92,"L",4,16,0,16,1,131029,131029,0,0,FALSE,FALSE,131073,1025,0,0,0,0,"data
4 pages + 1 byte (tail split; 1 byte over page boundary)"
+93,"L",4,16,0,16,11,131039,131039,0,0,FALSE,FALSE,131083,1025,0,0,0,0,"data
4 pages + 11 bytes (tail split; 11 bytes over page boundary)"
+94,"L",4,16,0,16,12,131040,131040,0,0,FALSE,FALSE,131084,1025,0,0,0,0,"data
4 pages + 12 bytes (tail separated exactly onto next page)"
+95,"L",4,16,0,16,13,131041,131041,0,0,FALSE,FALSE,131085,1025,0,0,0,0,"data
4 pages + 13 bytes (xid split; 1 byte over page boundary)"
+96,"L",4,16,0,16,0,130772,130772,256,256,FALSE,FALSE,131072,1024,0,0,0,0,"data
4 pages [txn]"
+97,"L",4,16,0,16,1,130773,130773,256,256,FALSE,FALSE,131073,1025,0,0,0,0,"data
4 pages + 1 byte (tail split; 1 byte over page boundary) [txn]"
+98,"L",4,16,0,16,11,130783,130783,256,256,FALSE,FALSE,131083,1025,0,0,0,0,"data
4 pages + 11 bytes (tail split; 11 bytes over page boundary) [txn]"
+99,"L",4,16,0,16,12,130784,130784,256,256,FALSE,FALSE,131084,1025,0,0,0,0,"data
4 pages + 12 bytes (tail separated exactly onto next page) [txn]"
+100,"L",4,16,0,16,13,130785,130785,256,256,FALSE,FALSE,131085,1025,0,0,0,0,"data
4 pages + 13 bytes (xid split; 1 byte over page boundary) [txn]"
+101,"L",3.5,16,0,16,0,114644,114644,0,0,FALSE,FALSE,114688,896,0,0,0,0,"data
4 pages + 12 bytes (tail separated exactly onto next page) [txn]"
+102,"L",3.5,16,0,16,1,114645,114645,0,0,FALSE,FALSE,114689,897,0,0,0,0,"data
4 pages + 13 bytes (xid split; 1 byte over page boundary) [txn]"
+103,"L",3.5,16,0,16,0,114388,114388,256,256,FALSE,FALSE,114688,896,0,0,0,0,"data
4 pages + 12 bytes (tail separated exactly onto next page) [txn]"
+104,"L",3.5,16,0,16,1,114389,114389,256,256,FALSE,FALSE,114689,897,0,0,0,0,"data
4 pages + 13 bytes (xid split; 1 byte over page boundary) [txn]"
+105,"L",1,16,0,16,-1,10,10,32735,32735,FALSE,FALSE,32789,257,0,0,0,0,"xid
1 page – 1 byte; data 10 bytes (exact fit) [txn]"
+106,"L",1,16,0,16,0,10,10,32736,32736,FALSE,FALSE,32790,257,0,0,0,0,"xid 1
page; data 10 bytes (exact fit) [txn]"
+107,"L",1,16,0,16,1,10,10,32737,32737,FALSE,FALSE,32791,257,0,0,0,0,"xid 1
page + 1 byte; data 10 bytes (exact fit) [txn]"
+108,"L",2,16,0,16,-1,10,10,65503,65503,FALSE,FALSE,65557,513,0,0,0,0,"xid
2 pages – 1 byte; data 10 bytes (exact fit) [txn]"
+109,"L",2,16,0,16,0,10,10,65504,65504,FALSE,FALSE,65558,513,0,0,0,0,"xid 2
pages; data 10 bytes (exact fit) [txn]"
+110,"L",2,16,0,16,1,10,10,65505,65505,FALSE,FALSE,65559,513,0,0,0,0,"xid 2
pages + 1 byte; data 10 bytes (exact fit) [txn]"
+111,"L",4,16,0,16,-1,10,10,131039,131039,FALSE,FALSE,131093,1025,0,0,0,0,"xid
4 pages – 1 byte; data 10 bytes (exact fit) [txn]"
+112,"L",4,16,0,16,0,10,10,131040,131040,FALSE,FALSE,131094,1025,0,0,0,0,"xid
4 pages; data 10 bytes (exact fit) [txn]"
+113,"L",4,16,0,16,1,10,10,131041,131041,FALSE,FALSE,131095,1025,0,0,0,0,"xid
4 pages + 1 byte; data 10 bytes (exact fit) [txn]"
+114,"L",3.5,16,0,16,0,10,10,114656,114656,FALSE,FALSE,114710,897,0,0,0,0,"xid
3.5 pages; data 10 bytes (exact fit) [txn]"
+115,"L",3.5,16,0,16,1,10,10,114657,114657,FALSE,FALSE,114711,897,0,0,0,0,"xid
3.5 pages + 1 byte; data 10 bytes (exact fit) [txn]"
+116,"L",1,16,0,16,-1,10,10,32735,32735,TRUE,FALSE,32789,257,32779,257,32771,257,"xid
1 page – 1 byte; data 10 bytes (exact fit) [txn]"
+117,"L",1,16,0,16,0,10,10,32736,32736,TRUE,FALSE,32790,257,32780,257,32772,257,"xid
1 page; data 10 bytes (exact fit) [txn]"
+118,"L",1,16,0,16,1,10,10,32737,32737,TRUE,FALSE,32791,257,32781,257,32773,257,"xid
1 page + 1 byte; data 10 bytes (exact fit) [txn]"
+119,"L",2,16,0,16,-1,10,10,65503,65503,TRUE,FALSE,65557,513,65547,513,65539,513,"xid
2 pages – 1 byte; data 10 bytes (exact fit) [txn]"
+120,"L",2,16,0,16,0,10,10,65504,65504,TRUE,FALSE,65558,513,65548,513,65540,513,"xid
2 pages; data 10 bytes (exact fit) [txn]"
+121,"L",2,16,0,16,1,10,10,65505,65505,TRUE,FALSE,65559,513,65549,513,65541,513,"xid
2 pages + 1 byte; data 10 bytes (exact fit) [txn]"
+122,"L",4,16,0,16,-1,10,10,131039,131039,TRUE,FALSE,131093,1025,131083,1025,131075,1025,"xid
4 pages – 1 byte; data 10 bytes (exact fit) [txn]"
+123,"L",4,16,0,16,0,10,10,131040,131040,TRUE,FALSE,131094,1025,131084,1025,131076,1025,"xid
4 pages; data 10 bytes (exact fit) [txn]"
+124,"L",4,16,0,16,1,10,10,131041,131041,TRUE,FALSE,131095,1025,131085,1025,131077,1025,"xid
4 pages + 1 byte; data 10 bytes (exact fit) [txn]"
+125,"L",3.5,16,0,16,0,10,10,114656,114656,TRUE,FALSE,114710,897,114700,897,114692,897,"xid
3.5 pages; data 10 bytes (exact fit) [txn]"
+126,"L",3.5,16,0,16,1,10,10,114657,114657,TRUE,FALSE,114711,897,114701,897,114693,897,"xid
3.5 pages + 1 byte; data 10 bytes (exact fit) [txn]"
Modified: store/trunk/cpp/tests/jrnl/rwtests.csv
===================================================================
--- store/trunk/cpp/tests/jrnl/rwtests.csv 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/tests/jrnl/rwtests.csv 2007-10-05 20:46:46 UTC (rev 965)
@@ -1,68 +1,169 @@
-"Initialize only",,,,,,,,,
-0,0,0,0,FALSE,0,0,FALSE,,"No messages"
-,,,,,,,,,
-"Within first block, page, file",,,,,,,,,
-1,1,10,10,FALSE,0,0,FALSE,,"10-byte message"
-2,10,10,10,FALSE,0,0,FALSE,,"10-byte message"
-3,1,10,10,TRUE,0,0,FALSE,,"10-byte message"
-4,10,10,10,TRUE,0,0,FALSE,,"10-byte message"
-,,,,,,,,,
-"Transition from one d-block to two per message",,,,,,,,,
-5,10,84,84,FALSE,0,0,FALSE,,"1 dblk exact fit"
-6,10,85,85,FALSE,0,0,FALSE,,"1 dblk + 1 byte"
-7,10,84,84,TRUE,0,0,FALSE,,"1 dblk exact fit"
-8,10,85,85,TRUE,0,0,FALSE,,"1 dblk + 1 byte"
-,,,,,,,,,
-"Transition from one s-block to two per message",,,,,,,,,
-9,10,468,468,FALSE,0,0,FALSE,,"1 sblk exact fit"
-10,10,469,469,FALSE,0,0,FALSE,,"1 sblk + 1 byte"
-11,10,468,468,TRUE,0,0,FALSE,,"1 sblk exact fit"
-12,10,469,469,TRUE,0,0,FALSE,,"1 sblk + 1 byte"
-,,,,,,,,,
-"Transition from first page to second",,,,,,,,,
-13,8,4052,4052,FALSE,0,0,FALSE,,"8 * 1/8 page; Total = 1 page exact fit"
-14,9,4052,4052,FALSE,0,0,FALSE,,"9 * 1/8 page"
-15,8,4053,4053,FALSE,0,0,FALSE,,"8 * (1/8 page + 1 byte)"
-16,8,3924,3924,TRUE,0,0,FALSE,,"8 * (1/8 page - 1 dblk for deq record); Total = 1
page exact fit with deqs"
-17,9,3924,3924,TRUE,0,0,FALSE,,"9 * (1/8 page - 1 dblk for deq record)"
-18,8,3925,3925,TRUE,0,0,FALSE,,"8 * (1/8 page - 1 dblk for deq record + 1
byte)"
-,,,,,,,,,
-"Page cache rollover (from page 32 back to page 0) - no dequeues as exact sizes are
needed and dequeues are non-deterministic",,,,,,,,,
-19,32,32724,32724,FALSE,0,0,FALSE,,"32 * (1 page exact fit); Total = entire cache
exactly"
-20,33,32724,32724,FALSE,0,0,FALSE,,"33 * (1 page exact fit); Total = entire cache +
reuse of 1 page"
-21,22,49108,49108,FALSE,0,0,FALSE,,"22 * 1.5 pages"
-22,22,48980,48980,TRUE,0,0,FALSE,,"22 * (1.5 pages including 1 sblk for deq
record)"
-,,,,,,,,,
-"File transition (from file 0000 to 0001) - no dequeues as exact sizes are needed
and dequeues are non-deterministic",,,,,,,,,
-23,48,32724,32724,FALSE,0,0,FALSE,,"48 * (1 page exact fit); Total = entire file
exactly"
-24,49,32724,32724,FALSE,0,0,FALSE,,"49 * (1 page exact fit); Total = entire file + 1
page"
-25,20,81876,81876,FALSE,0,0,FALSE,,"20 * (2.5 pages); Total = entire file + 2
pages"
-26,20,81748,81748,TRUE,0,0,FALSE,,"20 * (2.5 pages including 1 sblk for deq record);
Total = entire file + 2 pages"
-,,,,,,,,,
-"File rollover (from file 0007 to 0000) - RHM_WRONLY req'd for auto-dequeue ==
FALSE",,,,,,,,,
-27,16,786388,786388,FALSE,FALSE,FALSE,FALSE,,"16 * (24 pages = ½ file); Total = 8
files exactly"
-28,16,786260,786260,TRUE,0,0,FALSE,,"16 * (24 pages = ½ file); Total = 8 files
exactly"
-29,17,786260,786260,TRUE,0,0,FALSE,,"17 * (24 pages = ½ file); Total = 8 files +
file 0 overwritten by ½ file"
-30,16,786261,786261,TRUE,0,0,FALSE,,"16 * (24 pages + 1 byte); Total = 8 files +
file 0 overwritten by 16 sblks"
-31,32,786260,786260,TRUE,0,0,FALSE,,"32 * (24 pages = ½ file); Total = 16 files
exactly, all files overwritten once"
-32,33,786260,786260,TRUE,0,0,FALSE,,"33 * (24 pages = ½ file); Total = 16 ½ files,
all files overwritten once + file 0 overwritten again by ½ file"
-33,32,786261,786261,TRUE,0,0,FALSE,,"32 * (24 pages + 1 byte); All files overwritten
once + file 0 overwritten again by 32 sblks"
-,,,,,,,,,
-"Multi-page messages (large messages) - tests various paths in encoder; no dequeues
required to test this functionality.",,,,,,,,,
-34,16,32724,32724,FALSE,0,0,FALSE,,"16 * (1 page exact fit)"
-35,16,32725,32725,FALSE,0,0,FALSE,,"16 * (1 page + 1 byte): tail split"
-36,16,32735,32735,FALSE,0,0,FALSE,,"16 * (1 page + 11 bytes): tail split"
-37,16,32736,32736,FALSE,0,0,FALSE,,"16 * (1 page + 12 bytes): tail separated
exactly"
-38,16,32737,32737,FALSE,0,0,FALSE,,"16 * (1 page + 13 bytes): data split"
-39,16,65492,65492,FALSE,0,0,FALSE,,"16 * (2 pages exact fit)"
-40,16,65493,65493,FALSE,0,0,FALSE,,"16 * (2 pages + 1 byte): tail split"
-41,16,65503,65503,FALSE,0,0,FALSE,,"16 * (2 pages + 11 bytes): tail split"
-42,16,65504,65504,FALSE,0,0,FALSE,,"16 * (2 pages + 12 bytes): tail separated
exactly"
-43,16,65505,65505,FALSE,0,0,FALSE,,"16 * (2 pages + 13 bytes) data split"
-44,16,131028,131028,FALSE,0,0,FALSE,,"16 * (4 pages exact fit)"
-45,16,131029,131029,FALSE,0,0,FALSE,,"16 * (4 pages + 1 byte: tail split)"
-46,16,131039,131039,FALSE,0,0,FALSE,,"16 * (4 pages + 1 byte: tail split)"
-47,16,131040,131040,FALSE,0,0,FALSE,,"16 * (4 pages + 12 bytes: tail
separated)"
-48,16,131041,131041,FALSE,0,0,FALSE,,"16 * (4 pages + 13 bytes: data split)"
-49,16,114644,114644,FALSE,0,0,FALSE,,"16 * (3.5 pages)"
-50,16,114645,114645,FALSE,0,0,FALSE,,"16 * (3.5 pages + 1 byte)"
+,,,,,,,"Msg size",,"Xid
size",,,,"enq-size",,"deq-size",,"txn-size",,
+"Test #","tf","pf","amn","mn
incr","#msgs","ms
incr","Min","Max","Min","Max","auto-deq","transient","bytes","dblks","bytes","dblks","bytes","dblks","comment"
+,,,,,,,,,,,,,,,,,,,
+"Initialize only",,,,,,,,,,,,,,,,,,,
+0,"L",,0,0,0,0,0,0,0,0,FALSE,FALSE,,,,,,,"No messages - journal
creation/initialization only"
+,,,,,,,,,,,,,,,,,,,
+"Simple message combinations of persistent/transient, dequeued/non-dequeued,
transactional/non-transactional",,,,,,,,,,,,,,,,,,,
+1,"L",,1,0,1,0,10,10,0,0,FALSE,FALSE,54,1,0,0,0,0,"1 * 10-byte
message"
+2,"L",,10,0,10,0,10,10,0,0,FALSE,FALSE,54,1,0,0,0,0,"10 * 10-byte
message"
+3,"L",,1,0,1,0,10,10,0,0,FALSE,TRUE,54,1,0,0,0,0,"1 * 10-byte message
[transient]"
+4,"L",,10,0,10,0,10,10,0,0,FALSE,TRUE,54,1,0,0,0,0,"10 * 10-byte message
[transient]"
+5,"L",,1,0,1,0,10,10,10,10,FALSE,FALSE,64,1,0,0,0,0,"1 * 10-byte message
[txn]"
+6,"L",,10,0,10,0,10,10,10,10,FALSE,FALSE,64,1,0,0,0,0,"10 * 10-byte
message [txn]"
+7,"L",,1,0,1,0,10,10,10,10,FALSE,TRUE,64,1,0,0,0,0,"1 * 10-byte message
[txn transient]"
+8,"L",,10,0,10,0,10,10,10,10,FALSE,TRUE,64,1,0,0,0,0,"10 * 10-byte message
[txn transient]"
+9,"L",,1,0,1,0,10,10,0,0,TRUE,FALSE,54,1,32,1,0,0,"1 * 10-byte message
[deq]"
+10,"L",,10,0,10,0,10,10,0,0,TRUE,FALSE,54,1,32,1,0,0,"10 * 10-byte message
[deq]"
+11,"L",,1,0,1,0,10,10,0,0,TRUE,TRUE,54,1,32,1,0,0,"1 * 10-byte message
[transient deq]"
+12,"L",,10,0,10,0,10,10,0,0,TRUE,TRUE,54,1,32,1,0,0,"10 * 10-byte message
[transient deq]"
+13,"L",,1,0,1,0,10,10,10,10,TRUE,FALSE,64,1,54,1,46,1,"1 * 10-byte message
[txn deq]"
+14,"L",,10,0,10,0,10,10,10,10,TRUE,FALSE,64,1,54,1,46,1,"10 * 10-byte
message [txn deq]"
+15,"L",,1,0,1,0,10,10,10,10,TRUE,TRUE,64,1,54,1,46,1,"1 * 10-byte message
[txn transient deq]"
+16,"L",,10,0,10,0,10,10,10,10,TRUE,TRUE,64,1,54,1,46,1,"10 * 10-byte
message [txn transient deq]"
+,,,,,,,,,,,,,,,,,,,
+"Transition from one d-block to two per message",,,,,,,,,,,,,,,,,,,
+17,"L",,10,0,10,0,84,84,0,0,FALSE,FALSE,128,1,0,0,0,0,"1 dblk exact
fit"
+18,"L",,10,0,10,1,85,85,0,0,FALSE,FALSE,129,2,0,0,0,0,"1 dblk + 1
byte"
+19,"L",,10,0,10,0,58,58,26,26,FALSE,FALSE,128,1,0,0,0,0,"1 dblk exact fit
[txn]"
+20,"L",,10,0,10,1,59,59,26,26,FALSE,FALSE,129,2,0,0,0,0,"1 dblk + 1 byte
[txn]"
+,,,,,,,,,,,,,,,,,,,
+"Transition from one s-block to two per message",,,,,,,,,,,,,,,,,,,
+21,"L",,10,0,10,0,468,468,0,0,FALSE,FALSE,512,4,0,0,0,0,"1 sblk exact
fit"
+22,"L",,10,0,10,1,469,469,0,0,FALSE,FALSE,513,5,0,0,0,0,"1 sblk + 1
byte"
+23,"L",,10,0,10,0,442,442,26,26,FALSE,FALSE,512,4,0,0,0,0,"1 sblk exact
fit [txn]"
+24,"L",,10,0,10,1,443,443,26,26,FALSE,FALSE,513,5,0,0,0,0,"1 sblk + 1 byte
[txn]"
+,,,,,,,,,,,,,,,,,,,
+"Transition from first page to second",,,,,,,,,,,,,,,,,,,
+25,"L",,8,0,8,0,4052,4052,0,0,FALSE,FALSE,4096,32,0,0,0,0,"1/8 page"
+26,"L",,8,1,9,0,4052,4052,0,0,FALSE,FALSE,4096,32,0,0,0,0,"1/8 page"
+27,"L",,8,0,8,1,4053,4053,0,0,FALSE,FALSE,4097,33,0,0,0,0,"1/8 page + 1
byte"
+28,"L",,8,0,8,0,3796,3796,256,256,FALSE,FALSE,4096,32,0,0,0,0,"1/8 page
[txn]"
+29,"L",,8,1,9,0,3796,3796,256,256,FALSE,FALSE,4096,32,0,0,0,0,"1/8 page
[txn]"
+30,"L",,8,0,8,1,3797,3797,256,256,FALSE,FALSE,4097,33,0,0,0,0,"1/8 page +
1 byte [txn]"
+31,"L",,8,0,8,0,3924,3924,0,0,TRUE,FALSE,3968,31,32,1,0,0,"1/8 page incl
deq [deq]"
+32,"L",,8,1,9,0,3924,3924,0,0,TRUE,FALSE,3968,31,32,1,0,0,"1/8 page incl
deq [deq]"
+33,"L",,8,0,8,1,3925,3925,0,0,TRUE,FALSE,3969,32,32,1,0,0,"1/8 page incl
deq + 1 byte [deq]"
+34,"L",,8,0,8,0,3028,3028,256,256,TRUE,FALSE,3328,26,300,3,292,3,"1/8 page
incl deq & txn [deq txn]"
+35,"L",,8,1,9,0,3028,3028,256,256,TRUE,FALSE,3328,26,300,3,292,3,"1/8 page
incl deq & txn [deq txn]"
+36,"L",,8,0,8,1,3029,3029,256,256,TRUE,FALSE,3329,27,300,3,292,3,"1/8 page
incl deq & txn + 1 byte [deq txn]"
+,,,,,,,,,,,,,,,,,,,
+"Page cache rollover (from page 32 back to page 0) - no dequeues as exact sizes are
needed and dequeues are non-deterministic",,,,,,,,,,,,,,,,,,,
+37,"L",1,32,0,32,0,32724,32724,0,0,FALSE,FALSE,32768,256,0,0,0,0,"1
page"
+38,"L",1,32,1,33,0,32724,32724,0,0,FALSE,FALSE,32768,256,0,0,0,0,"1
page"
+39,"L",1,32,0,32,1,32725,32725,0,0,FALSE,FALSE,32769,257,0,0,0,0,"1 page +
1 byte"
+40,"L",1.5,22,0,22,0,49108,49108,0,0,FALSE,FALSE,49152,384,0,0,0,0,"1.5
pages"
+41,"L",1,32,0,32,0,32468,32468,256,256,FALSE,FALSE,32768,256,0,0,0,0,"1
page [txn]"
+42,"L",1,32,1,33,0,32468,32468,256,256,FALSE,FALSE,32768,256,0,0,0,0,"1
page [txn]"
+43,"L",1,32,0,32,1,32469,32469,256,256,FALSE,FALSE,32769,257,0,0,0,0,"1
page + 1 byte [txn]"
+44,"L",1.5,22,0,22,0,48852,48852,256,256,FALSE,FALSE,49152,384,0,0,0,0,"1.5
pages [txn]"
+45,"L",1,32,0,32,0,32596,32596,0,0,TRUE,FALSE,32640,255,32,1,0,0,"1 page
incl deq [deq]"
+46,"L",1,32,1,33,0,32596,32596,0,0,TRUE,FALSE,32640,255,32,1,0,0,"1 page
incl deq [deq]"
+47,"L",1,32,0,32,1,32597,32597,0,0,TRUE,FALSE,32641,256,32,1,0,0,"1 page
incl deq + 1 byte [deq]"
+48,"L",1.5,22,0,22,0,48980,48980,0,0,TRUE,FALSE,49024,383,32,1,0,0,"1.5
pages incl deq [deq]"
+49,"L",1,32,0,32,0,31700,31700,256,256,TRUE,FALSE,32000,250,300,3,292,3,"1
page incl deq & txn [deq txn]"
+50,"L",1,32,1,33,0,31700,31700,256,256,TRUE,FALSE,32000,250,300,3,292,3,"1
page incl deq & txn [deq txn]"
+51,"L",1,32,0,32,1,31701,31701,256,256,TRUE,FALSE,32001,251,300,3,292,3,"1
page incl deq & txn + 1 byte [deq txn]"
+52,"L",1.5,22,0,22,0,48084,48084,256,256,TRUE,FALSE,48384,378,300,3,292,3,"1.5
pages incl deq & txn [deq txn]"
+,,,,,,,,,,,,,,,,,,,
+"File transition (from file 0000 to 0001) - no dequeues as exact sizes are needed
and dequeues are non-deterministic",,,,,,,,,,,,,,,,,,,
+53,"L",1,48,0,48,0,32724,32724,0,0,FALSE,FALSE,32768,256,0,0,0,0,"1
page"
+54,"L",1,48,1,49,0,32724,32724,0,0,FALSE,FALSE,32768,256,0,0,0,0,"1
page"
+55,"L",1,48,0,48,1,32725,32725,0,0,FALSE,FALSE,32769,257,0,0,0,0,"1 page +
1 byte"
+56,"L",2.5,20,0,20,0,81876,81876,0,0,FALSE,FALSE,81920,640,0,0,0,0,"2.5
pages"
+57,"L",1,48,0,48,0,32468,32468,256,256,FALSE,FALSE,32768,256,0,0,0,0,"1
page [txn]"
+58,"L",1,48,1,49,0,32468,32468,256,256,FALSE,FALSE,32768,256,0,0,0,0,"1
page [txn]"
+59,"L",1,48,0,48,1,32469,32469,256,256,FALSE,FALSE,32769,257,0,0,0,0,"1
page + 1 byte [txn]"
+60,"L",2.5,20,0,20,0,81620,81620,256,256,FALSE,FALSE,81920,640,0,0,0,0,"2.5
pages [txn]"
+61,"L",1,48,0,48,0,32596,32596,0,0,TRUE,FALSE,32640,255,32,1,0,0,"1 page
incl deq [deq]"
+62,"L",1,48,1,49,0,32596,32596,0,0,TRUE,FALSE,32640,255,32,1,0,0,"1 page
incl deq [deq]"
+63,"L",1,48,0,48,1,32597,32597,0,0,TRUE,FALSE,32641,256,32,1,0,0,"1 page
incl deq + 1 byte [deq]"
+64,"L",2.5,20,0,20,0,81748,81748,0,0,TRUE,FALSE,81792,639,32,1,0,0,"2.5
pages incl deq [deq]"
+65,"L",1,48,0,48,0,31700,31700,256,256,TRUE,FALSE,32000,250,300,3,292,3,"1
page incl deq & txn [deq txn]"
+66,"L",1,48,1,49,0,31700,31700,256,256,TRUE,FALSE,32000,250,300,3,292,3,"1
page incl deq & txn [deq txn]"
+67,"L",1,48,0,48,1,31701,31701,256,256,TRUE,FALSE,32001,251,300,3,292,3,"1
page incl deq & txn + 1 byte [deq txn]"
+68,"L",2.5,20,0,20,0,80852,80852,256,256,TRUE,FALSE,81152,634,300,3,292,3,"2.5
pages incl deq & txn [deq txn]"
+,,,,,,,,,,,,,,,,,,,
+"File rollover (from file 0007 to 0000) - RHM_WRONLY req'd for auto-dequeue ==
FALSE",,,,,,,,,,,,,,,,,,,
+69,"L",0.5,16,0,16,0,786388,786388,0,0,FALSE,FALSE,786432,6144,0,0,0,0,"24
pages = ½ file"
+70,"L",0.5,16,1,17,0,786388,786388,0,0,FALSE,FALSE,786432,6144,0,0,0,0,"24
pages = ½ file"
+71,"L",0.5,16,0,16,1,786389,786389,0,0,FALSE,FALSE,786433,6145,0,0,0,0,"24
pages + 1 byte"
+72,"L",0.5,16,0,16,0,786132,786132,256,256,FALSE,FALSE,786432,6144,0,0,0,0,"24
pages = ½ file [txn]"
+73,"L",0.5,16,1,17,0,786132,786132,256,256,FALSE,FALSE,786432,6144,0,0,0,0,"24
pages = ½ file [txn]"
+74,"L",0.5,16,0,16,1,786133,786133,256,256,FALSE,FALSE,786433,6145,0,0,0,0,"24
pages + 1 byte [txn]"
+75,"L",0.25,32,0,32,0,786388,786388,0,0,FALSE,FALSE,786432,6144,0,0,0,0,"24
pages = ½ file"
+76,"L",0.25,32,1,33,0,786388,786388,0,0,FALSE,FALSE,786432,6144,0,0,0,0,"24
pages = ½ file"
+77,"L",0.25,32,0,32,1,786389,786389,0,0,FALSE,FALSE,786433,6145,0,0,0,0,"24
pages + 1 byte"
+78,"L",0.25,32,0,32,0,786132,786132,256,256,FALSE,FALSE,786432,6144,0,0,0,0,"24
pages = ½ file [txn]"
+79,"L",0.25,32,1,33,0,786132,786132,256,256,FALSE,FALSE,786432,6144,0,0,0,0,"24
pages = ½ file [txn]"
+80,"L",0.25,32,0,32,1,786133,786133,256,256,FALSE,FALSE,786433,6145,0,0,0,0,"24
pages + 1 byte [txn]"
+81,"L",0.5,16,0,16,0,786260,786260,0,0,TRUE,FALSE,786304,6143,32,1,0,0,"24
pages incl deq = ½ file [deq]"
+82,"L",0.5,16,1,17,0,786260,786260,0,0,TRUE,FALSE,786304,6143,32,1,0,0,"24
pages incl deq = ½ file [deq]"
+83,"L",0.5,16,0,16,1,786261,786261,0,0,TRUE,FALSE,786305,6144,32,1,0,0,"24
pages incl deq + 1 byte [deq]"
+84,"L",0.5,16,0,16,0,785364,785364,256,256,TRUE,FALSE,785664,6138,300,3,292,3,"24
pages incl deq & txn = ½ file [deq txn]"
+85,"L",0.5,16,1,17,0,785364,785364,256,256,TRUE,FALSE,785664,6138,300,3,292,3,"24
pages incl deq & txn = ½ file [deq txn]"
+86,"L",0.5,16,0,16,1,785365,785365,256,256,TRUE,FALSE,785665,6139,300,3,292,3,"24
pages incl deq & txn + 1 byte [deq txn]"
+87,"L",0.25,32,0,32,0,786260,786260,0,0,TRUE,FALSE,786304,6143,32,1,0,0,"24
pages incl deq = ½ file [deq]"
+88,"L",0.25,32,1,33,0,786260,786260,0,0,TRUE,FALSE,786304,6143,32,1,0,0,"24
pages incl deq = ½ file [deq]"
+89,"L",0.25,32,0,32,1,786261,786261,0,0,TRUE,FALSE,786305,6144,32,1,0,0,"24
pages incl deq + 1 byte [deq]"
+90,"L",0.25,32,0,32,0,785364,785364,256,256,TRUE,FALSE,785664,6138,300,3,292,3,"24
pages incl deq & txn = ½ file [deq txn]"
+91,"L",0.25,32,1,33,0,785364,785364,256,256,TRUE,FALSE,785664,6138,300,3,292,3,"24
pages incl deq & txn = ½ file [deq txn]"
+92,"L",0.25,32,0,32,1,785365,785365,256,256,TRUE,FALSE,785665,6139,300,3,292,3,"24
pages incl deq & txn + 1 byte [deq txn]"
+,,,,,,,,,,,,,,,,,,,
+"Multi-page messages (large messages) - tests various paths in
encoder.",,,,,,,,,,,,,,,,,,,
+93,"L",1,16,0,16,0,32724,32724,0,0,FALSE,FALSE,32768,256,0,0,0,0,"data 1
page"
+94,"L",1,16,0,16,1,32725,32725,0,0,FALSE,FALSE,32769,257,0,0,0,0,"data 1
page + 1 byte (tail split; 1 byte over page boundary)"
+95,"L",1,16,0,16,11,32735,32735,0,0,FALSE,FALSE,32779,257,0,0,0,0,"data 1
page + 11 bytes (tail split; 11 bytes over page boundary)"
+96,"L",1,16,0,16,12,32736,32736,0,0,FALSE,FALSE,32780,257,0,0,0,0,"data 1
page + 12 bytes (tail separated exactly onto next page)"
+97,"L",1,16,0,16,13,32737,32737,0,0,FALSE,FALSE,32781,257,0,0,0,0,"data 1
page + 13 bytes (xid split; 1 byte over page boundary)"
+98,"L",1,16,0,16,0,32468,32468,256,256,FALSE,FALSE,32768,256,0,0,0,0,"data
1 page [txn]"
+99,"L",1,16,0,16,1,32469,32469,256,256,FALSE,FALSE,32769,257,0,0,0,0,"data
1 page + 1 byte (tail split; 1 byte over page boundary) [txn]"
+100,"L",1,16,0,16,11,32479,32479,256,256,FALSE,FALSE,32779,257,0,0,0,0,"data
1 page + 11 bytes (tail split; 11 bytes over page boundary) [txn]"
+101,"L",1,16,0,16,12,32480,32480,256,256,FALSE,FALSE,32780,257,0,0,0,0,"data
1 page + 12 bytes (tail separated exactly onto next page) [txn]"
+102,"L",1,16,0,16,13,32481,32481,256,256,FALSE,FALSE,32781,257,0,0,0,0,"data
1 page + 13 bytes (xid split; 1 byte over page boundary) [txn]"
+103,"L",2,16,0,16,0,65492,65492,0,0,FALSE,FALSE,65536,512,0,0,0,0,"data 2
pages"
+104,"L",2,16,0,16,1,65493,65493,0,0,FALSE,FALSE,65537,513,0,0,0,0,"data 2
pages + 1 byte (tail split; 1 byte over page boundary)"
+105,"L",2,16,0,16,11,65503,65503,0,0,FALSE,FALSE,65547,513,0,0,0,0,"data 2
pages + 11 bytes (tail split; 11 bytes over page boundary)"
+106,"L",2,16,0,16,12,65504,65504,0,0,FALSE,FALSE,65548,513,0,0,0,0,"data 2
pages + 12 bytes (tail separated exactly onto next page)"
+107,"L",2,16,0,16,13,65505,65505,0,0,FALSE,FALSE,65549,513,0,0,0,0,"data 2
pages + 13 bytes (xid split; 1 byte over page boundary)"
+108,"L",2,16,0,16,0,65236,65236,256,256,FALSE,FALSE,65536,512,0,0,0,0,"data
2 pages [txn]"
+109,"L",2,16,0,16,1,65237,65237,256,256,FALSE,FALSE,65537,513,0,0,0,0,"data
2 pages + 1 byte (tail split; 1 byte over page boundary) [txn]"
+110,"L",2,16,0,16,11,65247,65247,256,256,FALSE,FALSE,65547,513,0,0,0,0,"data
2 pages + 11 bytes (tail split; 11 bytes over page boundary) [txn]"
+111,"L",2,16,0,16,12,65248,65248,256,256,FALSE,FALSE,65548,513,0,0,0,0,"data
2 pages + 12 bytes (tail separated exactly onto next page) [txn]"
+112,"L",2,16,0,16,13,65249,65249,256,256,FALSE,FALSE,65549,513,0,0,0,0,"data
2 pages + 13 bytes (xid split; 1 byte over page boundary) [txn]"
+113,"L",4,16,0,16,0,131028,131028,0,0,FALSE,FALSE,131072,1024,0,0,0,0,"data
4 pages"
+114,"L",4,16,0,16,1,131029,131029,0,0,FALSE,FALSE,131073,1025,0,0,0,0,"data
4 pages + 1 byte (tail split; 1 byte over page boundary)"
+115,"L",4,16,0,16,11,131039,131039,0,0,FALSE,FALSE,131083,1025,0,0,0,0,"data
4 pages + 11 bytes (tail split; 11 bytes over page boundary)"
+116,"L",4,16,0,16,12,131040,131040,0,0,FALSE,FALSE,131084,1025,0,0,0,0,"data
4 pages + 12 bytes (tail separated exactly onto next page)"
+117,"L",4,16,0,16,13,131041,131041,0,0,FALSE,FALSE,131085,1025,0,0,0,0,"data
4 pages + 13 bytes (xid split; 1 byte over page boundary)"
+118,"L",4,16,0,16,0,130772,130772,256,256,FALSE,FALSE,131072,1024,0,0,0,0,"data
4 pages [txn]"
+119,"L",4,16,0,16,1,130773,130773,256,256,FALSE,FALSE,131073,1025,0,0,0,0,"data
4 pages + 1 byte (tail split; 1 byte over page boundary) [txn]"
+120,"L",4,16,0,16,11,130783,130783,256,256,FALSE,FALSE,131083,1025,0,0,0,0,"data
4 pages + 11 bytes (tail split; 11 bytes over page boundary) [txn]"
+121,"L",4,16,0,16,12,130784,130784,256,256,FALSE,FALSE,131084,1025,0,0,0,0,"data
4 pages + 12 bytes (tail separated exactly onto next page) [txn]"
+122,"L",4,16,0,16,13,130785,130785,256,256,FALSE,FALSE,131085,1025,0,0,0,0,"data
4 pages + 13 bytes (xid split; 1 byte over page boundary) [txn]"
+123,"L",3.5,16,0,16,0,114644,114644,0,0,FALSE,FALSE,114688,896,0,0,0,0,"data
4 pages + 12 bytes (tail separated exactly onto next page) [txn]"
+124,"L",3.5,16,0,16,1,114645,114645,0,0,FALSE,FALSE,114689,897,0,0,0,0,"data
4 pages + 13 bytes (xid split; 1 byte over page boundary) [txn]"
+125,"L",3.5,16,0,16,0,114388,114388,256,256,FALSE,FALSE,114688,896,0,0,0,0,"data
4 pages + 12 bytes (tail separated exactly onto next page) [txn]"
+126,"L",3.5,16,0,16,1,114389,114389,256,256,FALSE,FALSE,114689,897,0,0,0,0,"data
4 pages + 13 bytes (xid split; 1 byte over page boundary) [txn]"
+127,"L",1,16,0,16,-1,10,10,32735,32735,FALSE,FALSE,32789,257,0,0,0,0,"xid
1 page – 1 byte; data 10 bytes (exact fit) [txn]"
+128,"L",1,16,0,16,0,10,10,32736,32736,FALSE,FALSE,32790,257,0,0,0,0,"xid 1
page; data 10 bytes (exact fit) [txn]"
+129,"L",1,16,0,16,1,10,10,32737,32737,FALSE,FALSE,32791,257,0,0,0,0,"xid 1
page + 1 byte; data 10 bytes (exact fit) [txn]"
+130,"L",2,16,0,16,-1,10,10,65503,65503,FALSE,FALSE,65557,513,0,0,0,0,"xid
2 pages – 1 byte; data 10 bytes (exact fit) [txn]"
+131,"L",2,16,0,16,0,10,10,65504,65504,FALSE,FALSE,65558,513,0,0,0,0,"xid 2
pages; data 10 bytes (exact fit) [txn]"
+132,"L",2,16,0,16,1,10,10,65505,65505,FALSE,FALSE,65559,513,0,0,0,0,"xid 2
pages + 1 byte; data 10 bytes (exact fit) [txn]"
+133,"L",4,16,0,16,-1,10,10,131039,131039,FALSE,FALSE,131093,1025,0,0,0,0,"xid
4 pages – 1 byte; data 10 bytes (exact fit) [txn]"
+134,"L",4,16,0,16,0,10,10,131040,131040,FALSE,FALSE,131094,1025,0,0,0,0,"xid
4 pages; data 10 bytes (exact fit) [txn]"
+135,"L",4,16,0,16,1,10,10,131041,131041,FALSE,FALSE,131095,1025,0,0,0,0,"xid
4 pages + 1 byte; data 10 bytes (exact fit) [txn]"
+136,"L",3.5,16,0,16,0,10,10,114656,114656,FALSE,FALSE,114710,897,0,0,0,0,"xid
3.5 pages; data 10 bytes (exact fit) [txn]"
+137,"L",3.5,16,0,16,1,10,10,114657,114657,FALSE,FALSE,114711,897,0,0,0,0,"xid
3.5 pages + 1 byte; data 10 bytes (exact fit) [txn]"
+138,"L",1,16,0,16,-1,10,10,32735,32735,TRUE,FALSE,32789,257,32779,257,32771,257,"xid
1 page – 1 byte; data 10 bytes (exact fit) [txn]"
+139,"L",1,16,0,16,0,10,10,32736,32736,TRUE,FALSE,32790,257,32780,257,32772,257,"xid
1 page; data 10 bytes (exact fit) [txn]"
+140,"L",1,16,0,16,1,10,10,32737,32737,TRUE,FALSE,32791,257,32781,257,32773,257,"xid
1 page + 1 byte; data 10 bytes (exact fit) [txn]"
+141,"L",2,16,0,16,-1,10,10,65503,65503,TRUE,FALSE,65557,513,65547,513,65539,513,"xid
2 pages – 1 byte; data 10 bytes (exact fit) [txn]"
+142,"L",2,16,0,16,0,10,10,65504,65504,TRUE,FALSE,65558,513,65548,513,65540,513,"xid
2 pages; data 10 bytes (exact fit) [txn]"
+143,"L",2,16,0,16,1,10,10,65505,65505,TRUE,FALSE,65559,513,65549,513,65541,513,"xid
2 pages + 1 byte; data 10 bytes (exact fit) [txn]"
+144,"L",4,16,0,16,-1,10,10,131039,131039,TRUE,FALSE,131093,1025,131083,1025,131075,1025,"xid
4 pages – 1 byte; data 10 bytes (exact fit) [txn]"
+145,"L",4,16,0,16,0,10,10,131040,131040,TRUE,FALSE,131094,1025,131084,1025,131076,1025,"xid
4 pages; data 10 bytes (exact fit) [txn]"
+146,"L",4,16,0,16,1,10,10,131041,131041,TRUE,FALSE,131095,1025,131085,1025,131077,1025,"xid
4 pages + 1 byte; data 10 bytes (exact fit) [txn]"
+147,"L",3.5,16,0,16,0,10,10,114656,114656,TRUE,FALSE,114710,897,114700,897,114692,897,"xid
3.5 pages; data 10 bytes (exact fit) [txn]"
+148,"L",3.5,16,0,16,1,10,10,114657,114657,TRUE,FALSE,114711,897,114701,897,114693,897,"xid
3.5 pages + 1 byte; data 10 bytes (exact fit) [txn]"
Modified: store/trunk/cpp/tests/jrnl/tests.ods
===================================================================
(Binary files differ)
Modified: store/trunk/cpp/tests/jrnl/wtests.csv
===================================================================
--- store/trunk/cpp/tests/jrnl/wtests.csv 2007-10-04 19:54:30 UTC (rev 964)
+++ store/trunk/cpp/tests/jrnl/wtests.csv 2007-10-05 20:46:46 UTC (rev 965)
@@ -1,139 +1,255 @@
-"Initialize only",,,,,,,,,
-0,0,0,0,FALSE,0,0,FALSE,,"No messages"
-,,,,,,,,,
-"Within first block, page, file",,,,,,,,,
-1,1,10,10,FALSE,0,0,FALSE,,"1 * 10-byte message"
-2,10,10,10,FALSE,0,0,FALSE,,"10 * 10-byte message"
-3,1,10,10,FALSE,0,0,TRUE,,"1 * 10-byte message, transient"
-4,10,10,10,FALSE,0,0,TRUE,,"10 * 10-byte message, transient"
-5,1,10,10,FALSE,10,10,FALSE,,"1 * 10-byte message, txn"
-6,10,10,10,FALSE,10,10,FALSE,,"10 * 10-byte message, txn"
-7,1,10,10,FALSE,10,10,TRUE,,"1 * 10-byte message, txn, transient"
-8,10,10,10,FALSE,10,10,TRUE,,"10 * 10-byte message, txn, transient"
-9,1,10,10,TRUE,0,0,FALSE,,"1 * 10-byte message, deq"
-10,10,10,10,TRUE,0,0,FALSE,,"10 * 10-byte message, deq"
-11,1,10,10,TRUE,0,0,TRUE,,"1 * 10-byte message, transient, deq"
-12,10,10,10,TRUE,0,0,TRUE,,"10 * 10-byte message, transient, deq"
-13,1,10,10,TRUE,10,10,FALSE,,"1 * 10-byte message, txn, deq"
-14,10,10,10,TRUE,10,10,FALSE,,"10 * 10-byte message, txn, deq"
-15,1,10,10,TRUE,10,10,TRUE,,"1 * 10-byte message, txn, transient, deq"
-16,10,10,10,TRUE,10,10,TRUE,,"10 * 10-byte message, txn, transient, deq"
-,,,,,,,,,
-"Transition from one d-block to two per message",,,,,,,,,
-17,10,84,84,FALSE,0,0,FALSE,,"1 dblk exact fit"
-18,10,85,85,FALSE,0,0,FALSE,,"1 dblk + 1 byte"
-19,10,58,58,FALSE,26,26,FALSE,,"1 dblk exact fit, txn"
-20,10,59,59,FALSE,26,26,FALSE,,"1 dblk + 1 byte, txn"
-,,,,,,,,,
-"Transition from one s-block to two per message",,,,,,,,,
-21,10,468,468,FALSE,0,0,FALSE,,"1 sblk exact fit"
-22,10,469,469,FALSE,0,0,FALSE,,"1 sblk + 1 byte"
-23,10,442,442,FALSE,26,26,FALSE,,"1 sblk exact fit, txn"
-24,10,443,443,FALSE,26,26,FALSE,,"1 sblk + 1 byte, txn"
-,,,,,,,,,
-"Transition from first page to second",,,,,,,,,
-25,8,4052,4052,FALSE,0,0,FALSE,,"8 * 1/8 page; Total = 1 page exact fit"
-26,9,4052,4052,FALSE,0,0,FALSE,,"9 * 1/8 page"
-27,8,4053,4053,FALSE,0,0,FALSE,,"8 * (1/8 page + 1 byte)"
-28,8,3796,3796,FALSE,256,256,FALSE,,"8 * 1/8 page; Total = 1 page exact fit,
txn"
-29,9,3796,3796,FALSE,256,256,FALSE,,"9 * 1/8 page, txn"
-30,8,3797,3797,FALSE,256,256,FALSE,,"8 * (1/8 page + 1 byte), txn"
-,,,,,,,,,
-"Page cache rollover (from page 32 back to page 0) - no dequeues as exact sizes are
needed and dequeues are non-deterministic",,,,,,,,,
-31,32,32724,32724,FALSE,0,0,FALSE,,"32 * (1 page exact fit); Total = entire cache
exactly"
-32,33,32724,32724,FALSE,0,0,FALSE,,"33 * (1 page exact fit); Total = entire cache +
reuse of 1 page"
-33,22,49108,49108,FALSE,0,0,FALSE,,"22 * 1.5 pages"
-34,32,32468,32468,FALSE,256,256,FALSE,,"32 * (1 page exact fit); Total = entire
cache exactly, txn"
-35,33,32468,32468,FALSE,256,256,FALSE,,"33 * (1 page exact fit); Total = entire
cache + reuse of 1 page, txn"
-36,22,48852,48852,FALSE,256,256,FALSE,,"22 * 1.5 pages, txn"
-,,,,,,,,,
-"File transition (from file 0000 to 0001) - no dequeues as exact sizes are needed
and dequeues are non-deterministic",,,,,,,,,
-37,48,32724,32724,FALSE,0,0,FALSE,,"48 * (1 page exact fit); Total = entire file
exactly"
-38,49,32724,32724,FALSE,0,0,FALSE,,"49 * (1 page exact fit); Total = entire file + 1
page"
-39,20,81876,81876,FALSE,0,0,FALSE,,"20 * (2.5 pages); Total = entire file + 2
pages"
-40,48,32468,32468,FALSE,256,256,FALSE,,"48 * (1 page exact fit); Total = entire file
exactly, txn"
-41,49,32468,32468,FALSE,256,256,FALSE,,"49 * (1 page exact fit); Total = entire file
+ 1 page, txn"
-42,20,81620,81620,FALSE,256,256,FALSE,,"20 * (2.5 pages); Total = entire file + 2
pages, txn"
-,,,,,,,,,
-"File rollover (from file 0007 to 0000) - RHM_WRONLY req'd for auto-dequeue ==
FALSE",,,,,,,,,
-43,16,786388,786388,FALSE,0,0,FALSE,,"16 * (24 pages = ½ file); Total = 8 files
exactly"
-44,17,786388,786388,FALSE,0,0,FALSE,,"17 * (24 pages = ½ file); Total = 8 files +
file 0 overwritten by ½ file"
-45,16,786389,786389,FALSE,0,0,FALSE,,"16 * (24 pages + 1 byte); Total = 8 files +
file 0 overwritten by 16 sblks"
-46,32,786388,786388,FALSE,0,0,FALSE,,"32 * (24 pages = ½ file); Total = 16 files
exactly, all files overwritten once"
-47,33,786388,786388,FALSE,0,0,FALSE,,"33 * (24 pages = ½ file); Total = 16 ½ files,
all files overwritten once + file 0 overwritten again by ½ file"
-48,32,786389,786389,FALSE,0,0,FALSE,,"32 * (24 pages + 1 byte); All files
overwritten once + file 0 overwritten again by 32 sblks"
-49,16,786132,786132,FALSE,256,256,FALSE,,"16 * (24 pages = ½ file); Total = 8 files
exactly, txn"
-50,17,786132,786132,FALSE,256,256,FALSE,,"17 * (24 pages = ½ file); Total = 8 files
+ file 0 overwritten by ½ file, txn"
-51,16,786133,786133,FALSE,256,256,FALSE,,"16 * (24 pages + 1 byte); Total = 8 files
+ file 0 overwritten by 16 sblks, txn"
-52,32,786132,786132,FALSE,256,256,FALSE,,"32 * (24 pages = ½ file); Total = 16 files
exactly, all files overwritten once, txn"
-53,33,786132,786132,FALSE,256,256,FALSE,,"33 * (24 pages = ½ file); Total = 16 ½
files, all files overwritten once + file 0 overwritten again by ½ file, txn"
-54,32,786133,786133,FALSE,256,256,FALSE,,"32 * (24 pages + 1 byte); All files
overwritten once + file 0 overwritten again by 32 sblks, txn"
-,,,,,,,,,
-"Multi-page messages (large messages) - tests various paths in encoder; no dequeues
required to test this functionality.",,,,,,,,,
-55,16,10,10,FALSE,32724,32724,FALSE,,"16 * (xid 1 page exact fit)"
-56,16,10,10,FALSE,32725,32725,FALSE,,"16 * (xid 1 page + 1 byte): tail split"
-57,16,10,10,FALSE,32735,32735,FALSE,,"16 * (xid 1 page + 11 bytes): tail
split"
-58,16,10,10,FALSE,32736,32736,FALSE,,"16 * (xid 1 page + 12 bytes): tail separated
exactly"
-59,16,10,10,FALSE,32737,32737,FALSE,,"16 * (xid 1 page + 13 bytes): data
split"
-60,16,10,10,FALSE,65492,65492,FALSE,,"16 * (xid 2 pages exact fit)"
-61,16,10,10,FALSE,65493,65493,FALSE,,"16 * (xid 2 pages + 1 byte): tail split"
-62,16,10,10,FALSE,65503,65503,FALSE,,"16 * (xid 2 pages + 11 bytes): tail
split"
-63,16,10,10,FALSE,65504,65504,FALSE,,"16 * (xid 2 pages + 12 bytes): tail separated
exactly"
-64,16,10,10,FALSE,65505,65505,FALSE,,"16 * (xid 2 pages + 13 bytes) data
split"
-65,16,32724,32724,FALSE,0,0,FALSE,,"16 * (1 page exact fit)"
-66,16,32725,32725,FALSE,0,0,FALSE,,"16 * (1 page + 1 byte): tail split"
-67,16,32735,32735,FALSE,0,0,FALSE,,"16 * (1 page + 11 bytes): tail split"
-68,16,32736,32736,FALSE,0,0,FALSE,,"16 * (1 page + 12 bytes): tail separated
exactly"
-69,16,32737,32737,FALSE,0,0,FALSE,,"16 * (1 page + 13 bytes): data split"
-70,16,65492,65492,FALSE,0,0,FALSE,,"16 * (2 pages exact fit)"
-71,16,65493,65493,FALSE,0,0,FALSE,,"16 * (2 pages + 1 byte): tail split"
-72,16,65503,65503,FALSE,0,0,FALSE,,"16 * (2 pages + 11 bytes): tail split"
-73,16,65504,65504,FALSE,0,0,FALSE,,"16 * (2 pages + 12 bytes): tail separated
exactly"
-74,16,65505,65505,FALSE,0,0,FALSE,,"16 * (2 pages + 13 bytes) data split"
-75,16,131028,131028,FALSE,0,0,FALSE,,"16 * (4 pages exact fit)"
-76,16,131029,131029,FALSE,0,0,FALSE,,"16 * (4 pages + 1 byte: tail split)"
-77,16,131039,131039,FALSE,0,0,FALSE,,"16 * (4 pages + 1 byte: tail split)"
-78,16,131040,131040,FALSE,0,0,FALSE,,"16 * (4 pages + 12 bytes: tail
separated)"
-79,16,131041,131041,FALSE,0,0,FALSE,,"16 * (4 pages + 13 bytes: data split)"
-80,16,114644,114644,FALSE,0,0,FALSE,,"16 * (3.5 pages)"
-81,16,114645,114645,FALSE,0,0,FALSE,,"16 * (3.5 pages + 1 byte)"
-,,,,,,,,,
-"Large (multi-megabyte) messages - RHM_WRONLY req'd for auto-dequeue ==
FALSE",,,,,,,,,
-82,32,1572820,1572820,FALSE,0,0,FALSE,,"32 * (48 pages = 1 file exactly)"
-83,32,1572821,1572821,FALSE,0,0,FALSE,,"32 * (48 pages + 1 byte)"
-84,32,1605588,1605588,FALSE,0,0,FALSE,,"32 * (49 pages = 1 file + 1 page)"
-85,16,3145684,3145684,FALSE,0,0,FALSE,,"16 * (96 pages = 2 files exactly)"
-86,16,3145685,3145685,FALSE,0,0,FALSE,,"16 * (96 pages + 1 byte)"
-87,16,3178452,3178452,FALSE,0,0,FALSE,,"16 * (97 pages = 2 files + 1 page"
-88,8,6291412,6291412,FALSE,0,0,FALSE,,"8 * (192 pages = 4 files exactly)"
-89,8,6291413,6291413,FALSE,0,0,FALSE,,"8 * (192 pages + 1 byte)"
-90,8,6324180,6324180,FALSE,0,0,FALSE,,"8 * (193 pages = 4 files + 1 page)"
-91,32,1572692,1572692,TRUE,0,0,FALSE,,"32 * (48 pages including 1 sblk for deq
record = 1 file exactly)"
-92,32,1572693,1572693,TRUE,0,0,FALSE,,"32 * (48 pages including 1 sblk for deq
record + 1 byte)"
-93,32,1605460,1605460,TRUE,0,0,FALSE,,"32 * (49 pages including 1 sblk for deq
record = 1 file + 1 page)"
-94,16,3145556,3145556,TRUE,0,0,FALSE,,"16 * (96 pages including 1 sblk for deq
record = 2 files exactly)"
-95,16,3145557,3145557,TRUE,0,0,FALSE,,"16 * (96 pages including 1 sblk for deq
record + 1 byte)"
-96,16,3178324,3178324,TRUE,0,0,FALSE,,"16 * (97 pages including 1 sblk for deq
record = 2 files + 1 page"
-97,8,6291284,6291284,TRUE,0,0,FALSE,,"8 * (192 pages including 1 sblk for deq record
= 4 files exactly)"
-98,8,6291285,6291285,TRUE,0,0,FALSE,,"8 * (192 pages including 1 sblk for deq record
+ 1 byte)"
-99,8,6324052,6324052,TRUE,0,0,FALSE,,"8 * (193 pages including 1 sblk for deq record
= 4 files + 1 page)"
-,,,,,,,,,
-"High volume tests of random message lengths - RHM_WRONLY req'd for auto-dequeue
== FALSE",,,,,,,,,
-100,5000000,0,84,FALSE,0,0,FALSE,,"1 dblk max"
-101,3000000,0,340,FALSE,0,0,FALSE,,"3 dblks max"
-102,1600000,0,1236,FALSE,0,0,FALSE,,"10 dblks max"
-103,600000,0,3796,FALSE,0,0,FALSE,,"30 dblks max"
-104,200000,0,12756,FALSE,0,0,FALSE,,"100 dblks max"
-105,60000,0,38356,FALSE,0,0,FALSE,,"300 dblks max"
-106,20000,0,127956,FALSE,0,0,FALSE,,"1000 dblks max"
-107,2500000,0,84,TRUE,0,0,FALSE,,"1 dblk max"
-108,1500000,0,340,TRUE,0,0,FALSE,,"3 dblks max"
-109,800000,0,1236,TRUE,0,0,FALSE,,"10 dblks max"
-110,300000,0,3796,TRUE,0,0,FALSE,,"30 dblks max"
-111,100000,0,12756,TRUE,0,0,FALSE,,"100 dblks max"
-112,30000,0,38356,TRUE,0,0,FALSE,,"300 dblks max"
-113,10000,0,127956,TRUE,0,0,FALSE,,"1000 dblks max"
-,,,,,,,,,
-"STANDARD PERFORMANCE BENCHMARK: 10,000,000 writes, data=212b (2
dblks)",,,,,,,,,
-114,10000000,212,212,FALSE,0,0,FALSE,,"2 dblks"
-115,10000000,212,212,TRUE,0,0,FALSE,,"2 dblks"
+,,,,,,,"Msg size",,"Xid
size",,,,"enq-size",,"deq-size",,"txn-size",,
+"Test #","tf","pf","amn","mn
incr","#msgs","ms
incr","Min","Max","Min","Max","auto-deq","transient","bytes","dblks","bytes","dblks","bytes","dblks","comment"
+,,,,,,,,,,,,,,,,,,,
+"Initialize only",,,,,,,,,,,,,,,,,,,
+0,"L",0,0,0,0,0,0,0,0,0,FALSE,FALSE,44,1,0,0,0,0,"No messages - journal
creation/initialization only"
+,,,,,,,,,,,,,,,,,,,
+"Simple message combinations of persistent/transient, dequeued/non-dequeued,
transactional/non-transactional",,,,,,,,,,,,,,,,,,,
+1,"L",1,1,0,1,0,10,10,0,0,FALSE,FALSE,54,1,0,0,0,0,"1 * 10-byte
message"
+2,"L",1,10,0,10,0,10,10,0,0,FALSE,FALSE,54,1,0,0,0,0,"10 * 10-byte
message"
+3,"L",1,1,0,1,0,10,10,0,0,FALSE,TRUE,54,1,0,0,0,0,"1 * 10-byte message
[transient]"
+4,"L",1,10,0,10,0,10,10,0,0,FALSE,TRUE,54,1,0,0,0,0,"10 * 10-byte message
[transient]"
+5,"L",1,1,0,1,0,10,10,10,10,FALSE,FALSE,64,1,0,0,0,0,"1 * 10-byte message
[txn]"
+6,"L",1,10,0,10,0,10,10,10,10,FALSE,FALSE,64,1,0,0,0,0,"10 * 10-byte
message [txn]"
+7,"L",1,1,0,1,0,10,10,10,10,FALSE,TRUE,64,1,0,0,0,0,"1 * 10-byte message
[txn transient]"
+8,"L",1,10,0,10,0,10,10,10,10,FALSE,TRUE,64,1,0,0,0,0,"10 * 10-byte
message [txn transient]"
+9,"L",1,1,0,1,0,10,10,0,0,TRUE,FALSE,54,1,32,1,0,0,"1 * 10-byte message
[deq]"
+10,"L",1,10,0,10,0,10,10,0,0,TRUE,FALSE,54,1,32,1,0,0,"10 * 10-byte
message [deq]"
+11,"L",1,1,0,1,0,10,10,0,0,TRUE,TRUE,54,1,32,1,0,0,"1 * 10-byte message
[transient deq]"
+12,"L",1,10,0,10,0,10,10,0,0,TRUE,TRUE,54,1,32,1,0,0,"10 * 10-byte message
[transient deq]"
+13,"L",1,1,0,1,0,10,10,10,10,TRUE,FALSE,64,1,54,1,46,1,"1 * 10-byte
message [txn deq]"
+14,"L",1,10,0,10,0,10,10,10,10,TRUE,FALSE,64,1,54,1,46,1,"10 * 10-byte
message [txn deq]"
+15,"L",1,1,0,1,0,10,10,10,10,TRUE,TRUE,64,1,54,1,46,1,"1 * 10-byte message
[txn transient deq]"
+16,"L",1,10,0,10,0,10,10,10,10,TRUE,TRUE,64,1,54,1,46,1,"10 * 10-byte
message [txn transient deq]"
+,,,,,,,,,,,,,,,,,,,
+"Transition from one d-block to two per message",,,,,,,,,,,,,,,,,,,
+17,"L",1,10,0,10,0,84,84,0,0,FALSE,FALSE,128,1,0,0,0,0,"1 dblk exact
fit"
+18,"L",1,10,0,10,1,85,85,0,0,FALSE,FALSE,129,2,0,0,0,0,"1 dblk + 1
byte"
+19,"L",1,10,0,10,0,58,58,26,26,FALSE,FALSE,128,1,0,0,0,0,"1 dblk exact fit
[txn]"
+20,"L",1,10,0,10,1,59,59,26,26,FALSE,FALSE,129,2,0,0,0,0,"1 dblk + 1 byte
[txn]"
+,,,,,,,,,,,,,,,,,,,
+"Transition from one s-block to two per message",,,,,,,,,,,,,,,,,,,
+21,"L",1,10,0,10,0,468,468,0,0,FALSE,FALSE,512,4,0,0,0,0,"1 sblk exact
fit"
+22,"L",1,10,0,10,1,469,469,0,0,FALSE,FALSE,513,5,0,0,0,0,"1 sblk + 1
byte"
+23,"L",1,10,0,10,0,442,442,26,26,FALSE,FALSE,512,4,0,0,0,0,"1 sblk exact
fit [txn]"
+24,"L",1,10,0,10,1,443,443,26,26,FALSE,FALSE,513,5,0,0,0,0,"1 sblk + 1
byte [txn]"
+,,,,,,,,,,,,,,,,,,,
+"Transition from first page to second",,,,,,,,,,,,,,,,,,,
+25,"L",1,8,0,8,0,4052,4052,0,0,FALSE,FALSE,4096,32,0,0,0,0,"1/8
page"
+26,"L",1,8,1,9,0,4052,4052,0,0,FALSE,FALSE,4096,32,0,0,0,0,"1/8
page"
+27,"L",1,8,0,8,1,4053,4053,0,0,FALSE,FALSE,4097,33,0,0,0,0,"1/8 page + 1
byte"
+28,"L",1,8,0,8,0,3796,3796,256,256,FALSE,FALSE,4096,32,0,0,0,0,"1/8 page
[txn]"
+29,"L",1,8,1,9,0,3796,3796,256,256,FALSE,FALSE,4096,32,0,0,0,0,"1/8 page
[txn]"
+30,"L",1,8,0,8,1,3797,3797,256,256,FALSE,FALSE,4097,33,0,0,0,0,"1/8 page +
1 byte [txn]"
+31,"L",1,8,0,8,0,3924,3924,0,0,TRUE,FALSE,3968,31,32,1,0,0,"1/8 page incl
deq [deq]"
+32,"L",1,8,1,9,0,3924,3924,0,0,TRUE,FALSE,3968,31,32,1,0,0,"1/8 page incl
deq [deq]"
+33,"L",1,8,0,8,1,3925,3925,0,0,TRUE,FALSE,3969,32,32,1,0,0,"1/8 page incl
deq + 1 byte [deq]"
+34,"L",1,8,0,8,0,3028,3028,256,256,TRUE,FALSE,3328,26,300,3,292,3,"1/8
page incl deq & txn [deq txn]"
+35,"L",1,8,1,9,0,3028,3028,256,256,TRUE,FALSE,3328,26,300,3,292,3,"1/8
page incl deq & txn [deq txn]"
+36,"L",1,8,0,8,1,3029,3029,256,256,TRUE,FALSE,3329,27,300,3,292,3,"1/8
page incl deq & txn + 1 byte [deq txn]"
+,,,,,,,,,,,,,,,,,,,
+"Page cache rollover (from page 32 back to page 0) - no dequeues as exact sizes are
needed and dequeues are non-deterministic",,,,,,,,,,,,,,,,,,,
+37,"L",1,32,0,32,0,32724,32724,0,0,FALSE,FALSE,32768,256,0,0,0,0,"1
page"
+38,"L",1,32,1,33,0,32724,32724,0,0,FALSE,FALSE,32768,256,0,0,0,0,"1
page"
+39,"L",1,32,0,32,1,32725,32725,0,0,FALSE,FALSE,32769,257,0,0,0,0,"1 page +
1 byte"
+40,"L",1.5,22,0,22,0,49108,49108,0,0,FALSE,FALSE,49152,384,0,0,0,0,"1.5
pages"
+41,"L",1,32,0,32,0,32468,32468,256,256,FALSE,FALSE,32768,256,0,0,0,0,"1
page [txn]"
+42,"L",1,32,1,33,0,32468,32468,256,256,FALSE,FALSE,32768,256,0,0,0,0,"1
page [txn]"
+43,"L",1,32,0,32,1,32469,32469,256,256,FALSE,FALSE,32769,257,0,0,0,0,"1
page + 1 byte [txn]"
+44,"L",1.5,22,0,22,0,48852,48852,256,256,FALSE,FALSE,49152,384,0,0,0,0,"1.5
pages [txn]"
+45,"L",1,32,0,32,0,32596,32596,0,0,TRUE,FALSE,32640,255,32,1,0,0,"1 page
incl deq [deq]"
+46,"L",1,32,1,33,0,32596,32596,0,0,TRUE,FALSE,32640,255,32,1,0,0,"1 page
incl deq [deq]"
+47,"L",1,32,0,32,1,32597,32597,0,0,TRUE,FALSE,32641,256,32,1,0,0,"1 page
incl deq + 1 byte [deq]"
+48,"L",1.5,22,0,22,0,48980,48980,0,0,TRUE,FALSE,49024,383,32,1,0,0,"1.5
pages incl deq [deq]"
+49,"L",1,32,0,32,0,31700,31700,256,256,TRUE,FALSE,32000,250,300,3,292,3,"1
page incl deq & txn [deq txn]"
+50,"L",1,32,1,33,0,31700,31700,256,256,TRUE,FALSE,32000,250,300,3,292,3,"1
page incl deq & txn [deq txn]"
+51,"L",1,32,0,32,1,31701,31701,256,256,TRUE,FALSE,32001,251,300,3,292,3,"1
page incl deq & txn + 1 byte [deq txn]"
+52,"L",1.5,22,0,22,0,48084,48084,256,256,TRUE,FALSE,48384,378,300,3,292,3,"1.5
pages incl deq & txn [deq txn]"
+,,,,,,,,,,,,,,,,,,,
+"File transition (from file 0000 to 0001) - no dequeues as exact sizes are needed
and dequeues are non-deterministic",,,,,,,,,,,,,,,,,,,
+53,"L",1,48,0,48,0,32724,32724,0,0,FALSE,FALSE,32768,256,0,0,0,0,"1
page"
+54,"L",1,48,1,49,0,32724,32724,0,0,FALSE,FALSE,32768,256,0,0,0,0,"1
page"
+55,"L",1,48,0,48,1,32725,32725,0,0,FALSE,FALSE,32769,257,0,0,0,0,"1 page +
1 byte"
+56,"L",2.5,20,0,20,0,81876,81876,0,0,FALSE,FALSE,81920,640,0,0,0,0,"2.5
pages"
+57,"L",1,48,0,48,0,32468,32468,256,256,FALSE,FALSE,32768,256,0,0,0,0,"1
page [txn]"
+58,"L",1,48,1,49,0,32468,32468,256,256,FALSE,FALSE,32768,256,0,0,0,0,"1
page [txn]"
+59,"L",1,48,0,48,1,32469,32469,256,256,FALSE,FALSE,32769,257,0,0,0,0,"1
page + 1 byte [txn]"
+60,"L",2.5,20,0,20,0,81620,81620,256,256,FALSE,FALSE,81920,640,0,0,0,0,"2.5
pages [txn]"
+61,"L",1,48,0,48,0,32596,32596,0,0,TRUE,FALSE,32640,255,32,1,0,0,"1 page
incl deq [deq]"
+62,"L",1,48,1,49,0,32596,32596,0,0,TRUE,FALSE,32640,255,32,1,0,0,"1 page
incl deq [deq]"
+63,"L",1,48,0,48,1,32597,32597,0,0,TRUE,FALSE,32641,256,32,1,0,0,"1 page
incl deq + 1 byte [deq]"
+64,"L",2.5,20,0,20,0,81748,81748,0,0,TRUE,FALSE,81792,639,32,1,0,0,"2.5
pages incl deq [deq]"
+65,"L",1,48,0,48,0,31700,31700,256,256,TRUE,FALSE,32000,250,300,3,292,3,"1
page incl deq & txn [deq txn]"
+66,"L",1,48,1,49,0,31700,31700,256,256,TRUE,FALSE,32000,250,300,3,292,3,"1
page incl deq & txn [deq txn]"
+67,"L",1,48,0,48,1,31701,31701,256,256,TRUE,FALSE,32001,251,300,3,292,3,"1
page incl deq & txn + 1 byte [deq txn]"
+68,"L",2.5,20,0,20,0,80852,80852,256,256,TRUE,FALSE,81152,634,300,3,292,3,"2.5
pages incl deq & txn [deq txn]"
+,,,,,,,,,,,,,,,,,,,
+"File rollover (from file 0007 to 0000) - RHM_WRONLY req'd for auto-dequeue ==
FALSE",,,,,,,,,,,,,,,,,,,
+69,"L",0.5,16,0,16,0,786388,786388,0,0,FALSE,FALSE,786432,6144,0,0,0,0,"24
pages = ½ file"
+70,"L",0.5,16,1,17,0,786388,786388,0,0,FALSE,FALSE,786432,6144,0,0,0,0,"24
pages = ½ file"
+71,"L",0.5,16,0,16,1,786389,786389,0,0,FALSE,FALSE,786433,6145,0,0,0,0,"24
pages + 1 byte"
+72,"L",0.5,16,0,16,0,786132,786132,256,256,FALSE,FALSE,786432,6144,0,0,0,0,"24
pages = ½ file [txn]"
+73,"L",0.5,16,1,17,0,786132,786132,256,256,FALSE,FALSE,786432,6144,0,0,0,0,"24
pages = ½ file [txn]"
+74,"L",0.5,16,0,16,1,786133,786133,256,256,FALSE,FALSE,786433,6145,0,0,0,0,"24
pages + 1 byte [txn]"
+75,"L",0.25,32,0,32,0,786388,786388,0,0,FALSE,FALSE,786432,6144,0,0,0,0,"24
pages = ½ file"
+76,"L",0.25,32,1,33,0,786388,786388,0,0,FALSE,FALSE,786432,6144,0,0,0,0,"24
pages = ½ file"
+77,"L",0.25,32,0,32,1,786389,786389,0,0,FALSE,FALSE,786433,6145,0,0,0,0,"24
pages + 1 byte"
+78,"L",0.25,32,0,32,0,786132,786132,256,256,FALSE,FALSE,786432,6144,0,0,0,0,"24
pages = ½ file [txn]"
+79,"L",0.25,32,1,33,0,786132,786132,256,256,FALSE,FALSE,786432,6144,0,0,0,0,"24
pages = ½ file [txn]"
+80,"L",0.25,32,0,32,1,786133,786133,256,256,FALSE,FALSE,786433,6145,0,0,0,0,"24
pages + 1 byte [txn]"
+81,"L",0.5,16,0,16,0,786260,786260,0,0,TRUE,FALSE,786304,6143,32,1,0,0,"24
pages incl deq = ½ file [deq]"
+82,"L",0.5,16,1,17,0,786260,786260,0,0,TRUE,FALSE,786304,6143,32,1,0,0,"24
pages incl deq = ½ file [deq]"
+83,"L",0.5,16,0,16,1,786261,786261,0,0,TRUE,FALSE,786305,6144,32,1,0,0,"24
pages incl deq + 1 byte [deq]"
+84,"L",0.5,16,0,16,0,785364,785364,256,256,TRUE,FALSE,785664,6138,300,3,292,3,"24
pages incl deq & txn = ½ file [deq txn]"
+85,"L",0.5,16,1,17,0,785364,785364,256,256,TRUE,FALSE,785664,6138,300,3,292,3,"24
pages incl deq & txn = ½ file [deq txn]"
+86,"L",0.5,16,0,16,1,785365,785365,256,256,TRUE,FALSE,785665,6139,300,3,292,3,"24
pages incl deq & txn + 1 byte [deq txn]"
+87,"L",0.25,32,0,32,0,786260,786260,0,0,TRUE,FALSE,786304,6143,32,1,0,0,"24
pages incl deq = ½ file [deq]"
+88,"L",0.25,32,1,33,0,786260,786260,0,0,TRUE,FALSE,786304,6143,32,1,0,0,"24
pages incl deq = ½ file [deq]"
+89,"L",0.25,32,0,32,1,786261,786261,0,0,TRUE,FALSE,786305,6144,32,1,0,0,"24
pages incl deq + 1 byte [deq]"
+90,"L",0.25,32,0,32,0,785364,785364,256,256,TRUE,FALSE,785664,6138,300,3,292,3,"24
pages incl deq & txn = ½ file [deq txn]"
+91,"L",0.25,32,1,33,0,785364,785364,256,256,TRUE,FALSE,785664,6138,300,3,292,3,"24
pages incl deq & txn = ½ file [deq txn]"
+92,"L",0.25,32,0,32,1,785365,785365,256,256,TRUE,FALSE,785665,6139,300,3,292,3,"24
pages incl deq & txn + 1 byte [deq txn]"
+,,,,,,,,,,,,,,,,,,,
+"Multi-page messages (large messages) - tests various paths in
encoder.",,,,,,,,,,,,,,,,,,,
+93,"L",1,16,0,16,0,32724,32724,0,0,FALSE,FALSE,32768,256,0,0,0,0,"data 1
page"
+94,"L",1,16,0,16,1,32725,32725,0,0,FALSE,FALSE,32769,257,0,0,0,0,"data 1
page + 1 byte (tail split; 1 byte over page boundary)"
+95,"L",1,16,0,16,11,32735,32735,0,0,FALSE,FALSE,32779,257,0,0,0,0,"data 1
page + 11 bytes (tail split; 11 bytes over page boundary)"
+96,"L",1,16,0,16,12,32736,32736,0,0,FALSE,FALSE,32780,257,0,0,0,0,"data 1
page + 12 bytes (tail separated exactly onto next page)"
+97,"L",1,16,0,16,13,32737,32737,0,0,FALSE,FALSE,32781,257,0,0,0,0,"data 1
page + 13 bytes (xid split; 1 byte over page boundary)"
+98,"L",1,16,0,16,0,32468,32468,256,256,FALSE,FALSE,32768,256,0,0,0,0,"data
1 page [txn]"
+99,"L",1,16,0,16,1,32469,32469,256,256,FALSE,FALSE,32769,257,0,0,0,0,"data
1 page + 1 byte (tail split; 1 byte over page boundary) [txn]"
+100,"L",1,16,0,16,11,32479,32479,256,256,FALSE,FALSE,32779,257,0,0,0,0,"data
1 page + 11 bytes (tail split; 11 bytes over page boundary) [txn]"
+101,"L",1,16,0,16,12,32480,32480,256,256,FALSE,FALSE,32780,257,0,0,0,0,"data
1 page + 12 bytes (tail separated exactly onto next page) [txn]"
+102,"L",1,16,0,16,13,32481,32481,256,256,FALSE,FALSE,32781,257,0,0,0,0,"data
1 page + 13 bytes (xid split; 1 byte over page boundary) [txn]"
+103,"L",2,16,0,16,0,65492,65492,0,0,FALSE,FALSE,65536,512,0,0,0,0,"data 2
pages"
+104,"L",2,16,0,16,1,65493,65493,0,0,FALSE,FALSE,65537,513,0,0,0,0,"data 2
pages + 1 byte (tail split; 1 byte over page boundary)"
+105,"L",2,16,0,16,11,65503,65503,0,0,FALSE,FALSE,65547,513,0,0,0,0,"data 2
pages + 11 bytes (tail split; 11 bytes over page boundary)"
+106,"L",2,16,0,16,12,65504,65504,0,0,FALSE,FALSE,65548,513,0,0,0,0,"data 2
pages + 12 bytes (tail separated exactly onto next page)"
+107,"L",2,16,0,16,13,65505,65505,0,0,FALSE,FALSE,65549,513,0,0,0,0,"data 2
pages + 13 bytes (xid split; 1 byte over page boundary)"
+108,"L",2,16,0,16,0,65236,65236,256,256,FALSE,FALSE,65536,512,0,0,0,0,"data
2 pages [txn]"
+109,"L",2,16,0,16,1,65237,65237,256,256,FALSE,FALSE,65537,513,0,0,0,0,"data
2 pages + 1 byte (tail split; 1 byte over page boundary) [txn]"
+110,"L",2,16,0,16,11,65247,65247,256,256,FALSE,FALSE,65547,513,0,0,0,0,"data
2 pages + 11 bytes (tail split; 11 bytes over page boundary) [txn]"
+111,"L",2,16,0,16,12,65248,65248,256,256,FALSE,FALSE,65548,513,0,0,0,0,"data
2 pages + 12 bytes (tail separated exactly onto next page) [txn]"
+112,"L",2,16,0,16,13,65249,65249,256,256,FALSE,FALSE,65549,513,0,0,0,0,"data
2 pages + 13 bytes (xid split; 1 byte over page boundary) [txn]"
+113,"L",4,16,0,16,0,131028,131028,0,0,FALSE,FALSE,131072,1024,0,0,0,0,"data
4 pages"
+114,"L",4,16,0,16,1,131029,131029,0,0,FALSE,FALSE,131073,1025,0,0,0,0,"data
4 pages + 1 byte (tail split; 1 byte over page boundary)"
+115,"L",4,16,0,16,11,131039,131039,0,0,FALSE,FALSE,131083,1025,0,0,0,0,"data
4 pages + 11 bytes (tail split; 11 bytes over page boundary)"
+116,"L",4,16,0,16,12,131040,131040,0,0,FALSE,FALSE,131084,1025,0,0,0,0,"data
4 pages + 12 bytes (tail separated exactly onto next page)"
+117,"L",4,16,0,16,13,131041,131041,0,0,FALSE,FALSE,131085,1025,0,0,0,0,"data
4 pages + 13 bytes (xid split; 1 byte over page boundary)"
+118,"L",4,16,0,16,0,130772,130772,256,256,FALSE,FALSE,131072,1024,0,0,0,0,"data
4 pages [txn]"
+119,"L",4,16,0,16,1,130773,130773,256,256,FALSE,FALSE,131073,1025,0,0,0,0,"data
4 pages + 1 byte (tail split; 1 byte over page boundary) [txn]"
+120,"L",4,16,0,16,11,130783,130783,256,256,FALSE,FALSE,131083,1025,0,0,0,0,"data
4 pages + 11 bytes (tail split; 11 bytes over page boundary) [txn]"
+121,"L",4,16,0,16,12,130784,130784,256,256,FALSE,FALSE,131084,1025,0,0,0,0,"data
4 pages + 12 bytes (tail separated exactly onto next page) [txn]"
+122,"L",4,16,0,16,13,130785,130785,256,256,FALSE,FALSE,131085,1025,0,0,0,0,"data
4 pages + 13 bytes (xid split; 1 byte over page boundary) [txn]"
+123,"L",3.5,16,0,16,0,114644,114644,0,0,FALSE,FALSE,114688,896,0,0,0,0,"data
4 pages + 12 bytes (tail separated exactly onto next page) [txn]"
+124,"L",3.5,16,0,16,1,114645,114645,0,0,FALSE,FALSE,114689,897,0,0,0,0,"data
4 pages + 13 bytes (xid split; 1 byte over page boundary) [txn]"
+125,"L",3.5,16,0,16,0,114388,114388,256,256,FALSE,FALSE,114688,896,0,0,0,0,"data
4 pages + 12 bytes (tail separated exactly onto next page) [txn]"
+126,"L",3.5,16,0,16,1,114389,114389,256,256,FALSE,FALSE,114689,897,0,0,0,0,"data
4 pages + 13 bytes (xid split; 1 byte over page boundary) [txn]"
+127,"L",1,16,0,16,-1,10,10,32735,32735,FALSE,FALSE,32789,257,0,0,0,0,"xid
1 page – 1 byte; data 10 bytes (exact fit) [txn]"
+128,"L",1,16,0,16,0,10,10,32736,32736,FALSE,FALSE,32790,257,0,0,0,0,"xid 1
page; data 10 bytes (exact fit) [txn]"
+129,"L",1,16,0,16,1,10,10,32737,32737,FALSE,FALSE,32791,257,0,0,0,0,"xid 1
page + 1 byte; data 10 bytes (exact fit) [txn]"
+130,"L",2,16,0,16,-1,10,10,65503,65503,FALSE,FALSE,65557,513,0,0,0,0,"xid
2 pages – 1 byte; data 10 bytes (exact fit) [txn]"
+131,"L",2,16,0,16,0,10,10,65504,65504,FALSE,FALSE,65558,513,0,0,0,0,"xid 2
pages; data 10 bytes (exact fit) [txn]"
+132,"L",2,16,0,16,1,10,10,65505,65505,FALSE,FALSE,65559,513,0,0,0,0,"xid 2
pages + 1 byte; data 10 bytes (exact fit) [txn]"
+133,"L",4,16,0,16,-1,10,10,131039,131039,FALSE,FALSE,131093,1025,0,0,0,0,"xid
4 pages – 1 byte; data 10 bytes (exact fit) [txn]"
+134,"L",4,16,0,16,0,10,10,131040,131040,FALSE,FALSE,131094,1025,0,0,0,0,"xid
4 pages; data 10 bytes (exact fit) [txn]"
+135,"L",4,16,0,16,1,10,10,131041,131041,FALSE,FALSE,131095,1025,0,0,0,0,"xid
4 pages + 1 byte; data 10 bytes (exact fit) [txn]"
+136,"L",3.5,16,0,16,0,10,10,114656,114656,FALSE,FALSE,114710,897,0,0,0,0,"xid
3.5 pages; data 10 bytes (exact fit) [txn]"
+137,"L",3.5,16,0,16,1,10,10,114657,114657,FALSE,FALSE,114711,897,0,0,0,0,"xid
3.5 pages + 1 byte; data 10 bytes (exact fit) [txn]"
+138,"L",1,16,0,16,-1,10,10,32735,32735,TRUE,FALSE,32789,257,32779,257,32771,257,"xid
1 page – 1 byte; data 10 bytes (exact fit) [txn]"
+139,"L",1,16,0,16,0,10,10,32736,32736,TRUE,FALSE,32790,257,32780,257,32772,257,"xid
1 page; data 10 bytes (exact fit) [txn]"
+140,"L",1,16,0,16,1,10,10,32737,32737,TRUE,FALSE,32791,257,32781,257,32773,257,"xid
1 page + 1 byte; data 10 bytes (exact fit) [txn]"
+141,"L",2,16,0,16,-1,10,10,65503,65503,TRUE,FALSE,65557,513,65547,513,65539,513,"xid
2 pages – 1 byte; data 10 bytes (exact fit) [txn]"
+142,"L",2,16,0,16,0,10,10,65504,65504,TRUE,FALSE,65558,513,65548,513,65540,513,"xid
2 pages; data 10 bytes (exact fit) [txn]"
+143,"L",2,16,0,16,1,10,10,65505,65505,TRUE,FALSE,65559,513,65549,513,65541,513,"xid
2 pages + 1 byte; data 10 bytes (exact fit) [txn]"
+144,"L",4,16,0,16,-1,10,10,131039,131039,TRUE,FALSE,131093,1025,131083,1025,131075,1025,"xid
4 pages – 1 byte; data 10 bytes (exact fit) [txn]"
+145,"L",4,16,0,16,0,10,10,131040,131040,TRUE,FALSE,131094,1025,131084,1025,131076,1025,"xid
4 pages; data 10 bytes (exact fit) [txn]"
+146,"L",4,16,0,16,1,10,10,131041,131041,TRUE,FALSE,131095,1025,131085,1025,131077,1025,"xid
4 pages + 1 byte; data 10 bytes (exact fit) [txn]"
+147,"L",3.5,16,0,16,0,10,10,114656,114656,TRUE,FALSE,114710,897,114700,897,114692,897,"xid
3.5 pages; data 10 bytes (exact fit) [txn]"
+148,"L",3.5,16,0,16,1,10,10,114657,114657,TRUE,FALSE,114711,897,114701,897,114693,897,"xid
3.5 pages + 1 byte; data 10 bytes (exact fit) [txn]"
+,,,,,,,,,,,,,,,,,,,
+"Large (multi-megabyte) messages - RHM_WRONLY req'd for auto-dequeue ==
FALSE",,,,,,,,,,,,,,,,,,,
+149,"L",1,32,0,32,0,1572820,1572820,0,0,FALSE,FALSE,1572864,12288,0,0,0,0,"48
pages = 1 file exactly"
+150,"L",1,32,0,32,1,1572821,1572821,0,0,FALSE,FALSE,1572865,12289,0,0,0,0,"48
pages + 1 byte"
+151,"L",1,32,0,32,0,1605588,1605588,0,0,FALSE,FALSE,1605632,12544,0,0,0,0,"49
pages = 1 file + 1 page"
+152,"L",1,32,0,32,1,1589205,1589205,0,0,FALSE,FALSE,1589249,12417,0,0,0,0,"49
pages + 1 byte = 1 file + 1 page + 1 byte"
+153,"L",1,32,0,32,0,1572565,1572565,255,255,FALSE,FALSE,1572864,12288,0,0,0,0,"48
pages = 1 file exactly [txn]"
+154,"L",1,32,0,32,1,1572566,1572566,255,255,FALSE,FALSE,1572865,12289,0,0,0,0,"48
pages + 1 byte [txn]"
+155,"L",1,32,0,32,0,1588949,1588949,255,255,FALSE,FALSE,1589248,12416,0,0,0,0,"49
pages = 1 file + 1 page [txn]"
+156,"L",1,32,0,32,1,1584854,1584854,255,255,FALSE,FALSE,1585153,12385,0,0,0,0,"49
pages + 1 byte = 1 file + 1 page + 1 byte [txn]"
+157,"L",1,32,0,32,0,1572692,1572692,0,0,TRUE,FALSE,1572736,12287,32,1,0,0,"48
pages incl deq = 1 file exactly [deq]"
+158,"L",1,32,0,32,1,1572693,1572693,0,0,TRUE,FALSE,1572737,12288,32,1,0,0,"48
pages incl deq + 1 byte [deq]"
+159,"L",1,32,0,32,0,1595220,1595220,0,0,TRUE,FALSE,1595264,12463,32,1,0,0,"49
pages incl deq = 1 file + 1 page [deq]"
+160,"L",1,32,0,32,1,1589077,1589077,0,0,TRUE,FALSE,1589121,12416,32,1,0,0,"49
pages incl deq + 1 byte = 1 file + 1 page + 1 byte [deq]"
+161,"L",1,32,0,32,0,1571797,1571797,255,255,TRUE,FALSE,1572096,12282,299,3,291,3,"48
pages incl deq & txn = 1 file exactly [deq txn]"
+162,"L",1,32,0,32,1,1571798,1571798,255,255,TRUE,FALSE,1572097,12283,299,3,291,3,"48
pages incl deq & txn + 1 byte [deq txn]"
+163,"L",1,32,0,32,0,1571797,1571797,255,255,TRUE,FALSE,1572096,12282,299,3,291,3,"49
pages incl deq & txn = 1 file + 1 page [deq txn]"
+164,"L",1,32,0,32,1,1571798,1571798,255,255,TRUE,FALSE,1572097,12283,299,3,291,3,"49
pages incl deq & txn + 1 byte = 1 file + 1 page + 1 byte [deq txn]"
+165,"L",2,16,0,16,0,3145684,3145684,0,0,FALSE,FALSE,3145728,24576,0,0,0,0,"96
pages = 2 files exactly"
+166,"L",2,16,0,16,1,3145685,3145685,0,0,FALSE,FALSE,3145729,24577,0,0,0,0,"96
pages + 1 byte"
+167,"L",2,16,0,16,0,3146708,3146708,0,0,FALSE,FALSE,3146752,24584,0,0,0,0,"97
pages = 2 files + 1 page"
+168,"L",2,16,0,16,1,3145685,3145685,0,0,FALSE,FALSE,3145729,24577,0,0,0,0,"97
pages + 1 byte = 2 files + 1 page + 1 byte"
+169,"L",2,16,0,16,0,3145429,3145429,255,255,FALSE,FALSE,3145728,24576,0,0,0,0,"96
pages = 2 files exactly [txn]"
+170,"L",2,16,0,16,1,3145430,3145430,255,255,FALSE,FALSE,3145729,24577,0,0,0,0,"96
pages + 1 byte [txn]"
+171,"L",2,16,0,16,0,3145429,3145429,255,255,FALSE,FALSE,3145728,24576,0,0,0,0,"97
pages = 2 files + 1 page [txn]"
+172,"L",2,16,0,16,1,3145430,3145430,255,255,FALSE,FALSE,3145729,24577,0,0,0,0,"97
pages + 1 byte = 2 files + 1 page + 1 byte [txn]"
+173,"L",2,16,0,16,0,3145556,3145556,0,0,TRUE,FALSE,3145600,24575,32,1,0,0,"96
pages incl deq = 2 files exactly [deq]"
+174,"L",2,16,0,16,1,3145557,3145557,0,0,TRUE,FALSE,3145601,24576,32,1,0,0,"96
pages incl deq + 1 byte [deq]"
+175,"L",2,16,0,16,0,3145556,3145556,0,0,TRUE,FALSE,3145600,24575,32,1,0,0,"97
pages incl deq = 2 files + 1 page [deq]"
+176,"L",2,16,0,16,1,3145557,3145557,0,0,TRUE,FALSE,3145601,24576,32,1,0,0,"97
pages incl deq + 1 byte = 2 files + 1 page + 1 byte [deq]"
+177,"L",2,16,0,16,0,3144661,3144661,255,255,TRUE,FALSE,3144960,24570,299,3,291,3,"96
pages incl deq & txn = 2 files exactly [deq txn]"
+178,"L",2,16,0,16,1,3144662,3144662,255,255,TRUE,FALSE,3144961,24571,299,3,291,3,"96
pages incl deq & txn + 1 byte [deq txn]"
+179,"L",2,16,0,16,0,3144661,3144661,255,255,TRUE,FALSE,3144960,24570,299,3,291,3,"97
pages incl deq & txn = 2 files + 1 page [deq txn]"
+180,"L",2,16,0,16,1,3144662,3144662,255,255,TRUE,FALSE,3144961,24571,299,3,291,3,"97
pages incl deq & txn + 1 byte = 2 files + 1 page + 1 byte [deq txn]"
+181,"L",4,8,0,8,0,6291412,6291412,0,0,FALSE,FALSE,6291456,49152,0,0,0,0,"192
pages = 2 files exactly"
+182,"L",4,8,0,8,1,6291413,6291413,0,0,FALSE,FALSE,6291457,49153,0,0,0,0,"192
pages + 1 byte"
+183,"L",4,8,0,8,0,6291412,6291412,0,0,FALSE,FALSE,6291456,49152,0,0,0,0,"193
pages = 2 files + 1 page"
+184,"L",4,8,0,8,1,6291413,6291413,0,0,FALSE,FALSE,6291457,49153,0,0,0,0,"193
pages + 1 byte = 2 files + 1 page + 1 byte"
+185,"L",4,8,0,8,0,6291157,6291157,255,255,FALSE,FALSE,6291456,49152,0,0,0,0,"192
pages = 2 files exactly [txn]"
+186,"L",4,8,0,8,1,6291158,6291158,255,255,FALSE,FALSE,6291457,49153,0,0,0,0,"192
pages + 1 byte [txn]"
+187,"L",4,8,0,8,0,6291157,6291157,255,255,FALSE,FALSE,6291456,49152,0,0,0,0,"193
pages = 2 files + 1 page [txn]"
+188,"L",4,8,0,8,1,6291158,6291158,255,255,FALSE,FALSE,6291457,49153,0,0,0,0,"193
pages + 1 byte = 2 files + 1 page + 1 byte [txn]"
+189,"L",4,8,0,8,0,6291284,6291284,0,0,TRUE,FALSE,6291328,49151,32,1,0,0,"192
pages incl deq = 2 files exactly [deq]"
+190,"L",4,8,0,8,1,6291285,6291285,0,0,TRUE,FALSE,6291329,49152,32,1,0,0,"192
pages incl deq + 1 byte [deq]"
+191,"L",4,8,0,8,0,6291284,6291284,0,0,TRUE,FALSE,6291328,49151,32,1,0,0,"193
pages incl deq = 2 files + 1 page [deq]"
+192,"L",4,8,0,8,1,6291285,6291285,0,0,TRUE,FALSE,6291329,49152,32,1,0,0,"193
pages incl deq + 1 byte = 2 files + 1 page + 1 byte [deq]"
+193,"L",4,8,0,8,0,6290389,6290389,255,255,TRUE,FALSE,6290688,49146,299,3,291,3,"192
pages incl deq & txn = 2 files exactly [deq txn]"
+194,"L",4,8,0,8,1,6290390,6290390,255,255,TRUE,FALSE,6290689,49147,299,3,291,3,"192
pages incl deq & txn + 1 byte [deq txn]"
+195,"L",4,8,0,8,0,6290389,6290389,255,255,TRUE,FALSE,6290688,49146,299,3,291,3,"193
pages incl deq & txn = 2 files + 1 page [deq txn]"
+196,"L",4,8,0,8,1,6290390,6290390,255,255,TRUE,FALSE,6290689,49147,299,3,291,3,"193
pages incl deq & txn + 1 byte = 2 files + 1 page + 1 byte [deq txn]"
+,,,,,,,,,,,,,,,,,,,
+"High volume tests of random message lengths - RHM_WRONLY req'd for auto-dequeue
== FALSE",,,,,,,,,,,,,,,,,,,
+197,"M",1,5000000,0,5000000,0,0,84,0,0,FALSE,FALSE,128,1,0,0,0,0,"1 dblk
max"
+198,"M",3,3000000,0,3000000,0,0,340,0,0,FALSE,FALSE,384,3,0,0,0,0,"3 dblks
max"
+199,"M",10,1600000,0,1600000,0,0,1236,0,0,FALSE,FALSE,1280,10,0,0,0,0,"10
dblks max"
+200,"M",30,6000000,0,6000000,0,0,3796,0,0,FALSE,FALSE,3840,30,0,0,0,0,"30
dblks max"
+201,"M",100,200000,0,200000,0,0,12756,0,0,FALSE,FALSE,12800,100,0,0,0,0,"100
dblks max"
+202,"M",300,60000,0,60000,0,0,38356,0,0,FALSE,FALSE,38400,300,0,0,0,0,"300
dblks max"
+203,"M",1000,20000,0,20000,0,0,127956,0,0,FALSE,FALSE,128000,1000,0,0,0,0,"1000
dblks max"
+204,"M",1,5000000,0,5000000,0,0,100,1,100,FALSE,FALSE,244,2,0,0,0,0,"100
bytes xid max + 100 bytes data max [txn]"
+205,"M",3,3000000,0,3000000,0,0,300,1,300,FALSE,FALSE,644,6,0,0,0,0,"300
bytes xid max + 300 bytes data max [txn]"
+206,"M",10,1600000,0,1600000,0,0,1000,1,1000,FALSE,FALSE,2044,16,0,0,0,0,"1000
bytes xid max + 1000 bytes data max [txn]"
+207,"M",30,6000000,0,6000000,0,0,3000,1,3000,FALSE,FALSE,6044,48,0,0,0,0,"3000
bytes xid max + 3000 bytes data max [txn]"
+208,"M",100,200000,0,200000,0,0,10000,1,10000,FALSE,FALSE,20044,157,0,0,0,0,"10000
bytes xid max + 10000 bytes data max [txn]"
+209,"M",300,60000,0,60000,0,0,30000,1,30000,FALSE,FALSE,60044,470,0,0,0,0,"30000
bytes xid max + 30000 bytes data max [txn]"
+210,"M",1000,20000,0,20000,0,0,100000,1,100000,FALSE,FALSE,200044,1563,0,0,0,0,"100000
bytes xid max + 100000 bytes data max [txn]"
+211,"M",1,5000000,0,5000000,0,0,84,0,0,TRUE,FALSE,128,1,32,1,0,0,"1 dblk
max [deq]"
+212,"M",3,3000000,0,3000000,0,0,340,0,0,TRUE,FALSE,384,3,32,1,0,0,"3 dblks
max [deq]"
+213,"M",10,1600000,0,1600000,0,0,1236,0,0,TRUE,FALSE,1280,10,32,1,0,0,"10
dblks max [deq]"
+214,"M",30,6000000,0,6000000,0,0,3796,0,0,TRUE,FALSE,3840,30,32,1,0,0,"30
dblks max [deq]"
+215,"M",100,200000,0,200000,0,0,12756,0,0,TRUE,FALSE,12800,100,32,1,0,0,"100
dblks max [deq]"
+216,"M",300,60000,0,60000,0,0,38356,0,0,TRUE,FALSE,38400,300,32,1,0,0,"300
dblks max [deq]"
+217,"M",1000,20000,0,20000,0,0,127956,0,0,TRUE,FALSE,128000,1000,32,1,0,0,"1000
dblks max [deq]"
+218,"M",1,5000000,0,5000000,0,0,100,1,100,TRUE,FALSE,244,2,144,2,136,2,"100
bytes xid max + 100 bytes data max [deq txn]"
+219,"M",3,3000000,0,3000000,0,0,300,1,300,TRUE,FALSE,644,6,344,3,336,3,"300
bytes xid max + 300 bytes data max [deq txn]"
+220,"M",10,1600000,0,1600000,0,0,1000,1,1000,TRUE,FALSE,2044,16,1044,9,1036,9,"1000
bytes xid max + 1000 bytes data max [deq txn]"
+221,"M",30,6000000,0,6000000,0,0,3000,1,3000,TRUE,FALSE,6044,48,3044,24,3036,24,"3000
bytes xid max + 3000 bytes data max [deq txn]"
+222,"M",100,200000,0,200000,0,0,10000,1,10000,TRUE,FALSE,20044,157,10044,79,10036,79,"10000
bytes xid max + 10000 bytes data max [deq txn]"
+223,"M",300,60000,0,60000,0,0,30000,1,30000,TRUE,FALSE,60044,470,30044,235,30036,235,"30000
bytes xid max + 30000 bytes data max [deq txn]"
+224,"M",1000,20000,0,20000,0,0,100000,1,100000,TRUE,FALSE,200044,1563,100044,782,100036,782,"100000
bytes xid max + 100000 bytes data max [deq txn]"
+,,,,,,,,,,,,,,,,,,,
+"STANDARD PERFORMANCE BENCHMARK: 10,000,000 writes, data=212b (2
dblks)",,,,,,,,,,,,,,,,,,,
+198,"M",1,10000000,0,10000000,0,212,212,0,0,FALSE,FALSE,256,2,0,0,0,0,"212
bytes data (2 dblks enq)"
+199,"M",1,10000000,0,10000000,0,212,212,256,256,FALSE,FALSE,512,4,0,0,0,0,"212
bytes data + 256 bytes xid (4 dblks enq)"
+200,"M",1,10000000,0,10000000,0,212,212,0,0,TRUE,FALSE,256,2,32,1,0,0,"212
bytes data (2 dblks enq + 1 dblk deq)"
+201,"M",1,10000000,0,10000000,0,212,212,256,256,TRUE,FALSE,512,4,300,3,292,3,"212
bytes data + 256 bytes xid (4 dblks enq + 3 dblks deq + 3 dblks txn)"