[CalendarServer-changes] [7276] CalendarServer/trunk/twistedcaldav/scheduling/processing.py

source_changes at macosforge.org source_changes at macosforge.org
Wed Mar 30 13:08:33 PDT 2011


Revision: 7276
          http://trac.macosforge.org/projects/calendarserver/changeset/7276
Author:   cdaboo at apple.com
Date:     2011-03-30 13:08:33 -0700 (Wed, 30 Mar 2011)
Log Message:
-----------
Change auto-accept processing to delay attendee refreshes to avoid thrashing when processing multiple auto-accepts.

Modified Paths:
--------------
    CalendarServer/trunk/twistedcaldav/scheduling/processing.py

Modified: CalendarServer/trunk/twistedcaldav/scheduling/processing.py
===================================================================
--- CalendarServer/trunk/twistedcaldav/scheduling/processing.py	2011-03-30 20:06:21 UTC (rev 7275)
+++ CalendarServer/trunk/twistedcaldav/scheduling/processing.py	2011-03-30 20:08:33 UTC (rev 7276)
@@ -223,6 +223,15 @@
         @type attendee: C{set}
         """
         
+        # When doing auto-processing of replies, only refresh attendees when the last auto-accept is done.
+        # Note that when we do this we also need to refresh the attendee that is generating the reply because they
+        # are no longer up to date with changes of other auto-accept attendees.
+        if hasattr(self.request, "auto_reply_processing_count") and self.request.auto_reply_processing_count > 1:
+            self.request.auto_reply_suppressed = True
+            returnValue(None)
+        if hasattr(self.request, "auto_reply_suppressed"):
+            attendees = ()
+
         from twistedcaldav.scheduling.implicit import ImplicitScheduler
         scheduler = ImplicitScheduler()
         yield scheduler.refreshAllAttendeesExceptSome(self.request, resource, self.recipient_calendar, attendees)
@@ -300,6 +309,11 @@
             new_resource = (yield self.writeCalendarResource(defaultURL, default, name, new_calendar))
             
             if autoprocessed and send_reply:
+                # Track outstanding auto-reply processing
+                if not hasattr(self.request, "auto_reply_processing_count"):
+                    self.request.auto_reply_processing_count = 1
+                else:
+                    self.request.auto_reply_processing_count += 1
                 reactor.callLater(2.0, self.sendAttendeeAutoReply, *(new_calendar, new_resource, partstat))
 
             # Build the schedule-changes XML element
@@ -325,6 +339,11 @@
                 new_resource = (yield self.writeCalendarResource(self.recipient_calendar_collection_uri, self.recipient_calendar_collection, self.recipient_calendar_name, new_calendar))
                 
                 if autoprocessed and send_reply:
+                    # Track outstanding auto-reply processing
+                    if not hasattr(self.request, "auto_reply_processing_count"):
+                        self.request.auto_reply_processing_count = 1
+                    else:
+                        self.request.auto_reply_processing_count += 1
                     reactor.callLater(2.0, self.sendAttendeeAutoReply, *(new_calendar, new_resource, partstat))
 
                 # Build the schedule-changes XML element
@@ -463,6 +482,10 @@
         finally:
             yield lock.clean()
 
+            # Track outstanding auto-reply processing
+            if hasattr(self.request, "auto_reply_processing_count"):
+                self.request.auto_reply_processing_count -= 1
+
     @inlineCallbacks
     def checkAttendeeAutoReply(self, calendar):
         """
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110330/893bc792/attachment-0001.html>


More information about the calendarserver-changes mailing list