[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