# HG changeset patch
# User emellor@xxxxxxxxxxxxxxxxxxxxxx
# Node ID f23db20517850e84fbc40fe3c09211d9f5defa39
# Parent 1caed7031f6bd896b26eedcc337f519bf3d2787c
Don't log every time around the big transaction writing the device details.
This transaction may be starved for a short while, and logging inside the while
loop won't help!
Use new xstransact.complete to tidy up one other transaction.
Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx>
diff -r 1caed7031f6b -r f23db2051785
tools/python/xen/xend/server/DevController.py
--- a/tools/python/xen/xend/server/DevController.py Fri Dec 2 15:33:38 2005
+++ b/tools/python/xen/xend/server/DevController.py Fri Dec 2 15:35:22 2005
@@ -22,7 +22,7 @@
from xen.xend.XendError import VmError
from xen.xend.XendLogging import log
-from xen.xend.xenstore.xstransact import xstransact
+from xen.xend.xenstore.xstransact import xstransact, complete
from xen.xend.xenstore.xswatch import xswatch
DEVICE_CREATE_TIMEOUT = 10
@@ -85,6 +85,8 @@
(backpath, frontpath) = self.addStoreEntries(config, devid, back,
front)
+ import xen.xend.XendDomain
+ count = 0
while True:
t = xstransact()
try:
@@ -97,16 +99,19 @@
raise VmError("Device %s is already connected." % dev_str)
- log.debug('DevController: writing %s to %s.', str(front),
- frontpath)
- log.debug('DevController: writing %s to %s.', str(back),
- backpath)
+ if count == 0:
+ log.debug('DevController: writing %s to %s.', str(front),
+ frontpath)
+ log.debug('DevController: writing %s to %s.', str(back),
+ backpath)
+ elif count % 50 == 0:
+ log.debug(
+ 'DevController: still waiting to write device entries.')
t.remove(frontpath)
t.remove(backpath)
t.mkdir(backpath)
- import xen.xend.XendDomain
t.set_permissions(backpath,
{'dom': xen.xend.XendDomain.PRIV_DOMAIN },
{'dom' : self.vm.getDomid(),
@@ -117,6 +122,8 @@
if t.commit():
return devid
+
+ count += 1
except:
t.abort()
raise
@@ -273,20 +280,17 @@
the device configuration instead.
"""
path = self.frontendMiscPath()
- while True:
- t = xstransact(path)
- try:
- result = t.read("nextDeviceID")
- if result:
- result = int(result)
- else:
- result = 0
- t.write("nextDeviceID", str(result + 1))
- if t.commit():
- return result
- except:
- t.abort()
- raise
+ return complete(path, self._allocateDeviceID)
+
+
+ def _allocateDeviceID(self, t):
+ result = t.read("nextDeviceID")
+ if result:
+ result = int(result)
+ else:
+ result = 0
+ t.write("nextDeviceID", str(result + 1))
+ return result
def readBackend(self, devid, *args):
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|