Mailing List Archive

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

Signed-off-by: Ewan Mellor <ewan@xensource.com>

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@lists.xensource.com
http://lists.xensource.com/xen-changelog