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@xensource.com>
This commit is contained in:
emellor@leeni.uk.xensource.com committed 2005-12-02 15:35:22 +00:00
1 parent 73f56f3e9b
commit 6d3895e243
1 file changed
+24 -20
+24 -20
View File
@@ -22,7 +22,7 @@ from xen.xend import sxp
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 @@ class DevController:
(backpath, frontpath) = self.addStoreEntries(config, devid, back,
front)
import xen.xend.XendDomain
count = 0
while True:
t = xstransact()
try:
@@ -97,16 +99,19 @@ class DevController:
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 @@ class DevController:
if t.commit():
return devid
count += 1
except:
t.abort()
raise
@@ -273,20 +280,17 @@ class DevController:
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):
Reference in new issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.