[CalendarServer-changes] [13334] CalendarServer/trunk/txdav/caldav/datastore/sql.py
source_changes at macosforge.org
source_changes at macosforge.org
Fri Apr 18 14:34:01 PDT 2014
Revision: 13334
http://trac.calendarserver.org//changeset/13334
Author: gaya at apple.com
Date: 2014-04-18 14:34:01 -0700 (Fri, 18 Apr 2014)
Log Message:
-----------
optimize CalendarObject.reconcileGroupAttendees() to only call Component.reconcileGroupAttendees() if group has changed
Modified Paths:
--------------
CalendarServer/trunk/txdav/caldav/datastore/sql.py
Modified: CalendarServer/trunk/txdav/caldav/datastore/sql.py
===================================================================
--- CalendarServer/trunk/txdav/caldav/datastore/sql.py 2014-04-18 21:02:12 UTC (rev 13333)
+++ CalendarServer/trunk/txdav/caldav/datastore/sql.py 2014-04-18 21:34:01 UTC (rev 13334)
@@ -1931,7 +1931,7 @@
@inlineCallbacks
- def reconcileGroupAttendees(self, component):
+ def reconcileGroupAttendees(self, component, inserting=False):
"""
reconcile group attendees
"""
@@ -1954,23 +1954,33 @@
[member.attendeeProperty(params={"MEMBER": groupCUA}) for member in members]
)
- # sync group attendees
- changed = component.reconcileGroupAttendees(groupCUAToAttendeeMemberPropMap)
-
# save for post processing
self._groupCUAToAttendeeMemberPropMap = groupCUAToAttendeeMemberPropMap
+ # sync group attendee members if inserting or group changed
+ changed = False
+ if inserting or (yield self.updateGROUP_ATTENDEE(groupCUAToAttendeeMemberPropMap)):
+ changed = component.reconcileGroupAttendees(groupCUAToAttendeeMemberPropMap)
+
+ # save for post processing when self._resourceID is non-zero
+ if inserting:
+ self._groupCUAToAttendeeMemberPropMap = groupCUAToAttendeeMemberPropMap
+
returnValue(changed)
@inlineCallbacks
- def updateGROUP_ATTENDEE(self):
+ def updateGROUP_ATTENDEE(self, groupCUAToAttendeeMemberPropMap=None):
"""
update schema.GROUP_ATTENDEE
"""
- if not hasattr(self, "_groupCUAToAttendeeMemberPropMap"):
- returnValue(None)
+ if groupCUAToAttendeeMemberPropMap is None:
+ if not hasattr(self, "_groupCUAToAttendeeMemberPropMap"):
+ returnValue(False)
+ else:
+ groupCUAToAttendeeMemberPropMap = self._groupCUAToAttendeeMemberPropMap
+ changed = False
ga = schema.GROUP_ATTENDEE
rows = yield Select(
[ga.GROUP_ID, ga.MEMBERSHIP_HASH],
@@ -1979,7 +1989,7 @@
).on(self._txn)
oldGAs = dict(rows)
- for groupCUA, memberAttendeeProps in self._groupCUAToAttendeeMemberPropMap.iteritems():
+ for groupCUA, memberAttendeeProps in groupCUAToAttendeeMemberPropMap.iteritems():
groupRecord = yield self.directoryService().recordWithCalendarUserAddress(groupCUA)
if groupRecord:
members = set([(
@@ -2005,6 +2015,7 @@
ga.GROUP_ID == groupID
)
).on(self._txn)
+ changed = True
del oldGAs[groupID]
else:
yield Insert({
@@ -2013,6 +2024,7 @@
ga.MEMBERSHIP_HASH: membershipHash,
}
).on(self._txn)
+ changed = True
for groupID in oldGAs:
yield Delete(
@@ -2021,8 +2033,11 @@
ga.GROUP_ID == groupID
)
).on(self._txn)
+ changed = True
+ returnValue(changed)
+
def validCalendarDataCheck(self, component, inserting):
"""
Check that the calendar data is valid iCalendar.
@@ -2435,7 +2450,7 @@
# group attendees
if scheduler.state == "organizer":
- yield self.reconcileGroupAttendees(component)
+ yield self.reconcileGroupAttendees(component, inserting)
# Set an attribute on this object to indicate that it is valid to check for an event split. We need to do this here so that if a timeout
# occurs whilst doing implicit processing (most likely because the event is too big) we are able to subsequently detect that it is OK
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20140418/2949ebbc/attachment.html>
More information about the calendarserver-changes
mailing list