[CalendarServer-changes] [15348] CalendarServer/trunk/contrib/performance/loadtest
source_changes at macosforge.org
source_changes at macosforge.org
Mon Nov 30 13:22:41 PST 2015
Revision: 15348
http://trac.calendarserver.org//changeset/15348
Author: cdaboo at apple.com
Date: 2015-11-30 13:22:41 -0800 (Mon, 30 Nov 2015)
Log Message:
-----------
Multi-pod support for the sim.
Modified Paths:
--------------
CalendarServer/trunk/contrib/performance/loadtest/accounts.csv
CalendarServer/trunk/contrib/performance/loadtest/config.dist.plist
CalendarServer/trunk/contrib/performance/loadtest/config.plist
CalendarServer/trunk/contrib/performance/loadtest/population.py
CalendarServer/trunk/contrib/performance/loadtest/profiles.py
CalendarServer/trunk/contrib/performance/loadtest/sim.py
Modified: CalendarServer/trunk/contrib/performance/loadtest/accounts.csv
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/accounts.csv 2015-11-30 20:25:51 UTC (rev 15347)
+++ CalendarServer/trunk/contrib/performance/loadtest/accounts.csv 2015-11-30 21:22:41 UTC (rev 15348)
@@ -1,99 +1,198 @@
-user01,user01,User 01,user01 at example.com,10000000-0000-0000-0000-000000000001
-user02,user02,User 02,user02 at example.com,10000000-0000-0000-0000-000000000002
-user03,user03,User 03,user03 at example.com,10000000-0000-0000-0000-000000000003
-user04,user04,User 04,user04 at example.com,10000000-0000-0000-0000-000000000004
-user05,user05,User 05,user05 at example.com,10000000-0000-0000-0000-000000000005
-user06,user06,User 06,user06 at example.com,10000000-0000-0000-0000-000000000006
-user07,user07,User 07,user07 at example.com,10000000-0000-0000-0000-000000000007
-user08,user08,User 08,user08 at example.com,10000000-0000-0000-0000-000000000008
-user09,user09,User 09,user09 at example.com,10000000-0000-0000-0000-000000000009
-user10,user10,User 10,user10 at example.com,10000000-0000-0000-0000-000000000010
-user11,user11,User 11,user11 at example.com,10000000-0000-0000-0000-000000000011
-user12,user12,User 12,user12 at example.com,10000000-0000-0000-0000-000000000012
-user13,user13,User 13,user13 at example.com,10000000-0000-0000-0000-000000000013
-user14,user14,User 14,user14 at example.com,10000000-0000-0000-0000-000000000014
-user15,user15,User 15,user15 at example.com,10000000-0000-0000-0000-000000000015
-user16,user16,User 16,user16 at example.com,10000000-0000-0000-0000-000000000016
-user17,user17,User 17,user17 at example.com,10000000-0000-0000-0000-000000000017
-user18,user18,User 18,user18 at example.com,10000000-0000-0000-0000-000000000018
-user19,user19,User 19,user19 at example.com,10000000-0000-0000-0000-000000000019
-user20,user20,User 20,user20 at example.com,10000000-0000-0000-0000-000000000020
-user21,user21,User 21,user21 at example.com,10000000-0000-0000-0000-000000000021
-user22,user22,User 22,user22 at example.com,10000000-0000-0000-0000-000000000022
-user23,user23,User 23,user23 at example.com,10000000-0000-0000-0000-000000000023
-user24,user24,User 24,user24 at example.com,10000000-0000-0000-0000-000000000024
-user25,user25,User 25,user25 at example.com,10000000-0000-0000-0000-000000000025
-user26,user26,User 26,user26 at example.com,10000000-0000-0000-0000-000000000026
-user27,user27,User 27,user27 at example.com,10000000-0000-0000-0000-000000000027
-user28,user28,User 28,user28 at example.com,10000000-0000-0000-0000-000000000028
-user29,user29,User 29,user29 at example.com,10000000-0000-0000-0000-000000000029
-user30,user30,User 30,user30 at example.com,10000000-0000-0000-0000-000000000030
-user31,user31,User 31,user31 at example.com,10000000-0000-0000-0000-000000000031
-user32,user32,User 32,user32 at example.com,10000000-0000-0000-0000-000000000032
-user33,user33,User 33,user33 at example.com,10000000-0000-0000-0000-000000000033
-user34,user34,User 34,user34 at example.com,10000000-0000-0000-0000-000000000034
-user35,user35,User 35,user35 at example.com,10000000-0000-0000-0000-000000000035
-user36,user36,User 36,user36 at example.com,10000000-0000-0000-0000-000000000036
-user37,user37,User 37,user37 at example.com,10000000-0000-0000-0000-000000000037
-user38,user38,User 38,user38 at example.com,10000000-0000-0000-0000-000000000038
-user39,user39,User 39,user39 at example.com,10000000-0000-0000-0000-000000000039
-user40,user40,User 40,user40 at example.com,10000000-0000-0000-0000-000000000040
-user41,user41,User 41,user41 at example.com,10000000-0000-0000-0000-000000000041
-user42,user42,User 42,user42 at example.com,10000000-0000-0000-0000-000000000042
-user43,user43,User 43,user43 at example.com,10000000-0000-0000-0000-000000000043
-user44,user44,User 44,user44 at example.com,10000000-0000-0000-0000-000000000044
-user45,user45,User 45,user45 at example.com,10000000-0000-0000-0000-000000000045
-user46,user46,User 46,user46 at example.com,10000000-0000-0000-0000-000000000046
-user47,user47,User 47,user47 at example.com,10000000-0000-0000-0000-000000000047
-user48,user48,User 48,user48 at example.com,10000000-0000-0000-0000-000000000048
-user49,user49,User 49,user49 at example.com,10000000-0000-0000-0000-000000000049
-user50,user50,User 50,user50 at example.com,10000000-0000-0000-0000-000000000050
-user51,user51,User 51,user51 at example.com,10000000-0000-0000-0000-000000000051
-user52,user52,User 52,user52 at example.com,10000000-0000-0000-0000-000000000052
-user53,user53,User 53,user53 at example.com,10000000-0000-0000-0000-000000000053
-user54,user54,User 54,user54 at example.com,10000000-0000-0000-0000-000000000054
-user55,user55,User 55,user55 at example.com,10000000-0000-0000-0000-000000000055
-user56,user56,User 56,user56 at example.com,10000000-0000-0000-0000-000000000056
-user57,user57,User 57,user57 at example.com,10000000-0000-0000-0000-000000000057
-user58,user58,User 58,user58 at example.com,10000000-0000-0000-0000-000000000058
-user59,user59,User 59,user59 at example.com,10000000-0000-0000-0000-000000000059
-user60,user60,User 60,user60 at example.com,10000000-0000-0000-0000-000000000060
-user61,user61,User 61,user61 at example.com,10000000-0000-0000-0000-000000000061
-user62,user62,User 62,user62 at example.com,10000000-0000-0000-0000-000000000062
-user63,user63,User 63,user63 at example.com,10000000-0000-0000-0000-000000000063
-user64,user64,User 64,user64 at example.com,10000000-0000-0000-0000-000000000064
-user65,user65,User 65,user65 at example.com,10000000-0000-0000-0000-000000000065
-user66,user66,User 66,user66 at example.com,10000000-0000-0000-0000-000000000066
-user67,user67,User 67,user67 at example.com,10000000-0000-0000-0000-000000000067
-user68,user68,User 68,user68 at example.com,10000000-0000-0000-0000-000000000068
-user69,user69,User 69,user69 at example.com,10000000-0000-0000-0000-000000000069
-user70,user70,User 70,user70 at example.com,10000000-0000-0000-0000-000000000070
-user71,user71,User 71,user71 at example.com,10000000-0000-0000-0000-000000000071
-user72,user72,User 72,user72 at example.com,10000000-0000-0000-0000-000000000072
-user73,user73,User 73,user73 at example.com,10000000-0000-0000-0000-000000000073
-user74,user74,User 74,user74 at example.com,10000000-0000-0000-0000-000000000074
-user75,user75,User 75,user75 at example.com,10000000-0000-0000-0000-000000000075
-user76,user76,User 76,user76 at example.com,10000000-0000-0000-0000-000000000076
-user77,user77,User 77,user77 at example.com,10000000-0000-0000-0000-000000000077
-user78,user78,User 78,user78 at example.com,10000000-0000-0000-0000-000000000078
-user79,user79,User 79,user79 at example.com,10000000-0000-0000-0000-000000000079
-user80,user80,User 80,user80 at example.com,10000000-0000-0000-0000-000000000080
-user81,user81,User 81,user81 at example.com,10000000-0000-0000-0000-000000000081
-user82,user82,User 82,user82 at example.com,10000000-0000-0000-0000-000000000082
-user83,user83,User 83,user83 at example.com,10000000-0000-0000-0000-000000000083
-user84,user84,User 84,user84 at example.com,10000000-0000-0000-0000-000000000084
-user85,user85,User 85,user85 at example.com,10000000-0000-0000-0000-000000000085
-user86,user86,User 86,user86 at example.com,10000000-0000-0000-0000-000000000086
-user87,user87,User 87,user87 at example.com,10000000-0000-0000-0000-000000000087
-user88,user88,User 88,user88 at example.com,10000000-0000-0000-0000-000000000088
-user89,user89,User 89,user89 at example.com,10000000-0000-0000-0000-000000000089
-user90,user90,User 90,user90 at example.com,10000000-0000-0000-0000-000000000090
-user91,user91,User 91,user91 at example.com,10000000-0000-0000-0000-000000000091
-user92,user92,User 92,user92 at example.com,10000000-0000-0000-0000-000000000092
-user93,user93,User 93,user93 at example.com,10000000-0000-0000-0000-000000000093
-user94,user94,User 94,user94 at example.com,10000000-0000-0000-0000-000000000094
-user95,user95,User 95,user95 at example.com,10000000-0000-0000-0000-000000000095
-user96,user96,User 96,user96 at example.com,10000000-0000-0000-0000-000000000096
-user97,user97,User 97,user97 at example.com,10000000-0000-0000-0000-000000000097
-user98,user98,User 98,user98 at example.com,10000000-0000-0000-0000-000000000098
-user99,user99,User 99,user99 at example.com,10000000-0000-0000-0000-000000000099
+user01,user01,User 01,user01 at example.com,10000000-0000-0000-0000-000000000001,PodA
+user02,user02,User 02,user02 at example.com,10000000-0000-0000-0000-000000000002,PodA
+user03,user03,User 03,user03 at example.com,10000000-0000-0000-0000-000000000003,PodA
+user04,user04,User 04,user04 at example.com,10000000-0000-0000-0000-000000000004,PodA
+user05,user05,User 05,user05 at example.com,10000000-0000-0000-0000-000000000005,PodA
+user06,user06,User 06,user06 at example.com,10000000-0000-0000-0000-000000000006,PodA
+user07,user07,User 07,user07 at example.com,10000000-0000-0000-0000-000000000007,PodA
+user08,user08,User 08,user08 at example.com,10000000-0000-0000-0000-000000000008,PodA
+user09,user09,User 09,user09 at example.com,10000000-0000-0000-0000-000000000009,PodA
+user10,user10,User 10,user10 at example.com,10000000-0000-0000-0000-000000000010,PodA
+user11,user11,User 11,user11 at example.com,10000000-0000-0000-0000-000000000011,PodA
+user12,user12,User 12,user12 at example.com,10000000-0000-0000-0000-000000000012,PodA
+user13,user13,User 13,user13 at example.com,10000000-0000-0000-0000-000000000013,PodA
+user14,user14,User 14,user14 at example.com,10000000-0000-0000-0000-000000000014,PodA
+user15,user15,User 15,user15 at example.com,10000000-0000-0000-0000-000000000015,PodA
+user16,user16,User 16,user16 at example.com,10000000-0000-0000-0000-000000000016,PodA
+user17,user17,User 17,user17 at example.com,10000000-0000-0000-0000-000000000017,PodA
+user18,user18,User 18,user18 at example.com,10000000-0000-0000-0000-000000000018,PodA
+user19,user19,User 19,user19 at example.com,10000000-0000-0000-0000-000000000019,PodA
+user20,user20,User 20,user20 at example.com,10000000-0000-0000-0000-000000000020,PodA
+user21,user21,User 21,user21 at example.com,10000000-0000-0000-0000-000000000021,PodA
+user22,user22,User 22,user22 at example.com,10000000-0000-0000-0000-000000000022,PodA
+user23,user23,User 23,user23 at example.com,10000000-0000-0000-0000-000000000023,PodA
+user24,user24,User 24,user24 at example.com,10000000-0000-0000-0000-000000000024,PodA
+user25,user25,User 25,user25 at example.com,10000000-0000-0000-0000-000000000025,PodA
+user26,user26,User 26,user26 at example.com,10000000-0000-0000-0000-000000000026,PodA
+user27,user27,User 27,user27 at example.com,10000000-0000-0000-0000-000000000027,PodA
+user28,user28,User 28,user28 at example.com,10000000-0000-0000-0000-000000000028,PodA
+user29,user29,User 29,user29 at example.com,10000000-0000-0000-0000-000000000029,PodA
+user30,user30,User 30,user30 at example.com,10000000-0000-0000-0000-000000000030,PodA
+user31,user31,User 31,user31 at example.com,10000000-0000-0000-0000-000000000031,PodA
+user32,user32,User 32,user32 at example.com,10000000-0000-0000-0000-000000000032,PodA
+user33,user33,User 33,user33 at example.com,10000000-0000-0000-0000-000000000033,PodA
+user34,user34,User 34,user34 at example.com,10000000-0000-0000-0000-000000000034,PodA
+user35,user35,User 35,user35 at example.com,10000000-0000-0000-0000-000000000035,PodA
+user36,user36,User 36,user36 at example.com,10000000-0000-0000-0000-000000000036,PodA
+user37,user37,User 37,user37 at example.com,10000000-0000-0000-0000-000000000037,PodA
+user38,user38,User 38,user38 at example.com,10000000-0000-0000-0000-000000000038,PodA
+user39,user39,User 39,user39 at example.com,10000000-0000-0000-0000-000000000039,PodA
+user40,user40,User 40,user40 at example.com,10000000-0000-0000-0000-000000000040,PodA
+user41,user41,User 41,user41 at example.com,10000000-0000-0000-0000-000000000041,PodA
+user42,user42,User 42,user42 at example.com,10000000-0000-0000-0000-000000000042,PodA
+user43,user43,User 43,user43 at example.com,10000000-0000-0000-0000-000000000043,PodA
+user44,user44,User 44,user44 at example.com,10000000-0000-0000-0000-000000000044,PodA
+user45,user45,User 45,user45 at example.com,10000000-0000-0000-0000-000000000045,PodA
+user46,user46,User 46,user46 at example.com,10000000-0000-0000-0000-000000000046,PodA
+user47,user47,User 47,user47 at example.com,10000000-0000-0000-0000-000000000047,PodA
+user48,user48,User 48,user48 at example.com,10000000-0000-0000-0000-000000000048,PodA
+user49,user49,User 49,user49 at example.com,10000000-0000-0000-0000-000000000049,PodA
+user50,user50,User 50,user50 at example.com,10000000-0000-0000-0000-000000000050,PodA
+user51,user51,User 51,user51 at example.com,10000000-0000-0000-0000-000000000051,PodA
+user52,user52,User 52,user52 at example.com,10000000-0000-0000-0000-000000000052,PodA
+user53,user53,User 53,user53 at example.com,10000000-0000-0000-0000-000000000053,PodA
+user54,user54,User 54,user54 at example.com,10000000-0000-0000-0000-000000000054,PodA
+user55,user55,User 55,user55 at example.com,10000000-0000-0000-0000-000000000055,PodA
+user56,user56,User 56,user56 at example.com,10000000-0000-0000-0000-000000000056,PodA
+user57,user57,User 57,user57 at example.com,10000000-0000-0000-0000-000000000057,PodA
+user58,user58,User 58,user58 at example.com,10000000-0000-0000-0000-000000000058,PodA
+user59,user59,User 59,user59 at example.com,10000000-0000-0000-0000-000000000059,PodA
+user60,user60,User 60,user60 at example.com,10000000-0000-0000-0000-000000000060,PodA
+user61,user61,User 61,user61 at example.com,10000000-0000-0000-0000-000000000061,PodA
+user62,user62,User 62,user62 at example.com,10000000-0000-0000-0000-000000000062,PodA
+user63,user63,User 63,user63 at example.com,10000000-0000-0000-0000-000000000063,PodA
+user64,user64,User 64,user64 at example.com,10000000-0000-0000-0000-000000000064,PodA
+user65,user65,User 65,user65 at example.com,10000000-0000-0000-0000-000000000065,PodA
+user66,user66,User 66,user66 at example.com,10000000-0000-0000-0000-000000000066,PodA
+user67,user67,User 67,user67 at example.com,10000000-0000-0000-0000-000000000067,PodA
+user68,user68,User 68,user68 at example.com,10000000-0000-0000-0000-000000000068,PodA
+user69,user69,User 69,user69 at example.com,10000000-0000-0000-0000-000000000069,PodA
+user70,user70,User 70,user70 at example.com,10000000-0000-0000-0000-000000000070,PodA
+user71,user71,User 71,user71 at example.com,10000000-0000-0000-0000-000000000071,PodA
+user72,user72,User 72,user72 at example.com,10000000-0000-0000-0000-000000000072,PodA
+user73,user73,User 73,user73 at example.com,10000000-0000-0000-0000-000000000073,PodA
+user74,user74,User 74,user74 at example.com,10000000-0000-0000-0000-000000000074,PodA
+user75,user75,User 75,user75 at example.com,10000000-0000-0000-0000-000000000075,PodA
+user76,user76,User 76,user76 at example.com,10000000-0000-0000-0000-000000000076,PodA
+user77,user77,User 77,user77 at example.com,10000000-0000-0000-0000-000000000077,PodA
+user78,user78,User 78,user78 at example.com,10000000-0000-0000-0000-000000000078,PodA
+user79,user79,User 79,user79 at example.com,10000000-0000-0000-0000-000000000079,PodA
+user80,user80,User 80,user80 at example.com,10000000-0000-0000-0000-000000000080,PodA
+user81,user81,User 81,user81 at example.com,10000000-0000-0000-0000-000000000081,PodA
+user82,user82,User 82,user82 at example.com,10000000-0000-0000-0000-000000000082,PodA
+user83,user83,User 83,user83 at example.com,10000000-0000-0000-0000-000000000083,PodA
+user84,user84,User 84,user84 at example.com,10000000-0000-0000-0000-000000000084,PodA
+user85,user85,User 85,user85 at example.com,10000000-0000-0000-0000-000000000085,PodA
+user86,user86,User 86,user86 at example.com,10000000-0000-0000-0000-000000000086,PodA
+user87,user87,User 87,user87 at example.com,10000000-0000-0000-0000-000000000087,PodA
+user88,user88,User 88,user88 at example.com,10000000-0000-0000-0000-000000000088,PodA
+user89,user89,User 89,user89 at example.com,10000000-0000-0000-0000-000000000089,PodA
+user90,user90,User 90,user90 at example.com,10000000-0000-0000-0000-000000000090,PodA
+user91,user91,User 91,user91 at example.com,10000000-0000-0000-0000-000000000091,PodA
+user92,user92,User 92,user92 at example.com,10000000-0000-0000-0000-000000000092,PodA
+user93,user93,User 93,user93 at example.com,10000000-0000-0000-0000-000000000093,PodA
+user94,user94,User 94,user94 at example.com,10000000-0000-0000-0000-000000000094,PodA
+user95,user95,User 95,user95 at example.com,10000000-0000-0000-0000-000000000095,PodA
+user96,user96,User 96,user96 at example.com,10000000-0000-0000-0000-000000000096,PodA
+user97,user97,User 97,user97 at example.com,10000000-0000-0000-0000-000000000097,PodA
+user98,user98,User 98,user98 at example.com,10000000-0000-0000-0000-000000000098,PodA
+user99,user99,User 99,user99 at example.com,10000000-0000-0000-0000-000000000099,PodA
+puser01,puser01,Puser 01,puser01 at example.com,60000000-0000-0000-0000-000000000001,PodB
+puser02,puser02,Puser 02,puser02 at example.com,60000000-0000-0000-0000-000000000002,PodB
+puser03,puser03,Puser 03,puser03 at example.com,60000000-0000-0000-0000-000000000003,PodB
+puser04,puser04,Puser 04,puser04 at example.com,60000000-0000-0000-0000-000000000004,PodB
+puser05,puser05,Puser 05,puser05 at example.com,60000000-0000-0000-0000-000000000005,PodB
+puser06,puser06,Puser 06,puser06 at example.com,60000000-0000-0000-0000-000000000006,PodB
+puser07,puser07,Puser 07,puser07 at example.com,60000000-0000-0000-0000-000000000007,PodB
+puser08,puser08,Puser 08,puser08 at example.com,60000000-0000-0000-0000-000000000008,PodB
+puser09,puser09,Puser 09,puser09 at example.com,60000000-0000-0000-0000-000000000009,PodB
+puser10,puser10,Puser 10,puser10 at example.com,60000000-0000-0000-0000-000000000010,PodB
+puser11,puser11,Puser 11,puser11 at example.com,60000000-0000-0000-0000-000000000011,PodB
+puser12,puser12,Puser 12,puser12 at example.com,60000000-0000-0000-0000-000000000012,PodB
+puser13,puser13,Puser 13,puser13 at example.com,60000000-0000-0000-0000-000000000013,PodB
+puser14,puser14,Puser 14,puser14 at example.com,60000000-0000-0000-0000-000000000014,PodB
+puser15,puser15,Puser 15,puser15 at example.com,60000000-0000-0000-0000-000000000015,PodB
+puser16,puser16,Puser 16,puser16 at example.com,60000000-0000-0000-0000-000000000016,PodB
+puser17,puser17,Puser 17,puser17 at example.com,60000000-0000-0000-0000-000000000017,PodB
+puser18,puser18,Puser 18,puser18 at example.com,60000000-0000-0000-0000-000000000018,PodB
+puser19,puser19,Puser 19,puser19 at example.com,60000000-0000-0000-0000-000000000019,PodB
+puser20,puser20,Puser 20,puser20 at example.com,60000000-0000-0000-0000-000000000020,PodB
+puser21,puser21,Puser 21,puser21 at example.com,60000000-0000-0000-0000-000000000021,PodB
+puser22,puser22,Puser 22,puser22 at example.com,60000000-0000-0000-0000-000000000022,PodB
+puser23,puser23,Puser 23,puser23 at example.com,60000000-0000-0000-0000-000000000023,PodB
+puser24,puser24,Puser 24,puser24 at example.com,60000000-0000-0000-0000-000000000024,PodB
+puser25,puser25,Puser 25,puser25 at example.com,60000000-0000-0000-0000-000000000025,PodB
+puser26,puser26,Puser 26,puser26 at example.com,60000000-0000-0000-0000-000000000026,PodB
+puser27,puser27,Puser 27,puser27 at example.com,60000000-0000-0000-0000-000000000027,PodB
+puser28,puser28,Puser 28,puser28 at example.com,60000000-0000-0000-0000-000000000028,PodB
+puser29,puser29,Puser 29,puser29 at example.com,60000000-0000-0000-0000-000000000029,PodB
+puser30,puser30,Puser 30,puser30 at example.com,60000000-0000-0000-0000-000000000030,PodB
+puser31,puser31,Puser 31,puser31 at example.com,60000000-0000-0000-0000-000000000031,PodB
+puser32,puser32,Puser 32,puser32 at example.com,60000000-0000-0000-0000-000000000032,PodB
+puser33,puser33,Puser 33,puser33 at example.com,60000000-0000-0000-0000-000000000033,PodB
+puser34,puser34,Puser 34,puser34 at example.com,60000000-0000-0000-0000-000000000034,PodB
+puser35,puser35,Puser 35,puser35 at example.com,60000000-0000-0000-0000-000000000035,PodB
+puser36,puser36,Puser 36,puser36 at example.com,60000000-0000-0000-0000-000000000036,PodB
+puser37,puser37,Puser 37,puser37 at example.com,60000000-0000-0000-0000-000000000037,PodB
+puser38,puser38,Puser 38,puser38 at example.com,60000000-0000-0000-0000-000000000038,PodB
+puser39,puser39,Puser 39,puser39 at example.com,60000000-0000-0000-0000-000000000039,PodB
+puser40,puser40,Puser 40,puser40 at example.com,60000000-0000-0000-0000-000000000040,PodB
+puser41,puser41,Puser 41,puser41 at example.com,60000000-0000-0000-0000-000000000041,PodB
+puser42,puser42,Puser 42,puser42 at example.com,60000000-0000-0000-0000-000000000042,PodB
+puser43,puser43,Puser 43,puser43 at example.com,60000000-0000-0000-0000-000000000043,PodB
+puser44,puser44,Puser 44,puser44 at example.com,60000000-0000-0000-0000-000000000044,PodB
+puser45,puser45,Puser 45,puser45 at example.com,60000000-0000-0000-0000-000000000045,PodB
+puser46,puser46,Puser 46,puser46 at example.com,60000000-0000-0000-0000-000000000046,PodB
+puser47,puser47,Puser 47,puser47 at example.com,60000000-0000-0000-0000-000000000047,PodB
+puser48,puser48,Puser 48,puser48 at example.com,60000000-0000-0000-0000-000000000048,PodB
+puser49,puser49,Puser 49,puser49 at example.com,60000000-0000-0000-0000-000000000049,PodB
+puser50,puser50,Puser 50,puser50 at example.com,60000000-0000-0000-0000-000000000050,PodB
+puser51,puser51,Puser 51,puser51 at example.com,60000000-0000-0000-0000-000000000051,PodB
+puser52,puser52,Puser 52,puser52 at example.com,60000000-0000-0000-0000-000000000052,PodB
+puser53,puser53,Puser 53,puser53 at example.com,60000000-0000-0000-0000-000000000053,PodB
+puser54,puser54,Puser 54,puser54 at example.com,60000000-0000-0000-0000-000000000054,PodB
+puser55,puser55,Puser 55,puser55 at example.com,60000000-0000-0000-0000-000000000055,PodB
+puser56,puser56,Puser 56,puser56 at example.com,60000000-0000-0000-0000-000000000056,PodB
+puser57,puser57,Puser 57,puser57 at example.com,60000000-0000-0000-0000-000000000057,PodB
+puser58,puser58,Puser 58,puser58 at example.com,60000000-0000-0000-0000-000000000058,PodB
+puser59,puser59,Puser 59,puser59 at example.com,60000000-0000-0000-0000-000000000059,PodB
+puser60,puser60,Puser 60,puser60 at example.com,60000000-0000-0000-0000-000000000060,PodB
+puser61,puser61,Puser 61,puser61 at example.com,60000000-0000-0000-0000-000000000061,PodB
+puser62,puser62,Puser 62,puser62 at example.com,60000000-0000-0000-0000-000000000062,PodB
+puser63,puser63,Puser 63,puser63 at example.com,60000000-0000-0000-0000-000000000063,PodB
+puser64,puser64,Puser 64,puser64 at example.com,60000000-0000-0000-0000-000000000064,PodB
+puser65,puser65,Puser 65,puser65 at example.com,60000000-0000-0000-0000-000000000065,PodB
+puser66,puser66,Puser 66,puser66 at example.com,60000000-0000-0000-0000-000000000066,PodB
+puser67,puser67,Puser 67,puser67 at example.com,60000000-0000-0000-0000-000000000067,PodB
+puser68,puser68,Puser 68,puser68 at example.com,60000000-0000-0000-0000-000000000068,PodB
+puser69,puser69,Puser 69,puser69 at example.com,60000000-0000-0000-0000-000000000069,PodB
+puser70,puser70,Puser 70,puser70 at example.com,60000000-0000-0000-0000-000000000070,PodB
+puser71,puser71,Puser 71,puser71 at example.com,60000000-0000-0000-0000-000000000071,PodB
+puser72,puser72,Puser 72,puser72 at example.com,60000000-0000-0000-0000-000000000072,PodB
+puser73,puser73,Puser 73,puser73 at example.com,60000000-0000-0000-0000-000000000073,PodB
+puser74,puser74,Puser 74,puser74 at example.com,60000000-0000-0000-0000-000000000074,PodB
+puser75,puser75,Puser 75,puser75 at example.com,60000000-0000-0000-0000-000000000075,PodB
+puser76,puser76,Puser 76,puser76 at example.com,60000000-0000-0000-0000-000000000076,PodB
+puser77,puser77,Puser 77,puser77 at example.com,60000000-0000-0000-0000-000000000077,PodB
+puser78,puser78,Puser 78,puser78 at example.com,60000000-0000-0000-0000-000000000078,PodB
+puser79,puser79,Puser 79,puser79 at example.com,60000000-0000-0000-0000-000000000079,PodB
+puser80,puser80,Puser 80,puser80 at example.com,60000000-0000-0000-0000-000000000080,PodB
+puser81,puser81,Puser 81,puser81 at example.com,60000000-0000-0000-0000-000000000081,PodB
+puser82,puser82,Puser 82,puser82 at example.com,60000000-0000-0000-0000-000000000082,PodB
+puser83,puser83,Puser 83,puser83 at example.com,60000000-0000-0000-0000-000000000083,PodB
+puser84,puser84,Puser 84,puser84 at example.com,60000000-0000-0000-0000-000000000084,PodB
+puser85,puser85,Puser 85,puser85 at example.com,60000000-0000-0000-0000-000000000085,PodB
+puser86,puser86,Puser 86,puser86 at example.com,60000000-0000-0000-0000-000000000086,PodB
+puser87,puser87,Puser 87,puser87 at example.com,60000000-0000-0000-0000-000000000087,PodB
+puser88,puser88,Puser 88,puser88 at example.com,60000000-0000-0000-0000-000000000088,PodB
+puser89,puser89,Puser 89,puser89 at example.com,60000000-0000-0000-0000-000000000089,PodB
+puser90,puser90,Puser 90,puser90 at example.com,60000000-0000-0000-0000-000000000090,PodB
+puser91,puser91,Puser 91,puser91 at example.com,60000000-0000-0000-0000-000000000091,PodB
+puser92,puser92,Puser 92,puser92 at example.com,60000000-0000-0000-0000-000000000092,PodB
+puser93,puser93,Puser 93,puser93 at example.com,60000000-0000-0000-0000-000000000093,PodB
+puser94,puser94,Puser 94,puser94 at example.com,60000000-0000-0000-0000-000000000094,PodB
+puser95,puser95,Puser 95,puser95 at example.com,60000000-0000-0000-0000-000000000095,PodB
+puser96,puser96,Puser 96,puser96 at example.com,60000000-0000-0000-0000-000000000096,PodB
+puser97,puser97,Puser 97,puser97 at example.com,60000000-0000-0000-0000-000000000097,PodB
+puser98,puser98,Puser 98,puser98 at example.com,60000000-0000-0000-0000-000000000098,PodB
+puser99,puser99,Puser 99,puser99 at example.com,60000000-0000-0000-0000-000000000099,PodB
Modified: CalendarServer/trunk/contrib/performance/loadtest/config.dist.plist
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/config.dist.plist 2015-11-30 20:25:51 UTC (rev 15347)
+++ CalendarServer/trunk/contrib/performance/loadtest/config.dist.plist 2015-11-30 21:22:41 UTC (rev 15348)
@@ -32,10 +32,47 @@
<string>./bin/python contrib/performance/loadtest/ampsim.py</string>
</array>
- <!-- Identify the server to be load tested. -->
- <key>server</key>
- <string>https://127.0.0.1:8443</string>
+ <!-- Identify all the servers to be load tested. -->
+ <key>servers</key>
+ <dict>
+ <key>PodA</key>
+ <dict>
+ <key>enabled</key>
+ <true/>
+ <!-- Identify the server to be load tested. -->
+ <key>uri</key>
+ <string>https://localhost:8443</string>
+
+ <!-- Define whether server supports stats socket. -->
+ <key>stats</key>
+ <dict>
+ <key>enabled</key>
+ <true/>
+ <key>Port</key>
+ <integer>8100</integer>
+ </dict>
+ </dict>
+ <key>PodB</key>
+ <dict>
+ <key>enabled</key>
+ <false/>
+
+ <!-- Identify the server to be load tested. -->
+ <key>uri</key>
+ <string>https://localhost:8543</string>
+
+ <!-- Define whether server supports stats socket. -->
+ <key>stats</key>
+ <dict>
+ <key>enabled</key>
+ <true/>
+ <key>Port</key>
+ <integer>8101</integer>
+ </dict>
+ </dict>
+ </dict>
+
<!-- The template URI for doing initial principal lookup on. -->
<key>principalPathTemplate</key>
<string>/principals/users/%s/</string>
@@ -50,15 +87,6 @@
<integer>8080</integer>
</dict>
- <!-- Define whether server supports stats socket. -->
- <key>serverStats</key>
- <dict>
- <key>enabled</key>
- <true/>
- <key>Port</key>
- <integer>8100</integer>
- </dict>
-
<!-- Define whether client data should be re-used. It will always be saved to the specified path.-->
<key>clientDataSerialization</key>
<dict>
@@ -88,6 +116,11 @@
a relative path. This isn't a great solution. -->
<key>path</key>
<string>contrib/performance/loadtest/accounts.csv</string>
+
+ <!-- When there are accounts for multiple pods, interleave the accounts for each
+ pod so that the arrival mechanism will cycle clients between each pod. -->
+ <key>interleavePods</key>
+ <true/>
</dict>
</dict>
Modified: CalendarServer/trunk/contrib/performance/loadtest/config.plist
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/config.plist 2015-11-30 20:25:51 UTC (rev 15347)
+++ CalendarServer/trunk/contrib/performance/loadtest/config.plist 2015-11-30 21:22:41 UTC (rev 15348)
@@ -19,10 +19,47 @@
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
- <!-- Identify the server to be load tested. -->
- <key>server</key>
- <string>https://localhost:8443</string>
+ <!-- Identify all the servers to be load tested. -->
+ <key>servers</key>
+ <dict>
+ <key>PodA</key>
+ <dict>
+ <key>enabled</key>
+ <true/>
+ <!-- Identify the server to be load tested. -->
+ <key>uri</key>
+ <string>https://localhost:8443</string>
+
+ <!-- Define whether server supports stats socket. -->
+ <key>stats</key>
+ <dict>
+ <key>enabled</key>
+ <true/>
+ <key>Port</key>
+ <integer>8100</integer>
+ </dict>
+ </dict>
+ <key>PodB</key>
+ <dict>
+ <key>enabled</key>
+ <false/>
+
+ <!-- Identify the server to be load tested. -->
+ <key>uri</key>
+ <string>https://localhost:8543</string>
+
+ <!-- Define whether server supports stats socket. -->
+ <key>stats</key>
+ <dict>
+ <key>enabled</key>
+ <true/>
+ <key>Port</key>
+ <integer>8101</integer>
+ </dict>
+ </dict>
+ </dict>
+
<!-- The template URI for doing initial principal lookup on. -->
<key>principalPathTemplate</key>
<string>/principals/users/%s/</string>
@@ -37,15 +74,6 @@
<integer>8080</integer>
</dict>
- <!-- Define whether server supports stats socket. -->
- <key>serverStats</key>
- <dict>
- <key>enabled</key>
- <true/>
- <key>Port</key>
- <integer>8100</integer>
- </dict>
-
<!-- Define whether client data should be re-used. It will always be saved to the specified path.-->
<key>clientDataSerialization</key>
<dict>
@@ -75,6 +103,11 @@
a relative path. This isn't a great solution. -->
<key>path</key>
<string>contrib/performance/loadtest/accounts.csv</string>
+
+ <!-- When there are accounts for multiple pods, interleave the accounts for each
+ pod so that the arrival mechanism will cycle clients between each pod. -->
+ <key>interleavePods</key>
+ <true/>
</dict>
</dict>
Modified: CalendarServer/trunk/contrib/performance/loadtest/population.py
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/population.py 2015-11-30 20:25:51 UTC (rev 15347)
+++ CalendarServer/trunk/contrib/performance/loadtest/population.py 2015-11-30 21:22:41 UTC (rev 15348)
@@ -162,13 +162,13 @@
class CalendarClientSimulator(object):
- def __init__(self, records, populator, random, parameters, reactor, server,
+ def __init__(self, records, populator, random, parameters, reactor, servers,
principalPathTemplate, serializationPath, workerIndex=0, workerCount=1):
self._records = records
self.populator = populator
self._random = random
self.reactor = reactor
- self.server = server
+ self.servers = servers
self.principalPathTemplate = principalPathTemplate
self.serializationPath = serializationPath
self._pop = self.populator.populate(parameters)
@@ -220,16 +220,16 @@
authBasic = HTTPBasicAuthHandler(password_mgr=HTTPPasswordMgrWithDefaultRealm())
authBasic.add_password(
realm=None,
- uri=self.server,
+ uri=self.servers[record.podID]["uri"],
user=user.encode('utf-8'),
passwd=record.password.encode('utf-8'))
authDigest = HTTPDigestAuthHandler(passwd=HTTPPasswordMgrWithDefaultRealm())
authDigest.add_password(
realm=None,
- uri=self.server,
+ uri=self.servers[record.podID]["uri"],
user=user.encode('utf-8'),
passwd=record.password.encode('utf-8'))
- return user, {"basic": authBasic, "digest": authDigest, }
+ return record, user, {"basic": authBasic, "digest": authDigest, }
def stop(self):
@@ -260,15 +260,15 @@
# runs the same arrival policy).
continue
- _ignore_user, auth = self._createUser(number)
+ record, _ignore_user, auth = self._createUser(number)
reactor = loggedReactor(self.reactor)
client = clientType.new(
reactor,
- self.server,
+ self.servers[record.podID]["uri"],
self.principalPathTemplate,
self.serializationPath,
- self.getUserRecord(number),
+ record,
auth,
)
self.clients.append(client)
@@ -407,7 +407,7 @@
_fail_cut_off = 1.0 # % of total count at which failed requests will cause a failure
_fields_init = [
- ('request', -25, '%-25s'),
+ ('request', -30, '%-30s'),
('count', 8, '%8s'),
('failed', 8, '%8s'),
]
@@ -427,7 +427,7 @@
self._failed_clients = []
self._failed_sim = collections.defaultdict(int)
self._startTime = datetime.now()
- self._expired_data = None
+ self._expired_data = {}
# Load parameters from config
if "thresholdsPath" in params:
@@ -496,7 +496,7 @@
def simExpired(self, event):
- self._expired_data = event['reason']
+ self._expired_data[event['podID']] = event['reason']
def printMiscellaneous(self, output, items):
@@ -576,14 +576,14 @@
self.printMiscellaneous(output, items)
output.write("\n")
- if self._expired_data is not None:
+ for podID, data in self._expired_data.items():
items = {
- "Req/sec" : "%.1f" % (self._expired_data[0],),
- "Response": "%.1f (ms)" % (self._expired_data[1],),
- "Slots": "%.2f" % (self._expired_data[2],),
- "CPU": "%.1f%%" % (self._expired_data[3],),
+ "Req/sec" : "%.1f" % (data[0],),
+ "Response": "%.1f (ms)" % (data[1],),
+ "Slots": "%.2f" % (data[2],),
+ "CPU": "%.1f%%" % (data[3],),
}
- output.write("* Server (Last 5 minutes)\n")
+ output.write("* Server {podID} (Last 5 minutes)\n".format(podID=podID))
self.printMiscellaneous(output, items)
output.write("\n")
output.write("* Details\n")
Modified: CalendarServer/trunk/contrib/performance/loadtest/profiles.py
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/profiles.py 2015-11-30 20:25:51 UTC (rev 15347)
+++ CalendarServer/trunk/contrib/performance/loadtest/profiles.py 2015-11-30 21:22:41 UTC (rev 15348)
@@ -662,6 +662,7 @@
return succeed("update{title}")
+
class DescriptionChanger(EventUpdaterBase):
def setParameters(
@@ -681,6 +682,7 @@
return succeed("update{description}")
+
class Attacher(EventUpdaterBase):
def setParameters(
@@ -998,6 +1000,7 @@
return self._newOperation("create", d)
+
class Resetter(ProfileBase):
"""
A Calendar user who resets their account and re-downloads everything.
@@ -1026,6 +1029,7 @@
return self._client.reset()
+
class OperationLogger(SummarizingMixin):
"""
Profiles will initiate operations which may span multiple requests. Start
@@ -1053,7 +1057,7 @@
_fail_cut_off = 1.0 # % of total count at which failed requests will cause a failure
_fields_init = [
- ('operation', -25, '%-25s'),
+ ('operation', -30, '%-30s'),
('count', 8, '%8s'),
('failed', 8, '%8s'),
]
Modified: CalendarServer/trunk/contrib/performance/loadtest/sim.py
===================================================================
--- CalendarServer/trunk/contrib/performance/loadtest/sim.py 2015-11-30 20:25:51 UTC (rev 15347)
+++ CalendarServer/trunk/contrib/performance/loadtest/sim.py 2015-11-30 21:22:41 UTC (rev 15348)
@@ -17,7 +17,7 @@
##
from __future__ import print_function
-from collections import namedtuple
+from collections import namedtuple, defaultdict
from os import environ, mkdir
from os.path import isdir
from plistlib import readPlist
@@ -25,6 +25,7 @@
from sys import argv, stdout
from urlparse import urlsplit
from xml.parsers.expat import ExpatError
+import itertools
import json
import shutil
import socket
@@ -55,15 +56,20 @@
class _DirectoryRecord(object):
- def __init__(self, uid, password, commonName, email, guid):
+ def __init__(self, uid, password, commonName, email, guid, podID="PodA"):
self.uid = uid
self.password = password
self.commonName = commonName
self.email = email
self.guid = guid
+ self.podID = podID
+ def __repr__(self):
+ return "user='{}'".format(self.uid)
+
+
def safeDivision(value, total, factor=1):
return value * factor / total if total else 0
@@ -72,7 +78,7 @@
def generateRecords(
count, uidPattern="user%d", passwordPattern="user%d",
namePattern="User %d", emailPattern="user%d at example.com",
- guidPattern="user%d"
+ guidPattern="user%d", podID="PodA",
):
for i in xrange(count):
i += 1
@@ -81,22 +87,35 @@
name = namePattern % (i,)
email = emailPattern % (i,)
guid = guidPattern % (i,)
- yield _DirectoryRecord(uid, password, name, email, guid)
+ yield _DirectoryRecord(uid, password, name, email, guid, podID)
-def recordsFromCSVFile(path):
+def recordsFromCSVFile(path, interleavePods):
if path:
pathObj = FilePath(path)
else:
pathObj = FilePath(__file__).sibling("accounts.csv")
- return [
+ records = [
_DirectoryRecord(*line.decode('utf-8').split(u','))
for line
- in pathObj.getContent().splitlines()]
+ in pathObj.getContent().splitlines()
+ ]
+ if interleavePods:
+ # For Pods we re-order the record list so that we alternate between the pods
+ recordsByPod = defaultdict(list)
+ for record in records:
+ recordsByPod[record.podID].append(record)
+ records = []
+ for items in itertools.izip(*[recordsByPod[k] for k in sorted(recordsByPod.keys())]):
+ records.extend(items)
+ return records
+
+
+
class LagTrackingReactor(object):
"""
This reactor wraps another reactor and proxies all attribute
@@ -228,15 +247,14 @@
user information about the accounts on the server being put
under load.
"""
- def __init__(self, server, principalPathTemplate, webadminPort, serverStats, serializationPath, arrival, parameters, observers=None,
+ def __init__(self, servers, principalPathTemplate, webadminPort, serializationPath, arrival, parameters, observers=None,
records=None, reactor=None, runtime=None, workers=None,
configTemplate=None, workerID=None, workerCount=1):
if reactor is None:
from twisted.internet import reactor
- self.server = server
+ self.servers = servers
self.principalPathTemplate = principalPathTemplate
self.webadminPort = webadminPort
- self.serverStats = serverStats
self.serializationPath = serializationPath
self.arrival = arrival
self.parameters = parameters
@@ -278,7 +296,7 @@
workerID = config.get("workerID", 0)
workerCount = config.get("workerCount", 1)
configTemplate = None
- server = config.get('server', 'http://127.0.0.1:8008')
+ servers = config.get('servers')
principalPathTemplate = config.get('principalPathTemplate', '/principals/users/%s/')
serializationPath = None
@@ -324,7 +342,7 @@
[Eventer, Inviter, Accepter]))
else:
# Manager / observer process.
- server = ''
+ servers = {}
principalPathTemplate = ''
serializationPath = None
arrival = None
@@ -338,12 +356,6 @@
if config['webadmin']['enabled']:
webadminPort = config['webadmin']['HTTPPort']
- serverStats = None
- if 'serverStats' in config:
- if config['serverStats']['enabled']:
- serverStats = config['serverStats']
- serverStats['server'] = config['server'] if 'server' in config else ''
-
observers = []
if 'observers' in config:
for observer in config['observers']:
@@ -356,13 +368,13 @@
loader = config['accounts']['loader']
params = config['accounts']['params']
records.extend(namedAny(loader)(**params))
+ records = cls.filterRecords(records, servers)
output.write("Loaded {0} accounts.\n".format(len(records)))
return cls(
- server,
+ servers,
principalPathTemplate,
webadminPort,
- serverStats,
serializationPath,
arrival,
parameters,
@@ -403,6 +415,22 @@
@classmethod
+ def filterRecords(cls, records, servers):
+ """
+ Remove records that do not correspond to an enabled pod.
+
+ @param records: list of records to process
+ @type records: L{list}
+ @param servers: dictionary of servers
+ @type servers: L{dict}
+ """
+
+ # Get all enabled pod ids
+ enabled = set(filter(lambda podID: servers[podID]["enabled"], servers.keys()))
+ return filter(lambda record: record.podID in enabled, records)
+
+
+ @classmethod
def main(cls, args=None):
simulator = cls.fromCommandLine(args)
raise SystemExit(simulator.run())
@@ -416,7 +444,7 @@
Random(),
self.parameters,
self.reactor,
- self.server,
+ self.servers,
self.principalPathTemplate,
self.serializationPath,
self.workerID,
@@ -480,18 +508,19 @@
Capture server stats and stop.
"""
- if self.serverStats is not None:
- _ignore_scheme, hostname, _ignore_path, _ignore_query, _ignore_fragment = urlsplit(self.serverStats["server"])
- data = self.readStatsSock((hostname.split(":")[0], self.serverStats["Port"],), True)
- if "Failed" not in data:
- data = data["stats"]["5m"] if "stats" in data else data["5 Minutes"]
- result = (
- safeDivision(float(data["requests"]), 5 * 60),
- safeDivision(data["t"], data["requests"]),
- safeDivision(float(data["slots"]), data["requests"]),
- safeDivision(data["cpu"], data["requests"]),
- )
- msg(type="sim-expired", reason=result)
+ for podID, server in self.servers.items():
+ if server["enabled"] and server["stats"]["enabled"]:
+ _ignore_scheme, hostname, _ignore_path, _ignore_query, _ignore_fragment = urlsplit(server["uri"])
+ data = self.readStatsSock((hostname.split(":")[0], server["stats"]["Port"],), True)
+ if "Failed" not in data:
+ data = data["stats"]["5m"] if "stats" in data else data["5 Minutes"]
+ result = (
+ safeDivision(float(data["requests"]), 5 * 60),
+ safeDivision(data["t"], data["requests"]),
+ safeDivision(float(data["slots"]), data["requests"]),
+ safeDivision(data["cpu"], data["requests"]),
+ )
+ msg(type="sim-expired", podID=podID, reason=result)
def stopAndReport(self):
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.macosforge.org/pipermail/calendarserver-changes/attachments/20151130/90e24a4d/attachment-0001.html>
More information about the calendarserver-changes
mailing list