[CalendarServer-changes] [11841] CalendarServer/trunk/txdav/common/datastore/upgrade/sql/upgrades

source_changes at macosforge.org source_changes at macosforge.org
Wed Mar 12 11:20:57 PDT 2014


Revision: 11841
          http://trac.calendarserver.org//changeset/11841
Author:   cdaboo at apple.com
Date:     2013-10-28 17:53:43 -0700 (Mon, 28 Oct 2013)
Log Message:
-----------
Fix issue with upgrade when default calendar URL points to wrong calendar type.

Modified Paths:
--------------
    CalendarServer/trunk/txdav/common/datastore/upgrade/sql/upgrades/calendar_upgrade_from_3_to_4.py
    CalendarServer/trunk/txdav/common/datastore/upgrade/sql/upgrades/test/test_upgrade_from_3_to_4.py

Modified: CalendarServer/trunk/txdav/common/datastore/upgrade/sql/upgrades/calendar_upgrade_from_3_to_4.py
===================================================================
--- CalendarServer/trunk/txdav/common/datastore/upgrade/sql/upgrades/calendar_upgrade_from_3_to_4.py	2013-10-29 00:05:11 UTC (rev 11840)
+++ CalendarServer/trunk/txdav/common/datastore/upgrade/sql/upgrades/calendar_upgrade_from_3_to_4.py	2013-10-29 00:53:43 UTC (rev 11841)
@@ -22,6 +22,7 @@
 from twistedcaldav import caldavxml, customxml
 
 from txdav.base.propertystore.base import PropertyName
+from txdav.caldav.icalendarstore import InvalidDefaultCalendar
 from txdav.common.datastore.sql_tables import schema, _BIND_MODE_OWN
 from txdav.common.datastore.upgrade.sql.upgrades.util import rowsForProperty, updateCalendarDataVersion, \
     updateAllCalendarHomeDataVersions, removeProperty, cleanPropertyStore
@@ -109,9 +110,13 @@
 
                                 calendar = (yield calendarHome.calendarWithName(calendarName))
                                 if calendar is not None:
-                                    yield calendarHome.setDefaultCalendar(
-                                        calendar, tasks=(propname == customxml.ScheduleDefaultTasksURL)
-                                    )
+                                    try:
+                                        yield calendarHome.setDefaultCalendar(
+                                            calendar, tasks=(propname == customxml.ScheduleDefaultTasksURL)
+                                        )
+                                    except InvalidDefaultCalendar:
+                                        # Ignore these - the server will recover
+                                        pass
 
             # Always delete the rows so that batch processing works correctly
             yield Delete(

Modified: CalendarServer/trunk/txdav/common/datastore/upgrade/sql/upgrades/test/test_upgrade_from_3_to_4.py
===================================================================
--- CalendarServer/trunk/txdav/common/datastore/upgrade/sql/upgrades/test/test_upgrade_from_3_to_4.py	2013-10-29 00:05:11 UTC (rev 11840)
+++ CalendarServer/trunk/txdav/common/datastore/upgrade/sql/upgrades/test/test_upgrade_from_3_to_4.py	2013-10-29 00:53:43 UTC (rev 11841)
@@ -74,6 +74,47 @@
 
 
     @inlineCallbacks
+    def test_invalidDefaultCalendarUpgrade(self):
+
+        # Set dead property on inbox
+        for user in ("user01", "user02",):
+            inbox = (yield self.calendarUnderTest(name="inbox", home=user))
+            inbox.properties()[PropertyName.fromElement(ScheduleDefaultCalendarURL)] = ScheduleDefaultCalendarURL(HRef.fromString("/calendars/__uids__/%s/tasks_1" % (user,)))
+
+            # Force current default to null
+            home = (yield self.homeUnderTest(name=user))
+            chm = home._homeMetaDataSchema
+            yield Update(
+                {chm.DEFAULT_EVENTS: None},
+                Where=chm.RESOURCE_ID == home._resourceID,
+            ).on(self.transactionUnderTest())
+
+            # Create tasks only calendar
+            tasks = (yield home.createCalendarWithName("tasks_1"))
+            yield tasks.setSupportedComponents("VTODO")
+
+        # Force data version to previous
+        ch = home._homeSchema
+        yield Update(
+            {ch.DATAVERSION: 3},
+            Where=ch.RESOURCE_ID == home._resourceID,
+        ).on(self.transactionUnderTest())
+
+        yield self.commit()
+
+        # Trigger upgrade
+        yield moveDefaultCalendarProperties(self._sqlCalendarStore)
+
+        # Test results
+        for user in ("user01", "user02",):
+            home = (yield self.homeUnderTest(name=user))
+            calendar = (yield self.calendarUnderTest(name="tasks_1", home=user))
+            self.assertFalse(home.isDefaultCalendar(calendar))
+            inbox = (yield self.calendarUnderTest(name="inbox", home=user))
+            self.assertTrue(PropertyName.fromElement(ScheduleDefaultCalendarURL) not in inbox.properties())
+
+
+    @inlineCallbacks
     def test_calendarTranspUpgrade(self):
 
         # Set dead property on inbox
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140312/5ec99f0c/attachment.html>


More information about the calendarserver-changes mailing list