ChangeSet 1.1713.1.27, 2005/06/17 19:18:44+01:00, cl349@xxxxxxxxxxxxxxxxxxxx
xsnode.py:
Updated watches/event code from Mike Wray.
Signed-off-by: Mike Wray <mike.wray@xxxxxx>
Signed-off-by: Christian Limpach <Christian.Limpach@xxxxxxxxxxxx>
xsnode.py | 72 +++++++++++++++++++++++++++++++++++++++++---------------------
1 files changed, 48 insertions(+), 24 deletions(-)
diff -Nru a/tools/python/xen/xend/xenstore/xsnode.py
b/tools/python/xen/xend/xenstore/xsnode.py
--- a/tools/python/xen/xend/xenstore/xsnode.py 2005-06-17 21:04:06 -04:00
+++ b/tools/python/xen/xend/xenstore/xsnode.py 2005-06-17 21:04:06 -04:00
@@ -46,12 +46,12 @@
watcher.delSubs(self)
return watcher
- def notify(self, path, val):
+ def notify(self, token, path, val):
try:
- self.fn(self, path, val)
- except SystemExitException:
+ self.fn(self, token, path, val)
+ except SystemExit:
raise
- except:
+ except Exception, ex:
pass
class Watcher:
@@ -71,6 +71,9 @@
def getPath(self):
return self.path
+ def getToken(self):
+ return self.path
+
def addSubs(self, subs):
self.subscriptions.append(subs)
self.watch()
@@ -83,14 +86,15 @@
def watch(self):
if self.xs: return
self.xs = xs.open()
- self.xs.watch(self.path)
+ self.xs.watch(path=self.getPath(), token=self.getToken())
def unwatch(self):
if self.xs:
- try:
- self.xs.unwatch(self.path)
- except Exception, ex:
- print 'Watcher>unwatch>', ex
+## Possibly crashes xenstored.
+## try:
+## self.xs.unwatch(path=self.getPath(), token=self.getToken())
+## except Exception, ex:
+## print 'Watcher>unwatch>', ex
try:
self.xs.close()
except Exception, ex:
@@ -102,17 +106,22 @@
def getNotification(self):
p = self.xs.read_watch()
- self.xs.acknowledge_watch()
+ self.xs.acknowledge_watch(p[1])
return p
def notify(self):
try:
- p = self.getNotification()
- v = self.xs.read(p)
- for s in subscriptions:
- s.notify(p, v)
+ (path, token) = self.getNotification()
+ if path.endswith("@eid"):
+ pass
+ else:
+ val = self.xs.read(path)
+ for subs in self.subscriptions:
+ subs.notify(token, path, val)
+ except SystemExit:
+ raise
except Exception, ex:
- print 'Notify exception:', ex
+ raise
class EventWatcher(Watcher):
@@ -126,6 +135,9 @@
def getEvent(self):
return self.event
+ def getToken(self):
+ return self.event
+
class XenStore:
xs = None
@@ -145,8 +157,10 @@
self.xs = xs.open()
ex = None
break
+ except SystemExit:
+ raise
except Exception, ex:
- print >>sys.stderr, "Exception connecting to xsdaemon:", ex
+ print >>sys.stderr, "Exception connecting to xenstored:",
ex
print >>sys.stderr, "Trying again..."
time.sleep(1)
else:
@@ -241,7 +255,10 @@
def write(self, path, data, create=True, excl=False):
self.mkdirs(path)
- self.getxs().write(path, data, create=create, excl=excl)
+ try:
+ self.getxs().write(path, data, create=create, excl=excl)
+ except Exception, ex:
+ raise
def begin(self, path):
self.getxs().transaction_start(path)
@@ -261,7 +278,10 @@
del self.subscriptions[s.sid]
watcher = s.unwatch()
if watcher and not watcher.watching():
- del self.watchers[path]
+ try:
+ del self.watchers[watcher.getPath()]
+ except:
+ pass
def subscribe(self, event, fn):
path = getEventPath(event)
@@ -280,13 +300,10 @@
self.mkdirs(eventPath)
eid = 1
if self.exists(eidPath):
- data = self.read(eidPath)
- print 'sendEvent>', 'data=', data, type(data)
try:
eid = int(self.read(eidPath))
eid += 1
except Exception, ex:
- print 'sendEvent>', ex
pass
self.write(eidPath, str(eid))
self.write(os.path.join(eventPath, str(eid)), data)
@@ -346,6 +363,15 @@
xenstore = XenStore()
return xenstore
+def sendEvent(event, val):
+ getXenStore.sendEvent(event, val)
+
+def subscribe(event, fn):
+ return getXenStore().subscribe(event, fn)
+
+def unsubscribe(sid):
+ getXenStore().unsubscribe(sid)
+
class XenNode:
def __init__(self, path="/", create=True):
@@ -389,9 +415,7 @@
return None
def setData(self, data, path=""):
- path = self.relPath(path)
- #print 'XenNode>setData>', 'path=', path, 'data=', data
- return self.store.write(path, data)
+ return self.store.write(self.relPath(path), data)
def getLock(self):
return None
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|