[CalendarServer-changes] [15339] CalendarServer/trunk/contrib/performance/loadtest
source_changes at macosforge.org
source_changes at macosforge.org
Thu Nov 19 14:01:05 PST 2015
Revision: 15339
http://trac.calendarserver.org//changeset/15339
Author: sagen at apple.com
Date: 2015-11-19 14:01:05 -0800 (Thu, 19 Nov 2015)
Log Message:
-----------
Change sim profiles to avoid trying to manipulate shared-to-me collections; disable Resetter profile for now.
Modified Paths:
--------------
CalendarServer/trunk/contrib/performance/loadtest/clients.plist
CalendarServer/trunk/contrib/performance/loadtest/ical.py
CalendarServer/trunk/contrib/performance/loadtest/profiles.py
Modified: CalendarServer/trunk/contrib/performance/loadtest/clients.plist
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/clients.plist 2015-11-19 21:44:28 UTC (rev 15338)
+++ CalendarServer/trunk/contrib/performance/loadtest/clients.plist 2015-11-19 22:01:05 UTC (rev 15339)
@@ -328,10 +328,10 @@
<dict>
<!-- mode - peak-->
<key>mode</key>
- <integer>1024</integer>
+ <integer>450</integer>
<!-- mean - average-->
<key>median</key>
- <integer>20480</integer>
+ <integer>650</integer>
<!-- maximum -->
<key>maximum</key>
<real>1000000</real>
@@ -689,7 +689,7 @@
<key>params</key>
<dict>
<key>enabled</key>
- <true/>
+ <false/>
<!-- Define the interval (in seconds) at which this profile will
reset its client. -->
Modified: CalendarServer/trunk/contrib/performance/loadtest/ical.py
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/ical.py 2015-11-19 21:44:28 UTC (rev 15338)
+++ CalendarServer/trunk/contrib/performance/loadtest/ical.py 2015-11-19 22:01:05 UTC (rev 15339)
@@ -209,13 +209,18 @@
class Calendar(object):
- def __init__(self, resourceType, componentTypes, name, url, changeToken):
+ def __init__(
+ self, resourceType, componentTypes, name, url, changeToken,
+ shared=False, sharedByMe=False
+ ):
self.resourceType = resourceType
self.componentTypes = componentTypes
self.name = name
self.url = url
self.changeToken = changeToken
self.events = {}
+ self.shared = shared
+ self.sharedByMe = sharedByMe
if self.name is None and self.url is not None:
self.name = self.url.rstrip("/").split("/")[-1]
@@ -227,7 +232,7 @@
"""
result = {}
- for attr in ("resourceType", "name", "url", "changeToken"):
+ for attr in ("resourceType", "name", "url", "changeToken", "shared", "sharedByMe"):
result[attr] = getattr(self, attr)
result["componentTypes"] = list(sorted(self.componentTypes))
result["events"] = sorted(self.events.keys())
@@ -241,7 +246,7 @@
"""
calendar = Calendar(None, None, None, None, None)
- for attr in ("resourceType", "name", "url", "changeToken"):
+ for attr in ("resourceType", "name", "url", "changeToken", "shared", "sharedByMe"):
setattr(calendar, attr, u2str(data[attr]))
calendar.componentTypes = set(map(u2str, data["componentTypes"]))
@@ -878,30 +883,45 @@
self.xmpp[href] = XMPPPush(server, uri, pushkey)
nodes = results[href].getNodeProperties()
+ isCalendar = False
+ isNotifications = False
+ isShared = False
+ isSharedByMe = False
for nodeType in nodes[davxml.resourcetype]:
if nodeType.tag in self._CALENDAR_TYPES:
- textProps = results[href].getTextProperties()
- componentTypes = set()
- if nodeType.tag == caldavxml.calendar:
- if caldavxml.supported_calendar_component_set in nodes:
- for comp in nodes[caldavxml.supported_calendar_component_set]:
- componentTypes.add(comp.get("name").upper())
-
- calendars.append(Calendar(
- nodeType.tag,
- componentTypes,
- textProps.get(davxml.displayname, None),
- href,
- textProps.get(changeTag, None),
- ))
- break
+ isCalendar = True
elif nodeType.tag == csxml.notification:
- textProps = results[href].getTextProperties()
- notificationCollection = NotificationCollection(
- href,
- textProps.get(changeTag, None)
- )
+ isNotifications = True
+ elif nodeType.tag.startswith("{http://calendarserver.org/ns/}shared"):
+ isShared = True
+ if nodeType.tag == "{http://calendarserver.org/ns/}shared-owner":
+ isSharedByMe = True
+ if isCalendar:
+ textProps = results[href].getTextProperties()
+ componentTypes = set()
+ if nodeType.tag == caldavxml.calendar:
+ if caldavxml.supported_calendar_component_set in nodes:
+ for comp in nodes[caldavxml.supported_calendar_component_set]:
+ componentTypes.add(comp.get("name").upper())
+
+ calendars.append(Calendar(
+ nodeType.tag,
+ componentTypes,
+ textProps.get(davxml.displayname, None),
+ href,
+ textProps.get(changeTag, None),
+ shared=isShared,
+ sharedByMe=isSharedByMe
+ ))
+
+ elif isNotifications:
+ textProps = results[href].getTextProperties()
+ notificationCollection = NotificationCollection(
+ href,
+ textProps.get(changeTag, None)
+ )
+
return calendars, notificationCollection
Modified: CalendarServer/trunk/contrib/performance/loadtest/profiles.py
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/profiles.py 2015-11-19 21:44:28 UTC (rev 15338)
+++ CalendarServer/trunk/contrib/performance/loadtest/profiles.py 2015-11-19 22:01:05 UTC (rev 15339)
@@ -75,21 +75,26 @@
return succeed(None)
- def _calendarsOfType(self, calendarType, componentType):
- return [
- cal
- for cal
- in self._client._calendars.itervalues()
- if cal.resourceType == calendarType and componentType in cal.componentTypes
- ]
+ def _calendarsOfType(self, calendarType, componentType, justOwned=False):
+ results = []
+ for cal in self._client._calendars.itervalues():
+ if cal.resourceType == calendarType and componentType in cal.componentTypes:
+ if justOwned:
+ if (not cal.shared) or cal.sharedByMe:
+ results.append(cal)
+ else:
+ results.append(cal)
- def _getRandomCalendarOfType(self, componentType):
+ return results
+
+
+ def _getRandomCalendarOfType(self, componentType, justOwned=False):
"""
Return a random L{Calendar} object from the current user
or C{None} if there are no calendars to work with
"""
- calendars = self._calendarsOfType(caldavxml.calendar, componentType)
+ calendars = self._calendarsOfType(caldavxml.calendar, componentType, justOwned=justOwned)
if not calendars:
return None
# Choose a random calendar
@@ -97,12 +102,12 @@
return calendar
- def _getRandomEventOfType(self, componentType):
+ def _getRandomEventOfType(self, componentType, justOwned=True):
"""
Return a random L{Event} object from the current user
or C{None} if there are no events to work with
"""
- calendars = self._calendarsOfType(caldavxml.calendar, componentType)
+ calendars = self._calendarsOfType(caldavxml.calendar, componentType, justOwned=justOwned)
while calendars:
calendar = self.random.choice(calendars)
calendars.remove(calendar)
@@ -610,7 +615,7 @@
if not self._client.started:
returnValue(None)
- event = self._getRandomEventOfType('VEVENT')
+ event = self._getRandomEventOfType('VEVENT', justOwned=True)
if not event:
returnValue(None)
component = event.component
@@ -721,7 +726,7 @@
if not self._client.started:
returnValue(None)
- for calendar in self._calendarsOfType(caldavxml.calendar, "VEVENT"):
+ for calendar in self._calendarsOfType(caldavxml.calendar, "VEVENT", justOwned=True):
while len(calendar.events) > self._limit:
event = calendar.events[self.random.choice(calendar.events.keys())]
yield self._client.deleteEvent(event.url)
@@ -760,7 +765,7 @@
def shareCalendar(self):
# pick a calendar
- calendar = self._getRandomCalendarOfType('VEVENT')
+ calendar = self._getRandomCalendarOfType('VEVENT', justOwned=True)
if not calendar:
returnValue(None)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20151119/4baf29ca/attachment.html>
More information about the calendarserver-changes
mailing list