[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