[CalendarServer-changes] [15708] CalendarServer/trunk/txdav/caldav/datastore

source_changes at macosforge.org source_changes at macosforge.org
Sat Jun 25 07:47:22 PDT 2016


Revision: 15708
          http://trac.calendarserver.org//changeset/15708
Author:   cdaboo at apple.com
Date:     2016-06-25 07:47:22 -0700 (Sat, 25 Jun 2016)
Log Message:
-----------
Fix race condition where a resource is removed whilst doing a large split operation.

Modified Paths:
--------------
    CalendarServer/trunk/txdav/caldav/datastore/sql.py
    CalendarServer/trunk/txdav/caldav/datastore/test/test_sql.py

Modified: CalendarServer/trunk/txdav/caldav/datastore/sql.py
===================================================================
--- CalendarServer/trunk/txdav/caldav/datastore/sql.py	2016-06-25 14:26:18 UTC (rev 15707)
+++ CalendarServer/trunk/txdav/caldav/datastore/sql.py	2016-06-25 14:47:22 UTC (rev 15708)
@@ -5396,7 +5396,7 @@
 
         # Split each one - but not this resource
         for resource in resources:
-            if resource._resourceID == self._resourceID:
+            if resource is None or resource._resourceID == self._resourceID:
                 continue
             yield resource.splitForAttendee(
                 rid,

Modified: CalendarServer/trunk/txdav/caldav/datastore/test/test_sql.py
===================================================================
--- CalendarServer/trunk/txdav/caldav/datastore/test/test_sql.py	2016-06-25 14:26:18 UTC (rev 15707)
+++ CalendarServer/trunk/txdav/caldav/datastore/test/test_sql.py	2016-06-25 14:47:22 UTC (rev 15708)
@@ -7400,6 +7400,7 @@
 DURATION:PT2H
 ATTENDEE;PARTSTAT=ACCEPTED:mailto:user01 at example.com
 ATTENDEE:mailto:user02 at example.com
+ATTENDEE:mailto:user03 at example.com
 DTSTAMP:20051222T210507Z
 ORGANIZER:mailto:user01 at example.com
 RRULE:FREQ=DAILY
@@ -7415,6 +7416,7 @@
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED:mailto:user01 at example.com
 ATTENDEE:mailto:user02 at example.com
+ATTENDEE:mailto:user03 at example.com
 DTSTAMP:20051222T210507Z
 ORGANIZER:mailto:user01 at example.com
 END:VEVENT
@@ -7425,6 +7427,7 @@
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED:mailto:user01 at example.com
 ATTENDEE:mailto:user02 at example.com
+ATTENDEE:mailto:user03 at example.com
 DTSTAMP:20051222T210507Z
 ORGANIZER:mailto:user01 at example.com
 END:VEVENT
@@ -7435,6 +7438,7 @@
 DURATION:PT1H
 ATTENDEE;PARTSTAT=ACCEPTED:mailto:user01 at example.com
 ATTENDEE:mailto:user02 at example.com
+ATTENDEE:mailto:user03 at example.com
 DTSTAMP:20051222T210507Z
 ORGANIZER:mailto:user01 at example.com
 END:VEVENT
@@ -7450,6 +7454,7 @@
 DURATION:PT2H
 ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
 ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user03
 DTSTAMP:20051222T210507Z
 ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
 RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
@@ -7467,6 +7472,7 @@
 DURATION:PT1H
 ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
 ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user03
 DTSTAMP:20051222T210507Z
 ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
 RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
@@ -7484,6 +7490,7 @@
 DURATION:PT2H
 ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
 ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user03
 DTSTAMP:20051222T210507Z
 ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
 RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
@@ -7501,6 +7508,7 @@
 DURATION:PT1H
 ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
 ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user03
 DTSTAMP:20051222T210507Z
 ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
 RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
@@ -7513,6 +7521,7 @@
 DURATION:PT1H
 ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
 ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user02
+ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE;SCHEDULE-STATUS=1.2:urn:x-uid:user03
 DTSTAMP:20051222T210507Z
 ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
 RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
@@ -7530,6 +7539,7 @@
 DURATION:PT2H
 ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
 ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
+ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE:urn:x-uid:user03
 DTSTAMP:20051222T210507Z
 ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
 RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
@@ -7547,6 +7557,7 @@
 DURATION:PT1H
 ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
 ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
+ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE:urn:x-uid:user03
 DTSTAMP:20051222T210507Z
 ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
 RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
@@ -7571,6 +7582,7 @@
 DURATION:PT2H
 ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
 ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
+ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE:urn:x-uid:user03
 DTSTAMP:20051222T210507Z
 ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
 RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
@@ -7588,6 +7600,7 @@
 DURATION:PT1H
 ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
 ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
+ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE:urn:x-uid:user03
 DTSTAMP:20051222T210507Z
 ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
 RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
@@ -7600,6 +7613,7 @@
 DURATION:PT1H
 ATTENDEE;CN=User 01;EMAIL=user01 at example.com;PARTSTAT=ACCEPTED:urn:x-uid:user01
 ATTENDEE;CN=User 02;EMAIL=user02 at example.com;RSVP=TRUE:urn:x-uid:user02
+ATTENDEE;CN=User 03;EMAIL=user03 at example.com;RSVP=TRUE:urn:x-uid:user03
 DTSTAMP:20051222T210507Z
 ORGANIZER;CN=User 01;EMAIL=user01 at example.com:urn:x-uid:user01
 RELATED-TO;RELTYPE=X-CALENDARSERVER-RECURRENCE-SET:%(relID)s
@@ -7636,6 +7650,16 @@
             yield cobjs[0].remove()
             yield newtxn.commit()
 
+            # Remove inbox item in another txn
+            newtxn = self.concurrentTransaction()
+            cal = yield self.calendarUnderTest(name="inbox", home="user03")
+            cobjs = yield cal.calendarObjects()
+            for ctr in range(len(results)):
+                if results[ctr]._resourceID == cobjs[0]._resourceID:
+                    results[ctr] = None
+                    break
+            yield newtxn.commit()
+
             returnValue(results)
 
         self.patch(CalendarStoreFeatures, "calendarObjectsWithUID", _lookup)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20160625/4370b637/attachment.html>


More information about the calendarserver-changes mailing list