[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