[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