[CalendarServer-changes] [6923] CalendarServer/trunk/contrib/performance/find_events.py

source_changes at macosforge.org source_changes at macosforge.org
Mon Feb 14 11:27:16 PST 2011


Revision: 6923
          http://trac.macosforge.org/projects/calendarserver/changeset/6923
Author:   exarkun at twistedmatrix.com
Date:     2011-02-14 11:27:15 -0800 (Mon, 14 Feb 2011)
Log Message:
-----------
Speed up (~50%) initialization for this benchmark by PUTing events in parallel.

Also fix the double / in the URL being PUT to.

Modified Paths:
--------------
    CalendarServer/trunk/contrib/performance/find_events.py

Modified: CalendarServer/trunk/contrib/performance/find_events.py
===================================================================
--- CalendarServer/trunk/contrib/performance/find_events.py	2011-02-14 18:35:56 UTC (rev 6922)
+++ CalendarServer/trunk/contrib/performance/find_events.py	2011-02-14 19:27:15 UTC (rev 6923)
@@ -18,7 +18,8 @@
 from urllib2 import HTTPDigestAuthHandler
 
 from twisted.internet import reactor
-from twisted.internet.defer import inlineCallbacks, returnValue
+from twisted.internet.defer import inlineCallbacks, returnValue, gatherResults
+from twisted.internet.task import cooperate
 from twisted.web.client import Agent
 from twisted.web.http_headers import Headers
 from twisted.web.http import MULTI_STATUS
@@ -40,6 +41,20 @@
 </x0:propfind>
 """
 
+def uploadEvents(numEvents, agent, uri, cal):
+    def worker():
+        for i in range(numEvents):
+            event = makeEvent(i, 1, 0)
+            yield agent.request(
+                'PUT',
+                '%s%s%d.ics' % (uri, cal, i),
+                Headers({"content-type": ["text/calendar"]}),
+                StringProducer(event))
+    worker = worker()
+    return gatherResults([
+            cooperate(worker).whenDone() for i in range(3)])
+
+
 @inlineCallbacks
 def measure(host, port, dtrace, numEvents, samples):
     user = password = "user11"
@@ -61,17 +76,11 @@
         "%s:%d" % (host, port),
         user=user, password=password,
         root=root, principal=principal)
-    cal = "/calendars/users/%s/find-events/" % (user,)
-    yield account.makeCalendar(cal)
+    cal = "calendars/users/%s/find-events/" % (user,)
+    yield account.makeCalendar("/" + cal)
 
     # Create the indicated number of events on the calendar
-    for i in range(numEvents):
-        event = makeEvent(i, 1, 0)
-        yield agent.request(
-            'PUT',
-            '%s%s%d.ics' % (uri, cal, i),
-            Headers({"content-type": ["text/calendar"]}),
-            StringProducer(event))
+    yield uploadEvents(numEvents, agent, uri, cal)
 
     body = StringProducer(PROPFIND)
     params = (
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20110214/8604db0b/attachment-0001.html>


More information about the calendarserver-changes mailing list