[CalendarServer-changes] [2953] CalendarServer/branches/users/sagen/create-nodes-2950/twistedcaldav/ notify.py

source_changes at macosforge.org source_changes at macosforge.org
Tue Sep 9 09:53:15 PDT 2008


Revision: 2953
          http://trac.macosforge.org/projects/calendarserver/changeset/2953
Author:   sagen at apple.com
Date:     2008-09-09 09:53:15 -0700 (Tue, 09 Sep 2008)
Log Message:
-----------
Clean up of waitForNode

Modified Paths:
--------------
    CalendarServer/branches/users/sagen/create-nodes-2950/twistedcaldav/notify.py

Modified: CalendarServer/branches/users/sagen/create-nodes-2950/twistedcaldav/notify.py
===================================================================
--- CalendarServer/branches/users/sagen/create-nodes-2950/twistedcaldav/notify.py	2008-09-09 15:42:42 UTC (rev 2952)
+++ CalendarServer/branches/users/sagen/create-nodes-2950/twistedcaldav/notify.py	2008-09-09 16:53:15 UTC (rev 2953)
@@ -37,7 +37,7 @@
 
 from twisted.internet import protocol, defer
 from twisted.internet.address import IPv4Address
-from twisted.internet.defer import inlineCallbacks, returnValue
+from twisted.internet.defer import inlineCallbacks, returnValue, Deferred
 from twisted.protocols import basic
 from twisted.plugin import IPlugin
 from twisted.application import internet, service
@@ -234,6 +234,8 @@
 
 
 
+class NodeCreationException(Exception):
+    pass
 
 class NodeCacher(Memcacher, LoggingMixIn):
 
@@ -243,64 +245,39 @@
         self.reactor = reactor
         super(NodeCacher, self).__init__("pubsubnodes")
 
-    @inlineCallbacks
     def nodeExists(self, nodeName):
-        result = (yield self.get(nodeName))
-        self.log_debug("nodeExists result = %s" % (result,))
-        returnValue(result is not None)
+        return self.get(nodeName)
 
-    @inlineCallbacks
     def storeNode(self, nodeName):
-        return
-        self.log_debug("Storing node %s" % (nodeName,))
-        try:
-            yield self.set(nodeName, "1")
-        except Exception, e:
-            import pdb; pdb.set_trace()
-            self.log_error(e)
-            raise
+        return self.set(nodeName, "1")
 
     @inlineCallbacks
     def waitForNode(self, notifier, nodeName):
-        self.log_debug("in waitForNode %s" % (nodeName,))
-        doesExist = (yield self.nodeExists(nodeName))
-        self.log_debug("doesExist = %s" % (doesExist,))
-        if doesExist:
-            self.log_debug("waitForNode returning True")
-            returnValue(True)
-        else:
-            self.log_debug("waitForNode calling notify()")
-            notifier.notify(op="create")
-            self.log_debug("waitForNode called notify()")
-            (yield self._waitForNode(None, nodeName))
+        retryCount = 0
+        verified = False
+        requestedCreation = False
+        while(retryCount < 5):
+            if (yield self.nodeExists(nodeName)):
+                verified = True
+                break
 
-    def _waitForNode(self, result, nodeName, retries=5, deferred=None):
-        self.log_debug("waiting for node %s, retries %d" % (nodeName, retries))
+            if not requestedCreation:
+                notifier.notify(op="create")
+                requestedCreation = True
 
-        if deferred == None:
-            deferred = defer.Deferred()
+            retryCount += 1
 
-        def _exists(result, nodeName, retries, deferred):
-            if result is True:
-                self.log_debug("node exists %s" % (nodeName,))
-                deferred.callback(True)
-                return
-            else:
-                retries -= 1
-                if retries == 0:
-                    self.log_debug("giving up on node %s" % (nodeName,))
-                    deferred.errback()
-                    return
-                self.log_debug("scheduling a retry of node %s" % (nodeName,))
-                self.reactor.callLater(2, self._waitForNode, result, nodeName,
-                    retries=retries, deferred=deferred)
+            pause = Deferred()
+            def _timedDeferred():
+                pause.callback(True)
+            self.reactor.callLater(1, _timedDeferred)
+            yield pause
 
-        self.nodeExists(nodeName).addCallback(_exists, nodeName, retries,
-            deferred)
-        return deferred
+        if not verified:
+            self.log_debug("Giving up!")
+            raise NodeCreationException("Could not create node %s" % (nodeName,))
 
 
-
 _nodeCacher = None
 
 def getNodeCacher():
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20080909/0dca018d/attachment.html 


More information about the calendarserver-changes mailing list