[CalendarServer-changes] [7196] CalendarServer/trunk

source_changes at macosforge.org source_changes at macosforge.org
Wed Mar 16 12:13:48 PDT 2011


Revision: 7196
          http://trac.macosforge.org/projects/calendarserver/changeset/7196
Author:   sagen at apple.com
Date:     2011-03-16 12:13:45 -0700 (Wed, 16 Mar 2011)
Log Message:
-----------
Ensure filesystem-restructuring upgrade work is done prior to the DB migration

Modified Paths:
--------------
    CalendarServer/trunk/calendarserver/tap/caldav.py
    CalendarServer/trunk/twistedcaldav/upgrade.py

Modified: CalendarServer/trunk/calendarserver/tap/caldav.py
===================================================================
--- CalendarServer/trunk/calendarserver/tap/caldav.py	2011-03-16 17:28:03 UTC (rev 7195)
+++ CalendarServer/trunk/calendarserver/tap/caldav.py	2011-03-16 19:13:45 UTC (rev 7196)
@@ -69,7 +69,7 @@
 from twistedcaldav.mail import IMIPReplyInboxResource
 from twistedcaldav import memcachepool
 from twistedcaldav.stdconfig import DEFAULT_CONFIG, DEFAULT_CONFIG_FILE
-from twistedcaldav.upgrade import upgradeData
+from twistedcaldav.upgrade import UpgradeFileSystemFormatService
 
 from calendarserver.tap.util import pgServiceFromConfig
 
@@ -860,23 +860,11 @@
         return config.BindAddresses
 
 
-    def scheduleOnDiskUpgrade(self):
-        """
-        Schedule any on disk upgrades we might need.  Note that this will only
-        do the filesystem-format upgrades; migration to the database needs to
-        be done when the connection and possibly server is already up and
-        running.
-        """
-        addSystemEventTrigger("before", "startup", upgradeData, config)
-
-
     def makeService_Single(self, options):
         """
         Create a service to be used in a single-process, stand-alone
         configuration.
         """
-        self.scheduleOnDiskUpgrade()
-
         def slaveSvcCreator(pool, store):
             return self.requestProcessingService(options, store)
         return self.storageService(slaveSvcCreator)
@@ -973,11 +961,13 @@
             cp.setServiceParent(ms)
             store = storeFromConfig(config, cp.connection)
             mainService = createMainService(cp, store)
-            maybeUpgradeSvc = UpgradeToDatabaseService.wrapService(
-                CachingFilePath(config.DocumentRoot), mainService,
-                store, uid=uid, gid=gid
+            upgradeSvc = UpgradeFileSystemFormatService(config,
+                UpgradeToDatabaseService.wrapService(
+                    CachingFilePath(config.DocumentRoot), mainService,
+                    store, uid=uid, gid=gid
+                )
             )
-            maybeUpgradeSvc.setServiceParent(ms)
+            upgradeSvc.setServiceParent(ms)
             return ms
         return subServiceFactory
 
@@ -989,8 +979,6 @@
         """
         s = ErrorLoggingMultiService()
 
-        self.scheduleOnDiskUpgrade()
-
         # Make sure no old socket files are lying around.
         self.deleteStaleSocketFiles()
 

Modified: CalendarServer/trunk/twistedcaldav/upgrade.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/upgrade.py	2011-03-16 17:28:03 UTC (rev 7195)
+++ CalendarServer/trunk/twistedcaldav/upgrade.py	2011-03-16 19:13:45 UTC (rev 7196)
@@ -23,7 +23,6 @@
 
 from twext.web2.dav.fileop import rmdir
 from twext.web2.dav import davxml
-
 from twext.python.log import Logger
 
 from twistedcaldav.directory.appleopendirectory import OpenDirectoryService
@@ -35,7 +34,9 @@
 from twistedcaldav.ical import Component
 from twistedcaldav import caldavxml
 
-from twisted.internet.defer import inlineCallbacks, succeed
+from twisted.application.service import Service
+from twisted.internet import reactor
+from twisted.internet.defer import inlineCallbacks, succeed, returnValue
 
 from calendarserver.tools.util import getDirectory
 from calendarserver.tools.resources import migrateResources
@@ -558,11 +559,11 @@
         if onDiskVersion < version:
             log.warn("Upgrading to version %d" % (version,))
             (yield method(config))
+            log.warn("Upgraded to version %d" % (version,))
             with open(versionFilePath, "w") as verFile:
                 verFile.write(str(version))
             os.chown(versionFilePath, uid, gid)
 
-
 class UpgradeError(RuntimeError):
     """
     Generic upgrade error.
@@ -674,3 +675,41 @@
         # Can't rename, must copy/delete
         shutil.copy2(srcPath, destPath)
         os.remove(srcPath)
+
+
+
+class UpgradeFileSystemFormatService(Service, object):
+    """
+    Upgrade filesystem from previous versions.
+    """
+
+    def __init__(self, config, service):
+        """
+        Initialize the service.
+        """
+        self.wrappedService = service
+        self.config = config
+
+
+    @inlineCallbacks
+    def doUpgrade(self):
+        """
+        Do the upgrade.  Called by C{startService}, but a different method
+        because C{startService} should return C{None}, not a L{Deferred}.
+
+        @return: a Deferred which fires when the upgrade is complete.
+        """
+        yield upgradeData(self.config)
+
+        # see http://twistedmatrix.com/trac/ticket/4649
+        reactor.callLater(0, self.wrappedService.setServiceParent, self.parent)
+
+
+    def startService(self):
+        """
+        Start the service.
+        """
+        self.doUpgrade()
+
+
+
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110316/2330ef96/attachment-0001.html>


More information about the calendarserver-changes mailing list