[CalendarServer-changes] [4367] CalendarServer/trunk

source_changes at macosforge.org source_changes at macosforge.org
Mon Jun 22 17:54:36 PDT 2009


Revision: 4367
          http://trac.macosforge.org/projects/calendarserver/changeset/4367
Author:   sagen at apple.com
Date:     2009-06-22 17:54:36 -0700 (Mon, 22 Jun 2009)
Log Message:
-----------
Wait for directory service to become fully available before proceeding.

Modified Paths:
--------------
    CalendarServer/trunk/calendarserver/tap/caldav.py
    CalendarServer/trunk/calendarserver/tools/util.py
    CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py
    CalendarServer/trunk/twistedcaldav/directory/directory.py

Modified: CalendarServer/trunk/calendarserver/tap/caldav.py
===================================================================
--- CalendarServer/trunk/calendarserver/tap/caldav.py	2009-06-22 22:41:49 UTC (rev 4366)
+++ CalendarServer/trunk/calendarserver/tap/caldav.py	2009-06-23 00:54:36 UTC (rev 4367)
@@ -24,6 +24,7 @@
 import socket
 import stat
 import sys
+from time import sleep
 
 from tempfile import mkstemp
 from subprocess import Popen, PIPE
@@ -432,6 +433,10 @@
 
         baseDirectory = directoryClass(config.DirectoryService.params)
 
+        # Wait for the directory to become available
+        while not baseDirectory.isAvailable():
+            sleep(5)
+
         directories.append(baseDirectory)
 
         sudoDirectory = None

Modified: CalendarServer/trunk/calendarserver/tools/util.py
===================================================================
--- CalendarServer/trunk/calendarserver/tools/util.py	2009-06-22 22:41:49 UTC (rev 4366)
+++ CalendarServer/trunk/calendarserver/tools/util.py	2009-06-23 00:54:36 UTC (rev 4367)
@@ -24,6 +24,7 @@
 
 import sys
 import os
+from time import sleep
 
 from twisted.python.reflect import namedClass
 
@@ -87,8 +88,13 @@
             return self.principalCollection.principalForCalendarUserAddress(cua)
 
 
-    return MyDirectoryService(config.DirectoryService.params)
+    # Wait for directory service to become available
+    directory = MyDirectoryService(config.DirectoryService.params)
+    while not directory.isAvailable():
+        sleep(5)
 
+    return directory
+
 class DummyDirectoryService (DirectoryService):
     realmName = ""
     baseGUID = "51856FD4-5023-4890-94FE-4356C4AAC3E4"

Modified: CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py	2009-06-22 22:41:49 UTC (rev 4366)
+++ CalendarServer/trunk/twistedcaldav/directory/appleopendirectory.py	2009-06-23 00:54:36 UTC (rev 4367)
@@ -772,6 +772,27 @@
                     yield recordGUID, autoSchedule, proxy, readOnlyProxy
 
 
+    def isAvailable(self):
+        """
+        Returns True if all configured directory nodes are accessible, False otherwise
+        """
+
+        if self.node == "/Search":
+            nodes = opendirectory.listNodes(self.directory)
+        else:
+            nodes = [self.node]
+
+        try:
+            for node in nodes:
+                opendirectory.getNodeAttributes(self.directory, node, [dsattributes.kDSNAttrNodePath])
+        except opendirectory.ODError:
+            self.log_warn("Open Directory Node %s not available" % (node,))
+            return False
+
+        return True
+
+
+
 def buildQueries(recordTypes, fields, mapping):
     """
     Determine how many queries need to be performed in order to work around opendirectory

Modified: CalendarServer/trunk/twistedcaldav/directory/directory.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/directory/directory.py	2009-06-22 22:41:49 UTC (rev 4366)
+++ CalendarServer/trunk/twistedcaldav/directory/directory.py	2009-06-23 00:54:36 UTC (rev 4367)
@@ -250,6 +250,8 @@
     def getResourceInfo(self):
         return ()
 
+    def isAvailable(self):
+        return True
 
     def getParams(self, params, defaults, ignore=None):
         """ Checks configuration parameters for unexpected/ignored keys, and
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20090622/4caf4df8/attachment.html>


More information about the calendarserver-changes mailing list