rhmessaging commits: r978 - mgmt/cumin/python/cumin.
by rhmessaging-commits@lists.jboss.org
Author: justi9
Date: 2007-10-09 11:55:12 -0400 (Tue, 09 Oct 2007)
New Revision: 978
Modified:
mgmt/cumin/python/cumin/cluster.strings
mgmt/cumin/python/cumin/model.py
mgmt/cumin/python/cumin/page.py
mgmt/cumin/python/cumin/page.strings
mgmt/cumin/python/cumin/virtualhost.py
Log:
Adds vhost groups to top-level vhosts tab. Adds basic vhost group
methods to model.
Modified: mgmt/cumin/python/cumin/cluster.strings
===================================================================
--- mgmt/cumin/python/cumin/cluster.strings 2007-10-09 15:41:40 UTC (rev 977)
+++ mgmt/cumin/python/cumin/cluster.strings 2007-10-09 15:55:12 UTC (rev 978)
@@ -28,7 +28,7 @@
<ul class="actions">
<li><a href="">Add Virtual Host</a></li>
<li><a href="">Add Server</a></li>
- <li><a href="">Shutdown Servers in Cluster</a></li>
+ <li><a href="">Shutdown Servers</a></li>
</ul>
{tabs}
Modified: mgmt/cumin/python/cumin/model.py
===================================================================
--- mgmt/cumin/python/cumin/model.py 2007-10-09 15:41:40 UTC (rev 977)
+++ mgmt/cumin/python/cumin/model.py 2007-10-09 15:55:12 UTC (rev 978)
@@ -96,6 +96,12 @@
def get_virtual_hosts(self):
return self.get_index(self.virtual_host).values()
+ def get_virtual_host_group(self, id):
+ return self.get_index(self.virtual_host_group).get(id)
+
+ def get_virtual_host_groups(self):
+ return self.get_index(self.virtual_host_group).values()
+
def get_queue(self, id):
return self.get_index(self.queue).get(id)
Modified: mgmt/cumin/python/cumin/page.py
===================================================================
--- mgmt/cumin/python/cumin/page.py 2007-10-09 15:41:40 UTC (rev 977)
+++ mgmt/cumin/python/cumin/page.py 2007-10-09 15:55:12 UTC (rev 978)
@@ -154,6 +154,9 @@
self.vhosts = VirtualHostSet(app, "vhosts")
self.add_child(self.vhosts)
+ self.groups = VirtualHostGroupTree(app, "groups")
+ self.add_child(self.groups)
+
def render_title(self, session, model):
return "Virtual Hosts (%i)" % len(model.get_virtual_hosts())
Modified: mgmt/cumin/python/cumin/page.strings
===================================================================
--- mgmt/cumin/python/cumin/page.strings 2007-10-09 15:41:40 UTC (rev 977)
+++ mgmt/cumin/python/cumin/page.strings 2007-10-09 15:55:12 UTC (rev 978)
@@ -326,6 +326,7 @@
<h1>{title}</h1>
<ul class="actions">
<li><a href="">Add Virtual Host</a></li>
+ <li><a href="">Add Virtual Host Group</a></li>
<li><a href="">Add Server</a></li>
<li><a href="">Add Server Group</a></li>
<li><a href="">Add Cluster</a></li>
Modified: mgmt/cumin/python/cumin/virtualhost.py
===================================================================
--- mgmt/cumin/python/cumin/virtualhost.py 2007-10-09 15:41:40 UTC (rev 977)
+++ mgmt/cumin/python/cumin/virtualhost.py 2007-10-09 15:55:12 UTC (rev 978)
@@ -21,6 +21,11 @@
return mlink(branch.marshal(), "VirtualHost", vhost.name)
+class VirtualHostGroupTree(ItemTree):
+ def render_title(self, session, model):
+ return "Virtual Host Groups (%i)" \
+ % len(model.get_virtual_host_groups())
+
class VirtualHostFrame(CuminFrame):
def __init__(self, app, name):
super(VirtualHostFrame, self).__init__(app, name)
17 years, 2 months
rhmessaging commits: r977 - mgmt/cumin/python/cumin.
by rhmessaging-commits@lists.jboss.org
Author: justi9
Date: 2007-10-09 11:41:40 -0400 (Tue, 09 Oct 2007)
New Revision: 977
Modified:
mgmt/cumin/python/cumin/demo.py
Log:
In the demo data, makes cluster vhost config consistent with cluster
server vhost config.
Modified: mgmt/cumin/python/cumin/demo.py
===================================================================
--- mgmt/cumin/python/cumin/demo.py 2007-10-09 15:36:05 UTC (rev 976)
+++ mgmt/cumin/python/cumin/demo.py 2007-10-09 15:41:40 UTC (rev 977)
@@ -49,6 +49,9 @@
vhost.name = cluster.name + "." + name
vhost.set_cluster(cluster)
+ for vhost in cluster.virtual_host_items():
+ self.load_vhost(vhost)
+
for server_count in range(12):
cluster = clusters[server_count % 3]
@@ -72,22 +75,25 @@
vhost.set_server(server)
for vhost in server.virtual_host_items():
- for name in ("realm0", "realm1", "realm2"):
- realm = Realm(self.model)
- realm.name = name
- vhost.add_realm(realm)
+ self.load_vhost(vhost)
- for name in ("amq.direct", "amq.fanout",
- "amq.topic", "amq.match"):
- exchange = Exchange(self.model)
- exchange.name = name
- vhost.add_exchange(exchange)
+ def load_vhost(self, vhost):
+ for name in ("realm0", "realm1", "realm2"):
+ realm = Realm(self.model)
+ realm.name = name
+ vhost.add_realm(realm)
- for queue_count in range(10):
- queue = Queue(self.model)
- queue.name = fmt("queue", queue_count)
- vhost.add_queue(queue)
+ for name in ("amq.direct", "amq.fanout",
+ "amq.topic", "amq.match"):
+ exchange = Exchange(self.model)
+ exchange.name = name
+ vhost.add_exchange(exchange)
+ for queue_count in range(10):
+ queue = Queue(self.model)
+ queue.name = fmt("queue", queue_count)
+ vhost.add_queue(queue)
+
def start_updates(self):
thread = UpdateThread(self.model)
thread.start()
17 years, 2 months
rhmessaging commits: r976 - mgmt/cumin/python/cumin.
by rhmessaging-commits@lists.jboss.org
Author: justi9
Date: 2007-10-09 11:36:05 -0400 (Tue, 09 Oct 2007)
New Revision: 976
Modified:
mgmt/cumin/python/cumin/cluster.py
mgmt/cumin/python/cumin/cluster.strings
mgmt/cumin/python/cumin/demo.py
mgmt/cumin/python/cumin/model.py
mgmt/cumin/python/cumin/page.py
mgmt/cumin/python/cumin/virtualhost.py
mgmt/cumin/python/cumin/virtualhost.strings
Log:
Makes virtual hosts independent. Updates the model and demo data to
reflect this. Adds a virtual host tab to the cluster view.
Modified: mgmt/cumin/python/cumin/cluster.py
===================================================================
--- mgmt/cumin/python/cumin/cluster.py 2007-10-09 14:20:22 UTC (rev 975)
+++ mgmt/cumin/python/cumin/cluster.py 2007-10-09 15:36:05 UTC (rev 976)
@@ -1,10 +1,8 @@
from wooly import *
from wooly.widgets import *
+from virtualhost import *
from server import *
-from queue import *
-from realm import *
-from exchange import *
from widgets import *
strings = StringCatalog(__file__)
@@ -60,6 +58,7 @@
self.tabs = TabSet(app, "tabs")
self.add_child(self.tabs)
+ self.tabs.add_child(self.ClusterVirtualHosts(app, "vhosts"))
self.tabs.add_child(self.ClusterServers(app, "servers"))
def render_title(self, session, cluster):
@@ -68,6 +67,13 @@
def render_name(self, session, cluster):
return cluster.name
+ class ClusterVirtualHosts(VirtualHostSet):
+ def render_title(self, session, cluster):
+ return "Virtual Hosts (%i)" % len(cluster.virtual_host_items())
+
+ def get_items(self, session, cluster):
+ return sorted(cluster.virtual_host_items(), cmp, lambda x: x.name)
+
class ClusterServers(ServerSet):
def render_title(self, session, cluster):
return "Servers (%i)" % len(cluster.server_items())
Modified: mgmt/cumin/python/cumin/cluster.strings
===================================================================
--- mgmt/cumin/python/cumin/cluster.strings 2007-10-09 14:20:22 UTC (rev 975)
+++ mgmt/cumin/python/cumin/cluster.strings 2007-10-09 15:36:05 UTC (rev 976)
@@ -26,6 +26,7 @@
</dl>
<ul class="actions">
+ <li><a href="">Add Virtual Host</a></li>
<li><a href="">Add Server</a></li>
<li><a href="">Shutdown Servers in Cluster</a></li>
</ul>
Modified: mgmt/cumin/python/cumin/demo.py
===================================================================
--- mgmt/cumin/python/cumin/demo.py 2007-10-09 14:20:22 UTC (rev 975)
+++ mgmt/cumin/python/cumin/demo.py 2007-10-09 15:36:05 UTC (rev 976)
@@ -40,10 +40,21 @@
cluster.name = fmt("cluster", cluster_count)
clusters.append(cluster)
+ vhost = VirtualHost(self.model)
+ vhost.name = cluster.name + ".default"
+ vhost.set_cluster(cluster)
+
+ for name in ("test", "devel"):
+ vhost = VirtualHost(self.model)
+ vhost.name = cluster.name + "." + name
+ vhost.set_cluster(cluster)
+
for server_count in range(12):
+ cluster = clusters[server_count % 3]
+
server = Server(self.model)
server.name = fmt("server", server_count)
- server.set_cluster(clusters[server_count % 3])
+ server.set_cluster(cluster)
if server_count % 2:
sgroups["East Coast"].add_server(server)
@@ -51,14 +62,14 @@
sgroups["West Coast"].add_server(server)
vhost = VirtualHost(self.model)
- vhost.name = "default"
- server.add_virtual_host(vhost)
+ vhost.name = server.name + ".default"
+ vhost.set_server(server)
server.default_virtual_host = vhost
for name in ("test", "devel"):
vhost = VirtualHost(self.model)
- vhost.name = name
- server.add_virtual_host(vhost)
+ vhost.name = server.name + "." + name
+ vhost.set_server(server)
for vhost in server.virtual_host_items():
for name in ("realm0", "realm1", "realm2"):
Modified: mgmt/cumin/python/cumin/model.py
===================================================================
--- mgmt/cumin/python/cumin/model.py 2007-10-09 14:20:22 UTC (rev 975)
+++ mgmt/cumin/python/cumin/model.py 2007-10-09 15:36:05 UTC (rev 976)
@@ -19,9 +19,13 @@
assoc.add_endpoint(self.server, "cluster", "0..1")
assoc.add_endpoint(self.cluster, "server", "0..n")
+ assoc = ModelAssociation(self, "cluster_to_virtual_hosts")
+ assoc.add_endpoint(self.virtual_host, "cluster", "0..1")
+ assoc.add_endpoint(self.cluster, "virtual_host", "0..n")
+
assoc = ModelAssociation(self, "server_to_virtual_hosts")
+ assoc.add_endpoint(self.virtual_host, "server", "0..1")
assoc.add_endpoint(self.server, "virtual_host", "0..n")
- assoc.add_endpoint(self.virtual_host, "server", "0..1")
assoc = ModelAssociation(self, "server_groups_to_servers")
assoc.add_endpoint(self.server, "server_group", "0..n")
Modified: mgmt/cumin/python/cumin/page.py
===================================================================
--- mgmt/cumin/python/cumin/page.py 2007-10-09 14:20:22 UTC (rev 975)
+++ mgmt/cumin/python/cumin/page.py 2007-10-09 15:36:05 UTC (rev 976)
@@ -46,8 +46,7 @@
return self.main.show_cluster(session, cluster)
def show_virtual_host(self, session, vhost):
- frame = self.show_server(session, vhost.server)
- return frame.show_virtual_host(session, vhost)
+ return self.main.show_virtual_host(session, vhost)
def show_queue(self, session, queue):
frame = self.show_virtual_host(session, queue.virtual_host)
Modified: mgmt/cumin/python/cumin/virtualhost.py
===================================================================
--- mgmt/cumin/python/cumin/virtualhost.py 2007-10-09 14:20:22 UTC (rev 975)
+++ mgmt/cumin/python/cumin/virtualhost.py 2007-10-09 15:36:05 UTC (rev 976)
@@ -101,6 +101,31 @@
def render_title(self, session, vhost):
return "Virtual Host '%s'" % vhost.name
+ def render_name(self, session, vhost):
+ return vhost.name
+
+ def render_server(self, session, vhost):
+ server = vhost.get_server()
+
+ if server:
+ branch = session.branch()
+ self.page().show_server(branch, server).show_view(branch)
+
+ return mlink(branch.marshal(), "Server", server.name)
+ else:
+ return none()
+
+ def render_cluster(self, session, vhost):
+ cluster = vhost.get_cluster()
+
+ if cluster:
+ branch = session.branch()
+ self.page().show_cluster(branch, cluster).show_view(branch)
+
+ return mlink(branch.marshal(), "Cluster", cluster.name)
+ else:
+ return none()
+
def render_add_queue_href(self, session, vhost):
branch = session.branch()
self.page().show_virtual_host(branch, vhost).show_queue_add(branch)
Modified: mgmt/cumin/python/cumin/virtualhost.strings
===================================================================
--- mgmt/cumin/python/cumin/virtualhost.strings 2007-10-09 14:20:22 UTC (rev 975)
+++ mgmt/cumin/python/cumin/virtualhost.strings 2007-10-09 15:36:05 UTC (rev 976)
@@ -18,6 +18,13 @@
[VirtualHostView.html]
<div class="oblock">
<h1>{title}</h1>
+
+ <dl class="properties">
+ <dt>Name</dt><dd>{name}</dd>
+ <dt>Server</dt><dd>{server}</dd>
+ <dt>Cluster</dt><dd>{cluster}</dd>
+ </dl>
+
<ul class="actions">
<li><a href="{add_queue_href}">Add Queue</a></li>
<li><a href="{add_exchange_href}">Add Exchange</a></li>
17 years, 2 months
rhmessaging commits: r975 - mgmt/cumin/python/cumin.
by rhmessaging-commits@lists.jboss.org
Author: justi9
Date: 2007-10-09 10:20:22 -0400 (Tue, 09 Oct 2007)
New Revision: 975
Modified:
mgmt/cumin/python/cumin/model.py
mgmt/cumin/python/cumin/page.py
mgmt/cumin/python/cumin/page.strings
mgmt/cumin/python/cumin/server.py
mgmt/cumin/python/cumin/virtualhost.py
Log:
Make Virtual Hosts a top-level UI item.
Modified: mgmt/cumin/python/cumin/model.py
===================================================================
--- mgmt/cumin/python/cumin/model.py 2007-10-09 14:18:54 UTC (rev 974)
+++ mgmt/cumin/python/cumin/model.py 2007-10-09 14:20:22 UTC (rev 975)
@@ -89,6 +89,9 @@
def get_virtual_host(self, id):
return self.get_index(self.virtual_host).get(id)
+ def get_virtual_hosts(self):
+ return self.get_index(self.virtual_host).values()
+
def get_queue(self, id):
return self.get_index(self.queue).get(id)
Modified: mgmt/cumin/python/cumin/page.py
===================================================================
--- mgmt/cumin/python/cumin/page.py 2007-10-09 14:18:54 UTC (rev 974)
+++ mgmt/cumin/python/cumin/page.py 2007-10-09 14:20:22 UTC (rev 975)
@@ -3,6 +3,7 @@
from wooly.widgets import *
from wooly.resources import *
+from virtualhost import *
from server import *
from cluster import *
from widgets import *
@@ -91,6 +92,9 @@
self.view = MainView(app, "view")
self.add_child(self.view)
+ self.vhost = VirtualHostFrame(app, "vhost")
+ self.add_child(self.vhost)
+
self.server = ServerFrame(app, "server")
self.add_child(self.server)
@@ -106,6 +110,10 @@
def show_view(self, session):
return self.show_mode(session, self.view)
+ def show_virtual_host(self, session, vhost):
+ self.vhost.set_virtual_host(session, vhost)
+ return self.show_mode(session, self.vhost)
+
def show_server(self, session, server):
self.server.set_server(session, server)
return self.show_mode(session, self.server)
@@ -133,12 +141,23 @@
self.tabs = TabSet(app, "tabs")
self.add_child(self.tabs)
+ self.tabs.add_child(self.VirtualHostTab(app, "vhosts"))
self.tabs.add_child(self.ServerTab(app, "servers"))
self.tabs.add_child(ClusterSet(app, "clusters"))
def render_title(self, session, model):
return "Red Hat Messaging"
+ class VirtualHostTab(TabSet):
+ def __init__(self, app, name):
+ super(MainView.VirtualHostTab, self).__init__(app, name)
+
+ self.vhosts = VirtualHostSet(app, "vhosts")
+ self.add_child(self.vhosts)
+
+ def render_title(self, session, model):
+ return "Virtual Hosts (%i)" % len(model.get_virtual_hosts())
+
class ServerTab(TabSet):
def __init__(self, app, name):
super(MainView.ServerTab, self).__init__(app, name)
Modified: mgmt/cumin/python/cumin/page.strings
===================================================================
--- mgmt/cumin/python/cumin/page.strings 2007-10-09 14:18:54 UTC (rev 974)
+++ mgmt/cumin/python/cumin/page.strings 2007-10-09 14:20:22 UTC (rev 975)
@@ -325,6 +325,7 @@
<div class="oblock">
<h1>{title}</h1>
<ul class="actions">
+ <li><a href="">Add Virtual Host</a></li>
<li><a href="">Add Server</a></li>
<li><a href="">Add Server Group</a></li>
<li><a href="">Add Cluster</a></li>
@@ -332,6 +333,10 @@
{tabs}
</div>
+[VirtualHostTab.html]
+<ul class="VirtualHostTab radiotabs tabs">{tabs}</ul>
+<div class="VirtualHostTab mode">{mode}</div>
+
[ServerTab.html]
<ul class="ServerTab radiotabs tabs">{tabs}</ul>
<div class="ServerTab mode">{mode}</div>
Modified: mgmt/cumin/python/cumin/server.py
===================================================================
--- mgmt/cumin/python/cumin/server.py 2007-10-09 14:18:54 UTC (rev 974)
+++ mgmt/cumin/python/cumin/server.py 2007-10-09 14:20:22 UTC (rev 975)
@@ -84,7 +84,7 @@
self.tabs = TabSet(app, "tabs")
self.add_child(self.tabs)
- self.vhosts = VirtualHostSet(app, "virtual_hosts")
+ self.vhosts = self.ServerVirtualHosts(app, "vhosts")
self.tabs.add_child(self.vhosts)
self.log = self.ServerLog(app, "log")
@@ -109,6 +109,13 @@
return html
+ class ServerVirtualHosts(VirtualHostSet):
+ def render_title(self, session, server):
+ return "Virtual Hosts (%i)" % len(server.virtual_host_items())
+
+ def get_items(self, session, server):
+ return sorted(server.virtual_host_items(), cmp, lambda x: x.name)
+
class ServerLog(Widget):
def render_title(self, session, server):
return "Log Messages"
Modified: mgmt/cumin/python/cumin/virtualhost.py
===================================================================
--- mgmt/cumin/python/cumin/virtualhost.py 2007-10-09 14:18:54 UTC (rev 974)
+++ mgmt/cumin/python/cumin/virtualhost.py 2007-10-09 14:20:22 UTC (rev 975)
@@ -9,17 +9,17 @@
strings = StringCatalog(__file__)
class VirtualHostSet(ItemSet):
- def render_title(self, session, server):
- return "Virtual Hosts (%i)" % len(server.virtual_host_items())
+ def render_title(self, session, model):
+ return "Virtual Hosts (%i)" % len(model.get_virtual_hosts())
- def get_items(self, session, server):
- return sorted(server.virtual_host_items(), cmp, lambda x: x.name)
+ def get_items(self, session, model):
+ return sorted(model.get_virtual_hosts(), cmp, lambda x: x.name)
def render_item_link(self, session, vhost):
branch = session.branch()
self.page().show_virtual_host(branch, vhost)
- return mlink(branch.marshal(), "Virtual Host", vhost.name)
+ return mlink(branch.marshal(), "VirtualHost", vhost.name)
class VirtualHostFrame(CuminFrame):
def __init__(self, app, name):
@@ -44,6 +44,7 @@
self.exchange = ExchangeFrame(app, "exchange")
self.add_child(self.exchange)
+ # XXX move this to the top level
class VirtualHostParameter(Parameter):
def do_unmarshal(self, string):
return self.app.model.get_virtual_host(int(string))
17 years, 2 months
rhmessaging commits: r974 - mgmt/cumin/python/wooly.
by rhmessaging-commits@lists.jboss.org
Author: justi9
Date: 2007-10-09 10:18:54 -0400 (Tue, 09 Oct 2007)
New Revision: 974
Modified:
mgmt/cumin/python/wooly/model.py
Log:
Removes an extra debug println.
Modified: mgmt/cumin/python/wooly/model.py
===================================================================
--- mgmt/cumin/python/wooly/model.py 2007-10-09 04:26:13 UTC (rev 973)
+++ mgmt/cumin/python/wooly/model.py 2007-10-09 14:18:54 UTC (rev 974)
@@ -104,8 +104,6 @@
this.unlock()
def remove_object(self, this, that):
- print "remove_object"
-
this.lock()
try:
self.remove(this, that)
17 years, 2 months
rhmessaging commits: r973 - in store/trunk/cpp: lib/jrnl and 1 other directories.
by rhmessaging-commits@lists.jboss.org
Author: kpvdr
Date: 2007-10-09 00:26:13 -0400 (Tue, 09 Oct 2007)
New Revision: 973
Added:
store/trunk/cpp/lib/DataTokenImpl.cpp
store/trunk/cpp/lib/DataTokenImpl.h
store/trunk/cpp/lib/JournalImpl.cpp
store/trunk/cpp/lib/JournalImpl.h
Modified:
store/trunk/cpp/lib/BdbMessageStore.cpp
store/trunk/cpp/lib/BdbMessageStore.h
store/trunk/cpp/lib/Makefile.am
store/trunk/cpp/lib/TxnCtxt.h
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/jcntl.cpp
store/trunk/cpp/lib/jrnl/jcntl.hpp
store/trunk/cpp/lib/jrnl/jerrno.cpp
store/trunk/cpp/lib/jrnl/jerrno.hpp
store/trunk/cpp/lib/jrnl/pmgr.cpp
store/trunk/cpp/lib/jrnl/rmgr.cpp
store/trunk/cpp/lib/jrnl/rmgr.hpp
store/trunk/cpp/lib/jrnl/rrfc.cpp
store/trunk/cpp/lib/jrnl/rrfc.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/JournalSystemTests.cpp
store/trunk/cpp/tests/jrnl/cp_rtest_jrnl
store/trunk/cpp/tests/jrnl/jtest.cpp
store/trunk/cpp/tests/jrnl/jtest.hpp
store/trunk/cpp/tests/jrnl/msg_consumer.cpp
store/trunk/cpp/tests/jrnl/msg_consumer.hpp
store/trunk/cpp/tests/jrnl/msg_producer.cpp
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:
Completion of xid encode and decode for enqueue, dequeue and transaction records. The decode path for dequeue and transaction remains untested. Added additional read and write pipeline tests.
Modified: store/trunk/cpp/lib/BdbMessageStore.cpp
===================================================================
--- store/trunk/cpp/lib/BdbMessageStore.cpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/BdbMessageStore.cpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -129,7 +129,7 @@
THROW_STORE_EXCEPTION("Queue already created: " + queue.getName());
}
if (usingJrnl()) {
- journal::jcntl* jQueue = new journal::jcntl(queue.getName(), getJrnlDir(queue), string("JournalData"));
+ JournalImpl* jQueue = new JournalImpl(queue.getName(), getJrnlDir(queue), string("JournalData"));
queue.setExternalQueueStore(dynamic_cast<ExternalQueueStore*>(jQueue));
try {
// init will create the deque's for the init...
@@ -155,7 +155,7 @@
qpid::broker::ExternalQueueStore* eqs = queue.getExternalQueueStore();
if (eqs)
{
- journal::jcntl* jQueue = static_cast<journal::jcntl*>(eqs);
+ JournalImpl* jQueue = static_cast<JournalImpl*>(eqs);
jQueue->delete_jrnl_files();
queue.setExternalQueueStore(NULL); // will delete the journal if exists
}
@@ -299,7 +299,7 @@
if (usingJrnl())
{
const char* queueName = queue->getName().c_str();
- journal::jcntl* jQueue = new journal::jcntl(queueName, getJrnlDir(queueName), string("JournalData"));
+ JournalImpl* jQueue = new JournalImpl(queueName, getJrnlDir(queueName), string("JournalData"));
queue->setExternalQueueStore(dynamic_cast<ExternalQueueStore*>(jQueue));
try
@@ -387,19 +387,20 @@
size_t preambleLength = sizeof(u_int32_t)/*header size*/;
u_int64_t maxMessageId(1);
- journal::jcntl* jc = static_cast<journal::jcntl*>(queue->getExternalQueueStore());
- journal::data_tok dtokp;
+ JournalImpl* jc = static_cast<JournalImpl*>(queue->getExternalQueueStore());
+ DataTokenImpl dtokp;
size_t readSize = 0;
// char** buff = 0;
// unsigned aio_sleep_cnt = 0;
unsigned msg_count=0;
bool read = true;
-// hack...
- char buff [1024]; size_t buffSize = 1024;
+ void* dbuff = NULL; size_t dbuffSize = 0;
+ void* xidbuff = NULL; size_t xidbuffSize = 0;
+ bool transientFlag = false;
- dtokp.set_wstate(rhm::journal::data_tok::ENQ);
+ dtokp.set_wstate(DataTokenImpl::ENQ);
// read the message from the Journal.
try {
while (read) {
@@ -407,15 +408,15 @@
//std:: cout << "loop -- uses fixed size -> FIX <-" << std::endl;
// const iores read_data(void** dbuf, size_t& dbsize, data_tok* const dtok)
- rhm::journal::iores res = jc->read_data_record(&buff, buffSize, &dtokp);
+ rhm::journal::iores res = jc->read_data_record(&dbuff, dbuffSize, &xidbuff, xidbuffSize, transientFlag, &dtokp);
readSize = dtokp.dsize();
- assert(readSize < buffSize); /// fail safe for hack...
+// assert(readSize < buffSize); /// fail safe for hack...
switch (res)
{
case rhm::journal::RHM_IORES_SUCCESS:{
msg_count++;
- char* data = buff;
+ char* data = (char*)dbuff;
unsigned headerSize = Buffer(data, preambleLength).getLong();
Buffer headerBuff(data+ preambleLength, headerSize); /// do we want read size or header size ????
@@ -442,7 +443,7 @@
}
dtokp.reset();
- dtokp.set_wstate(rhm::journal::data_tok::ENQ);
+ dtokp.set_wstate(DataTokenImpl::ENQ);
break;
}
case rhm::journal::RHM_IORES_AIO_WAIT:
@@ -783,11 +784,11 @@
//buffer.flip();
- journal::data_tok* dtokp = NULL;
+ DataTokenImpl* dtokp = NULL;
try {
if ( queue && usingJrnl()){
- dtokp = new journal::data_tok;
+ dtokp = new DataTokenImpl;
// deleted this in the callback...
dtokp->setSourceMessage (&message);
dtokp->set_rid(message.getPersistenceId()); // set the messageID into the Journal header (record-id)
@@ -796,12 +797,12 @@
bool written = false;
while (!written)
{
- journal::jcntl* jc = static_cast<journal::jcntl*>(queue->getExternalQueueStore());
+ JournalImpl* jc = static_cast<JournalImpl*>(queue->getExternalQueueStore());
rhm::journal::iores eres = jc->enqueue_data_record(buff, size, size, dtokp, /*txn->getXid(),*/ false);
switch (eres)
{
case rhm::journal::RHM_IORES_SUCCESS:
- if (dtokp->wstate() >= rhm::journal::data_tok::ENQ_SUBM)
+ if (dtokp->wstate() >= DataTokenImpl::ENQ_SUBM)
written = true;
break;
case rhm::journal::RHM_IORES_AIO_WAIT:
@@ -893,12 +894,12 @@
{
// unsigned aio_sleep_cnt = 0;
bool written = false;
- journal::data_tok* ddtokp = new journal::data_tok;
+ DataTokenImpl* ddtokp = new DataTokenImpl;
ddtokp->setSourceMessage (&msg);
ddtokp->set_rid(msg.getPersistenceId()); // message id to be dequeued
ddtokp->set_dequeue_rid(messageIdSequence.next());
- ddtokp->set_wstate(journal::data_tok::ENQ);
- journal::jcntl* jc = static_cast<journal::jcntl*>(queue.getExternalQueueStore());
+ ddtokp->set_wstate(DataTokenImpl::ENQ);
+ JournalImpl* jc = static_cast<JournalImpl*>(queue.getExternalQueueStore());
string tid;
if (ctxt){
TxnCtxt* txn = check(ctxt);
Modified: store/trunk/cpp/lib/BdbMessageStore.h
===================================================================
--- store/trunk/cpp/lib/BdbMessageStore.h 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/BdbMessageStore.h 2007-10-09 04:26:13 UTC (rev 973)
@@ -39,7 +39,8 @@
#include <iostream>
#include <boost/format.hpp>
#include <boost/ptr_container/ptr_list.hpp>
-#include <jrnl/jcntl.hpp>
+#include "JournalImpl.h"
+#include "DataTokenImpl.h"
namespace rhm {
namespace bdbstore {
Added: store/trunk/cpp/lib/DataTokenImpl.cpp
===================================================================
--- store/trunk/cpp/lib/DataTokenImpl.cpp (rev 0)
+++ store/trunk/cpp/lib/DataTokenImpl.cpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -0,0 +1,32 @@
+/*
+ Copyright (C) 2007 Red Hat Software
+
+ This file is part of Red Hat Messaging.
+
+ Red Hat Messaging is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
+ USA
+
+ The GNU Lesser General Public License is available in the file COPYING.
+*/
+
+#include "DataTokenImpl.h"
+
+using namespace rhm::bdbstore;
+
+DataTokenImpl::DataTokenImpl():data_tok()
+{}
+
+DataTokenImpl::~DataTokenImpl()
+{}
Added: store/trunk/cpp/lib/DataTokenImpl.h
===================================================================
--- store/trunk/cpp/lib/DataTokenImpl.h (rev 0)
+++ store/trunk/cpp/lib/DataTokenImpl.h 2007-10-09 04:26:13 UTC (rev 973)
@@ -0,0 +1,42 @@
+/*
+ Copyright (C) 2007 Red Hat Software
+
+ This file is part of Red Hat Messaging.
+
+ Red Hat Messaging is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
+ USA
+
+ The GNU Lesser General Public License is available in the file COPYING.
+*/
+
+#ifndef _DataTokenImpl_
+#define _DataTokenImpl_
+
+#include "jrnl/data_tok.hpp"
+
+namespace rhm {
+ namespace bdbstore {
+
+ class DataTokenImpl : public journal::data_tok
+ {
+ public:
+ DataTokenImpl();
+ ~DataTokenImpl();
+ };
+
+ } // namespace bdbstore
+ } // namespace rhm
+
+#endif
Added: store/trunk/cpp/lib/JournalImpl.cpp
===================================================================
--- store/trunk/cpp/lib/JournalImpl.cpp (rev 0)
+++ store/trunk/cpp/lib/JournalImpl.cpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -0,0 +1,35 @@
+/*
+ Copyright (C) 2007 Red Hat Software
+
+ This file is part of Red Hat Messaging.
+
+ Red Hat Messaging is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
+ USA
+
+ The GNU Lesser General Public License is available in the file COPYING.
+*/
+
+#include "JournalImpl.h"
+
+using namespace rhm::bdbstore;
+
+JournalImpl::JournalImpl(const std::string& journalId,
+ const std::string& journalDirectory,
+ const std::string& journalBaseFilename):
+ jcntl(journalId, journalDirectory, journalBaseFilename)
+{}
+
+JournalImpl::~JournalImpl()
+{}
Added: store/trunk/cpp/lib/JournalImpl.h
===================================================================
--- store/trunk/cpp/lib/JournalImpl.h (rev 0)
+++ store/trunk/cpp/lib/JournalImpl.h 2007-10-09 04:26:13 UTC (rev 973)
@@ -0,0 +1,44 @@
+/*
+ Copyright (C) 2007 Red Hat Software
+
+ This file is part of Red Hat Messaging.
+
+ Red Hat Messaging is free software; you can redistribute it and/or
+ modify it under the terms of the GNU Lesser General Public
+ License as published by the Free Software Foundation; either
+ version 2.1 of the License, or (at your option) any later version.
+
+ This library is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ Lesser General Public License for more details.
+
+ You should have received a copy of the GNU Lesser General Public
+ License along with this library; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301
+ USA
+
+ The GNU Lesser General Public License is available in the file COPYING.
+*/
+
+#ifndef _JournalImpl_
+#define _JournalImpl_
+
+#include "jrnl/jcntl.hpp"
+
+namespace rhm {
+ namespace bdbstore {
+
+ class JournalImpl : public journal::jcntl
+ {
+ public:
+ JournalImpl(const std::string& journalId,
+ const std::string& journalDirectory,
+ const std::string& journalBaseFilename);
+ ~JournalImpl();
+ };
+
+ } // namespace bdbstore
+ } // namespace rhm
+
+#endif
Modified: store/trunk/cpp/lib/Makefile.am
===================================================================
--- store/trunk/cpp/lib/Makefile.am 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/Makefile.am 2007-10-09 04:26:13 UTC (rev 973)
@@ -17,18 +17,22 @@
BdbMessageStore.cpp \
BindingDbt.cpp \
BufferValue.cpp \
+ DataTokenImpl.cpp \
IdDbt.cpp \
IdPairDbt.cpp \
IdSequence.cpp \
+ JournalImpl.cpp \
PreparedTransaction.cpp \
StringDbt.cpp \
BdbMessageStore.h \
BindingDbt.h \
BufferValue.h \
Cursor.h \
+ DataTokenImpl.h \
IdDbt.h \
IdPairDbt.h \
IdSequence.h \
+ JournalImpl.h \
PreparedTransaction.h \
StoreException.h \
StringDbt.h \
Modified: store/trunk/cpp/lib/TxnCtxt.h
===================================================================
--- store/trunk/cpp/lib/TxnCtxt.h 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/TxnCtxt.h 2007-10-09 04:26:13 UTC (rev 973)
@@ -29,7 +29,8 @@
#include <qpid/sys/Mutex.h>
#include <boost/shared_ptr.hpp>
#include <vector>
-#include <jrnl/jcntl.hpp>
+#include "JournalImpl.h"
+#include "DataTokenImpl.h"
#include <boost/format.hpp>
namespace rhm{
@@ -61,9 +62,9 @@
void completeTXN(bool commit){
for (TxnCtxt::ipqdef::iterator i = impactedQueues.begin(); i != impactedQueues.end(); i++) {
- journal::jcntl* jc = static_cast<journal::jcntl*>((*i)->getExternalQueueStore());
+ JournalImpl* jc = static_cast<JournalImpl*>((*i)->getExternalQueueStore());
if (jc) { /* if using journal */
- journal::data_tok* dtokp = new journal::data_tok;
+ DataTokenImpl* dtokp = new DataTokenImpl;
if (commit)
jc->txn_commit(dtokp, getXid());
else
@@ -92,7 +93,7 @@
if (!firstloop) ::usleep(AIO_SLEEP_TIME); // move this into the get events call aiolib..
allWritten = true;
for (TxnCtxt::ipqdef::iterator i = impactedQueues.begin(); i != impactedQueues.end(); i++) {
- journal::jcntl* jc = static_cast<journal::jcntl*>((*i)->getExternalQueueStore());
+ JournalImpl* jc = static_cast<JournalImpl*>((*i)->getExternalQueueStore());
if (jc && !(jc->is_txn_synced(getXid())))
{
if (firstloop)
Modified: store/trunk/cpp/lib/jrnl/data_tok.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/data_tok.hpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/jrnl/data_tok.hpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -131,7 +131,7 @@
inline const bool is_enqueued() const { return _wstate == ENQ; }
inline const bool is_readable() const { return _wstate == ENQ; }
inline const bool is_read() const { return _rstate == READ; }
- inline const bool is_dequeueable() const { return _wstate == ENQ; }
+ inline const bool is_dequeueable() const { return _wstate == ENQ || _wstate == DEQ_PART; }
inline void set_wstate(const write_state wstate) { _wstate = wstate; }
void set_rstate(const read_state rstate);
inline const size_t dsize() const { return _dsize; }
Modified: store/trunk/cpp/lib/jrnl/deq_rec.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/deq_rec.cpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/jrnl/deq_rec.cpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -59,10 +59,7 @@
{}
deq_rec::~deq_rec()
-{
- if (_buff)
- ::free(_buff);
-}
+{}
void
deq_rec::reset()
@@ -72,11 +69,7 @@
_deq_hdr._xidsize = 0;
_deq_tail._rid = 0;
_xidp = NULL;
- if (_buff)
- {
- ::free(_buff);
- _buff = NULL;
- }
+ _buff = NULL;
}
void
@@ -88,11 +81,7 @@
_deq_hdr._xidsize = xidlen;
_deq_tail._rid = rid;
_xidp = xidp;
- if (_buff)
- {
- ::free(_buff);
- _buff = NULL;
- }
+ _buff = NULL;
}
u_int32_t
@@ -218,7 +207,7 @@
if (rec_offs_dblks) // Continuation of record on new page
{
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 +
+ const u_int32_t hdr_xid_tail_dblks = size_dblks(deq_hdr::size() + _deq_hdr._xidsize +
rec_tail::size());
const size_t rec_offs = rec_offs_dblks * JRNL_DBLK_SIZE;
@@ -291,7 +280,7 @@
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 +
+ const u_int32_t hdr_xid_tail_dblks = size_dblks(deq_hdr::size() + _deq_hdr._xidsize +
rec_tail::size());
// Check if record (header + xid + tail) fits within this page, we can check the
@@ -329,6 +318,18 @@
return size_dblks(rd_cnt);
}
+const size_t
+deq_rec::get_xid(const void** const xidpp)
+{
+ if (!_buff)
+ {
+ *xidpp = NULL;
+ return 0;
+ }
+ *xidpp = _buff;
+ return _deq_hdr._xidsize;
+}
+
std::string&
deq_rec::str(std::string& str) const
{
Modified: store/trunk/cpp/lib/jrnl/deq_rec.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/deq_rec.hpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/jrnl/deq_rec.hpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -61,7 +61,7 @@
rec_tail _deq_tail; ///< Record tail, only encoded if XID is present
public:
- // constructor used for read operations and xid must have memory allocated
+ // constructor used for read operations and xid will have memory allocated
deq_rec();
// 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,
@@ -77,7 +77,7 @@
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; }
+ const size_t get_xid(const void** const xidpp);
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-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/jrnl/enq_rec.cpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -33,6 +33,7 @@
#include <jrnl/enq_rec.hpp>
#include <assert.h>
+#include <errno.h>
#include <iomanip>
#include <sstream>
#include <jrnl/jerrno.hpp>
@@ -42,54 +43,43 @@
namespace journal
{
-// Default constructor; must be used in conjunction with reset() to prepare
-// instance for use with write or read operations
+// Constructor used for read operations, where buf contains preallocated space to receive data.
enq_rec::enq_rec():
jrec(), // superclass
_enq_hdr(RHM_JDAT_ENQ_MAGIC, RHM_JDAT_VERSION, 0, 0, 0),
_xidp(NULL),
_data(NULL),
_buff(NULL),
- _enq_tail(_enq_hdr._hdr),
- _max_data_size(0),
- _data_size(0)
+ _enq_tail(_enq_hdr._hdr)
{}
// Constructor used for transactional write operations, where dbuf contains data to be written.
enq_rec::enq_rec(const u_int64_t rid, const void* const dbuf, const size_t dlen,
const void* const xidp, const size_t xidlen, bool transient):
jrec(), // superclass
- _enq_hdr(RHM_JDAT_ENQ_MAGIC, RHM_JDAT_VERSION, rid, xidlen, dlen,
- transient),
+ _enq_hdr(RHM_JDAT_ENQ_MAGIC, RHM_JDAT_VERSION, rid, xidlen, dlen, transient),
_xidp(xidp),
_data(dbuf),
_buff(NULL),
- _enq_tail(_enq_hdr._hdr),
- _max_data_size(0),
- _data_size(dlen)
+ _enq_tail(_enq_hdr._hdr)
{}
-// Constructor used for read operations, where buf contains preallocated space to receive data.
-enq_rec::enq_rec(void* const buf, const size_t bufsize):
- jrec(), // superclass
- _enq_hdr(RHM_JDAT_ENQ_MAGIC, RHM_JDAT_VERSION, 0, 0, bufsize),
- _xidp(NULL),
- _data(NULL),
- _buff(buf),
- _enq_tail(_enq_hdr._hdr),
- _max_data_size(bufsize),
- _data_size(0)
+enq_rec::~enq_rec()
{}
-enq_rec::~enq_rec()
+// Prepare instance for use in reading data from journal, where buf contains preallocated space
+// to receive data.
+void
+enq_rec::reset()
{
-#ifdef RHM_NOAIO
- if (_wbuff)
- {
- ::free(_wbuff);
- _wbuff = NULL;
- }
-#endif
+ _enq_hdr._hdr._rid = 0;
+ _enq_hdr.set_transient(false);
+ _enq_hdr._xidsize = 0;
+ _enq_hdr._dsize = 0;
+ _xidp = NULL;
+ _data = NULL;
+ _buff = NULL;
+ _enq_tail._rid = 0;
}
// Prepare instance for use in writing transactional data to journal, where dbuf contains data to
@@ -106,26 +96,8 @@
_data = dbuf;
_buff = NULL;
_enq_tail._rid = rid;
- _max_data_size = 0;
- _data_size = dlen;
}
-// Prepare instance for use in reading data from journal, where buf contains preallocated space
-// to receive data.
-void
-enq_rec::reset(void* const buf, const size_t bufsize)
-{
- _enq_hdr._hdr._rid = 0;
- _enq_hdr._xidsize = 0;
- _enq_hdr._dsize = bufsize;
- _xidp = NULL;
- _data = NULL;
- _buff = buf;
- _enq_tail._rid = 0;
- _max_data_size = bufsize;
- _data_size = 0;
-}
-
u_int32_t
enq_rec::encode(void* wptr, u_int32_t rec_offs_dblks, u_int32_t max_size_dblks) throw (jexception)
{
@@ -155,7 +127,7 @@
rec_offs -= _enq_hdr._xidsize - wsize2;
if (rem)
{
- wsize = _data_size > rec_offs ? _data_size - rec_offs : 0;
+ wsize = _enq_hdr._dsize > rec_offs ? _enq_hdr._dsize - rec_offs : 0;
wsize2 = wsize;
if (wsize)
{
@@ -165,7 +137,7 @@
wr_cnt += wsize;
rem -= wsize;
}
- rec_offs -= _data_size - wsize2;
+ rec_offs -= _enq_hdr._dsize - wsize2;
}
if (rem)
{
@@ -194,13 +166,13 @@
wr_cnt += wsize;
}
rec_offs -= _enq_hdr._xidsize - wsize;
- wsize = _data_size > rec_offs ? _data_size - rec_offs : 0;
+ wsize = _enq_hdr._dsize > rec_offs ? _enq_hdr._dsize - rec_offs : 0;
if (wsize)
{
::memcpy((char*)wptr + wr_cnt, (char*)_data + rec_offs, wsize);
wr_cnt += wsize;
}
- rec_offs -= _data_size - wsize;
+ rec_offs -= _enq_hdr._dsize - wsize;
wsize = sizeof(_enq_tail) > rec_offs ? sizeof(_enq_tail) - rec_offs : 0;
if (wsize)
{
@@ -234,7 +206,7 @@
}
if (rem)
{
- wsize = rem >= _data_size ? _data_size : rem;
+ wsize = rem >= _enq_hdr._dsize ? _enq_hdr._dsize : rem;
::memcpy((char*)wptr + wr_cnt, _data, wsize);
wr_cnt += wsize;
rem -= wsize;
@@ -255,8 +227,8 @@
::memcpy((char*)wptr + wr_cnt, _xidp, _enq_hdr._xidsize);
wr_cnt += _enq_hdr._xidsize;
}
- ::memcpy((char*)wptr + wr_cnt, _data, _data_size);
- wr_cnt += _data_size;
+ ::memcpy((char*)wptr + wr_cnt, _data, _enq_hdr._dsize);
+ wr_cnt += _enq_hdr._dsize;
::memcpy((char*)wptr + wr_cnt, (void*)&_enq_tail, sizeof(_enq_tail));
wr_cnt += sizeof(_enq_tail);
#ifdef RHM_CLEAN
@@ -278,29 +250,42 @@
size_t rd_cnt = 0;
if (rec_offs_dblks) // Continuation of record on new page
{
- const u_int32_t hdr_data_dblks = size_dblks(enq_hdr::size() + _data_size);
- const u_int32_t hdr_data_tail_dblks = size_dblks(enq_hdr::size() + _data_size +
- rec_tail::size());
+ const u_int32_t hdr_data_dblks = size_dblks(enq_hdr::size() + _enq_hdr._xidsize +
+ _enq_hdr._dsize);
+ const u_int32_t hdr_tail_dblks = size_dblks(enq_hdr::size() + _enq_hdr._xidsize +
+ _enq_hdr._dsize + rec_tail::size());
const size_t rec_offs = rec_offs_dblks * JRNL_DBLK_SIZE;
+ const size_t offs = rec_offs - enq_hdr::size();
- if (hdr_data_tail_dblks - rec_offs_dblks <= max_size_dblks)
+ if (hdr_tail_dblks - rec_offs_dblks <= max_size_dblks)
{
// Remainder of record fits within this page
- if (rec_offs - enq_hdr::size() < _data_size)
+ if (offs < _enq_hdr._xidsize)
{
- // Data still outstanding, copy remainder of data and tail
- const size_t data_offs = rec_offs - enq_hdr::size();
- const size_t data_rem = _data_size - data_offs;
- ::memcpy((char*)_buff + data_offs, rptr, data_rem);
+ // some XID still outstanding, copy remainder of XID, data and tail
+ const size_t rem = _enq_hdr._xidsize + _enq_hdr._dsize - offs;
+ ::memcpy((char*)_buff + offs, rptr, rem);
+ rd_cnt += rem;
+ ::memcpy((void*)&_enq_tail, ((char*)rptr + rd_cnt), sizeof(_enq_tail));
+ chk_tail();
+ rd_cnt += sizeof(_enq_tail);
+ }
+ else if (offs < _enq_hdr._xidsize + _enq_hdr._dsize)
+ {
+ // some data still outstanding, copy remainder of data and tail
+ const size_t data_offs = offs - _enq_hdr._xidsize;
+ const size_t data_rem = _enq_hdr._dsize - data_offs;
+ ::memcpy((char*)_buff + offs, rptr, data_rem);
rd_cnt += data_rem;
- ::memcpy((void*)&_enq_tail, ((char*)rptr + data_rem), sizeof(_enq_tail));
+ ::memcpy((void*)&_enq_tail, ((char*)rptr + rd_cnt), sizeof(_enq_tail));
chk_tail();
rd_cnt += sizeof(_enq_tail);
}
else
{
// Tail or part of tail only outstanding, complete tail
- const size_t tail_offs = rec_offs - enq_hdr::size() - _data_size;
+ const size_t tail_offs = rec_offs - enq_hdr::size() - _enq_hdr._xidsize -
+ _enq_hdr._dsize;
const size_t tail_rem = rec_tail::size() - tail_offs;
::memcpy((char*)&_enq_tail + tail_offs, rptr, tail_rem);
chk_tail();
@@ -309,23 +294,34 @@
}
else if (hdr_data_dblks - rec_offs_dblks <= max_size_dblks)
{
- // Remainder of record data fits within this page, tail split
- const size_t data_offs = rec_offs - enq_hdr::size();
- const size_t data_rem = _data_size - data_offs;
- ::memcpy((char*)_buff + data_offs, rptr, data_rem);
- rd_cnt += data_rem;
+ // Remainder of xid & data fits within this page; tail split
+ if (offs < _enq_hdr._xidsize)
+ {
+ // some XID still outstanding, copy remainder of XID and data
+ const size_t rem = _enq_hdr._xidsize + _enq_hdr._dsize - offs;
+ ::memcpy((char*)_buff + offs, rptr, rem);
+ rd_cnt += rem;
+ }
+ else if (offs < _enq_hdr._xidsize + _enq_hdr._dsize)
+ {
+ // some data still outstanding, copy remainder of data
+ const size_t data_offs = offs - _enq_hdr._xidsize;
+ const size_t data_rem = _enq_hdr._dsize - data_offs;
+ ::memcpy((char*)_buff + offs, rptr, data_rem);
+ rd_cnt += data_rem;
+ }
const size_t tail_rem = (max_size_dblks * JRNL_DBLK_SIZE) - rd_cnt;
if (tail_rem)
{
- ::memcpy((void*)&_enq_tail, ((char*)rptr + data_rem), tail_rem);
+ ::memcpy((void*)&_enq_tail, ((char*)rptr + rd_cnt), tail_rem);
rd_cnt += tail_rem;
}
}
else
{
- // Remainder of record data split
+ // Since xid and data are contiguous, both fit within current page - copy whole page
const size_t data_cp_size = (max_size_dblks * JRNL_DBLK_SIZE);
- ::memcpy((char*)_buff + rec_offs - enq_hdr::size(), rptr, data_cp_size);
+ ::memcpy((char*)_buff + offs, rptr, data_cp_size);
rd_cnt += data_cp_size;
}
}
@@ -348,32 +344,55 @@
_enq_hdr._dsize = *(size_t*)((char*)rptr + rd_cnt);
rd_cnt = _enq_hdr.size();
chk_hdr();
- _data_size = _enq_hdr._dsize;
- if (_enq_hdr._xidsize)
+ if (_enq_hdr._xidsize + _enq_hdr._dsize)
{
- // TODO: Decode xid here
- }
+ _buff = ::malloc(_enq_hdr._xidsize + _enq_hdr._dsize);
+ if (_buff == NULL)
+ {
+ std::stringstream ss;
+ ss << "_buff malloc(): errno=" << errno;
+ throw jexception(jerrno::JERR__MALLOC, ss.str(), "deq_rec", "decode");
+ }
- if (_data_size)
- {
- const u_int32_t hdr_data_dblks = size_dblks(enq_hdr::size() + _data_size);
- const u_int32_t hdr_data_tail_dblks = size_dblks(enq_hdr::size() + _data_size +
- rec_tail::size());
+ const u_int32_t hdr_xid_dblks = size_dblks(enq_hdr::size() + _enq_hdr._xidsize);
+ const u_int32_t hdr_data_dblks = size_dblks(enq_hdr::size() + _enq_hdr._xidsize +
+ _enq_hdr._dsize);
+ const u_int32_t hdr_tail_dblks = size_dblks(enq_hdr::size() + _enq_hdr._xidsize +
+ _enq_hdr._dsize + rec_tail::size());
// Check if record (header + data + tail) fits within this page, we can check the
// tail before the expense of copying data to memory
- if (hdr_data_tail_dblks <= max_size_dblks)
+ if (hdr_tail_dblks <= max_size_dblks)
{
- // Entire header, data and tail fits within this page
- ::memcpy((void*)&_enq_tail, (char*)rptr + rd_cnt + _data_size, sizeof(_enq_tail));
+ // Header, xid, data and tail fits within this page
+ if (_enq_hdr._xidsize)
+ {
+ ::memcpy(_buff, (char*)rptr + rd_cnt, _enq_hdr._xidsize);
+ rd_cnt += _enq_hdr._xidsize;
+ }
+ if (_enq_hdr._dsize)
+ {
+ ::memcpy((char*)_buff + _enq_hdr._xidsize, (char*)rptr + rd_cnt,
+ _enq_hdr._dsize);
+ rd_cnt += _enq_hdr._dsize;
+ }
+ ::memcpy((void*)&_enq_tail, (char*)rptr + rd_cnt, sizeof(_enq_tail));
chk_tail();
- ::memcpy(_buff, (char*)rptr + rd_cnt, _data_size);
- rd_cnt += _data_size + sizeof(_enq_tail);
+ rd_cnt += sizeof(_enq_tail);
}
else if (hdr_data_dblks <= max_size_dblks)
{
- // Entire header and data fit within this page, tail split
- ::memcpy(_buff, (char*)rptr + rd_cnt, _data_size);
- rd_cnt += _data_size;
+ // Header, xid and data fit within this page, tail split or separated
+ if (_enq_hdr._xidsize)
+ {
+ ::memcpy(_buff, (char*)rptr + rd_cnt, _enq_hdr._xidsize);
+ rd_cnt += _enq_hdr._xidsize;
+ }
+ if (_enq_hdr._dsize)
+ {
+ ::memcpy((char*)_buff + _enq_hdr._xidsize, (char*)rptr + rd_cnt,
+ _enq_hdr._dsize);
+ rd_cnt += _enq_hdr._dsize;
+ }
const size_t tail_rem = (max_size_dblks * JRNL_DBLK_SIZE) - rd_cnt;
if (tail_rem)
{
@@ -381,9 +400,24 @@
rd_cnt += tail_rem;
}
}
+ else if (hdr_xid_dblks <= max_size_dblks)
+ {
+ // Header and xid fits within this page, data split or separated
+ if (_enq_hdr._xidsize)
+ {
+ ::memcpy(_buff, (char*)rptr + rd_cnt, _enq_hdr._xidsize);
+ rd_cnt += _enq_hdr._xidsize;
+ }
+ if (_enq_hdr._dsize)
+ {
+ const size_t data_cp_size = (max_size_dblks * JRNL_DBLK_SIZE) - rd_cnt;
+ ::memcpy((char*)_buff + _enq_hdr._xidsize, (char*)rptr + rd_cnt, data_cp_size);
+ rd_cnt += data_cp_size;
+ }
+ }
else
{
- // Header fits within this page, record data split
+ // Header fits within this page, xid split or separated
const size_t data_cp_size = (max_size_dblks * JRNL_DBLK_SIZE) - rd_cnt;
::memcpy(_buff, (char*)rptr + rd_cnt, data_cp_size);
rd_cnt += data_cp_size;
@@ -393,6 +427,30 @@
return size_dblks(rd_cnt);
}
+const size_t
+enq_rec::get_xid(void** const xidpp)
+{
+ if (!_buff)
+ {
+ *xidpp = NULL;
+ return 0;
+ }
+ *xidpp = _buff;
+ return _enq_hdr._xidsize;
+}
+
+const size_t
+enq_rec::get_data(void** const datapp)
+{
+ if (!_buff)
+ {
+ *datapp = NULL;
+ return 0;
+ }
+ *datapp = (void*)((char*)_buff + _enq_hdr._xidsize);
+ return _enq_hdr._dsize;
+}
+
std::string&
enq_rec::str(std::string& str) const
{
@@ -410,7 +468,7 @@
const size_t
enq_rec::data_size() const
{
- return _data_size;
+ return _enq_hdr._dsize;
}
const size_t
@@ -422,7 +480,7 @@
const size_t
enq_rec::rec_size() const
{
- return enq_hdr::size() + _enq_hdr._xidsize + _data_size + rec_tail::size();
+ return enq_hdr::size() + _enq_hdr._xidsize + _enq_hdr._dsize + rec_tail::size();
}
void
@@ -445,14 +503,6 @@
ss << " read=0x" << std::setw(2) << (int)_enq_hdr._hdr._magic;
throw jexception(jerrno::JERR_DREC_INVRHDR, ss.str(), "enq_rec", "chk_hdr");
}
- if (_enq_hdr._dsize > _max_data_size)
- {
- std::stringstream ss;
- ss << std::hex << std::setfill('0');
- ss << "data_size: rid=" << std::setw(16) << _enq_hdr._hdr._rid;
- ss << std::dec << ": buff_size=" << _max_data_size << " data_size=" << _enq_hdr._dsize;
- throw jexception(jerrno::JERR_DREC_BUFFSIZE, ss.str(), "enq_rec", "chk_hdr");
- }
}
void
Modified: store/trunk/cpp/lib/jrnl/enq_rec.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/enq_rec.hpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/jrnl/enq_rec.hpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -60,13 +60,10 @@
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)
public:
/**
- * \brief Default constructor; must be used in conjunction with reset() to prepare
- * instance for use with write or read operations.
+ * \brief Constructor used for read operations.
*/
enq_rec();
@@ -77,30 +74,24 @@
const void* const xidp, const size_t xidlen, bool transient);
/**
- * \brief Constructor used for read operations, where buf contains preallocated space
- * to receive data.
- */
- enq_rec(void* const buf, const size_t bufsize);
-
- /**
* \brief Destructor
*/
~enq_rec();
+ // Prepare instance for use in reading data from journal, xid and data will be allocated
+ void reset();
// Prepare instance for use in writing data to journal
void reset(const u_int64_t rid, const void* const dbuf, const size_t dlen,
const void* const xidp, const size_t xidlen, bool transient);
- // Prepare instance for use in reading data from journal
- void reset(void* const buf, const size_t bufsize);
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);
+ const size_t get_xid(void** const xidpp);
+ const size_t get_data(void** const datapp);
+ inline const bool is_transient() const { return _enq_hdr.is_transient(); }
std::string& str(std::string& str) const;
- inline const size_t max_data_size() const { return _max_data_size; }
- inline const size_t max_rec_size() const
- { return _max_data_size + enq_hdr::size() + rec_tail::size(); }
const size_t data_size() const;
const size_t xid_size() const;
const size_t rec_size() const;
Modified: store/trunk/cpp/lib/jrnl/file_hdr.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/file_hdr.hpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/jrnl/file_hdr.hpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -314,7 +314,7 @@
enq_hdr(const u_int32_t magic, const u_int8_t version, const u_int64_t rid,
const size_t xidsize, const size_t dsize, const bool transient = false);
- inline const bool is_transient() { return _hdr._uflag & ENQ_HDR_TRANSIENT_MASK; }
+ inline const bool is_transient() const { return _hdr._uflag & ENQ_HDR_TRANSIENT_MASK; }
void set_transient(const bool transient);
/**
Modified: store/trunk/cpp/lib/jrnl/jcntl.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/jcntl.cpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/jrnl/jcntl.cpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -67,7 +67,8 @@
jcntl::~jcntl()
{
if (_init_flag && !_stop_flag)
- stop(true);
+ try { stop(true); }
+ catch (jexception e) { std::cerr << e << std::endl; }
if (_datafh)
{
for (u_int32_t i=0; i<JRNL_NUM_FILES; i++)
@@ -223,11 +224,11 @@
}
const iores
-jcntl::read_data_record(void* const dbuf, const size_t dbsize, data_tok* const dtokp)
- throw (jexception)
+jcntl::read_data_record(void** const datapp, size_t& dsize, void** const xidpp, size_t& xidsize,
+ bool& transient, data_tok* const dtokp) throw (jexception)
{
check_rstatus("read_data");
- return _rmgr.read(dbuf, dbsize, dtokp);
+ return _rmgr.read(datapp, dsize, xidpp, xidsize, transient, dtokp);
}
const iores
@@ -277,7 +278,7 @@
}
void
-jcntl::stop(bool block_for_aio_cmpl) throw (jexception)
+jcntl::stop(bool block_till_aio_cmpl) throw (jexception)
{
if (_readonly_flag)
check_rstatus("stop");
@@ -287,7 +288,7 @@
if (!_readonly_flag)
{
flush();
- if (block_for_aio_cmpl)
+ if (block_till_aio_cmpl)
aio_cmpl_wait();
}
}
Modified: store/trunk/cpp/lib/jrnl/jcntl.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/jcntl.hpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/jrnl/jcntl.hpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -219,6 +219,7 @@
* \param wr_dtokl deque for storing data tokens retruning from enqueue and dequeue (write)
* AIO operations.
* \param wr_cb Function pointer to callback function for write operations. May be NULL.
+ * \param prep_tx_list
*
* \exception TODO
*/
@@ -388,18 +389,37 @@
const iores discard_data_record(data_tok* const dtokp) throw (jexception);
/**
- * \brief Reads data from the journal.
+ * \brief Reads data from the journal. It is the responsibility of the reader to free
+ * the memeory that is allocated through this call - see below for detials.
*
- * \param dbuf Pointer to buffer into which data is to be read.
- * \param dbsize Buffer capacity in bytes - i.e. Maximum size of data to be written into
- * dbuf.
+ * Reads the next non-dequeued data record from the journal.
+ *
+ * <b>Note</b> that this call allocates memory into which the data and XID are copied. It
+ * is the responsibility of the caller to free this memory. The memory for the data and
+ * XID are allocated in a single call, and the XID precedes the data in the memory space.
+ * Thus, where an XID exists, freeing the XID pointer will free both the XID and data memory.
+ * However, if an XID does not exist for the message, the XID pointer xidpp is set to NULL,
+ * and it is the data pointer datapp that must be freed. Should neither an XID nor data be
+ * present (ie an empty record), then no memory is allocated, and both pointers will be NULL.
+ * In this case, there is no need to free memory.
+ *
+ * \param datapp Pointer to pointer that will be set to point to memory allocated and
+ * containing the data. Will be set to NULL if the call fails or there is no data
+ * in the record.
+ * \param dsize Ref that will be set to the size of the data. Will be set to 0 if the call
+ * fails or if there is no data in the record.
+ * \param xidpp Pointer to pointer that will be set to point to memory allocated and
+ * containing the XID. Will be set to NULL if the call fails or there is no XID attached
+ * to this record.
+ * \param xidsize Ref that will be set to the size of the XID.
+ * \param transient Ref that will be set true if record is transient.
* \param dtokp Pointer to data_tok instance for this data, used to track state of data
* through journal.
*
* \exception TODO
*/
- const iores read_data_record(void* const dbuf, const size_t dbsize, data_tok* const dtokp)
- throw (jexception);
+ const iores read_data_record(void** const datapp, size_t& dsize, void** const xidpp,
+ size_t& xidsize, bool& transient, data_tok* const dtokp) throw (jexception);
/**
* \brief Dequeues (marks as no longer needed) data record in journal.
@@ -443,6 +463,8 @@
* are effectively deleted from the journal, and can not be read. All dequeued records remain
* as though they had never been dequeued.
*
+ * \param dtokp Pointer to data_tok instance for this data, used to track state of data
+ * through journal.
* \param xid String containing xid.
*
* \exception TODO
@@ -456,6 +478,8 @@
* records are effectively released for reading and dequeueing. All dequeued records are
* removed and can no longer be accessed.
*
+ * \param dtokp Pointer to data_tok instance for this data, used to track state of data
+ * through journal.
* \param xid String containing xid.
*
* \exception TODO
@@ -499,10 +523,10 @@
* <b>Note:</b> The jouranl cannot be restarted without either initailizing it or restoring
* it.
*
- * \param block_for_aio_cmpl If true, will block the thread while waiting for all outstanding
- * AIO operations to complete.
+ * \param block_till_aio_cmpl If true, will block the thread while waiting for all
+ * outstanding AIO operations to complete.
*/
- void stop(bool block_for_aio_cmpl = false) throw (jexception);
+ void stop(bool block_till_aio_cmpl = false) throw (jexception);
/**
* \brief Force a flush of the write page cache, creating a single AIO write operation.
@@ -510,6 +534,14 @@
inline void flush() throw (jexception) { _wmgr.flush(); }
inline const u_int32_t get_enq_cnt() const { return _emap.size(); }
+ inline const u_int32_t get_wr_outstanding_aio_dblks() const
+ { return _wrfc.aio_outstanding_dblks(); }
+ inline const u_int32_t get_wr_outstanding_aio_dblks(u_int16_t pi) const
+ { return _wrfc.file_handle(pi)->wr_aio_outstanding_dblks(); }
+ inline const u_int32_t get_rd_outstanding_aio_dblks() const
+ { return _rrfc.aio_outstanding_dblks(); }
+ inline const u_int32_t get_rd_outstanding_aio_dblks(u_int16_t pi) const
+ { return _rrfc.file_handle(pi)->rd_aio_outstanding_dblks(); }
/**
* \brief Check if the journal is stopped.
@@ -517,7 +549,7 @@
* \return <b><i>true</i></b> if the jouranl is stopped;
* <b><i>false</i></b> otherwise.
*/
- bool is_stopped() { return _stop_flag; }
+ inline bool is_stopped() { return _stop_flag; }
/**
* \brief Check if the journal is ready to read and write data.
Modified: store/trunk/cpp/lib/jrnl/jerrno.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/jerrno.cpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/jrnl/jerrno.cpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -56,7 +56,7 @@
const u_int32_t jerrno::JERR_JCNTL_READONLY = 0x0201;
const u_int32_t jerrno::JERR_JCNTL_AIOCMPLWAIT = 0x0202;
const u_int32_t jerrno::JERR_JCNTL_UNKNOWNMAGIC = 0x0203;
-const u_int32_t jerrno::JERR_JCNTL_NOTRECOVERED = 0x0204; ///< Req' recover() to be called first
+const u_int32_t jerrno::JERR_JCNTL_NOTRECOVERED = 0x0204;
// class jdir
const u_int32_t jerrno::JERR_JDIR_NOTDIR = 0x0300;
@@ -87,19 +87,19 @@
// class data_rec
const u_int32_t jerrno::JERR_DREC_INVRHDR = 0x0701;
-const u_int32_t jerrno::JERR_DREC_BUFFSIZE = 0x0702;
// class wmgr
const u_int32_t jerrno::JERR_WMGR_BADPGSTATE = 0x0801;
const u_int32_t jerrno::JERR_WMGR_BADDTOKSTATE = 0x0802;
const u_int32_t jerrno::JERR_WMGR_ENQDISCONT = 0x0803;
-const u_int32_t jerrno::JERR_WMGR_DEQDISCONT = 0x0804; ///< Deq. new dtok when previous part compl.
+const u_int32_t jerrno::JERR_WMGR_DEQDISCONT = 0x0804;
// class rmgr
const u_int32_t jerrno::JERR_RMGR_UNKNOWNMAGIC = 0x0900;
const u_int32_t jerrno::JERR_RMGR_RIDMISMATCH = 0x0901;
const u_int32_t jerrno::JERR_RMGR_FIDMISMATCH = 0x0902;
const u_int32_t jerrno::JERR_RMGR_ENQSTATE = 0x0903;
+const u_int32_t jerrno::JERR_RMGR_BADRECTYPE = 0x0904;
// class data_tok
const u_int32_t jerrno::JERR_DTOK_ILLEGALSTATE = 0x0a00;
@@ -173,8 +173,6 @@
// class data_rec
_err_map[JERR_DREC_INVRHDR] = std::string("JERR_DREC_INVRHDR: Invalid data record header.");
- _err_map[JERR_DREC_BUFFSIZE] = std::string("JERR_DREC_BUFFSIZE: "
- "Journal data record too big to fit into buffer.");
// class wmgr
_err_map[JERR_WMGR_BADPGSTATE] = std::string("JERR_WMGR_BADPGSTATE: "
@@ -195,6 +193,8 @@
"FID mismatch between emap and rrfc");
_err_map[JERR_RMGR_ENQSTATE] = std::string("JERR_RMGR_ENQSTATE: "
"Attempted read when data token wstate was not ENQ");
+ _err_map[JERR_RMGR_BADRECTYPE] = std::string("JERR_RMGR_BADRECTYPE: "
+ "Attempted operation on inappropriate record type");
// class data_tok
_err_map[JERR_DTOK_ILLEGALSTATE] = std::string("JERR_MTOK_ILLEGALSTATE: "
Modified: store/trunk/cpp/lib/jrnl/jerrno.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/jerrno.hpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/jrnl/jerrno.hpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -104,7 +104,6 @@
// class data_rec
static const u_int32_t JERR_DREC_INVRHDR; ///< Invalid data record header
- static const u_int32_t JERR_DREC_BUFFSIZE; ///< Journal data record too big for buffer
// class wmgr
static const u_int32_t JERR_WMGR_BADPGSTATE; ///< Page buffer in illegal state.
@@ -117,6 +116,7 @@
static const u_int32_t JERR_RMGR_RIDMISMATCH; ///< RID mismatch between rec and dtok
static const u_int32_t JERR_RMGR_FIDMISMATCH; ///< FID mismatch between emap and rrfc
static const u_int32_t JERR_RMGR_ENQSTATE; ///< Attempted read when wstate not ENQ
+ static const u_int32_t JERR_RMGR_BADRECTYPE; ///< Attempted op on incorrect rec type
// class data_tok
static const u_int32_t JERR_DTOK_ILLEGALSTATE; ///< Attempted to change to illegal state
Modified: store/trunk/cpp/lib/jrnl/pmgr.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/pmgr.cpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/jrnl/pmgr.cpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -209,10 +209,13 @@
pmgr::rotate_page(page_state state)
{
_page_cb_arr[_pg_index]._state = state;
- _pg_offset_dblks = 0;
+ if (_pg_offset_dblks >= JRNL_WMGR_PAGE_SIZE * JRNL_SBLK_SIZE)
+ {
+ _pg_offset_dblks = 0;
+ _pg_cntr++;
+ }
if (++_pg_index >= _pages)
_pg_index = 0;
- _pg_cntr++;
return false;
}
Modified: store/trunk/cpp/lib/jrnl/rmgr.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/rmgr.cpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/jrnl/rmgr.cpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -210,26 +210,38 @@
}
const iores
-rmgr::read(void* const mbuf, const size_t mbsize, data_tok* dtokp) throw (jexception)
+rmgr::read(void** const datapp, size_t& dsize, void** const xidpp, size_t& xidsize, bool& transient,
+ data_tok* dtokp) throw (jexception)
{
//std::cout << " rmgr::read()" << std::flush;
+
iores res = pre_read_check(dtokp);
if (res != RHM_IORES_SUCCESS)
+ {
+ set_params_null(datapp, dsize, xidpp, xidsize);
return res;
+ }
//std::cout << " c" << std::flush;
if (dtokp->rstate() == data_tok::SKIP_PART)
{
const iores res = skip(dtokp);
if (res != RHM_IORES_SUCCESS)
+ {
+ set_params_null(datapp, dsize, xidpp, xidsize);
return res;
+ }
}
//std::cout << " d" << std::flush;
if (dtokp->rstate() == data_tok::READ_PART)
{
assert(dtokp->rid() == _hdr._rid);
void* rptr = (void*)((char*)_page_ptr_arr[_pg_index] + (_pg_offset_dblks * JRNL_DBLK_SIZE));
- return read_enq(_hdr, rptr, dtokp);
+ const iores res = read_enq(_hdr, rptr, dtokp);
+ dsize = _enq_rec.get_data(datapp);
+ xidsize = _enq_rec.get_xid(xidpp);
+ transient = _enq_rec.is_transient();
+ return res;
}
//std::cout << " e" << std::flush;
_hdr.reset();
@@ -248,7 +260,7 @@
aio_cycle();
return RHM_IORES_AIO_WAIT;
}
-//std::cout << " h" << std::flush;
+//std::cout << " h:" << _pg_index << "-" << _pg_offset_dblks << std::flush;
void* rptr = (void*)((char*)_page_ptr_arr[_pg_index] +
(_pg_offset_dblks * JRNL_DBLK_SIZE));
::memcpy(&_hdr, rptr, sizeof(hdr));
@@ -257,7 +269,7 @@
case RHM_JDAT_ENQ_MAGIC:
{
//std::cout << " E" << std::flush;
- _enq_rec.reset(mbuf, mbsize); // sets enqueue rec size
+ _enq_rec.reset(); // sets enqueue rec size
// Check if RID of this rec is still enqueued, if so read it, else skip
#ifdef RHM_RDONLY
bool is_enq = true;
@@ -310,33 +322,36 @@
// throw jexception(jerrno::JERR_RMGR_FIDMISMATCH, ss.str(), "rmgr", "read");
// }
#endif
- return read_enq(_hdr, rptr, dtokp);
+ const iores res = read_enq(_hdr, rptr, dtokp);
+ dsize = _enq_rec.get_data(datapp);
+ xidsize = _enq_rec.get_xid(xidpp);
+ transient = _enq_rec.is_transient();
+ return res;
}
- else
- {
-//std::cout << " %" << std::flush;
- // skip this record, it is already dequeued
- u_int64_t* sizep = (u_int64_t*)((char*)rptr + sizeof(hdr) +
-#if defined(JRNL_32_BIT)
- sizeof(u_int32_t) + // filler
-#endif
- sizeof(size_t));
-//u_int32_t dblks = jrec::size_dblks((size_t)*sizep + sizeof(enq_hdr) + sizeof(enq_tail));
-//std::cout << "{" << *sizep << "=" << dblks << "d}" << std::flush;
- dtokp->set_dsize((size_t)*sizep);
- skip(dtokp);
- }
+ else // skip this record, it is already dequeued
+//{ std::cout << " %" << std::flush;
+ consume_xid_rec(_hdr, rptr, dtokp);
+//}
break;
}
case RHM_JDAT_DEQ_MAGIC:
//std::cout << " D" << std::flush;
- consume_deq();
+ consume_xid_rec(_hdr, rptr, dtokp);
break;
+ case RHM_JDAT_TXA_MAGIC:
+//std::cout << " A" << std::flush;
+ consume_xid_rec(_hdr, rptr, dtokp);
+ break;
+ case RHM_JDAT_TXC_MAGIC:
+//std::cout << " C" << std::flush;
+ consume_xid_rec(_hdr, rptr, dtokp);
+ break;
case RHM_JDAT_EMPTY_MAGIC:
//std::cout << " X" << std::flush;
consume_filler();
break;
default:
+//std::cout << " ?" << std::flush;
std::stringstream ss;
ss << std::hex << std::setfill('0');
ss << "Magic=0x" << std::setw(8) << _hdr._magic << std::dec;
@@ -417,15 +432,12 @@
if (_aio_evt_rem)
get_events();
-//std::string s;
-//std::cout << " [a pi=" << _pg_index << " d=" << dblks_rem() << " c=" << (_rrfc.is_compl()?"T":"F") << " wo=" << (_rrfc.is_wr_aio_outstanding()?"T":"F") << " status:" << _rrfc.file_handle()->status_str(s) << "]" << std::flush;
if(dblks_rem() == 0 && _rrfc.is_compl() && !_rrfc.is_wr_aio_outstanding())
{
aio_cycle(); // check if any AIOs have returned
return RHM_IORES_EMPTY;
}
-//std::cout << " b" << std::flush;
// Check write state of this token is ENQ - required for read
if (dtokp)
{
@@ -491,64 +503,41 @@
return RHM_IORES_SUCCESS;
}
-const iores
-rmgr::read_deq(hdr& h, void* rptr, data_tok* dtokp) throw (jexception)
+void
+rmgr::consume_xid_rec(hdr& h, void* rptr, data_tok* dtokp) throw (jexception)
{
- if (_page_cb_arr[_pg_index]._state != AIO_COMPLETE)
+ if (h._magic == RHM_JDAT_ENQ_MAGIC)
{
-//std::cout << " W=" << page_state_str(_page_cb_arr[_pg_index]._state) << std::flush;
- aio_cycle(); // check if any AIOs have returned
- return RHM_IORES_AIO_WAIT;
+ enq_hdr ehdr;
+ ::memcpy(&ehdr, rptr, sizeof(enq_hdr));
+ dtokp->set_dsize(ehdr._xidsize + sizeof(enq_hdr) + sizeof(rec_tail));
}
-//std::cout << " X" << dtokp->dblocks_read() << "," << dblks_rem() << std::flush;
-
- // Read data from this page, first block will have header and data size.
- u_int32_t dblks_rd = _deq_rec.decode(h, rptr, dtokp->dblocks_read(), dblks_rem());
- dtokp->incr_dblocks_read(dblks_rd);
-
- _pg_offset_dblks += dblks_rd;
-
- // If data still incomplete, move to next page and decode again
- // TODO
- while (dtokp->dblocks_read() < _enq_rec.rec_size_dblks())
+ else if (h._magic == RHM_JDAT_DEQ_MAGIC)
{
-//std::cout << " Y" << std::flush;
- rotate_page();
- if (_page_cb_arr[_pg_index]._state != AIO_COMPLETE)
- {
- dtokp->set_rstate(data_tok::READ_PART);
- dtokp->set_dsize(_enq_rec.data_size());
- return RHM_IORES_AIO_WAIT;
- }
-
- rptr = (void*)((char*)_page_ptr_arr[_pg_index]);
- dblks_rd = _enq_rec.decode(h, rptr, dtokp->dblocks_read(), dblks_rem());
- dtokp->incr_dblocks_read(dblks_rd);
- _pg_offset_dblks += dblks_rd;
+ deq_hdr dhdr;
+ ::memcpy(&dhdr, rptr, sizeof(deq_hdr));
+ if (dhdr._xidsize)
+ dtokp->set_dsize(dhdr._xidsize + sizeof(deq_hdr) + sizeof(rec_tail));
+ else
+ dtokp->set_dsize(sizeof(deq_hdr));
}
-
- // If we have finished with this page, rotate it
- if (dblks_rem() == 0)
-//{std::cout << " Z" << std::flush;
- rotate_page();
-//}
-
- // Set the record size in dtokp
- dtokp->set_rstate(data_tok::READ);
- dtokp->set_dsize(_enq_rec.data_size());
- return RHM_IORES_SUCCESS;
+ else if (h._magic == RHM_JDAT_TXA_MAGIC || h._magic == RHM_JDAT_TXC_MAGIC)
+ {
+ txn_hdr thdr;
+ ::memcpy(&thdr, rptr, sizeof(txn_hdr));
+ dtokp->set_dsize(thdr._xidsize + sizeof(txn_hdr) + sizeof(rec_tail));
+ }
+ else
+ {
+ std::stringstream ss;
+ ss << "Record type found = \"" << (char*)&h._magic << "\"";
+ throw jexception(jerrno::JERR_RMGR_BADRECTYPE, ss.str(), "rmgr", "consume_xid_rec");
+ }
+ dtokp->set_dblocks_read(0);
+ skip(dtokp);
}
-// *** DEPRECATED ***, to be removed, use read_deq()
void
-rmgr::consume_deq() throw (jexception)
-{
- _pg_offset_dblks++;
- if (dblks_rem() == 0)
- rotate_page();
-}
-
-void
rmgr::consume_filler() throw (jexception)
{
// Filler (Magic "RHMx") is one dblk by definition
@@ -560,33 +549,39 @@
const iores
rmgr::skip(data_tok* dtokp) throw (jexception)
{
- u_int32_t dsize_dblks = jrec::size_dblks(dtokp->dsize() + sizeof(enq_hdr) + sizeof(rec_tail));
- u_int32_t tot_dblk_cnt = dtokp->rstate() == data_tok::SKIP_PART ? dtokp->dblocks_read() : 0;
-//std::cout << " S" << tot_dblk_cnt << std::flush;
+ u_int32_t dsize_dblks = jrec::size_dblks(dtokp->dsize());
+ u_int32_t tot_dblk_cnt = dtokp->dblocks_read();
+//std::cout << " [S " << dsize_dblks << "," << tot_dblk_cnt << std::flush;
while (true)
{
u_int32_t this_dblk_cnt = 0;
if (dsize_dblks - tot_dblk_cnt > dblks_rem())
-//{std::cout << "-1" << std::flush;
+//{std::cout << " x" << std::flush;
this_dblk_cnt = dblks_rem();
//}
else
-//{std::cout << "-2" << std::flush;
+//{std::cout << " f" << std::flush;
this_dblk_cnt = dsize_dblks - tot_dblk_cnt;
//}
//std::cout << "->" << this_dblk_cnt << std::flush;
- dtokp->incr_dblocks_read(this_dblk_cnt);
- _pg_offset_dblks += this_dblk_cnt;
- tot_dblk_cnt += this_dblk_cnt;
- if (tot_dblk_cnt < _enq_rec.rec_size_dblks())
+ if (this_dblk_cnt)
{
-//std::cout << " * t=" << tot_dblk_cnt << " rs=" << _enq_rec.rec_size_dblks() << std::flush;
- rotate_page();
+ dtokp->incr_dblocks_read(this_dblk_cnt);
+ _pg_offset_dblks += this_dblk_cnt;
+ tot_dblk_cnt += this_dblk_cnt;
+ }
+ if (tot_dblk_cnt < dsize_dblks)
+ {
+ if (_pg_offset_dblks == JRNL_SBLK_SIZE * JRNL_RMGR_PAGE_SIZE)
+//{ std::cout << " rot" << std::flush;
+ rotate_page();
+//}
if (_page_cb_arr[_pg_index]._state != AIO_COMPLETE)
{
dtokp->set_rstate(data_tok::SKIP_PART);
// Use data_tok::dblocks_proc field to save how many skip bloks still to go...
- dtokp->set_dblocks_read(_enq_rec.rec_size_dblks() - tot_dblk_cnt);
+// dtokp->set_dblocks_read(dsize_dblks - tot_dblk_cnt);
+//std::cout << " w]" << std::flush;
return RHM_IORES_AIO_WAIT;
}
//std::cout << " !" << std::flush;
@@ -597,6 +592,7 @@
dtokp->set_rstate(data_tok::UNREAD);
dtokp->set_dsize(0);
dtokp->set_dblocks_read(0);
+//std::cout << "]" << std::flush;
return RHM_IORES_SUCCESS;
}
}
@@ -637,14 +633,10 @@
void
rmgr::init_aio_reads(const int16_t first_uninit, const u_int16_t num_uninit) throw (jexception)
{
-//std::cout << " #(" << first_uninit << "," << num_uninit << ")" << std::flush;
for (int16_t i=0; i<num_uninit; i++)
{
-//std::cout << ">pi=" << ((i + first_uninit) % _pages) << "-wc=" << (_rrfc.file_handle()->wr_cmpl_cnt_dblks()) << "-fid=" << (_rrfc.file_handle()->fid()) << std::flush;
if (_rrfc.empty()) // Nothing to do; this file not yet written to
-//{std::cout << "!" << std::flush;
break;
-//}
// If this is the first read from a file, increase the read pointers to beyond fhdr
// or consume fhdr here for analysis (not req'd at present)
@@ -662,9 +654,6 @@
u_int32_t rd_size = file_rem_dblks > pg_size_dblks ? pg_size_dblks : file_rem_dblks;
if (rd_size)
{
-//std::string s;
-//std::cout << " (" << _rrfc.file_handle()->status(s) << ")";
-//std::cout << " <frd=" << file_rem_dblks << ">" << std::flush;
int16_t pi = (i + first_uninit) % _pages;
// TODO: For perf, combine contiguous pages into single read
// 1 or 2 AIOs needed depending on whether read block folds
@@ -680,14 +669,9 @@
//std::cout << "{r^" << pi << "," << rd_size << "}" << std::flush;
}
else // If there is nothing to read for this page, neither will there be for the others...
-//{std::cout << "&" << std::flush;
break;
-//}
if (_rrfc.file_rotate())
- {
-//std::cout << " @@@@@" << std::flush;
_rrfc.rotate();
- }
}
}
@@ -722,5 +706,14 @@
return _page_cb_arr[_pg_index]._rdblks - _pg_offset_dblks;
}
+void
+rmgr::set_params_null(void** const datapp, size_t& dsize, void** const xidpp, size_t& xidsize)
+{
+ *datapp = NULL;
+ dsize = 0;
+ *xidpp = NULL;
+ xidsize = 0;
+}
+
} // namespace journal
} // namespace rhm
Modified: store/trunk/cpp/lib/jrnl/rmgr.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/rmgr.hpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/jrnl/rmgr.hpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -71,16 +71,17 @@
const iores get(const u_int64_t& rid, const size_t& dsize, const size_t& dsize_avail,
const void** const data, bool auto_discard) throw (jexception);
const iores discard(data_tok* dtok) throw (jexception);
- const iores read(void* const mbuf, const size_t mbsize, data_tok* dtok)
- throw (jexception);
+ const iores read(void** const datapp, size_t& dsize, void** const xidpp, size_t& xidsize,
+ bool& transient, data_tok* dtokp) throw (jexception);
const u_int32_t get_events(page_state state = AIO_COMPLETE) throw (jexception);
private:
void initialize() throw (jexception);
const iores pre_read_check(data_tok* dtokp) throw (jexception);
const iores read_enq(hdr& h, void* rptr, data_tok* dtokp) throw (jexception);
- const iores read_deq(hdr& h, void* rptr, data_tok* dtokp) throw (jexception);
- void consume_deq() throw (jexception); // DEPRECATED, to be removed, use read_deq()
+// const iores read_deq(hdr& h, void* rptr, data_tok* dtokp) throw (jexception);
+// const iores read_txn(hdr& h, void* rptr, data_tok* dtokp) throw (jexception);
+ void consume_xid_rec(hdr& h, void* rptr, data_tok* dtokp) throw (jexception);
void consume_filler() throw (jexception);
const iores skip(data_tok* dtokp) throw (jexception);
void aio_cycle() throw (jexception);
@@ -89,6 +90,8 @@
void consume_fhdr() throw (jexception);
void rotate_page();
const u_int32_t dblks_rem() const;
+ void set_params_null(void** const datapp, size_t& dsize, void** const xidpp,
+ size_t& xidsize);
// Special version of libaio's io_prep_pread() which preserves the value of the data
Modified: store/trunk/cpp/lib/jrnl/rrfc.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/rrfc.cpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/jrnl/rrfc.cpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -31,6 +31,7 @@
*/
+#include <assert.h>
#include <jrnl/rrfc.hpp>
#include <jrnl/jerrno.hpp>
@@ -82,5 +83,12 @@
#endif
}
+nlfh*
+rrfc::file_handle(u_int16_t pg_index) const
+{
+ assert(pg_index < _nfiles);
+ return _fh_arr[pg_index];
+}
+
} // namespace journal
} // namespace rhm
Modified: store/trunk/cpp/lib/jrnl/rrfc.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/rrfc.hpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/jrnl/rrfc.hpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -92,6 +92,12 @@
*/
inline nlfh* file_handle() const { return _curr_fh; }
+ /**
+ * \brief Returns the journal file handle for the given page index within the rotating
+ * file group.
+ */
+ nlfh* file_handle(u_int16_t pg_index) const;
+
// Convenience access methods to current file handle
inline const u_int32_t fid() const { return _curr_fh->fid(); }
@@ -121,7 +127,7 @@
inline const u_int32_t remaining_dblks() { return _curr_fh->rd_remaining_dblks(); }
inline const bool is_full() const { return _curr_fh->is_rd_full(); }
inline const bool is_compl() const { return _curr_fh->is_rd_compl(); }
- inline const u_int32_t aio_outstanding_dblks()
+ inline const u_int32_t aio_outstanding_dblks() const
{ return _curr_fh->rd_aio_outstanding_dblks(); }
inline const bool file_rotate() const { return _curr_fh->rd_file_rotate(); }
inline const bool is_wr_aio_outstanding() const
Modified: store/trunk/cpp/lib/jrnl/txn_rec.cpp
===================================================================
--- store/trunk/cpp/lib/jrnl/txn_rec.cpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/jrnl/txn_rec.cpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -61,10 +61,7 @@
{}
txn_rec::~txn_rec()
-{
- if (_buff)
- ::free(_buff);
-}
+{}
void
txn_rec::reset(const u_int32_t magic)
@@ -73,11 +70,7 @@
_txn_hdr._hdr._rid = 0;
_txn_hdr._xidsize = 0;
_xidp = NULL;
- if (_buff)
- {
- ::free(_buff);
- _buff = NULL;
- }
+ _buff = NULL;
_txn_tail._xmagic = ~magic;
_txn_tail._rid = 0;
}
@@ -90,11 +83,7 @@
_txn_hdr._hdr._rid = rid;
_txn_hdr._xidsize = xidlen;
_xidp = xidp;
- if (_buff)
- {
- ::free(_buff);
- _buff = NULL;
- }
+ _buff = NULL;
_txn_tail._xmagic = ~magic;
_txn_tail._rid = rid;
}
@@ -217,8 +206,8 @@
size_t rd_cnt = 0;
if (rec_offs_dblks) // Continuation of record on new page
{
- 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_dblks = size_dblks(txn_hdr::size() + _txn_hdr._xidsize);
+ const u_int32_t hdr_xid_tail_dblks = size_dblks(txn_hdr::size() + _txn_hdr._xidsize +
rec_tail::size());
const size_t rec_offs = rec_offs_dblks * JRNL_DBLK_SIZE;
@@ -286,8 +275,8 @@
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_dblks = size_dblks(txn_hdr::size() + _txn_hdr._xidsize);
+ const u_int32_t hdr_xid_tail_dblks = size_dblks(txn_hdr::size() + _txn_hdr._xidsize +
rec_tail::size());
// Check if record (header + xid + tail) fits within this page, we can check the
@@ -324,6 +313,18 @@
return size_dblks(rd_cnt);
}
+const size_t
+txn_rec::get_xid(const void** const xidpp)
+{
+ if (!_buff)
+ {
+ *xidpp = NULL;
+ return 0;
+ }
+ *xidpp = _buff;
+ return _txn_hdr._xidsize;
+}
+
std::string&
txn_rec::str(std::string& str) const
{
Modified: store/trunk/cpp/lib/jrnl/txn_rec.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/txn_rec.hpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/jrnl/txn_rec.hpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -77,7 +77,7 @@
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; }
+ const size_t get_xid(const void** const xidpp);
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-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/jrnl/wmgr.cpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -47,7 +47,9 @@
_wrfc(wrfc),
_max_dtokpp(0),
_max_io_wait_us(0),
- _fhdr_buff(NULL),
+ _fhdr_base_ptr(NULL),
+ _fhdr_ptr_arr(NULL),
+ _iocba(NULL),
_cached_offset_dblks(0),
_enq_busy(false),
_deq_busy(false),
@@ -61,7 +63,9 @@
_wrfc(wrfc),
_max_dtokpp(max_dtokpp),
_max_io_wait_us(max_iowait_us),
- _fhdr_buff(NULL),
+ _fhdr_base_ptr(NULL),
+ _fhdr_ptr_arr(NULL),
+ _iocba(NULL),
_cached_offset_dblks(0),
_enq_busy(false),
_deq_busy(false),
@@ -71,11 +75,7 @@
wmgr::~wmgr()
{
- if (_fhdr_buff)
- {
- ::free(_fhdr_buff);
- _fhdr_buff = NULL;
- }
+ clean();
}
void
@@ -600,16 +600,12 @@
throw jexception(jerrno::JERR__AIO, "wmgr", "write_flush");
_wrfc.add_subm_cnt_dblks(_cached_offset_dblks);
_aio_evt_rem++;
+//std::cout << "{w^" << _pg_index << "," << _cached_offset_dblks << "}" << std::flush;
_cached_offset_dblks = 0;
-//std::cout << "{w^" << _pg_index << "}" << std::flush;
- // Rotate cache page?
- if (_pg_offset_dblks >= JRNL_WMGR_PAGE_SIZE * JRNL_SBLK_SIZE)
- {
- rotate_page(AIO_PENDING); // increments _pg_index, resets _pg_offset_dblks if req'd
- if (_page_cb_arr[_pg_index]._state == UNUSED)
- _page_cb_arr[_pg_index]._state = IN_USE;
- }
+ rotate_page(AIO_PENDING); // increments _pg_index, resets _pg_offset_dblks if req'd
+ if (_page_cb_arr[_pg_index]._state == UNUSED)
+ _page_cb_arr[_pg_index]._state = IN_USE;
}
}
get_events(UNUSED);
@@ -661,9 +657,9 @@
ss << " offset=" << iocbp->u.c.offset << " fh=" << iocbp->aio_fildes << "]";
throw jexception(jerrno::JERR__AIO, ss.str(), "wmgr", "get_events");
}
- if (pcbp) // File header writes have no pcb, and will jump to else
+ if (pcbp) // Page writes have pcb
{
-//std::cout << "{w*" << pcbp->_index << "}" << std::flush;
+//std::cout << "{w*" << pcbp->_index << "," << pcbp->_wdblks << "}" << std::flush;
u_int32_t s = pcbp->_pdtokl->size();
for (u_int32_t k=0; k<s; k++)
{
@@ -706,8 +702,14 @@
pcbp->_pdtokl->clear();
pcbp->_state = state;
}
- else
- _wrfc.add_cmpl_cnt_dblks(JRNL_SBLK_SIZE);
+ else // File header writes have no pcb
+ {
+ file_hdr* fhp = (file_hdr*)iocbp->u.c.buf;
+ u_int32_t fid = fhp->_fid;
+ nlfh* nlfhp = _wrfc.file_handle(fid);
+//std::cout << "{f*:" << _wrfc.index() << ":" << fid << "," << iocbp << "}" << std::flush;
+ nlfhp->add_wr_cmpl_cnt_dblks(JRNL_SBLK_SIZE);
+ }
}
// Perform AIO return callback
@@ -721,13 +723,36 @@
wmgr::initialize() throw (jexception)
{
pmgr::initialize();
- if (::posix_memalign(&_fhdr_buff, _sblksize, _sblksize))
+ if (::posix_memalign(&_fhdr_base_ptr, _sblksize, _sblksize * JRNL_NUM_FILES))
{
+ clean();
std::stringstream ss;
ss << "posix_memalign(): blksize=" << _sblksize << " size=" << _sblksize;
ss << " errno=" << errno;
throw jexception(jerrno::JERR__MALLOC, ss.str(), "wmgr", "initialize");
}
+ _fhdr_ptr_arr = (void**)::malloc(_pages * sizeof(void*));
+ if (_fhdr_ptr_arr == NULL)
+ {
+ clean();
+ std::stringstream ss;
+ ss << "_fhdr_ptr_arr malloc(): errno=" << errno;
+ throw jexception(jerrno::JERR__MALLOC, ss.str(), "wmgr", "initialize");
+ }
+ _iocba = (iocb**)::malloc(sizeof(iocb*) * JRNL_NUM_FILES);
+ if (_iocba == NULL)
+ {
+ clean();
+ std::stringstream ss;
+ ss << "_iocba new(): errno=" << errno;
+ throw jexception(jerrno::JERR__MALLOC, ss.str(), "wmgr", "initialize");
+ }
+ ::memset(_iocba, 0, sizeof(iocb*) * JRNL_NUM_FILES);
+ for (u_int16_t i=0; i<JRNL_NUM_FILES; i++)
+ {
+ _fhdr_ptr_arr[i] = (void*)((char*)_fhdr_base_ptr + _sblksize * i);
+ _iocba[i] = ::new iocb;
+ }
_page_cb_arr[0]._state = IN_USE;
_ddtokl.clear();
_cached_offset_dblks = 0;
@@ -825,18 +850,42 @@
wmgr::write_fhdr(u_int64_t rid, u_int32_t fid, size_t fro) throw (jexception)
{
file_hdr fhdr(RHM_JDAT_FILE_MAGIC, RHM_JDAT_VERSION, 0, rid, fid, fro, true);
- ::memcpy(_fhdr_buff, &fhdr, sizeof(fhdr));
+ ::memcpy(_fhdr_ptr_arr[fid], &fhdr, sizeof(fhdr));
#ifdef RHM_CLEAN
- ::memset((char*)_fhdr_buff + sizeof(fhdr), RHM_CLEAN_CHAR, _sblksize - sizeof(fhdr));
+ ::memset((char*)_fhdr_ptr_arr[fid] + sizeof(fhdr), RHM_CLEAN_CHAR, _sblksize - sizeof(fhdr));
#endif
- iocb* iocbp = &_fhdr_iocb;
- ::io_prep_pwrite(iocbp, _wrfc.fh(), _fhdr_buff, _sblksize, 0);
+ iocb* iocbp = _iocba[fid];
+ ::io_prep_pwrite(iocbp, _wrfc.fh(), _fhdr_ptr_arr[fid], _sblksize, 0);
if (::io_submit(_ioctx, 1, &iocbp) < 0)
throw jexception(jerrno::JERR__AIO, "wmgr", "write_fhdr");
_aio_evt_rem++;
+//std::cout << "{f^" << fid << "," << JRNL_SBLK_SIZE << "," << iocbp << "}" << std::flush;
_wrfc.add_subm_cnt_dblks(JRNL_SBLK_SIZE);
}
+void
+wmgr::clean()
+{
+ if (_fhdr_base_ptr)
+ {
+ ::free(_fhdr_base_ptr);
+ _fhdr_base_ptr = NULL;
+ }
+ if (_fhdr_ptr_arr)
+ {
+ ::free(_fhdr_ptr_arr);
+ _fhdr_ptr_arr = NULL;
+ }
+ if (_iocba)
+ {
+ for (u_int32_t i=0; i<JRNL_NUM_FILES; i++)
+ if (_iocba[i])
+ ::delete _iocba[i];
+ ::free(_iocba);
+ _iocba = NULL;
+ }
+}
+
// static
const char* wmgr::_op_str[] = {"enqueue", "dequeue", "abort", "commit"};
Modified: store/trunk/cpp/lib/jrnl/wmgr.hpp
===================================================================
--- store/trunk/cpp/lib/jrnl/wmgr.hpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/lib/jrnl/wmgr.hpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -71,16 +71,19 @@
wrfc& _wrfc; ///< Ref to write rotating file controller
u_int32_t _max_dtokpp; ///< Max data writes per page
u_int32_t _max_io_wait_us; ///< Max wait in microseconds till submit
- void* _fhdr_buff; ///< Buffer for file header writes
- iocb _fhdr_iocb; ///< IO control block for file header writes
+ void* _fhdr_base_ptr; ///< Base pointer to file header memory
+ void** _fhdr_ptr_arr; ///< Array of pointers to file headers memory
+ iocb** _iocba; ///< Array of iocb pointers 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 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[];
@@ -117,6 +120,7 @@
const iores rotate_file();
void dblk_roundup();
void write_fhdr(u_int64_t rid, u_int32_t fid, size_t fro) throw (jexception);
+ void clean();
// Special version of libaio's io_prep_pwrite() which preserves the value of the data
// pointer. This allows iocbs to be initialized with a pointer that can be re-used. Note
Modified: store/trunk/cpp/tests/jrnl/JournalSystemTests.cpp
===================================================================
--- store/trunk/cpp/tests/jrnl/JournalSystemTests.cpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/tests/jrnl/JournalSystemTests.cpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -37,7 +37,6 @@
#include <PreparedTransaction.h>
#include <boost/ptr_container/ptr_list.hpp>
-#define MAX_MSG_SIZE 127
#define NUM_MSGS 5
#define MAX_AIO_SLEEPS 500
#define AIO_SLEEP_TIME 1000
@@ -52,7 +51,7 @@
CPPUNIT_TEST(RecoverReadTest);
CPPUNIT_TEST(RecoveredReadTest);
CPPUNIT_TEST(RecoveredDequeueTest);
- CPPUNIT_TEST(ComplexRecoveryTest1);
+// CPPUNIT_TEST(ComplexRecoveryTest1);
CPPUNIT_TEST(EncodeTest_000);
CPPUNIT_TEST(EncodeTest_001);
CPPUNIT_TEST(EncodeTest_002);
@@ -86,7 +85,11 @@
jtest t;
std::string msg;
- char buff[MAX_MSG_SIZE + 1];
+ void* mbuff;
+ size_t msize;
+ void* xidbuff;
+ size_t xidsize;
+ bool transientFlag;
public:
@@ -276,8 +279,12 @@
rhm::journal::jcntl jc(test_name, "jdata", test_name);
jc.recover(txn_list);
for (int m=0; m<NUM_MSGS; m++)
+ {
+ read_msg(&jc);
CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(&jc)) == 0);
+ create_msg(msg, m).compare(string((char*)mbuff, msize)) == 0);
+ cleanMessage();
+ }
}
}
catch (rhm::journal::jexception& e)
@@ -305,8 +312,13 @@
CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.", jcp != NULL);
jcp->recover(txn_list);
for (int m=0; m<NUM_MSGS; m++)
+ {
+ read_msg(jcp);
+ std::string msg((char*)mbuff, msize);
CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(jcp)) == 0);
+ create_msg(msg, m).compare(std::string((char*)mbuff, msize)) == 0);
+ cleanMessage();
+ }
delete jcp;
}
}
@@ -337,12 +349,20 @@
rhm::journal::jcntl jc(test_name, "jdata", test_name);
jc.recover(txn_list);
for (int m=0; m<NUM_MSGS; m++)
+ {
+ read_msg(&jc);
CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(&jc)) == 0);
+ create_msg(msg, m).compare(std::string((char*)mbuff, msize)) == 0);
+ cleanMessage();
+ }
jc.recover_complete();
for (int m=0; m<NUM_MSGS; m++)
+ {
+ read_msg(&jc);
CPPUNIT_ASSERT_MESSAGE("Message corrupt after recovery.",
- create_msg(msg, m).compare(read_msg(&jc)) == 0);
+ create_msg(msg, m).compare(std::string((char*)mbuff, msize)) == 0);
+ cleanMessage();
+ }
}
}
catch (rhm::journal::jexception& e)
@@ -370,12 +390,20 @@
CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.", jcp != NULL);
jcp->recover(txn_list);
for (int m=0; m<NUM_MSGS; m++)
+ {
+ read_msg(jcp);
CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(jcp)) == 0);
+ create_msg(msg, m).compare(std::string((char*)mbuff, msize)) == 0);
+ cleanMessage();
+ }
jcp->recover_complete();
for (int m=0; m<NUM_MSGS; m++)
+ {
+ read_msg(jcp);
CPPUNIT_ASSERT_MESSAGE("Message corrupt after recovery.",
- create_msg(msg, m).compare(read_msg(jcp)) == 0);
+ create_msg(msg, m).compare(std::string((char*)mbuff, msize)) == 0);
+ cleanMessage();
+ }
delete jcp;
}
}
@@ -406,12 +434,20 @@
rhm::journal::jcntl jc(test_name, "jdata", test_name);
jc.recover(txn_list);
for (int m=0; m<NUM_MSGS; m++)
+ {
+ read_msg(&jc);
CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(&jc)) == 0);
+ create_msg(msg, m).compare(std::string((char*)mbuff, msize)) == 0);
+ cleanMessage();
+ }
jc.recover_complete();
for (int m=0; m<NUM_MSGS; m++)
+ {
+ read_msg(&jc);
CPPUNIT_ASSERT_MESSAGE("Message corrupt after recovery.",
- create_msg(msg, m).compare(read_msg(&jc)) == 0);
+ create_msg(msg, m).compare(std::string((char*)mbuff, msize)) == 0);
+ cleanMessage();
+ }
for (int m=0; m<NUM_MSGS; m++)
deq_msg(&jc, m);
}
@@ -441,12 +477,20 @@
CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.", jcp != NULL);
jcp->recover(txn_list);
for (int m=0; m<NUM_MSGS; m++)
+ {
+ read_msg(jcp);
CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(jcp)) == 0);
+ create_msg(msg, m).compare(std::string((char*)mbuff, msize)) == 0);
+ cleanMessage();
+ }
jcp->recover_complete();
for (int m=0; m<NUM_MSGS; m++)
+ {
+ read_msg(jcp);
CPPUNIT_ASSERT_MESSAGE("Message corrupt after recovery.",
- create_msg(msg, m).compare(read_msg(jcp)) == 0);
+ create_msg(msg, m).compare(std::string((char*)mbuff, msize)) == 0);
+ cleanMessage();
+ }
for (int m=0; m<NUM_MSGS; m++)
deq_msg(jcp, m);
delete jcp;
@@ -480,26 +524,42 @@
deq_msg(&jc, m);
jc.flush();
for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(&jc)) == 0);
+ {
+ read_msg(&jc);
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt before recover.",
+ create_msg(msg, m).compare(std::string((char*)mbuff, msize)) == 0);
+ cleanMessage();
+ }
}
{
rhm::journal::jcntl jc(test_name, "jdata", test_name);
jc.recover(txn_list);
for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
+ {
+ read_msg(&jc);
CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(&jc)) == 0);
+ create_msg(msg, m).compare(std::string((char*)mbuff, msize)) == 0);
+ cleanMessage();
+ }
jc.recover_complete();
// rids: NUM_MSGS*3 to NUM_MSGS*4 - 1
for (int m=NUM_MSGS*3; m<NUM_MSGS*4; m++)
enq_msg(&jc, create_msg(msg, m));
jc.flush();
for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(&jc)) == 0);
+ {
+ read_msg(&jc);
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt after recover.",
+ create_msg(msg, m).compare(std::string((char*)mbuff, msize)) == 0);
+ cleanMessage();
+ }
for (int m=NUM_MSGS*3; m<NUM_MSGS*4; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(&jc)) == 0);
+ {
+ read_msg(&jc);
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt after recover.",
+ create_msg(msg, m).compare(std::string((char*)mbuff, msize)) == 0);
+ cleanMessage();
+ }
// rids: NUM_MSGS*4 to NUM_MSGS*6 - 1
for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
deq_msg(&jc, m);
@@ -530,8 +590,12 @@
deq_msg(jcp, m);
jcp->flush();
for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
- CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(jcp)) == 0);
+ {
+ read_msg(jcp);
+ CPPUNIT_ASSERT_MESSAGE("Message corrupt before recover.",
+ create_msg(msg, m).compare(std::string((char*)mbuff, msize)) == 0);
+ cleanMessage();
+ }
delete jcp;
jcp = NULL;
}
@@ -540,19 +604,31 @@
CPPUNIT_ASSERT_MESSAGE("Journal heap instantiation failed.", jcp != NULL);
jcp->recover(txn_list);
for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
+ {
+ read_msg(jcp);
CPPUNIT_ASSERT_MESSAGE("Message corrupt during recover.",
- create_msg(msg, m).compare(read_msg(jcp)) == 0);
+ create_msg(msg, m).compare(std::string((char*)mbuff, msize)) == 0);
+ cleanMessage();
+ }
jcp->recover_complete();
// rids: NUM_MSGS*3 to NUM_MSGS*4 - 1
for (int m=NUM_MSGS*3; m<NUM_MSGS*4; m++)
enq_msg(jcp, create_msg(msg, m));
jcp->flush();
for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
+ {
+ read_msg(jcp);
CPPUNIT_ASSERT_MESSAGE("Message corrupt after recovery.",
- create_msg(msg, m).compare(read_msg(jcp)) == 0);
+ create_msg(msg, m).compare(std::string((char*)mbuff, msize)) == 0);
+ cleanMessage();
+ }
for (int m=NUM_MSGS*3; m<NUM_MSGS*4; m++)
+ {
+ read_msg(jcp);
CPPUNIT_ASSERT_MESSAGE("Message corrupt after recovery.",
- create_msg(msg, m).compare(read_msg(jcp)) == 0);
+ create_msg(msg, m).compare(std::string((char*)mbuff, msize)) == 0);
+ cleanMessage();
+ }
// rids: NUM_MSGS*4 to NUM_MSGS*6 - 1
for (int m=NUM_MSGS; m<NUM_MSGS*2; m++)
deq_msg(jcp, m);
@@ -748,18 +824,14 @@
char* read_msg(rhm::journal::jcntl* jc)
{
- memset(buff, '*', MAX_MSG_SIZE);
- buff[MAX_MSG_SIZE] = '\0';
-
rhm::journal::data_tok* dtp = new rhm::journal::data_tok;
CPPUNIT_ASSERT_MESSAGE("Data Token heap intantiation failed.", dtp != NULL);
dtp->set_wstate(rhm::journal::data_tok::ENQ);
unsigned aio_sleep_cnt = 0;
- while (handle_jcntl_response(jc->read_data_record(buff, MAX_MSG_SIZE, dtp), jc,
- aio_sleep_cnt, dtp));
- buff[dtp->dsize()] = '\0';
- return buff;
+ while (handle_jcntl_response(jc->read_data_record(&mbuff, msize, &xidbuff, xidsize,
+ transientFlag, dtp), jc, aio_sleep_cnt, dtp));
+ return (char*)mbuff;
}
bool handle_jcntl_response(rhm::journal::iores res, rhm::journal::jcntl* jc,
@@ -768,7 +840,7 @@
switch (res)
{
case rhm::journal::RHM_IORES_SUCCESS:
- buff[dtp->dsize()] = '\0';
+ //((char*)mbuff)[msize] = '\0';
return false;
case rhm::journal::RHM_IORES_AIO_WAIT:
if (++aio_sleep_cnt <= MAX_AIO_SLEEPS)
@@ -811,7 +883,7 @@
void runEncodeTest(const unsigned num_msgs, const unsigned min_msg_size,
const unsigned max_msg_szie, const bool auto_deq, const unsigned min_xid_size,
const unsigned max_xid_size, const bool transient, const unsigned iterations,
- const char* test_descr)
+ char* test_descr)
{
std::cout << " [" << test_descr << "] " << std::flush;
jtest::targs ta(num_msgs, min_msg_size, max_msg_szie, auto_deq, min_xid_size,
@@ -833,6 +905,21 @@
t.finalize();
}
}
+
+ void cleanMessage()
+ {
+ if (xidbuff)
+ {
+ free(xidbuff);
+ xidbuff = NULL;
+ mbuff = NULL;
+ }
+ else if (mbuff)
+ {
+ free (mbuff);
+ mbuff = NULL;
+ }
+ }
};
// Make this test suite a plugin.
Modified: store/trunk/cpp/tests/jrnl/cp_rtest_jrnl
===================================================================
--- store/trunk/cpp/tests/jrnl/cp_rtest_jrnl 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/tests/jrnl/cp_rtest_jrnl 2007-10-09 04:26:13 UTC (rev 973)
@@ -1,6 +1,6 @@
#!/bin/bash
JDATA_DIR=jdata
-TAR_DIR=test/rd_test_jrnls
+TAR_DIR=rd_test_jrnls
function get_filename
{
Modified: store/trunk/cpp/tests/jrnl/jtest.cpp
===================================================================
--- store/trunk/cpp/tests/jrnl/jtest.cpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/tests/jrnl/jtest.cpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -59,7 +59,6 @@
t.run();
t.report();
t.finalize();
- cout << "*** jtest done." << endl << endl;
}
catch (const rhm::journal::jexception& e)
{
@@ -68,6 +67,7 @@
cerr << "*** jtest failed with code 0x" << std::setw(4) << e.err_code() << " ***" << endl;
return(1);
}
+ cout << "*** jtest done." << endl << endl;
return 0;
}
@@ -84,7 +84,7 @@
jtest::targs::targs(const u_int32_t num_msgs, const size_t min_msg_size, const size_t max_msg_size,
const bool auto_deq, const size_t min_xid_size, const size_t max_xid_size,
- const bool transient, const char* comment):
+ const bool transient, char* comment):
_num_msgs(num_msgs),
_min_msg_size(min_msg_size),
_max_msg_size(max_msg_size),
@@ -320,7 +320,7 @@
{
msg_consumer::interrupt(); // Wheels fell off; stop consumer thread
cout << "Producer failed with exception 0x" << hex << setw(4) << setfill('0')
- << e.err_code() << "; consumer thread aborted." << endl;
+ << e.err_code() << "; consumer thread aborted." << dec << endl;
cout << e << endl;
p_args_ptr->_err = e.err_code();
}
@@ -337,7 +337,7 @@
{
msg_producer::interrupt(); // Train smash; stop producer thread
cout << "Consumer failed with exception 0x" << hex << setw(4) << setfill('0')
- << e.err_code() << "; producer thread aborted." << endl;
+ << e.err_code() << "; producer thread aborted." << dec << endl;
cout << e << endl;
c_args_ptr->_err = e.err_code();
}
@@ -396,7 +396,13 @@
tap->_transient = !(strcmp(toks[TRANSIENT_COL], "FALSE") == 0 ||
strcmp(toks[TRANSIENT_COL], "0") == 0);
if (toks.size() > COMMENT_COL)
+ {
tap->_comment = toks[COMMENT_COL];
+ if (tap->_comment[0] == '"')
+ tap->_comment++;
+ if (tap->_comment[strlen(tap->_comment) - 1] == '"')
+ tap->_comment[strlen(tap->_comment) - 1] = 0;
+ }
else
tap->_comment = NULL;
std::cout << "Test " << tnum << ": Messages=" << tap->_num_msgs << " Size=" <<
Modified: store/trunk/cpp/tests/jrnl/jtest.hpp
===================================================================
--- store/trunk/cpp/tests/jrnl/jtest.hpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/tests/jrnl/jtest.hpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -56,11 +56,11 @@
size_t _min_xid_size;
size_t _max_xid_size;
bool _transient;
- const char* _comment;
+ char* _comment;
targs();
targs(const u_int32_t num_msgs, const size_t min_msg_size, const size_t max_msg_size,
const bool auto_deq, const size_t min_xid_size, const size_t max_xid_size,
- const bool transient, const char* comment = NULL);
+ const bool transient, char* comment = NULL);
};
private:
Modified: store/trunk/cpp/tests/jrnl/msg_consumer.cpp
===================================================================
--- store/trunk/cpp/tests/jrnl/msg_consumer.cpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/tests/jrnl/msg_consumer.cpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -94,11 +94,16 @@
u_int32_t
msg_consumer::consume(rhm::journal::jcntl& _jcntl, const u_int32_t num_msgs,
- const size_t min_msg_size, const size_t max_msg_size, const size_t /*min_xid_size*/,
- const size_t /*max_xid_size*/, const bool /*transient*/) throw (rhm::journal::jexception)
+ const size_t min_msg_size, const size_t max_msg_size, const size_t min_xid_size,
+ const size_t max_xid_size, const bool transient_expected) throw (rhm::journal::jexception)
{
//std::cout << "msg_consumer::consume() num_msgs=" << num_msgs << std::endl;
- size_t data_size;
+ void* datap = NULL;
+ size_t data_size = 0;
+ void* xidp = NULL;
+ size_t xid_size = 0;
+ bool transient_flag = false;
+
u_int32_t msgCntr = 0;
for (msgCntr = 0; msgCntr < num_msgs && !_interrupt_flag; msgCntr++)
{
@@ -112,8 +117,8 @@
{
if (dtokp->wstate() >= rhm::journal::data_tok::ENQ)
{
- rhm::journal::iores res = _jcntl.read_data_record((void* const)_msg_buff,
- buffSize, dtokp);
+ rhm::journal::iores res = _jcntl.read_data_record(&datap, data_size, &xidp,
+ xid_size, transient_flag, dtokp);
rhm::journal::data_tok::read_state rs = dtokp->rstate();
rhm::journal::data_tok::write_state ws = dtokp->wstate();
switch (res)
@@ -124,13 +129,14 @@
iores_str[res] << " ws=" << dtokp->wstate_str() << "; rs=" <<
dtokp->rstate_str();
data_size = dtokp->dsize();
- _msg_buff[data_size] = 0; // Make msg into a c-string
read = true;
_tot_dblks += dtokp->dblocks_read();
_tot_dsize += data_size;
// Comment out these for performance checks/measurements
- check_msg(msgCntr, data_size, min_msg_size, max_msg_size, true, _msg_buff);
+ check_msg(msgCntr, data_size, min_msg_size, max_msg_size, true, datap);
+ check_xid(msgCntr, xid_size, min_xid_size, max_xid_size, true, xidp);
+ check_transience(msgCntr, transient_flag, transient_expected);
//print_dbug(msgCntr, data_size, _msg_buff, true);
break;
case rhm::journal::RHM_IORES_AIO_WAIT:
@@ -177,7 +183,18 @@
"msg_consumer", "consume");
usleep(ENQ_WAIT_SLEEP_TIME);
}
- }
+ } // while(!read)
+
+ // Clean up allocated message/xid memory
+ if (xidp)
+ ::free(xidp);
+ else if (datap)
+ ::free(datap);
+ datap = NULL;
+ data_size = 0;
+ xidp = NULL;
+ xid_size = 0;
+ transient_flag = false;
}
_interrupt_flag = false;
return msgCntr;
@@ -204,7 +221,8 @@
void
msg_consumer::check_msg(const u_int32_t msgCntr, const size_t msg_size, const size_t min_msg_size,
- const size_t max_msg_size, bool chk_data, char* buff) const throw (rhm::journal::jexception)
+ const size_t max_msg_size, bool chk_data, void* datap) const
+ throw (rhm::journal::jexception)
{
if (max_msg_size > 0 && (msg_size < min_msg_size || msg_size > max_msg_size))
{
@@ -223,12 +241,13 @@
{
for (unsigned i=0; i<msg_size; i++)
{
+ char found = ((char*)datap)[i];
char expected = '0' + (((msgCntr%10) + i + 1) % 10);
- if (buff[i] != expected)
+ if (found != expected)
{
std::stringstream ss;
ss << "Message " << msgCntr << " failed content check at char " << i;
- ss << ": found \'" << buff[i] << "\'; expected \'" << expected << "\'";
+ ss << ": found \'" << found << "\'; expected \'" << expected << "\'";
throw rhm::journal::jexception(EXCEPTION_BASE+4, ss.str(), "msg_consumer",
"check_msg");
}
@@ -237,6 +256,58 @@
}
void
+msg_consumer::check_xid(const u_int32_t msgCntr, const size_t xid_size, const size_t min_xid_size,
+ const size_t max_xid_size, bool chk_xid_data, void* xidp) const
+ throw (rhm::journal::jexception)
+{
+ if (max_xid_size > 0 && (xid_size < min_xid_size || xid_size > max_xid_size))
+ {
+ std::stringstream ss;
+ ss << "Message " << msgCntr << " of size " << xid_size;
+ if (min_xid_size == max_xid_size)
+ ss << " is valid, but exptected size is " << max_xid_size;
+ else
+ {
+ ss << " is valid, but exptected size must lie between " << min_xid_size;
+ ss << " and " << max_xid_size;
+ }
+ throw rhm::journal::jexception(EXCEPTION_BASE+5, ss.str(), "msg_consumer", "check_xid");
+ }
+ if (chk_xid_data)
+ {
+ for (unsigned i=0; i<xid_size; i++)
+ {
+ char found = ((char*)xidp)[i];
+ char expected = 'a' + (((msgCntr%26) + i) % 26);
+ if (found != expected)
+ {
+ std::stringstream ss;
+ ss << "Message " << msgCntr << " failed XID check at char " << i;
+ ss << ": found \'" << found << "\'; expected \'" << expected << "\'";
+ throw rhm::journal::jexception(EXCEPTION_BASE+6, ss.str(), "msg_consumer",
+ "check_xid");
+ }
+ }
+ }
+}
+
+void
+msg_consumer::check_transience(const u_int32_t msgCntr, const bool transient_flag,
+ const bool transient_expected_flag) const throw (rhm::journal::jexception)
+{
+ if ((transient_flag && !transient_expected_flag) ||
+ (!transient_flag && transient_expected_flag))
+ {
+ std::stringstream ss;
+ ss << "Message " << msgCntr << " failed transience check: found ";
+ ss << (transient_flag?"transient":"persistent") << "; expected ";
+ ss << (transient_expected_flag?"transient":"persistent") << ".";
+ throw rhm::journal::jexception(EXCEPTION_BASE+7, ss.str(), "msg_consumer",
+ "check_transience");
+ }
+}
+
+void
msg_consumer::print_dbug(const u_int32_t msgCntr, const size_t msg_size, char* buff,
const bool show_msg) const
{
@@ -274,6 +345,6 @@
};
u_int16_t msg_consumer::instCnt = 0;
-const size_t msg_consumer::buffSize = JRNL_DBLK_SIZE * JRNL_SBLK_SIZE * JRNL_FILE_SIZE * JRNL_NUM_FILES;
-char msg_consumer::_msg_buff[msg_consumer::buffSize];
+// const size_t msg_consumer::buffSize = JRNL_DBLK_SIZE * JRNL_SBLK_SIZE * JRNL_FILE_SIZE * JRNL_NUM_FILES;
+// char msg_consumer::_msg_buff[msg_consumer::buffSize];
bool msg_consumer::_interrupt_flag = false;
Modified: store/trunk/cpp/tests/jrnl/msg_consumer.hpp
===================================================================
--- store/trunk/cpp/tests/jrnl/msg_consumer.hpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/tests/jrnl/msg_consumer.hpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -62,8 +62,8 @@
private:
static u_int16_t instCnt;
- static const size_t buffSize;
- static char _msg_buff[];
+// static const size_t buffSize;
+// static char _msg_buff[];
static bool _interrupt_flag;
u_int32_t _num_msgs;
std::deque<rhm::journal::data_tok*>& _dtok_master_list; // One dtok per msg to be received
@@ -91,8 +91,13 @@
static void interrupt();
private:
void check_msg(const u_int32_t msgCntr, const size_t msg_size, const size_t min_msg_size,
- const size_t max_msg_size, bool chk_data, char* buff) const
- throw (rhm::journal::jexception);
+ const size_t max_msg_size, bool chk_data, void* datap) const
+ throw (rhm::journal::jexception);
+ void check_xid(const u_int32_t msgCntr, const size_t xid_size, const size_t min_xid_size,
+ const size_t max_xid_size, bool chk_xid_data, void* xidp) const
+ throw (rhm::journal::jexception);
+ void check_transience(const u_int32_t msgCntr, const bool transient_flag,
+ const bool transient_expected_flag) const throw (rhm::journal::jexception);
void print_dbug(const u_int32_t msgCntr, const size_t msg_size, char* buff,
const bool show_msg = false) const;
Modified: store/trunk/cpp/tests/jrnl/msg_producer.cpp
===================================================================
--- store/trunk/cpp/tests/jrnl/msg_producer.cpp 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/tests/jrnl/msg_producer.cpp 2007-10-09 04:26:13 UTC (rev 973)
@@ -263,14 +263,17 @@
_dd_dtok_list.push_back(dtokp);
}
else if (dtokp->wstate() == rhm::journal::data_tok::DEQ)
-//{ std::cout << ">D" << dtokp->id() << " " << std::flush;
+ {
+//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;
+ {
+//std::cout << ">T" << dtokp->id() << " " << std::flush;
_num_txn++;
-//} else std::cout << ">?" << dtokp->id() << " st=" << dtokp->wstate_str() << " " << std::flush;
+ }
+//else std::cout << ">?" << dtokp->id() << " st=" << dtokp->wstate_str() << " " << std::flush;
this_dtok_list.pop_front();
}
}
@@ -353,6 +356,7 @@
// 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);
+//std::cout << " T" << ddtokp->id() << " " << std::flush;
while (!written)
{
rhm::journal::iores dres;
@@ -402,10 +406,11 @@
{
// Clear any unsent enqueues in buffer, then wait for all enqueues to return
unsigned flush_cnt = 0;
- if (_num_msgs_enq < num_msgs_sent)
+ assert(num_msgs_sent == _num_msgs_enq_subm);
+ if (_num_msgs_enq < _num_msgs_enq_subm)
{
jc.flush();
- while (_num_msgs_enq < num_msgs_sent && !_interrupt_flag)
+ while (_num_msgs_enq < _num_msgs_enq_subm && !_interrupt_flag)
{
if (flush_cnt >= MAX_FLUSH_SLEEPS)
{
@@ -441,10 +446,12 @@
// Clear any unsent dequeues in buffer, then wait for all dequeues to return
flush_cnt = 0;
- if (_num_msgs_deq < num_msgs_sent)
+ assert(num_msgs_sent == _num_msgs_deq_subm);
+ if (_num_msgs_deq < _num_msgs_deq_subm || _num_txn < _num_txn_subm)
{
jc.flush();
- while (_num_msgs_deq < num_msgs_sent && !_interrupt_flag)
+ while ((_num_msgs_deq < _num_msgs_deq_subm || _num_txn < _num_txn_subm) &&
+ !_interrupt_flag)
{
if (flush_cnt >= MAX_FLUSH_SLEEPS)
{
Modified: store/trunk/cpp/tests/jrnl/rtest
===================================================================
--- store/trunk/cpp/tests/jrnl/rtest 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/tests/jrnl/rtest 2007-10-09 04:26:13 UTC (rev 973)
@@ -29,6 +29,7 @@
TEMP_V_FILE=/tmp/v.txt
NUM_JFILES=8
+VG_ITERATIONS=1
#VG_NORM_FILESIZE=11
VG_NORM_FILESIZE=18 # RHEL5 triggers extra valgrind messages when pthreads are in use
@@ -36,7 +37,7 @@
W_DO_TEST=T
W_TEST_FILE=wtests.csv
W_TEST_START=0
-W_TEST_STOP=196
+W_TEST_STOP=218
W_NITER=5
# Read test
@@ -50,7 +51,7 @@
RW_DO_TEST=T
RW_TEST_FILE=rwtests.csv
RW_TEST_START=0
-RW_TEST_STOP=148
+RW_TEST_STOP=170
RW_NITER=5
RM=rm
@@ -357,7 +358,7 @@
local test_num=$2
# Perform valgrind test (memory leak check)
- echo -n " *"
+ echo -n "*"
${VALGRIND} ${TEST_PROG} ${test_file} ${test_num} > ${NULL_FILE} 2> ${TEMP_V_FILE}
local ret=$?
if (( ${ret} != 0 )); then
@@ -469,11 +470,13 @@
fi
done
- valgrind_memchk ${test_file} $t
- local ret=$?
- if (( ${ret} != 0 )); then
- return ${ret}
- fi
+ for (( i=1; i<=${VG_ITERATIONS}; i++ )); do
+ valgrind_memchk ${test_file} $t
+ local ret=$?
+ if (( ${ret} != 0 )); then
+ return ${ret}
+ fi
+ done
# Remove journals accumulated during test
echo -n " ~"
Modified: store/trunk/cpp/tests/jrnl/rtests.csv
===================================================================
--- store/trunk/cpp/tests/jrnl/rtests.csv 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/tests/jrnl/rtests.csv 2007-10-09 04:26:13 UTC (rev 973)
@@ -2,146 +2,168 @@
"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"
+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,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]"
+"Simple message combinations of persistent/deq transientueued/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 [deq transient]"
+12,"L",1,10,0,10,0,10,10,0,0,TRUE,TRUE,54,1,32,1,0,0,"10 * 10-byte message [deq transient]"
+13,"L",1,1,0,1,0,10,10,10,10,TRUE,FALSE,64,1,54,1,46,1,"1 * 10-byte message [deq txn]"
+14,"L",1,10,0,10,0,10,10,10,10,TRUE,FALSE,64,1,54,1,46,1,"10 * 10-byte message [deq txn]"
+15,"L",1,1,0,1,0,10,10,10,10,TRUE,TRUE,64,1,54,1,46,1,"1 * 10-byte message [txn deq transient]"
+16,"L",1,10,0,10,0,10,10,10,10,TRUE,TRUE,64,1,54,1,46,1,"10 * 10-byte message [txn deq transient]"
,,,,,,,,,,,,,,,,,,,
"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]"
+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",,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]"
+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",,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]"
+25,"L",1,8,0,8,0,8148,8148,0,0,FALSE,FALSE,8192,64,0,0,0,0,"1/8 page"
+26,"L",1,8,1,9,0,8148,8148,0,0,FALSE,FALSE,8192,64,0,0,0,0,"1/8 page"
+27,"L",1,8,0,8,1,8149,8149,0,0,FALSE,FALSE,8193,65,0,0,0,0,"1/8 page + 1 byte"
+28,"L",1,8,0,8,0,7892,7892,256,256,FALSE,FALSE,8192,64,0,0,0,0,"1/8 page [txn]"
+29,"L",1,8,1,9,0,7892,7892,256,256,FALSE,FALSE,8192,64,0,0,0,0,"1/8 page [txn]"
+30,"L",1,8,0,8,1,7893,7893,256,256,FALSE,FALSE,8193,65,0,0,0,0,"1/8 page + 1 byte [txn]"
+31,"L",1,8,0,8,0,8020,8020,0,0,TRUE,FALSE,8064,63,32,1,0,0,"1/8 page incl deq [deq]"
+32,"L",1,8,1,9,0,8020,8020,0,0,TRUE,FALSE,8064,63,32,1,0,0,"1/8 page incl deq [deq]"
+33,"L",1,8,0,8,1,8021,8021,0,0,TRUE,FALSE,8065,64,32,1,0,0,"1/8 page incl deq + 1 byte [deq]"
+34,"L",1,8,0,8,0,7124,7124,256,256,TRUE,FALSE,7424,58,300,3,292,3,"1/8 page incl deq & txn [deq txn]"
+35,"L",1,8,1,9,0,7124,7124,256,256,TRUE,FALSE,7424,58,300,3,292,3,"1/8 page incl deq & txn [deq txn]"
+36,"L",1,8,0,8,1,7125,7125,256,256,TRUE,FALSE,7425,59,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]"
+"Page cache rollover (from page 16 back to page 0)",,,,,,,,,,,,,,,,,,,
+37,"L",1,16,0,16,0,65492,65492,0,0,FALSE,FALSE,65536,512,0,0,0,0,"1 page"
+38,"L",1,16,1,17,0,65492,65492,0,0,FALSE,FALSE,65536,512,0,0,0,0,"1 page"
+39,"L",1,16,0,16,1,65493,65493,0,0,FALSE,FALSE,65537,513,0,0,0,0,"1 page + 1 byte"
+40,"L",1.5,11,0,11,0,98260,98260,0,0,FALSE,FALSE,98304,768,0,0,0,0,"1.5 pages"
+41,"L",1,16,0,16,0,65236,65236,256,256,FALSE,FALSE,65536,512,0,0,0,0,"1 page [txn]"
+42,"L",1,16,1,17,0,65236,65236,256,256,FALSE,FALSE,65536,512,0,0,0,0,"1 page [txn]"
+43,"L",1,16,0,16,1,65237,65237,256,256,FALSE,FALSE,65537,513,0,0,0,0,"1 page + 1 byte [txn]"
+44,"L",1.5,11,0,11,0,98004,98004,256,256,FALSE,FALSE,98304,768,0,0,0,0,"1.5 pages [txn]"
+45,"L",1,16,0,16,0,65364,65364,0,0,TRUE,FALSE,65408,511,32,1,0,0,"1 page incl deq [deq]"
+46,"L",1,16,1,17,0,65364,65364,0,0,TRUE,FALSE,65408,511,32,1,0,0,"1 page incl deq [deq]"
+47,"L",1,16,0,16,1,65365,65365,0,0,TRUE,FALSE,65409,512,32,1,0,0,"1 page incl deq + 1 byte [deq]"
+48,"L",1.5,11,0,11,0,98132,98132,0,0,TRUE,FALSE,98176,767,32,1,0,0,"1.5 pages incl deq [deq]"
+49,"L",1,16,0,16,0,64468,64468,256,256,TRUE,FALSE,64768,506,300,3,292,3,"1 page incl deq & txn [deq txn]"
+50,"L",1,16,1,17,0,64468,64468,256,256,TRUE,FALSE,64768,506,300,3,292,3,"1 page incl deq & txn [deq txn]"
+51,"L",1,16,0,16,1,64469,64469,256,256,TRUE,FALSE,64769,507,300,3,292,3,"1 page incl deq & txn + 1 byte [deq txn]"
+52,"L",1.5,11,0,11,0,97236,97236,256,256,TRUE,FALSE,97536,762,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 transition (from file 0000 to 0001)",,,,,,,,,,,,,,,,,,,
+53,"L",1,24,0,24,0,65492,65492,0,0,FALSE,FALSE,65536,512,0,0,0,0,"1 page"
+54,"L",1,24,1,25,0,65492,65492,0,0,FALSE,FALSE,65536,512,0,0,0,0,"1 page"
+55,"L",1,24,0,24,1,65493,65493,0,0,FALSE,FALSE,65537,513,0,0,0,0,"1 page + 1 byte"
+56,"L",2.5,10,0,10,0,163796,163796,0,0,FALSE,FALSE,163840,1280,0,0,0,0,"2.5 pages"
+57,"L",1,24,0,24,0,65236,65236,256,256,FALSE,FALSE,65536,512,0,0,0,0,"1 page [txn]"
+58,"L",1,24,1,25,0,65236,65236,256,256,FALSE,FALSE,65536,512,0,0,0,0,"1 page [txn]"
+59,"L",1,24,0,24,1,65237,65237,256,256,FALSE,FALSE,65537,513,0,0,0,0,"1 page + 1 byte [txn]"
+60,"L",2.5,10,0,10,0,163540,163540,256,256,FALSE,FALSE,163840,1280,0,0,0,0,"2.5 pages [txn]"
+61,"L",1,24,0,24,0,65364,65364,0,0,TRUE,FALSE,65408,511,32,1,0,0,"1 page incl deq [deq]"
+62,"L",1,24,1,25,0,65364,65364,0,0,TRUE,FALSE,65408,511,32,1,0,0,"1 page incl deq [deq]"
+63,"L",1,24,0,24,1,65365,65365,0,0,TRUE,FALSE,65409,512,32,1,0,0,"1 page incl deq + 1 byte [deq]"
+64,"L",2.5,10,0,10,0,163668,163668,0,0,TRUE,FALSE,163712,1279,32,1,0,0,"2.5 pages incl deq [deq]"
+65,"L",1,24,0,24,0,64468,64468,256,256,TRUE,FALSE,64768,506,300,3,292,3,"1 page incl deq & txn [deq txn]"
+66,"L",1,24,1,25,0,64468,64468,256,256,TRUE,FALSE,64768,506,300,3,292,3,"1 page incl deq & txn [deq txn]"
+67,"L",1,24,0,24,1,64469,64469,256,256,TRUE,FALSE,64769,507,300,3,292,3,"1 page incl deq & txn + 1 byte [deq txn]"
+68,"L",2.5,10,0,10,0,162772,162772,256,256,TRUE,FALSE,163072,1274,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"
+69,"L",0.5,16,0,16,0,786388,786388,0,0,FALSE,FALSE,786432,6144,0,0,0,0,"12 pages = ½ file"
+70,"L",0.5,16,0,16,0,786132,786132,256,256,FALSE,FALSE,786432,6144,0,0,0,0,"12 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]"
+71,"L",1,8,0,8,0,65492,65492,0,0,FALSE,FALSE,65536,512,0,0,0,0,"data 1 page"
+72,"L",1,8,0,8,1,65493,65493,0,0,FALSE,FALSE,65537,513,0,0,0,0,"data 1 page + 1 byte (tail split; 1 byte over page boundary)"
+73,"L",1,8,0,8,11,65503,65503,0,0,FALSE,FALSE,65547,513,0,0,0,0,"data 1 page + 11 bytes (tail split; 11 bytes over page boundary)"
+74,"L",1,8,0,8,12,65504,65504,0,0,FALSE,FALSE,65548,513,0,0,0,0,"data 1 page + 12 bytes (tail separated exactly onto next page)"
+75,"L",1,8,0,8,13,65505,65505,0,0,FALSE,FALSE,65549,513,0,0,0,0,"data 1 page + 13 bytes (data split; 1 byte over page boundary)"
+76,"L",1,8,0,8,0,65236,65236,256,256,FALSE,FALSE,65536,512,0,0,0,0,"data 1 page [txn]"
+77,"L",1,8,0,8,1,65237,65237,256,256,FALSE,FALSE,65537,513,0,0,0,0,"data 1 page + 1 byte (tail split; 1 byte over page boundary) [txn]"
+78,"L",1,8,0,8,11,65247,65247,256,256,FALSE,FALSE,65547,513,0,0,0,0,"data 1 page + 11 bytes (tail split; 11 bytes over page boundary) [txn]"
+79,"L",1,8,0,8,12,65248,65248,256,256,FALSE,FALSE,65548,513,0,0,0,0,"data 1 page + 12 bytes (tail separated exactly onto next page) [txn]"
+80,"L",1,8,0,8,13,65249,65249,256,256,FALSE,FALSE,65549,513,0,0,0,0,"data 1 page + 13 bytes (data split; 1 byte over page boundary) [txn]"
+81,"L",2,8,0,8,0,131028,131028,0,0,FALSE,FALSE,131072,1024,0,0,0,0,"data 2 pages"
+82,"L",2,8,0,8,1,131029,131029,0,0,FALSE,FALSE,131073,1025,0,0,0,0,"data 2 pages + 1 byte (tail split; 1 byte over page boundary)"
+83,"L",2,8,0,8,11,131039,131039,0,0,FALSE,FALSE,131083,1025,0,0,0,0,"data 2 pages + 11 bytes (tail split; 11 bytes over page boundary)"
+84,"L",2,8,0,8,12,131040,131040,0,0,FALSE,FALSE,131084,1025,0,0,0,0,"data 2 pages + 12 bytes (tail separated exactly onto next page)"
+85,"L",2,8,0,8,13,131041,131041,0,0,FALSE,FALSE,131085,1025,0,0,0,0,"data 2 pages + 13 bytes (data split; 1 byte over page boundary)"
+86,"L",2,8,0,8,0,130772,130772,256,256,FALSE,FALSE,131072,1024,0,0,0,0,"data 2 pages [txn]"
+87,"L",2,8,0,8,1,130773,130773,256,256,FALSE,FALSE,131073,1025,0,0,0,0,"data 2 pages + 1 byte (tail split; 1 byte over page boundary) [txn]"
+88,"L",2,8,0,8,11,130783,130783,256,256,FALSE,FALSE,131083,1025,0,0,0,0,"data 2 pages + 11 bytes (tail split; 11 bytes over page boundary) [txn]"
+89,"L",2,8,0,8,12,130784,130784,256,256,FALSE,FALSE,131084,1025,0,0,0,0,"data 2 pages + 12 bytes (tail separated exactly onto next page) [txn]"
+90,"L",2,8,0,8,13,130785,130785,256,256,FALSE,FALSE,131085,1025,0,0,0,0,"data 2 pages + 13 bytes (data split; 1 byte over page boundary) [txn]"
+91,"L",4,8,0,8,0,262100,262100,0,0,FALSE,FALSE,262144,2048,0,0,0,0,"data 4 pages"
+92,"L",4,8,0,8,1,262101,262101,0,0,FALSE,FALSE,262145,2049,0,0,0,0,"data 4 pages + 1 byte (tail split; 1 byte over page boundary)"
+93,"L",4,8,0,8,11,262111,262111,0,0,FALSE,FALSE,262155,2049,0,0,0,0,"data 4 pages + 11 bytes (tail split; 11 bytes over page boundary)"
+94,"L",4,8,0,8,12,262112,262112,0,0,FALSE,FALSE,262156,2049,0,0,0,0,"data 4 pages + 12 bytes (tail separated exactly onto next page)"
+95,"L",4,8,0,8,13,262113,262113,0,0,FALSE,FALSE,262157,2049,0,0,0,0,"data 4 pages + 13 bytes (data split; 1 byte over page boundary)"
+96,"L",4,8,0,8,0,261844,261844,256,256,FALSE,FALSE,262144,2048,0,0,0,0,"data 4 pages [txn]"
+97,"L",4,8,0,8,1,261845,261845,256,256,FALSE,FALSE,262145,2049,0,0,0,0,"data 4 pages + 1 byte (tail split; 1 byte over page boundary) [txn]"
+98,"L",4,8,0,8,11,261855,261855,256,256,FALSE,FALSE,262155,2049,0,0,0,0,"data 4 pages + 11 bytes (tail split; 11 bytes over page boundary) [txn]"
+99,"L",4,8,0,8,12,261856,261856,256,256,FALSE,FALSE,262156,2049,0,0,0,0,"data 4 pages + 12 bytes (tail separated exactly onto next page) [txn]"
+100,"L",4,8,0,8,13,261857,261857,256,256,FALSE,FALSE,262157,2049,0,0,0,0,"data 4 pages + 13 bytes (data split; 1 byte over page boundary) [txn]"
+101,"L",3.5,8,0,8,0,229332,229332,0,0,FALSE,FALSE,229376,1792,0,0,0,0,"data 3.5 pages"
+102,"L",3.5,8,0,8,1,229333,229333,0,0,FALSE,FALSE,229377,1793,0,0,0,0,"data 3.5 pages + 1 byte"
+103,"L",3.5,8,0,8,0,229076,229076,256,256,FALSE,FALSE,229376,1792,0,0,0,0,"data 3.5 pages [txn]"
+104,"L",3.5,8,0,8,1,229077,229077,256,256,FALSE,FALSE,229377,1793,0,0,0,0,"data 3.5 pages + 1 byte [txn]"
+105,"L",1,8,0,8,-1,10,10,65503,65503,FALSE,FALSE,65557,513,0,0,0,0,"xid 1 page – 1 byte; data 10 bytes (exact fit) [txn]"
+106,"L",1,8,0,8,0,10,10,65504,65504,FALSE,FALSE,65558,513,0,0,0,0,"xid 1 page; data 10 bytes (exact fit) [txn]"
+107,"L",1,8,0,8,1,10,10,65505,65505,FALSE,FALSE,65559,513,0,0,0,0,"xid 1 page + 1 byte; data 10 bytes (exact fit) [txn]"
+108,"L",2,8,0,8,-1,10,10,131039,131039,FALSE,FALSE,131093,1025,0,0,0,0,"xid 2 pages – 1 byte; data 10 bytes (exact fit) [txn]"
+109,"L",2,8,0,8,0,10,10,131040,131040,FALSE,FALSE,131094,1025,0,0,0,0,"xid 2 pages; data 10 bytes (exact fit) [txn]"
+110,"L",2,8,0,8,1,10,10,131041,131041,FALSE,FALSE,131095,1025,0,0,0,0,"xid 2 pages + 1 byte; data 10 bytes (exact fit) [txn]"
+111,"L",4,8,0,8,-1,10,10,262111,262111,FALSE,FALSE,262165,2049,0,0,0,0,"xid 4 pages – 1 byte; data 10 bytes (exact fit) [txn]"
+112,"L",4,8,0,8,0,10,10,262112,262112,FALSE,FALSE,262166,2049,0,0,0,0,"xid 4 pages; data 10 bytes (exact fit) [txn]"
+113,"L",4,8,0,8,1,10,10,262113,262113,FALSE,FALSE,262167,2049,0,0,0,0,"xid 4 pages + 1 byte; data 10 bytes (exact fit) [txn]"
+114,"L",3.5,8,0,8,0,10,10,229344,229344,FALSE,FALSE,229398,1793,0,0,0,0,"xid 3.5 pages; data 10 bytes (exact fit) [txn]"
+115,"L",3.5,8,0,8,1,10,10,229345,229345,FALSE,FALSE,229399,1793,0,0,0,0,"xid 3.5 pages + 1 byte; data 10 bytes (exact fit) [txn]"
+116,"L",1,8,0,8,-1,10,10,65503,65503,TRUE,FALSE,65557,513,65547,513,65539,513,"xid 1 page – 1 byte for enq rec; data 10 bytes (exact fit) [deq, txn]"
+117,"L",1,8,0,8,0,10,10,65504,65504,TRUE,FALSE,65558,513,65548,513,65540,513,"xid 1 page for enq rec; data 10 bytes (exact fit) [deq, txn]"
+118,"L",1,8,0,8,1,10,10,65505,65505,TRUE,FALSE,65559,513,65549,513,65541,513,"xid 1 page + 1 byte for enq rec; data 10 bytes (exact fit) [deq, txn]"
+119,"L",2,8,0,8,-1,10,10,131039,131039,TRUE,FALSE,131093,1025,131083,1025,131075,1025,"xid 2 pages – 1 byte for enq rec; data 10 bytes (exact fit) [deq, txn]"
+120,"L",2,8,0,8,0,10,10,131040,131040,TRUE,FALSE,131094,1025,131084,1025,131076,1025,"xid 2 pages for enq rec; data 10 bytes (exact fit) [deq, txn]"
+121,"L",2,8,0,8,1,10,10,131041,131041,TRUE,FALSE,131095,1025,131085,1025,131077,1025,"xid 2 pages + 1 byte for enq rec; data 10 bytes (exact fit) [deq, txn]"
+122,"L",4,8,0,8,-1,10,10,262111,262111,TRUE,FALSE,262165,2049,262155,2049,262147,2049,"xid 4 pages – 1 byte for enq rec; data 10 bytes (exact fit) [deq, txn]"
+123,"L",4,8,0,8,0,10,10,262112,262112,TRUE,FALSE,262166,2049,262156,2049,262148,2049,"xid 4 pages for enq rec; data 10 bytes (exact fit) [deq, txn]"
+124,"L",4,8,0,8,1,10,10,262113,262113,TRUE,FALSE,262167,2049,262157,2049,262149,2049,"xid 4 pages + 1 byte for enq rec; data 10 bytes (exact fit) [deq, txn]"
+125,"L",3.5,8,0,8,0,10,10,229344,229344,TRUE,FALSE,229398,1793,229388,1793,229380,1793,"xid 3.5 pages for enq rec; data 10 bytes (exact fit) [deq, txn]"
+126,"L",3.5,8,0,8,1,10,10,229345,229345,TRUE,FALSE,229399,1793,229389,1793,229381,1793,"xid 3.5 pages + 1 byte for enq rec; data 10 bytes (exact fit) [deq, txn]"
+127,"L",1,8,0,8,-1,10,10,65503,65503,TRUE,FALSE,65557,513,65547,513,65539,513,"xid 1 page – 1 byte for deq rec; data 10 bytes (exact fit) [deq, txn]"
+128,"L",1,8,0,8,0,10,10,65504,65504,TRUE,FALSE,65558,513,65548,513,65540,513,"xid 1 page for deq rec; data 10 bytes (exact fit) [deq, txn]"
+129,"L",1,8,0,8,1,10,10,65505,65505,TRUE,FALSE,65559,513,65549,513,65541,513,"xid 1 page + 1 byte for deq rec; data 10 bytes (exact fit) [deq, txn]"
+130,"L",2,8,0,8,-1,10,10,131039,131039,TRUE,FALSE,131093,1025,131083,1025,131075,1025,"xid 2 pages – 1 byte for deq rec; data 10 bytes (exact fit) [deq, txn]"
+131,"L",2,8,0,8,0,10,10,131040,131040,TRUE,FALSE,131094,1025,131084,1025,131076,1025,"xid 2 pages for deq rec; data 10 bytes (exact fit) [deq, txn]"
+132,"L",2,8,0,8,1,10,10,131041,131041,TRUE,FALSE,131095,1025,131085,1025,131077,1025,"xid 2 pages + 1 byte for deq rec; data 10 bytes (exact fit) [deq, txn]"
+133,"L",4,8,0,8,-1,10,10,262111,262111,TRUE,FALSE,262165,2049,262155,2049,262147,2049,"xid 4 pages – 1 byte for deq rec; data 10 bytes (exact fit) [deq, txn]"
+134,"L",4,8,0,8,0,10,10,262112,262112,TRUE,FALSE,262166,2049,262156,2049,262148,2049,"xid 4 pages for deq rec; data 10 bytes (exact fit) [deq, txn]"
+135,"L",4,8,0,8,1,10,10,262113,262113,TRUE,FALSE,262167,2049,262157,2049,262149,2049,"xid 4 pages + 1 byte for deq rec; data 10 bytes (exact fit) [deq, txn]"
+136,"L",3.5,8,0,8,0,10,10,229344,229344,TRUE,FALSE,229398,1793,229388,1793,229380,1793,"xid 3.5 pages for deq rec; data 10 bytes (exact fit) [deq, txn]"
+137,"L",3.5,8,0,8,1,10,10,229345,229345,TRUE,FALSE,229399,1793,229389,1793,229381,1793,"xid 3.5 pages + 1 byte for deq rec; data 10 bytes (exact fit) [deq, txn]"
+138,"L",1,8,0,8,-1,10,10,65511,65511,TRUE,FALSE,65565,513,65555,513,65547,513,"xid 1 page – 1 byte for txn rec; data 10 bytes (exact fit) [deq, txn]"
+139,"L",1,8,0,8,0,10,10,65512,65512,TRUE,FALSE,65566,513,65556,513,65548,513,"xid 1 page for txn rec; data 10 bytes (exact fit) [deq, txn]"
+140,"L",1,8,0,8,1,10,10,65513,65513,TRUE,FALSE,65567,513,65557,513,65549,513,"xid 1 page + 1 byte for txn rec; data 10 bytes (exact fit) [deq, txn]"
+141,"L",2,8,0,8,-1,10,10,131047,131047,TRUE,FALSE,131101,1025,131091,1025,131083,1025,"xid 2 pages – 1 byte for txn rec; data 10 bytes (exact fit) [deq, txn]"
+142,"L",2,8,0,8,0,10,10,131048,131048,TRUE,FALSE,131102,1025,131092,1025,131084,1025,"xid 2 pages for txn rec; data 10 bytes (exact fit) [deq, txn]"
+143,"L",2,8,0,8,1,10,10,131049,131049,TRUE,FALSE,131103,1025,131093,1025,131085,1025,"xid 2 pages + 1 byte for txn rec; data 10 bytes (exact fit) [deq, txn]"
+144,"L",4,8,0,8,-1,10,10,262119,262119,TRUE,FALSE,262173,2049,262163,2049,262155,2049,"xid 4 pages – 1 byte for txn rec; data 10 bytes (exact fit) [deq, txn]"
+145,"L",4,8,0,8,0,10,10,262120,262120,TRUE,FALSE,262174,2049,262164,2049,262156,2049,"xid 4 pages for txn rec; data 10 bytes (exact fit) [deq, txn]"
+146,"L",4,8,0,8,1,10,10,262121,262121,TRUE,FALSE,262175,2049,262165,2049,262157,2049,"xid 4 pages + 1 byte for txn rec; data 10 bytes (exact fit) [deq, txn]"
+147,"L",3.5,8,0,8,0,10,10,229352,229352,TRUE,FALSE,229406,1793,229396,1793,229388,1793,"xid 3.5 pages for txn rec; data 10 bytes (exact fit) [deq, txn]"
+148,"L",3.5,8,0,8,1,10,10,229353,229353,TRUE,FALSE,229407,1793,229397,1793,229389,1793,"xid 3.5 pages + 1 byte for txn rec; data 10 bytes (exact fit) [deq, txn]"
Modified: store/trunk/cpp/tests/jrnl/rwtests.csv
===================================================================
--- store/trunk/cpp/tests/jrnl/rwtests.csv 2007-10-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/tests/jrnl/rwtests.csv 2007-10-09 04:26:13 UTC (rev 973)
@@ -2,53 +2,53 @@
"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"
+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,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]"
+"Simple message combinations of persistent/deq transientueued/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 [deq transient]"
+12,"L",1,10,0,10,0,10,10,0,0,TRUE,TRUE,54,1,32,1,0,0,"10 * 10-byte message [deq transient]"
+13,"L",1,1,0,1,0,10,10,10,10,TRUE,FALSE,64,1,54,1,46,1,"1 * 10-byte message [deq txn]"
+14,"L",1,10,0,10,0,10,10,10,10,TRUE,FALSE,64,1,54,1,46,1,"10 * 10-byte message [deq txn]"
+15,"L",1,1,0,1,0,10,10,10,10,TRUE,TRUE,64,1,54,1,46,1,"1 * 10-byte message [txn deq transient]"
+16,"L",1,10,0,10,0,10,10,10,10,TRUE,TRUE,64,1,54,1,46,1,"10 * 10-byte message [txn deq transient]"
,,,,,,,,,,,,,,,,,,,
"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]"
+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",,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]"
+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",,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]"
+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",,,,,,,,,,,,,,,,,,,
+"Page cache rollover (from page 32 back to page 0)",,,,,,,,,,,,,,,,,,,
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"
@@ -66,7 +66,7 @@
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",,,,,,,,,,,,,,,,,,,
+"File transition (from file 0000 to 0001)",,,,,,,,,,,,,,,,,,,
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"
@@ -115,36 +115,36 @@
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)"
+97,"L",1,16,0,16,13,32737,32737,0,0,FALSE,FALSE,32781,257,0,0,0,0,"data 1 page + 13 bytes (data 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]"
+102,"L",1,16,0,16,13,32481,32481,256,256,FALSE,FALSE,32781,257,0,0,0,0,"data 1 page + 13 bytes (data 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)"
+107,"L",2,16,0,16,13,65505,65505,0,0,FALSE,FALSE,65549,513,0,0,0,0,"data 2 pages + 13 bytes (data 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]"
+112,"L",2,16,0,16,13,65249,65249,256,256,FALSE,FALSE,65549,513,0,0,0,0,"data 2 pages + 13 bytes (data 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)"
+117,"L",4,16,0,16,13,131041,131041,0,0,FALSE,FALSE,131085,1025,0,0,0,0,"data 4 pages + 13 bytes (data 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]"
+122,"L",4,16,0,16,13,130785,130785,256,256,FALSE,FALSE,131085,1025,0,0,0,0,"data 4 pages + 13 bytes (data 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 3.5 pages"
+124,"L",3.5,16,0,16,1,114645,114645,0,0,FALSE,FALSE,114689,897,0,0,0,0,"data 3.5 pages + 1 byte"
+125,"L",3.5,16,0,16,0,114388,114388,256,256,FALSE,FALSE,114688,896,0,0,0,0,"data 3.5 pages [txn]"
+126,"L",3.5,16,0,16,1,114389,114389,256,256,FALSE,FALSE,114689,897,0,0,0,0,"data 3.5 pages + 1 byte [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]"
@@ -156,14 +156,36 @@
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]"
+138,"L",1,16,0,16,-1,10,10,32735,32735,TRUE,FALSE,32789,257,32779,257,32771,257,"xid 1 page – 1 byte for enq rec; data 10 bytes (exact fit) [deq, txn]"
+139,"L",1,16,0,16,0,10,10,32736,32736,TRUE,FALSE,32790,257,32780,257,32772,257,"xid 1 page for enq rec; data 10 bytes (exact fit) [deq, 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 for enq rec; data 10 bytes (exact fit) [deq, 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 for enq rec; data 10 bytes (exact fit) [deq, txn]"
+142,"L",2,16,0,16,0,10,10,65504,65504,TRUE,FALSE,65558,513,65548,513,65540,513,"xid 2 pages for enq rec; data 10 bytes (exact fit) [deq, 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 for enq rec; data 10 bytes (exact fit) [deq, 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 for enq rec; data 10 bytes (exact fit) [deq, txn]"
+145,"L",4,16,0,16,0,10,10,131040,131040,TRUE,FALSE,131094,1025,131084,1025,131076,1025,"xid 4 pages for enq rec; data 10 bytes (exact fit) [deq, 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 for enq rec; data 10 bytes (exact fit) [deq, 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 for enq rec; data 10 bytes (exact fit) [deq, 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 for enq rec; data 10 bytes (exact fit) [deq, txn]"
+149,"L",1,16,0,16,-1,10,10,32735,32735,TRUE,FALSE,32789,257,32779,257,32771,257,"xid 1 page – 1 byte for deq rec; data 10 bytes (exact fit) [deq, txn]"
+150,"L",1,16,0,16,0,10,10,32736,32736,TRUE,FALSE,32790,257,32780,257,32772,257,"xid 1 page for deq rec; data 10 bytes (exact fit) [deq, txn]"
+151,"L",1,16,0,16,1,10,10,32737,32737,TRUE,FALSE,32791,257,32781,257,32773,257,"xid 1 page + 1 byte for deq rec; data 10 bytes (exact fit) [deq, txn]"
+152,"L",2,16,0,16,-1,10,10,65503,65503,TRUE,FALSE,65557,513,65547,513,65539,513,"xid 2 pages – 1 byte for deq rec; data 10 bytes (exact fit) [deq, txn]"
+153,"L",2,16,0,16,0,10,10,65504,65504,TRUE,FALSE,65558,513,65548,513,65540,513,"xid 2 pages for deq rec; data 10 bytes (exact fit) [deq, txn]"
+154,"L",2,16,0,16,1,10,10,65505,65505,TRUE,FALSE,65559,513,65549,513,65541,513,"xid 2 pages + 1 byte for deq rec; data 10 bytes (exact fit) [deq, txn]"
+155,"L",4,16,0,16,-1,10,10,131039,131039,TRUE,FALSE,131093,1025,131083,1025,131075,1025,"xid 4 pages – 1 byte for deq rec; data 10 bytes (exact fit) [deq, txn]"
+156,"L",4,16,0,16,0,10,10,131040,131040,TRUE,FALSE,131094,1025,131084,1025,131076,1025,"xid 4 pages for deq rec; data 10 bytes (exact fit) [deq, txn]"
+157,"L",4,16,0,16,1,10,10,131041,131041,TRUE,FALSE,131095,1025,131085,1025,131077,1025,"xid 4 pages + 1 byte for deq rec; data 10 bytes (exact fit) [deq, txn]"
+158,"L",3.5,16,0,16,0,10,10,114656,114656,TRUE,FALSE,114710,897,114700,897,114692,897,"xid 3.5 pages for deq rec; data 10 bytes (exact fit) [deq, txn]"
+159,"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 for deq rec; data 10 bytes (exact fit) [deq, txn]"
+160,"L",1,16,0,16,-1,10,10,32743,32743,TRUE,FALSE,32797,257,32787,257,32779,257,"xid 1 page – 1 byte for txn rec; data 10 bytes (exact fit) [deq, txn]"
+161,"L",1,16,0,16,0,10,10,32744,32744,TRUE,FALSE,32798,257,32788,257,32780,257,"xid 1 page for txn rec; data 10 bytes (exact fit) [deq, txn]"
+162,"L",1,16,0,16,1,10,10,32745,32745,TRUE,FALSE,32799,257,32789,257,32781,257,"xid 1 page + 1 byte for txn rec; data 10 bytes (exact fit) [deq, txn]"
+163,"L",2,16,0,16,-1,10,10,65511,65511,TRUE,FALSE,65565,513,65555,513,65547,513,"xid 2 pages – 1 byte for txn rec; data 10 bytes (exact fit) [deq, txn]"
+164,"L",2,16,0,16,0,10,10,65512,65512,TRUE,FALSE,65566,513,65556,513,65548,513,"xid 2 pages for txn rec; data 10 bytes (exact fit) [deq, txn]"
+165,"L",2,16,0,16,1,10,10,65513,65513,TRUE,FALSE,65567,513,65557,513,65549,513,"xid 2 pages + 1 byte for txn rec; data 10 bytes (exact fit) [deq, txn]"
+166,"L",4,16,0,16,-1,10,10,131047,131047,TRUE,FALSE,131101,1025,131091,1025,131083,1025,"xid 4 pages – 1 byte for txn rec; data 10 bytes (exact fit) [deq, txn]"
+167,"L",4,16,0,16,0,10,10,131048,131048,TRUE,FALSE,131102,1025,131092,1025,131084,1025,"xid 4 pages for txn rec; data 10 bytes (exact fit) [deq, txn]"
+168,"L",4,16,0,16,1,10,10,131049,131049,TRUE,FALSE,131103,1025,131093,1025,131085,1025,"xid 4 pages + 1 byte for txn rec; data 10 bytes (exact fit) [deq, txn]"
+169,"L",3.5,16,0,16,0,10,10,114664,114664,TRUE,FALSE,114718,897,114708,897,114700,897,"xid 3.5 pages for txn rec; data 10 bytes (exact fit) [deq, txn]"
+170,"L",3.5,16,0,16,1,10,10,114665,114665,TRUE,FALSE,114719,897,114709,897,114701,897,"xid 3.5 pages + 1 byte for txn rec; data 10 bytes (exact fit) [deq, 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-08 21:47:52 UTC (rev 972)
+++ store/trunk/cpp/tests/jrnl/wtests.csv 2007-10-09 04:26:13 UTC (rev 973)
@@ -2,9 +2,9 @@
"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"
+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",,,,,,,,,,,,,,,,,,,
+"Simple message combinations of persistent/deq transientueued/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]"
@@ -15,12 +15,12 @@
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]"
+11,"L",1,1,0,1,0,10,10,0,0,TRUE,TRUE,54,1,32,1,0,0,"1 * 10-byte message [deq transient]"
+12,"L",1,10,0,10,0,10,10,0,0,TRUE,TRUE,54,1,32,1,0,0,"10 * 10-byte message [deq transient]"
+13,"L",1,1,0,1,0,10,10,10,10,TRUE,FALSE,64,1,54,1,46,1,"1 * 10-byte message [deq txn]"
+14,"L",1,10,0,10,0,10,10,10,10,TRUE,FALSE,64,1,54,1,46,1,"10 * 10-byte message [deq txn]"
+15,"L",1,1,0,1,0,10,10,10,10,TRUE,TRUE,64,1,54,1,46,1,"1 * 10-byte message [txn deq transient]"
+16,"L",1,10,0,10,0,10,10,10,10,TRUE,TRUE,64,1,54,1,46,1,"10 * 10-byte message [txn deq transient]"
,,,,,,,,,,,,,,,,,,,
"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"
@@ -48,7 +48,7 @@
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",,,,,,,,,,,,,,,,,,,
+"Page cache rollover (from page 32 back to page 0)",,,,,,,,,,,,,,,,,,,
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"
@@ -66,7 +66,7 @@
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",,,,,,,,,,,,,,,,,,,
+"File transition (from file 0000 to 0001)",,,,,,,,,,,,,,,,,,,
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"
@@ -115,36 +115,36 @@
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)"
+97,"L",1,16,0,16,13,32737,32737,0,0,FALSE,FALSE,32781,257,0,0,0,0,"data 1 page + 13 bytes (data 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]"
+102,"L",1,16,0,16,13,32481,32481,256,256,FALSE,FALSE,32781,257,0,0,0,0,"data 1 page + 13 bytes (data 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)"
+107,"L",2,16,0,16,13,65505,65505,0,0,FALSE,FALSE,65549,513,0,0,0,0,"data 2 pages + 13 bytes (data 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]"
+112,"L",2,16,0,16,13,65249,65249,256,256,FALSE,FALSE,65549,513,0,0,0,0,"data 2 pages + 13 bytes (data 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)"
+117,"L",4,16,0,16,13,131041,131041,0,0,FALSE,FALSE,131085,1025,0,0,0,0,"data 4 pages + 13 bytes (data 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]"
+122,"L",4,16,0,16,13,130785,130785,256,256,FALSE,FALSE,131085,1025,0,0,0,0,"data 4 pages + 13 bytes (data 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 3.5 pages"
+124,"L",3.5,16,0,16,1,114645,114645,0,0,FALSE,FALSE,114689,897,0,0,0,0,"data 3.5 pages + 1 byte"
+125,"L",3.5,16,0,16,0,114388,114388,256,256,FALSE,FALSE,114688,896,0,0,0,0,"data 3.5 pages [txn]"
+126,"L",3.5,16,0,16,1,114389,114389,256,256,FALSE,FALSE,114689,897,0,0,0,0,"data 3.5 pages + 1 byte [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]"
@@ -156,100 +156,122 @@
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]"
+138,"L",1,16,0,16,-1,10,10,32735,32735,TRUE,FALSE,32789,257,32779,257,32771,257,"xid 1 page – 1 byte for enq rec; data 10 bytes (exact fit) [deq, txn]"
+139,"L",1,16,0,16,0,10,10,32736,32736,TRUE,FALSE,32790,257,32780,257,32772,257,"xid 1 page for enq rec; data 10 bytes (exact fit) [deq, 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 for enq rec; data 10 bytes (exact fit) [deq, 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 for enq rec; data 10 bytes (exact fit) [deq, txn]"
+142,"L",2,16,0,16,0,10,10,65504,65504,TRUE,FALSE,65558,513,65548,513,65540,513,"xid 2 pages for enq rec; data 10 bytes (exact fit) [deq, 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 for enq rec; data 10 bytes (exact fit) [deq, 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 for enq rec; data 10 bytes (exact fit) [deq, txn]"
+145,"L",4,16,0,16,0,10,10,131040,131040,TRUE,FALSE,131094,1025,131084,1025,131076,1025,"xid 4 pages for enq rec; data 10 bytes (exact fit) [deq, 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 for enq rec; data 10 bytes (exact fit) [deq, 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 for enq rec; data 10 bytes (exact fit) [deq, 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 for enq rec; data 10 bytes (exact fit) [deq, txn]"
+149,"L",1,16,0,16,-1,10,10,32735,32735,TRUE,FALSE,32789,257,32779,257,32771,257,"xid 1 page – 1 byte for deq rec; data 10 bytes (exact fit) [deq, txn]"
+150,"L",1,16,0,16,0,10,10,32736,32736,TRUE,FALSE,32790,257,32780,257,32772,257,"xid 1 page for deq rec; data 10 bytes (exact fit) [deq, txn]"
+151,"L",1,16,0,16,1,10,10,32737,32737,TRUE,FALSE,32791,257,32781,257,32773,257,"xid 1 page + 1 byte for deq rec; data 10 bytes (exact fit) [deq, txn]"
+152,"L",2,16,0,16,-1,10,10,65503,65503,TRUE,FALSE,65557,513,65547,513,65539,513,"xid 2 pages – 1 byte for deq rec; data 10 bytes (exact fit) [deq, txn]"
+153,"L",2,16,0,16,0,10,10,65504,65504,TRUE,FALSE,65558,513,65548,513,65540,513,"xid 2 pages for deq rec; data 10 bytes (exact fit) [deq, txn]"
+154,"L",2,16,0,16,1,10,10,65505,65505,TRUE,FALSE,65559,513,65549,513,65541,513,"xid 2 pages + 1 byte for deq rec; data 10 bytes (exact fit) [deq, txn]"
+155,"L",4,16,0,16,-1,10,10,131039,131039,TRUE,FALSE,131093,1025,131083,1025,131075,1025,"xid 4 pages – 1 byte for deq rec; data 10 bytes (exact fit) [deq, txn]"
+156,"L",4,16,0,16,0,10,10,131040,131040,TRUE,FALSE,131094,1025,131084,1025,131076,1025,"xid 4 pages for deq rec; data 10 bytes (exact fit) [deq, txn]"
+157,"L",4,16,0,16,1,10,10,131041,131041,TRUE,FALSE,131095,1025,131085,1025,131077,1025,"xid 4 pages + 1 byte for deq rec; data 10 bytes (exact fit) [deq, txn]"
+158,"L",3.5,16,0,16,0,10,10,114656,114656,TRUE,FALSE,114710,897,114700,897,114692,897,"xid 3.5 pages for deq rec; data 10 bytes (exact fit) [deq, txn]"
+159,"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 for deq rec; data 10 bytes (exact fit) [deq, txn]"
+160,"L",1,16,0,16,-1,10,10,32743,32743,TRUE,FALSE,32797,257,32787,257,32779,257,"xid 1 page – 1 byte for txn rec; data 10 bytes (exact fit) [deq, txn]"
+161,"L",1,16,0,16,0,10,10,32744,32744,TRUE,FALSE,32798,257,32788,257,32780,257,"xid 1 page for txn rec; data 10 bytes (exact fit) [deq, txn]"
+162,"L",1,16,0,16,1,10,10,32745,32745,TRUE,FALSE,32799,257,32789,257,32781,257,"xid 1 page + 1 byte for txn rec; data 10 bytes (exact fit) [deq, txn]"
+163,"L",2,16,0,16,-1,10,10,65511,65511,TRUE,FALSE,65565,513,65555,513,65547,513,"xid 2 pages – 1 byte for txn rec; data 10 bytes (exact fit) [deq, txn]"
+164,"L",2,16,0,16,0,10,10,65512,65512,TRUE,FALSE,65566,513,65556,513,65548,513,"xid 2 pages for txn rec; data 10 bytes (exact fit) [deq, txn]"
+165,"L",2,16,0,16,1,10,10,65513,65513,TRUE,FALSE,65567,513,65557,513,65549,513,"xid 2 pages + 1 byte for txn rec; data 10 bytes (exact fit) [deq, txn]"
+166,"L",4,16,0,16,-1,10,10,131047,131047,TRUE,FALSE,131101,1025,131091,1025,131083,1025,"xid 4 pages – 1 byte for txn rec; data 10 bytes (exact fit) [deq, txn]"
+167,"L",4,16,0,16,0,10,10,131048,131048,TRUE,FALSE,131102,1025,131092,1025,131084,1025,"xid 4 pages for txn rec; data 10 bytes (exact fit) [deq, txn]"
+168,"L",4,16,0,16,1,10,10,131049,131049,TRUE,FALSE,131103,1025,131093,1025,131085,1025,"xid 4 pages + 1 byte for txn rec; data 10 bytes (exact fit) [deq, txn]"
+169,"L",3.5,16,0,16,0,10,10,114664,114664,TRUE,FALSE,114718,897,114708,897,114700,897,"xid 3.5 pages for txn rec; data 10 bytes (exact fit) [deq, txn]"
+170,"L",3.5,16,0,16,1,10,10,114665,114665,TRUE,FALSE,114719,897,114709,897,114701,897,"xid 3.5 pages + 1 byte for txn rec; data 10 bytes (exact fit) [deq, 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]"
+171,"L",1,32,0,32,0,1572820,1572820,0,0,FALSE,FALSE,1572864,12288,0,0,0,0,"48 pages = 1 file exactly"
+172,"L",1,32,0,32,1,1572821,1572821,0,0,FALSE,FALSE,1572865,12289,0,0,0,0,"48 pages + 1 byte"
+173,"L",1,32,0,32,0,1605588,1605588,0,0,FALSE,FALSE,1605632,12544,0,0,0,0,"49 pages = 1 file + 1 page"
+174,"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"
+175,"L",1,32,0,32,0,1572565,1572565,255,255,FALSE,FALSE,1572864,12288,0,0,0,0,"48 pages = 1 file exactly [txn]"
+176,"L",1,32,0,32,1,1572566,1572566,255,255,FALSE,FALSE,1572865,12289,0,0,0,0,"48 pages + 1 byte [txn]"
+177,"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]"
+178,"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]"
+179,"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]"
+180,"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]"
+181,"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]"
+182,"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]"
+183,"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]"
+184,"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]"
+185,"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]"
+186,"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]"
+187,"L",2,16,0,16,0,3145684,3145684,0,0,FALSE,FALSE,3145728,24576,0,0,0,0,"96 pages = 2 files exactly"
+188,"L",2,16,0,16,1,3145685,3145685,0,0,FALSE,FALSE,3145729,24577,0,0,0,0,"96 pages + 1 byte"
+189,"L",2,16,0,16,0,3146708,3146708,0,0,FALSE,FALSE,3146752,24584,0,0,0,0,"97 pages = 2 files + 1 page"
+190,"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"
+191,"L",2,16,0,16,0,3145429,3145429,255,255,FALSE,FALSE,3145728,24576,0,0,0,0,"96 pages = 2 files exactly [txn]"
+192,"L",2,16,0,16,1,3145430,3145430,255,255,FALSE,FALSE,3145729,24577,0,0,0,0,"96 pages + 1 byte [txn]"
+193,"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]"
+194,"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]"
+195,"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]"
+196,"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]"
+197,"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]"
+198,"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]"
+199,"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]"
+200,"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]"
+201,"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]"
+202,"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]"
+203,"L",4,8,0,8,0,6291412,6291412,0,0,FALSE,FALSE,6291456,49152,0,0,0,0,"192 pages = 2 files exactly"
+204,"L",4,8,0,8,1,6291413,6291413,0,0,FALSE,FALSE,6291457,49153,0,0,0,0,"192 pages + 1 byte"
+205,"L",4,8,0,8,0,6291412,6291412,0,0,FALSE,FALSE,6291456,49152,0,0,0,0,"193 pages = 2 files + 1 page"
+206,"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"
+207,"L",4,8,0,8,0,6291157,6291157,255,255,FALSE,FALSE,6291456,49152,0,0,0,0,"192 pages = 2 files exactly [txn]"
+208,"L",4,8,0,8,1,6291158,6291158,255,255,FALSE,FALSE,6291457,49153,0,0,0,0,"192 pages + 1 byte [txn]"
+209,"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]"
+210,"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]"
+211,"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]"
+212,"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]"
+213,"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]"
+214,"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]"
+215,"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]"
+216,"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]"
+217,"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]"
+218,"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]"
+219,"M",1,5000000,0,5000000,0,0,84,0,0,FALSE,FALSE,128,1,0,0,0,0,"1 dblk max"
+220,"M",3,3000000,0,3000000,0,0,340,0,0,FALSE,FALSE,384,3,0,0,0,0,"3 dblks max"
+221,"M",10,1600000,0,1600000,0,0,1236,0,0,FALSE,FALSE,1280,10,0,0,0,0,"10 dblks max"
+222,"M",30,6000000,0,6000000,0,0,3796,0,0,FALSE,FALSE,3840,30,0,0,0,0,"30 dblks max"
+223,"M",100,200000,0,200000,0,0,12756,0,0,FALSE,FALSE,12800,100,0,0,0,0,"100 dblks max"
+224,"M",300,60000,0,60000,0,0,38356,0,0,FALSE,FALSE,38400,300,0,0,0,0,"300 dblks max"
+225,"M",1000,20000,0,20000,0,0,127956,0,0,FALSE,FALSE,128000,1000,0,0,0,0,"1000 dblks max"
+226,"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]"
+227,"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]"
+228,"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]"
+229,"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]"
+230,"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]"
+231,"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]"
+232,"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]"
+233,"M",1,5000000,0,5000000,0,0,84,0,0,TRUE,FALSE,128,1,32,1,0,0,"1 dblk max [deq]"
+234,"M",3,3000000,0,3000000,0,0,340,0,0,TRUE,FALSE,384,3,32,1,0,0,"3 dblks max [deq]"
+235,"M",10,1600000,0,1600000,0,0,1236,0,0,TRUE,FALSE,1280,10,32,1,0,0,"10 dblks max [deq]"
+236,"M",30,6000000,0,6000000,0,0,3796,0,0,TRUE,FALSE,3840,30,32,1,0,0,"30 dblks max [deq]"
+237,"M",100,200000,0,200000,0,0,12756,0,0,TRUE,FALSE,12800,100,32,1,0,0,"100 dblks max [deq]"
+238,"M",300,60000,0,60000,0,0,38356,0,0,TRUE,FALSE,38400,300,32,1,0,0,"300 dblks max [deq]"
+239,"M",1000,20000,0,20000,0,0,127956,0,0,TRUE,FALSE,128000,1000,32,1,0,0,"1000 dblks max [deq]"
+240,"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]"
+241,"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]"
+242,"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]"
+243,"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]"
+244,"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]"
+245,"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]"
+246,"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)"
+247,"M",1,10000000,0,10000000,0,212,212,0,0,FALSE,FALSE,256,2,0,0,0,0,"212 bytes data (2 dblks enq)"
+248,"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)"
+249,"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)"
+250,"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)"
17 years, 2 months
rhmessaging commits: r972 - in mgmt/cumin/python: wooly and 1 other directory.
by rhmessaging-commits@lists.jboss.org
Author: justi9
Date: 2007-10-08 17:47:52 -0400 (Mon, 08 Oct 2007)
New Revision: 972
Modified:
mgmt/cumin/python/cumin/cluster.py
mgmt/cumin/python/cumin/cluster.strings
mgmt/cumin/python/cumin/exchange.py
mgmt/cumin/python/cumin/exchange.strings
mgmt/cumin/python/cumin/page.strings
mgmt/cumin/python/cumin/queue.py
mgmt/cumin/python/cumin/queue.strings
mgmt/cumin/python/cumin/server.py
mgmt/cumin/python/cumin/server.strings
mgmt/cumin/python/cumin/virtualhost.py
mgmt/cumin/python/cumin/virtualhost.strings
mgmt/cumin/python/cumin/widgets.py
mgmt/cumin/python/wooly/model.py
Log:
* Add an alphabetical sort to lists
* Change demo object naming to sort better
* Make nav links consistent
* Add some functions to wooly/widgets.py for common page content:
link, mlink, none
Modified: mgmt/cumin/python/cumin/cluster.py
===================================================================
--- mgmt/cumin/python/cumin/cluster.py 2007-10-08 20:01:52 UTC (rev 971)
+++ mgmt/cumin/python/cumin/cluster.py 2007-10-08 21:47:52 UTC (rev 972)
@@ -16,13 +16,11 @@
def get_items(self, session, model):
return sorted(model.get_clusters(), cmp, lambda x: x.name)
- def render_item_href(self, session, cluster):
+ def render_item_link(self, session, cluster):
branch = session.branch()
self.page().show_cluster(branch, cluster).show_view(branch)
- return branch.marshal()
- def render_item_name(self, session, cluster):
- return cluster.name
+ return mlink(branch.marshal(), "Cluster", cluster.name)
class ClusterParameter(Parameter):
def do_unmarshal(self, string):
Modified: mgmt/cumin/python/cumin/cluster.strings
===================================================================
--- mgmt/cumin/python/cumin/cluster.strings 2007-10-08 20:01:52 UTC (rev 971)
+++ mgmt/cumin/python/cumin/cluster.strings 2007-10-08 21:47:52 UTC (rev 972)
@@ -1,14 +1,14 @@
[ClusterSet.html]
<table class="ClusterSet mobjects">
<tr>
- <th>Name</th>
+ <th>Cluster</th>
</tr>
{items}
</table>
[ClusterSet.item_html]
<tr>
- <td><a href="{item_href}">{item_name}</a></td>
+ <td>{item_link}</td>
</tr>
[ClusterView.html]
@@ -45,7 +45,7 @@
[ClusterServers.item_html]
<tr>
- <td><a href="{item_href}">{item_name}</a></td>
+ <td>{item_link}</td>
<td>0 errors, 0 warnings</td>
<td><a class="action" href="">Remove</a></td>
</tr>
Modified: mgmt/cumin/python/cumin/exchange.py
===================================================================
--- mgmt/cumin/python/cumin/exchange.py 2007-10-08 20:01:52 UTC (rev 971)
+++ mgmt/cumin/python/cumin/exchange.py 2007-10-08 21:47:52 UTC (rev 972)
@@ -42,20 +42,15 @@
def get_items(self, session, vhost):
return sorted(vhost.exchange_items(), cmp, lambda x: x.name)
- def render_item_href(self, session, exchange):
+ def render_item_link(self, session, exchange):
branch = session.branch()
self.page().show_exchange(branch, exchange).show_view(branch)
- return branch.marshal()
- def render_item_name(self, session, exchange):
- return exchange.name
+ return mlink(branch.marshal(), "Exchange", exchange.name)
- def render_item_flags(self, session, exchange):
- flags = list()
- return ", ".join(flags)
-
def render_item_config(self, session, exchange):
- return "%i bindings" % len(exchange.binding_items())
+ count = len(exchange.binding_items())
+ return "%i %s" % (count, count == 1 and "binding" or "bindings")
def render_item_status(self, session, exchange):
return "2 errors"
Modified: mgmt/cumin/python/cumin/exchange.strings
===================================================================
--- mgmt/cumin/python/cumin/exchange.strings 2007-10-08 20:01:52 UTC (rev 971)
+++ mgmt/cumin/python/cumin/exchange.strings 2007-10-08 21:47:52 UTC (rev 972)
@@ -14,7 +14,7 @@
[ExchangeSet.html]
<table class="ExchangeSet mobjects">
<tr>
- <th>Name</th>
+ <th>Exchange</th>
<th>Configuration</th>
<th>Status</th>
</tr>
@@ -23,7 +23,7 @@
[ExchangeSet.item_html]
<tr>
- <td><a href="{item_href}">{item_name}</a></td>
+ <td>{item_link}</a></td>
<td>{item_config}</td>
<td>{item_status}</td>
</tr>
@@ -75,7 +75,7 @@
<h1><img src="resource?name=exchange-36.png"> {title}</h1>
<dl class="properties">
- <dt>Exchange Name</dt><dd>{exchange_name}</dd>
+ <dt>Name</dt><dd>{exchange_name}</dd>
<dt>Type</dt><dd>{type}</dd>
</dl>
@@ -99,7 +99,7 @@
[ExchangeBindingSet.item_html]
<tr>
- <td><a href="{item_href}">{item_name}</a></td>
+ <td><a href="{item_href}">Queue '{item_name}'</a></td>
<td>{item_routing_key}</td>
<td><a class="action" href="">Remove</a></td>
</tr>
Modified: mgmt/cumin/python/cumin/page.strings
===================================================================
--- mgmt/cumin/python/cumin/page.strings 2007-10-08 20:01:52 UTC (rev 971)
+++ mgmt/cumin/python/cumin/page.strings 2007-10-08 21:47:52 UTC (rev 972)
@@ -26,8 +26,8 @@
color: #06c;
}
-#head, #foot {
- padding: 0.5em 0.75em 0.4em 0.75em;
+#head {
+ padding: 0.4em 0.75em 0.2em 0.75em;
}
#head {
@@ -39,7 +39,7 @@
}
#logo {
- vertical-align: -15%;
+ vertical-align: -20%;
}
h1, h2 {
Modified: mgmt/cumin/python/cumin/queue.py
===================================================================
--- mgmt/cumin/python/cumin/queue.py 2007-10-08 20:01:52 UTC (rev 971)
+++ mgmt/cumin/python/cumin/queue.py 2007-10-08 21:47:52 UTC (rev 972)
@@ -34,41 +34,19 @@
def get_items(self, session, vhost):
return sorted(vhost.queue_items(), cmp, lambda x: x.name)
- def render_item_href(self, session, queue):
+ def render_item_link(self, session, queue):
branch = session.branch()
self.page().show_queue(branch, queue).show_view(branch)
- return branch.marshal()
+ return mlink(branch.marshal(), "Queue", queue.name)
+
def render_item_name(self, session, queue):
return queue.name
- def render_item_flags(self, session, queue):
- flags = list()
-
- if queue.is_durable:
- flags.append("Durable")
-
- if queue.is_auto_delete:
- flags.append("Auto Delete")
-
- return ", ".join(flags)
-
def render_item_config(self, session, queue):
- bindings = list()
-
- for binding in sorted(queue.binding_items()):
- name = binding.get_exchange().name
- key = binding.routing_key
+ count = len(queue.binding_items())
+ return "%i %s" % (count, count == 1 and "binding" or "bindings")
- branch = session.branch()
- self.page().show_exchange(branch, binding.get_exchange())
- href = branch.marshal()
-
- bindings.append("<a href=\"%s\">exchange '%s'</a> with key '%s'"
- % (href, name, key))
-
- return ", ".join(bindings)
-
def render_item_status(self, session, queue):
return "%i messages in queue<br/>%i errors, %i warnings" \
% (queue.message_count, queue.error_count, queue.warning_count)
Modified: mgmt/cumin/python/cumin/queue.strings
===================================================================
--- mgmt/cumin/python/cumin/queue.strings 2007-10-08 20:01:52 UTC (rev 971)
+++ mgmt/cumin/python/cumin/queue.strings 2007-10-08 21:47:52 UTC (rev 972)
@@ -8,8 +8,8 @@
[QueueSet.html]
<table class="QueueSet mobjects">
<tr>
- <th>Name</th>
- <th>Exchanges</th>
+ <th>Queue</th>
+ <th>Configuration</th>
<th>Status</th>
</tr>
{items}
@@ -17,7 +17,7 @@
[QueueSet.item_html]
<tr>
- <td><a href="{item_href}">{item_name}</a></td>
+ <td>{item_link}</a></td>
<td>{item_config}</td>
<td>{item_status}</td>
</tr>
@@ -109,7 +109,7 @@
<h1><img src="resource?name=queue-36.png"> {title}</h1>
<dl class="properties">
- <dt>Queue Name</dt><dd>{queue_name}</dd>
+ <dt>Name</dt><dd>{queue_name}</dd>
<dt>Latency Tuning</dt><dd>{latency_tuning}</dd>
</dl>
@@ -134,7 +134,7 @@
[QueueBindingSet.item_html]
<tr>
- <td><a href="{item_href}">exchange '{item_name}'</a></td>
+ <td><a href="{item_href}">Exchange '{item_name}'</a></td>
<td>{item_routing_key}</td>
<td><a class="action" href="{item_remove_href}">Remove</a></td>
</tr>
Modified: mgmt/cumin/python/cumin/server.py
===================================================================
--- mgmt/cumin/python/cumin/server.py 2007-10-08 20:01:52 UTC (rev 971)
+++ mgmt/cumin/python/cumin/server.py 2007-10-08 21:47:52 UTC (rev 972)
@@ -13,28 +13,23 @@
def get_items(self, session, model):
return sorted(model.get_servers(), cmp, lambda x: x.name)
- def render_item_href(self, session, server):
+ def render_item_link(self, session, server):
branch = session.branch()
self.page().show_server(branch, server).show_view(branch)
- return branch.marshal()
- def render_item_name(self, session, server):
- return server.name
+ return mlink(branch.marshal(), "Server", server.name)
- def render_item_cluster_name(self, session, server):
+ def render_item_cluster_link(self, session, server):
cluster = server.get_cluster()
if cluster:
- return cluster.name
-
- def render_item_cluster_href(self, session, server):
- cluster = server.get_cluster()
-
- if cluster:
branch = session.branch()
self.page().show_cluster(branch, cluster).show_view(branch)
- return branch.marshal()
+ return mlink(branch.marshal(), "Cluster", cluster.name)
+ else:
+ return none()
+
class ServerParameter(Parameter):
def do_unmarshal(self, string):
return self.app.model.get_server(int(string))
@@ -101,6 +96,19 @@
def render_name(self, session, server):
return server.name
+ def render_cluster_link(self, session, server):
+ html = None
+ cluster = server.get_cluster()
+
+ if cluster:
+ branch = session.branch()
+ self.page().show_cluster(session, cluster).show_view(branch)
+ html = mlink(branch.marshal(), "Cluster", cluster.name)
+ else:
+ html = none()
+
+ return html
+
class ServerLog(Widget):
def render_title(self, session, server):
return "Log Messages"
Modified: mgmt/cumin/python/cumin/server.strings
===================================================================
--- mgmt/cumin/python/cumin/server.strings 2007-10-08 20:01:52 UTC (rev 971)
+++ mgmt/cumin/python/cumin/server.strings 2007-10-08 21:47:52 UTC (rev 972)
@@ -1,7 +1,7 @@
[ServerSet.html]
<table class="ServerSet mobjects">
<tr>
- <th>Name</th>
+ <th>Server</th>
<th>Cluster</th>
<th>Status</th>
</tr>
@@ -10,8 +10,8 @@
[ServerSet.item_html]
<tr>
- <td><a href="{item_href}">{item_name}</a></td>
- <td><a href="{item_cluster_href}">{item_cluster_name}</a></td>
+ <td>{item_link}</td>
+ <td>{item_cluster_link}</td>
<td>0 errors, 0 warnings</td>
</tr>
@@ -27,6 +27,7 @@
<dl class="properties">
<dt>Name</dt><dd>{name}</dd>
+ <dt>Cluster</dt><dd>{cluster_link}</dd>
</dl>
<ul class="actions">
Modified: mgmt/cumin/python/cumin/virtualhost.py
===================================================================
--- mgmt/cumin/python/cumin/virtualhost.py 2007-10-08 20:01:52 UTC (rev 971)
+++ mgmt/cumin/python/cumin/virtualhost.py 2007-10-08 21:47:52 UTC (rev 972)
@@ -15,13 +15,11 @@
def get_items(self, session, server):
return sorted(server.virtual_host_items(), cmp, lambda x: x.name)
- def render_item_href(self, session, vhost):
+ def render_item_link(self, session, vhost):
branch = session.branch()
self.page().show_virtual_host(branch, vhost)
- return branch.marshal()
- def render_item_name(self, session, vhost):
- return vhost.name
+ return mlink(branch.marshal(), "Virtual Host", vhost.name)
class VirtualHostFrame(CuminFrame):
def __init__(self, app, name):
Modified: mgmt/cumin/python/cumin/virtualhost.strings
===================================================================
--- mgmt/cumin/python/cumin/virtualhost.strings 2007-10-08 20:01:52 UTC (rev 971)
+++ mgmt/cumin/python/cumin/virtualhost.strings 2007-10-08 21:47:52 UTC (rev 972)
@@ -1,7 +1,7 @@
[VirtualHostSet.html]
<table class="VirtualHostSet mobjects">
<tr>
- <th>Name</th>
+ <th>Virtual Host</th>
<th>Configuration</th>
<th>Status</th>
</tr>
@@ -10,7 +10,7 @@
[VirtualHostSet.item_html]
<tr>
- <td><a href="{item_href}">{item_name}</a></td>
+ <td>{item_link}</td>
<td>10 queues, 5 exchanges</td>
<td>2 errors, 10 warnings</td>
</tr>
Modified: mgmt/cumin/python/cumin/widgets.py
===================================================================
--- mgmt/cumin/python/cumin/widgets.py 2007-10-08 20:01:52 UTC (rev 971)
+++ mgmt/cumin/python/cumin/widgets.py 2007-10-08 21:47:52 UTC (rev 972)
@@ -4,6 +4,15 @@
strings = StringCatalog(__file__)
+def link(href, name):
+ return "<a href=\"%s\">%s</a>" % (href, name)
+
+def mlink(href, variety, name):
+ return "<a href=\"%s\">%s</a>" % (href, name)
+
+def none():
+ return "<em>None</em>"
+
class CuminFrame(Frame, ModeSet):
def do_process(self, session, object):
self.page().get_frames(session).append(self)
Modified: mgmt/cumin/python/wooly/model.py
===================================================================
--- mgmt/cumin/python/wooly/model.py 2007-10-08 20:01:52 UTC (rev 971)
+++ mgmt/cumin/python/wooly/model.py 2007-10-08 21:47:52 UTC (rev 972)
@@ -83,10 +83,8 @@
def remove(self, this, that):
if self.is_scalar():
- print "is_scalar"
self.set_scalar(this, None)
else:
- print "items(%s).remove(%s)" % (this.id, that.id)
self.items(this).remove(that)
def object_items(self, this):
17 years, 2 months
rhmessaging commits: r971 - in mgmt/cumin/python: wooly and 1 other directory.
by rhmessaging-commits@lists.jboss.org
Author: justi9
Date: 2007-10-08 16:01:52 -0400 (Mon, 08 Oct 2007)
New Revision: 971
Modified:
mgmt/cumin/python/cumin/
mgmt/cumin/python/cumin/cluster.py
mgmt/cumin/python/cumin/cluster.strings
mgmt/cumin/python/cumin/demo.py
mgmt/cumin/python/cumin/exchange.py
mgmt/cumin/python/cumin/page.py
mgmt/cumin/python/cumin/page.strings
mgmt/cumin/python/cumin/queue.py
mgmt/cumin/python/cumin/queue.strings
mgmt/cumin/python/cumin/server.py
mgmt/cumin/python/cumin/server.strings
mgmt/cumin/python/cumin/virtualhost.py
mgmt/cumin/python/wooly/
mgmt/cumin/python/wooly/server.py
mgmt/cumin/python/wooly/widgets.py
mgmt/cumin/python/wooly/widgets.strings
Log:
A batch commit of the work I did before I got commit access :).
* Marks pyc files ignored in the cumin and wooly dirs
* Adds dummy status blocks to the cluster and server views
* Makes status block styling more general, not queue status specific
* Fills out the server group nav
* Adds servers to server groups in the demo data
Property changes on: mgmt/cumin/python/cumin
___________________________________________________________________
Name: svn:ignore
+ *.pyc
Modified: mgmt/cumin/python/cumin/cluster.py
===================================================================
--- mgmt/cumin/python/cumin/cluster.py 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/cluster.py 2007-10-08 20:01:52 UTC (rev 971)
@@ -14,7 +14,7 @@
return "Clusters (%i)" % len(model.get_clusters())
def get_items(self, session, model):
- return sorted(model.get_clusters())
+ return sorted(model.get_clusters(), cmp, lambda x: x.name)
def render_item_href(self, session, cluster):
branch = session.branch()
@@ -62,14 +62,17 @@
self.tabs = TabSet(app, "tabs")
self.add_child(self.tabs)
- self.tabs.add_child(self.Servers(app, "servers"))
+ self.tabs.add_child(self.ClusterServers(app, "servers"))
def render_title(self, session, cluster):
return "Cluster '%s'" % cluster.name
- class Servers(ServerSet):
+ def render_name(self, session, cluster):
+ return cluster.name
+
+ class ClusterServers(ServerSet):
def render_title(self, session, cluster):
return "Servers (%i)" % len(cluster.server_items())
def get_items(self, session, cluster):
- return sorted(cluster.server_items())
+ return sorted(cluster.server_items(), cmp, lambda x: x.name)
Modified: mgmt/cumin/python/cumin/cluster.strings
===================================================================
--- mgmt/cumin/python/cumin/cluster.strings 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/cluster.strings 2007-10-08 20:01:52 UTC (rev 971)
@@ -13,6 +13,39 @@
[ClusterView.html]
<div class="oblock">
+ <div class="mstatus green" id="{id}">
+ <h2>Cluster Status</h2>
+
+ <div>0 errors, 0 warnings</div>
+ </div>
+
<h1>{title}</h1>
+
+ <dl class="properties">
+ <dt>Name</dt><dd>{name}</dd>
+ </dl>
+
+ <ul class="actions">
+ <li><a href="">Add Server</a></li>
+ <li><a href="">Shutdown Servers in Cluster</a></li>
+ </ul>
+
{tabs}
</div>
+
+[ClusterServers.html]
+<table class="ClusterServers mobjects">
+ <tr>
+ <th>Name</th>
+ <th>Status</th>
+ <th></th>
+ </tr>
+{items}
+</table>
+
+[ClusterServers.item_html]
+<tr>
+ <td><a href="{item_href}">{item_name}</a></td>
+ <td>0 errors, 0 warnings</td>
+ <td><a class="action" href="">Remove</a></td>
+</tr>
Modified: mgmt/cumin/python/cumin/demo.py
===================================================================
--- mgmt/cumin/python/cumin/demo.py 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/demo.py 2007-10-08 20:01:52 UTC (rev 971)
@@ -4,6 +4,9 @@
from model import *
+def fmt(str_, int_):
+ return "%s%02i" % (str_, int_)
+
class DemoData(object):
def __init__(self, model):
self.model = model
@@ -34,14 +37,19 @@
for cluster_count in range(3):
cluster = Cluster(self.model)
- cluster.name = "cluster" + str(cluster_count)
+ cluster.name = fmt("cluster", cluster_count)
clusters.append(cluster)
for server_count in range(12):
server = Server(self.model)
- server.name = "server" + str(server_count)
+ server.name = fmt("server", server_count)
server.set_cluster(clusters[server_count % 3])
+ if server_count % 2:
+ sgroups["East Coast"].add_server(server)
+ else:
+ sgroups["West Coast"].add_server(server)
+
vhost = VirtualHost(self.model)
vhost.name = "default"
server.add_virtual_host(vhost)
@@ -66,7 +74,7 @@
for queue_count in range(10):
queue = Queue(self.model)
- queue.name = "queue" + str(queue_count)
+ queue.name = fmt("queue", queue_count)
vhost.add_queue(queue)
def start_updates(self):
Modified: mgmt/cumin/python/cumin/exchange.py
===================================================================
--- mgmt/cumin/python/cumin/exchange.py 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/exchange.py 2007-10-08 20:01:52 UTC (rev 971)
@@ -24,7 +24,7 @@
self.set_parameter(param)
def get_items(self, session, vhost):
- return sorted(vhost.exchange_items())
+ return sorted(vhost.exchange_items(), cmp, lambda x: x.name)
def render_item_value(self, session, exchange):
return exchange.id
@@ -40,7 +40,7 @@
return "Exchanges (%s)" % len(vhost.exchange_items())
def get_items(self, session, vhost):
- return sorted(vhost.exchange_items())
+ return sorted(vhost.exchange_items(), cmp, lambda x: x.name)
def render_item_href(self, session, exchange):
branch = session.branch()
@@ -142,7 +142,8 @@
return "Bindings (%i)" % len(exchange.binding_items())
def get_items(self, session, exchange):
- return sorted(exchange.binding_items())
+ return sorted(exchange.binding_items(), cmp,
+ lambda x: x.get_queue().name)
def render_item_href(self, session, binding):
branch = session.branch()
Modified: mgmt/cumin/python/cumin/page.py
===================================================================
--- mgmt/cumin/python/cumin/page.py 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/page.py 2007-10-08 20:01:52 UTC (rev 971)
@@ -38,6 +38,9 @@
def show_server(self, session, server):
return self.main.show_server(session, server)
+ def show_server_group(self, session, sgroup):
+ return self.main.show_server_group(session, sgroup)
+
def show_cluster(self, session, cluster):
return self.main.show_cluster(session, cluster)
@@ -91,6 +94,9 @@
self.server = ServerFrame(app, "server")
self.add_child(self.server)
+ self.sgroup = ServerGroupFrame(app, "sgroup")
+ self.add_child(self.sgroup)
+
self.cluster = ClusterFrame(app, "cluster")
self.add_child(self.cluster)
@@ -104,6 +110,10 @@
self.server.set_server(session, server)
return self.show_mode(session, self.server)
+ def show_server_group(self, session, sgroup):
+ self.sgroup.set_server_group(session, sgroup)
+ return self.show_mode(session, self.sgroup)
+
def show_cluster(self, session, cluster):
self.cluster.set_cluster(session, cluster)
return self.show_mode(session, self.cluster)
Modified: mgmt/cumin/python/cumin/page.strings
===================================================================
--- mgmt/cumin/python/cumin/page.strings 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/page.strings 2007-10-08 20:01:52 UTC (rev 971)
@@ -274,6 +274,33 @@
content: url(resource?name=radio-button-checked.png);
}
+.mstatus {
+ float: right;
+ margin: 1em;
+ padding: 0.75em 1em;
+ width: 15em;
+}
+
+.mstatus h2 {
+ font-weight: bold;
+ margin: 0 0 0.5em 0;
+}
+
+.mstatus.red {
+ border: 1px solid #c99;
+ background-color: #fcc;
+}
+
+.mstatus.yellow {
+ border: 1px solid #cc9;
+ background-color: #ffc;
+}
+
+.mstatus.green {
+ border: 1px solid #9c9;
+ background-color: #cfc;
+}
+
[CuminPage.html]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
Modified: mgmt/cumin/python/cumin/queue.py
===================================================================
--- mgmt/cumin/python/cumin/queue.py 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/queue.py 2007-10-08 20:01:52 UTC (rev 971)
@@ -32,7 +32,7 @@
return "Queues (%s)" % len(vhost.queue_items())
def get_items(self, session, vhost):
- return sorted(vhost.queue_items())
+ return sorted(vhost.queue_items(), cmp, lambda x: x.name)
def render_item_href(self, session, queue):
branch = session.branch()
@@ -200,7 +200,8 @@
return "Bindings (%i)" % len(queue.binding_items())
def get_items(self, session, queue):
- return sorted(queue.binding_items())
+ return sorted(queue.binding_items(), cmp,
+ lambda x: x.get_exchange().name)
def render_item_href(self, session, binding):
branch = session.branch()
@@ -393,7 +394,8 @@
class Exchanges(ExchangeInputSet):
def get_items(self, session, queue):
- return sorted(queue.virtual_host.exchange_items())
+ return sorted(queue.virtual_host.exchange_items(), cmp,
+ lambda x: x.name)
class QueueBindingRemove(CuminConfirmForm):
def on_confirm(self, session, binding):
Modified: mgmt/cumin/python/cumin/queue.strings
===================================================================
--- mgmt/cumin/python/cumin/queue.strings 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/queue.strings 2007-10-08 20:01:52 UTC (rev 971)
@@ -66,34 +66,6 @@
}())
</script>
-[QueueStatus.css]
-.QueueStatus {
- float: right;
- margin: 1em;
- padding: 0.75em 1em;
- width: 15em;
-}
-
-.QueueStatus h2 {
- font-weight: bold;
- margin: 0 0 0.5em 0;
-}
-
-.QueueStatus.red {
- border: 1px solid #c99;
- background-color: #fcc;
-}
-
-.QueueStatus.yellow {
- border: 1px solid #cc9;
- background-color: #ffc;
-}
-
-.QueueStatus.green {
- border: 1px solid #9c9;
- background-color: #cfc;
-}
-
[QueueStatus.html]
<script defer="defer">
(function() {
@@ -108,11 +80,11 @@
var warnings = wcount + " " + (wcount == "1" && "warning" || "warnings");
if (ecount != "0") {
- elem.node.className = "QueueStatus red";
+ elem.node.className = "QueueStatus mstatus red";
} else if (wcount != "0") {
- elem.node.className = "QueueStatus yellow";
+ elem.node.className = "QueueStatus mstatus yellow";
} else {
- elem.node.className = "QueueStatus green";
+ elem.node.className = "QueueStatus mstatus green";
}
var divs = elem.elems("div");
@@ -123,7 +95,7 @@
wooly.setIntervalUpdate("{id}", "{url}", updateStatus, 3000);
}())
</script>
-<div class="{class}" id="{id}">
+<div class="{class} mstatus" id="{id}">
<h2>Queue Status</h2>
<div>{message_info}</div>
Modified: mgmt/cumin/python/cumin/server.py
===================================================================
--- mgmt/cumin/python/cumin/server.py 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/server.py 2007-10-08 20:01:52 UTC (rev 971)
@@ -11,7 +11,7 @@
return "Servers (%i)" % len(model.get_servers())
def get_items(self, session, model):
- return sorted(model.get_servers())
+ return sorted(model.get_servers(), cmp, lambda x: x.name)
def render_item_href(self, session, server):
branch = session.branch()
@@ -98,20 +98,18 @@
def render_title(self, session, server):
return "Server '%s'" % server.name
+ def render_name(self, session, server):
+ return server.name
+
class ServerLog(Widget):
def render_title(self, session, server):
return "Log Messages"
-class ServerGroupTree(Widget):
- def __init__(self, app, name):
- super(ServerGroupTree, self).__init__(app, name)
-
- self.item_tmpl = Template(self, "item_html")
-
+class ServerGroupTree(ItemTree):
def render_title(self, session, model):
return "Server Groups (%i)" % len(model.get_server_groups())
- def get_root_items(self, session, model):
+ def get_items(self, session, model):
roots = list()
for group in model.get_server_groups():
@@ -123,24 +121,60 @@
def get_child_items(self, session, group):
return group.child_items()
- def render_root_items(self, session, model):
- roots = self.get_root_items(session, model)
+ def render_item_href(self, session, group):
+ branch = session.branch()
+ self.page().show_server_group(branch, group).show_view(branch)
+ return branch.marshal()
- if roots:
- writer = Writer()
+ def render_item_name(self, session, group):
+ return group.name
- for root in roots:
- self.item_tmpl.render(session, root, writer)
+class ServerGroupParameter(Parameter):
+ def do_unmarshal(self, string):
+ return self.app.model.get_server_group(int(string))
- return writer.to_string()
+ def do_marshal(self, group):
+ return str(group.id)
- def render_child_items(self, session, object):
- writer = Writer()
-
- for child in self.get_child_items(session, object):
- self.item_tmpl.render(session, child, writer)
+class ServerGroupFrame(CuminFrame):
+ def __init__(self, app, name):
+ super(ServerGroupFrame, self).__init__(app, name)
- return writer.to_string()
+ self.param = ServerGroupParameter(app, "id")
+ self.add_parameter(self.param)
+ self.set_object_attribute(self.param)
- def render_item_name(self, session, group):
- return group.name
+ self.view = ServerGroupView(app, "view")
+ self.add_child(self.view)
+
+ def set_server_group(self, session, group):
+ self.param.set(session, group)
+
+ def show_view(self, session):
+ self.show_mode(session, self.view)
+
+ def render_title(self, session, group):
+ return "Server Group '%s'" % group.name
+
+class ServerGroupView(Widget):
+ def __init__(self, app, name):
+ super(ServerGroupView, self).__init__(app, name)
+
+ self.tabs = TabSet(app, "tabs")
+ self.add_child(self.tabs)
+
+ self.tabs.add_child(self.Servers(app, "servers"))
+
+ def render_title(self, session, group):
+ return "Server Group '%s'" % group.name
+
+ def render_parent_groups(self, session, group):
+ return ", ".join([i.name for i in group.parent_items()]) \
+ or "<em>None</em>"
+
+ class Servers(ServerSet):
+ def get_items(self, session, group):
+ return sorted(group.server_items(), cmp, lambda x: x.name)
+
+ def render_title(self, session, group):
+ return "Servers (%i)" % len(group.server_items())
Modified: mgmt/cumin/python/cumin/server.strings
===================================================================
--- mgmt/cumin/python/cumin/server.strings 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/server.strings 2007-10-08 20:01:52 UTC (rev 971)
@@ -17,8 +17,18 @@
[ServerView.html]
<div class="oblock">
+ <div class="mstatus green" id="{id}">
+ <h2>Server Status</h2>
+
+ <div>0 errors, 0 warnings</div>
+ </div>
+
<h1>{title}</h1>
+ <dl class="properties">
+ <dt>Name</dt><dd>{name}</dd>
+ </dl>
+
<ul class="actions">
<li><a href="">Shutdown</a></li>
</ul>
@@ -37,8 +47,24 @@
}
[ServerGroupTree.html]
-<ul class="ServerGroupTree">{root_items}</ul>
+<ul class="ServerGroupTree">{items}</ul>
[ServerGroupTree.item_html]
-<li><a href="">{item_name}</a></li>
+<li><a href="{item_href}">{item_name}</a></li>
<ul>{child_items}</ul>
+
+[ServerGroupView.html]
+<div class="oblock">
+ <h1>{title}</h1>
+
+ <dl class="properties">
+ <dt>Parent Groups</dt><dd>{parent_groups}</dd>
+ </dl>
+
+ <ul class="actions">
+ <li><a href="">Add Server</a></li>
+ <li><a href="">Shutdown All Servers in Group</a></li>
+ </ul>
+
+ {tabs}
+</div>
Modified: mgmt/cumin/python/cumin/virtualhost.py
===================================================================
--- mgmt/cumin/python/cumin/virtualhost.py 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/cumin/virtualhost.py 2007-10-08 20:01:52 UTC (rev 971)
@@ -13,7 +13,7 @@
return "Virtual Hosts (%i)" % len(server.virtual_host_items())
def get_items(self, session, server):
- return sorted(server.virtual_host_items())
+ return sorted(server.virtual_host_items(), cmp, lambda x: x.name)
def render_item_href(self, session, vhost):
branch = session.branch()
Property changes on: mgmt/cumin/python/wooly
___________________________________________________________________
Name: svn:ignore
+ *.pyc
Modified: mgmt/cumin/python/wooly/server.py
===================================================================
--- mgmt/cumin/python/wooly/server.py 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/wooly/server.py 2007-10-08 20:01:52 UTC (rev 971)
@@ -19,8 +19,12 @@
server.app = self.app
print "Cumin server started on port %s" % (self.port)
- server.serve_forever()
+ try:
+ server.serve_forever()
+ except KeyboardInterrupt:
+ pass
+
class RequestHandler(BaseHTTPRequestHandler):
http_date = "%a, %d %b %Y %H:%M:%S %Z"
Modified: mgmt/cumin/python/wooly/widgets.py
===================================================================
--- mgmt/cumin/python/wooly/widgets.py 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/wooly/widgets.py 2007-10-08 20:01:52 UTC (rev 971)
@@ -145,3 +145,19 @@
def render_item_content(self, session, item):
return None
+
+class ItemTree(ItemSet):
+ def get_items(self, session, object):
+ """Get the root items"""
+ pass
+
+ def get_child_items(self, session, object):
+ pass
+
+ def render_child_items(self, session, object):
+ writer = Writer()
+
+ for child in self.get_child_items(session, object):
+ self.item_tmpl.render(session, child, writer)
+
+ return writer.to_string()
Modified: mgmt/cumin/python/wooly/widgets.strings
===================================================================
--- mgmt/cumin/python/wooly/widgets.strings 2007-10-08 19:45:47 UTC (rev 970)
+++ mgmt/cumin/python/wooly/widgets.strings 2007-10-08 20:01:52 UTC (rev 971)
@@ -58,3 +58,10 @@
[ItemSet.item_html]
<li>{item_content}</li>
+
+[ItemTree.html]
+<ul class="ItemTree">{items}</ul>
+
+[ItemTree.item_html]
+<li>{item_content}</li>
+<ul>{child_items}</ul>
17 years, 2 months
rhmessaging commits: r970 - mgmt/etc.
by rhmessaging-commits@lists.jboss.org
Author: justi9
Date: 2007-10-08 15:45:47 -0400 (Mon, 08 Oct 2007)
New Revision: 970
Modified:
mgmt/etc/
Log:
Make subversion ignore the tags file
Property changes on: mgmt/etc
___________________________________________________________________
Name: svn:ignore
+ cumindev.tags
17 years, 2 months
rhmessaging commits: r969 - mgmt/notes.
by rhmessaging-commits@lists.jboss.org
Author: justi9
Date: 2007-10-08 15:40:56 -0400 (Mon, 08 Oct 2007)
New Revision: 969
Added:
mgmt/notes/cumin-ui-inventory.txt
Log:
Add UI inventory doc
Added: mgmt/notes/cumin-ui-inventory.txt
===================================================================
--- mgmt/notes/cumin-ui-inventory.txt (rev 0)
+++ mgmt/notes/cumin-ui-inventory.txt 2007-10-08 19:40:56 UTC (rev 969)
@@ -0,0 +1,69 @@
+This all uses spec language, so:
+
+ virtual host = fhost
+ server = broker
+
+ * Top
+
+ - Tabs: servers, clusters, virtual hosts (though I have a question
+ about this)
+
+ - Server tab: two views, individual servers and groups
+
+ * Server
+
+ - Properties: name, cluster
+
+ - Actions: shutdown
+
+ - Tabs: virtual hosts, server groups, config
+
+ * Server group
+
+ - Properties: name, containing groups
+
+ - Actions: (all actions from server), add and remove server, apply
+ template
+
+ - Tabs: servers, subgroups
+
+ * Cluster
+
+ - Properties: name
+
+ - Tabs: servers
+
+ * Virtual host
+
+ - Properties: name, virtual host groups
+
+ - Actions: add queue, add exchange
+
+ - Tabs: queues, exchanges
+
+ * Virtual host group
+
+ - Properties: name, containing groups
+
+ - Actions: (all actions from virtual host), add and remove virtual
+ host, apply template
+
+ - Tabs: virtual hosts, subgroups
+
+ * Queue
+
+ - Properties: name
+
+ - Actions: remove self, add binding, edit properties
+
+ - Status: queue depth, errors and warnings
+
+ - Tabs: bindings
+
+ * Exchange
+
+ - Properties: name
+
+ - Actions: remove self, add binding, edit properties
+
+ - Tabs: bindings
17 years, 2 months