[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] Added a stress test for the Xenstore-Python interface layer.



# HG changeset patch
# User emellor@xxxxxxxxxxxxxxxxxxxxxx
# Node ID f85f52b508c365da0255870ff7325980dd8f78fe
# Parent  62d9ac63e7f509328815443d8604f849b64d0c9d
Added a stress test for the Xenstore-Python interface layer.

Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx>

diff -r 62d9ac63e7f5 -r f85f52b508c3 tools/python/setup.py
--- a/tools/python/setup.py     Tue Dec 13 18:08:26 2005
+++ b/tools/python/setup.py     Wed Dec 14 11:54:39 2005
@@ -46,6 +46,7 @@
 
                          'xen.xend.tests',
                          'xen.xend.server.tests',
+                         'xen.xend.xenstore.tests',
                          'xen.xm.tests'
                          ],
       ext_package = "xen.lowlevel",
diff -r 62d9ac63e7f5 -r f85f52b508c3 
tools/python/xen/xend/xenstore/tests/__init__.py
--- /dev/null   Tue Dec 13 18:08:26 2005
+++ b/tools/python/xen/xend/xenstore/tests/__init__.py  Wed Dec 14 11:54:39 2005
@@ -0,0 +1,2 @@
+
+
diff -r 62d9ac63e7f5 -r f85f52b508c3 
tools/python/xen/xend/xenstore/tests/stress_xs.py
--- /dev/null   Tue Dec 13 18:08:26 2005
+++ b/tools/python/xen/xend/xenstore/tests/stress_xs.py Wed Dec 14 11:54:39 2005
@@ -0,0 +1,121 @@
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of version 2.1 of the GNU Lesser General Public
+# License as published by the Free Software Foundation.
+#
+# 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+#
+# Copyright (c) 2005 XenSource Ltd
+
+
+import random
+import sys
+import threading
+import time
+
+import xen.lowlevel.xs
+
+from xen.xend.xenstore import xsutil
+from xen.xend.xenstore.xstransact import xstransact
+from xen.xend.xenstore.xswatch import xswatch
+
+
+PATH = '/tool/stress_xs'
+
+
+def stress():
+    xstransact.Remove(PATH)
+    xstransact.Mkdir(PATH)
+
+    xswatch(PATH, watch_callback)
+
+    def do(f):
+        t = threading.Thread(target=stress_write)
+        t.setDaemon(True)
+        t.start()
+
+    do(stress_write)
+    do(stress_get_domain_path)
+    do(stress_get_domain_path_xsutil)
+    do(stress_open_close)
+
+    while True:
+        # Wait for Ctrl-C.
+        time.sleep(100000000)
+
+
+def stress_write():
+    xstransact.Write(PATH, 'key', '1')
+    while True:
+        val = xstransact.Gather(PATH, ('key', int))
+        xstransact.Store(PATH, ('key', val + 1))
+
+        random_sleep()
+
+
+def stress_get_domain_path():
+    xs_handle = xen.lowlevel.xs.xs()
+
+    domid = 0
+    while True:
+        xs_handle.get_domain_path(domid)
+        domid += 1
+
+        random_sleep()
+
+
+def stress_get_domain_path_xsutil():
+    domid = 0
+    while True:
+        xsutil.GetDomainPath(domid)
+        domid += 1
+
+        random_sleep()
+
+
+def stress_open_close():
+    while True:
+        xs_handle = xen.lowlevel.xs.xs()
+
+        try:
+            try:
+                trans = xs_handle.transaction_start()
+                val = int(xs_handle.read(trans, PATH + '/key'))
+                xs_handle.write(trans, PATH + '/key', str(val + 1))
+                xs_handle.transaction_end(trans, False)
+            except:
+                xs_handle.transaction_end(trans, True)
+
+            random_sleep()
+        finally:
+            del xs_handle
+
+
+def watch_callback(path):
+    random_sleep()
+    return True
+
+
+def random_sleep():
+    d = random.randint(-50000, 500)
+    if d > 0:
+        time.sleep(d / 1000.0)
+
+
+def main(argv = None):
+    if argv is None:
+        argv = sys.argv
+
+    stress()
+
+    return 0
+
+
+if __name__ == "__main__":
+    sys.exit(main())

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.