[CalendarServer-changes] [8026] CalendarServer/trunk/contrib/performance/loadtest

source_changes at macosforge.org source_changes at macosforge.org
Fri Aug 26 08:09:50 PDT 2011


Revision: 8026
          http://trac.macosforge.org/projects/calendarserver/changeset/8026
Author:   sagen at apple.com
Date:     2011-08-26 08:09:49 -0700 (Fri, 26 Aug 2011)
Log Message:
-----------
Sim now asks server for canonical principal-url and outbox.

Modified Paths:
--------------
    CalendarServer/trunk/contrib/performance/loadtest/ical.py

Added Paths:
-----------
    CalendarServer/trunk/contrib/performance/loadtest/request-data/sl_startup_principal_propfind_initial.request

Modified: CalendarServer/trunk/contrib/performance/loadtest/ical.py
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/ical.py	2011-08-26 14:23:04 UTC (rev 8025)
+++ CalendarServer/trunk/contrib/performance/loadtest/ical.py	2011-08-26 15:09:49 UTC (rev 8026)
@@ -183,6 +183,7 @@
     # The maximum number of resources to retrieve in a single multiget
     MULTIGET_BATCH_SIZE = 200
 
+    _STARTUP_PRINCIPAL_PROPFIND_INITIAL = loadRequestBody('sl_startup_principal_propfind_initial')
     _STARTUP_PRINCIPAL_PROPFIND = loadRequestBody('sl_startup_principal_propfind')
     _STARTUP_PRINCIPALS_REPORT = loadRequestBody('sl_startup_principals_report')
     _STARTUP_CALENDARHOME_PROPFIND = loadRequestBody('sl_startup_calendarhome_propfind')
@@ -324,17 +325,38 @@
         return calendars
 
 
-    def _principalPropfind(self, user):
+    def _principalPropfindInitial(self, user):
         """
+        Issue a PROPFIND on the /principals/users/<uid> URL to retrieve
+        the /principals/__uids__/<guid> principal URL
+        """
+        principalURL = '/principals/users/' + user + '/'
+        d = self._request(
+            MULTI_STATUS,
+            'PROPFIND',
+            self.root + principalURL[1:].encode('utf-8'),
+            Headers({
+                    'content-type': ['text/xml'],
+                    'depth': ['0']}),
+            StringProducer(self._STARTUP_PRINCIPAL_PROPFIND_INITIAL))
+        d.addCallback(readBody)
+        d.addCallback(self._parseMultiStatus)
+        def get(result):
+            return result[principalURL]
+        d.addCallback(get)
+        return d
+
+
+    def _principalPropfind(self):
+        """
         Issue a PROPFIND on the likely principal URL for the given
         user and return a L{Principal} instance constructed from the
         response.
         """
-        principalURL = '/principals/users/' + user + '/'
         d = self._request(
             MULTI_STATUS,
             'PROPFIND',
-            self.root + principalURL[1:].encode('utf-8'),
+            self.root + self.principalURL[1:].encode('utf-8'),
             Headers({
                     'content-type': ['text/xml'],
                     'depth': ['0']}),
@@ -342,7 +364,7 @@
         d.addCallback(readBody)
         d.addCallback(self._parseMultiStatus)
         def get(result):
-            return result[principalURL]
+            return result[self.principalURL]
         d.addCallback(get)
         return d
 
@@ -518,11 +540,20 @@
 
     @inlineCallbacks
     def startup(self):
-        # Orient ourselves, or something
-        principal = yield self._principalPropfind(self.record.uid)
 
+        # PROPFIND /principals/users/<uid> to retrieve /principals/__uids__/<guid>
+        response = yield self._principalPropfindInitial(self.record.uid)
+        hrefs = response.getHrefProperties()
+        self.principalURL = hrefs[davxml.principal_URL].toString()
+
+        # Using the actual principal URL, retrieve principal information
+        principal = yield self._principalPropfind()
+
         hrefs = principal.getHrefProperties()
 
+        # Remember our outbox
+        self.outbox = hrefs[caldavxml.schedule_outbox_URL].toString()
+
         # Remember our own email-like principal address
         for principalURL in hrefs[caldavxml.calendar_user_address_set]:
             if principalURL.toString().startswith(u"mailto:"):
@@ -689,7 +720,7 @@
         d.addCallback(specific)
         def availability(ignored):
             # If the event has no attendees, add ourselves as an attendee.
-            attendees = tuple(vevent.mainComponent().properties('ATTENDEE'))
+            attendees = list(vevent.mainComponent().properties('ATTENDEE'))
             if len(attendees) == 0:
                 # First add ourselves as a participant and as the
                 # organizer.  In the future for this event we should
@@ -807,8 +838,7 @@
         @return: A C{Deferred} which fires with a C{dict}.  Keys in the dict
             are user UUIDs (those requested) and values are something else.
         """
-        outbox = self.root + 'calendars/__uids__/%s/outbox/' % (
-            self.record.uid.encode('utf-8'),)
+        outbox = self.root + self.outbox[1:]
 
         if mask:
             maskStr = u'\r\n'.join(['X-CALENDARSERVER-MASK-UID:' + uid

Added: CalendarServer/trunk/contrib/performance/loadtest/request-data/sl_startup_principal_propfind_initial.request
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/request-data/sl_startup_principal_propfind_initial.request	                        (rev 0)
+++ CalendarServer/trunk/contrib/performance/loadtest/request-data/sl_startup_principal_propfind_initial.request	2011-08-26 15:09:49 UTC (rev 8026)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<A:propfind xmlns:A="DAV:">
+  <A:prop>
+    <A:current-user-principal/>
+    <A:principal-URL/>
+    <A:resourcetype/>
+  </A:prop>
+</A:propfind>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110826/52ebbe10/attachment-0001.html>


More information about the calendarserver-changes mailing list