<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head><meta http-equiv=Content-Type content="text/html; charset=us-ascii"><meta name=Generator content="Microsoft Word 14 (filtered medium)"><style><!--
/* Font Definitions */
@font-face
        {font-family:Calibri;
        panose-1:2 15 5 2 2 2 4 3 2 4;}
@font-face
        {font-family:"Segoe UI";
        panose-1:2 11 5 2 4 2 4 2 2 3;}
@font-face
        {font-family:Consolas;
        panose-1:2 11 6 9 2 2 4 3 2 4;}
/* Style Definitions */
p.MsoNormal, li.MsoNormal, div.MsoNormal
        {margin:0in;
        margin-bottom:.0001pt;
        font-size:11.0pt;
        font-family:"Calibri","sans-serif";}
a:link, span.MsoHyperlink
        {mso-style-priority:99;
        color:blue;
        text-decoration:underline;}
a:visited, span.MsoHyperlinkFollowed
        {mso-style-priority:99;
        color:purple;
        text-decoration:underline;}
pre
        {mso-style-priority:99;
        mso-style-link:"HTML Preformatted Char";
        margin:0in;
        margin-bottom:.0001pt;
        font-size:10.0pt;
        font-family:"Courier New";}
span.EmailStyle17
        {mso-style-type:personal-compose;
        font-family:"Calibri","sans-serif";
        color:windowtext;}
span.pl-k
        {mso-style-name:pl-k;}
span.pl-en
        {mso-style-name:pl-en;}
span.pl-smi
        {mso-style-name:pl-smi;}
span.pl-c1
        {mso-style-name:pl-c1;}
span.pl-s
        {mso-style-name:pl-s;}
span.pl-pds
        {mso-style-name:pl-pds;}
span.pl-v
        {mso-style-name:pl-v;}
span.HTMLPreformattedChar
        {mso-style-name:"HTML Preformatted Char";
        mso-style-priority:99;
        mso-style-link:"HTML Preformatted";
        font-family:"Courier New";}
span.pln
        {mso-style-name:pln;}
span.pun
        {mso-style-name:pun;}
span.str
        {mso-style-name:str;}
span.com
        {mso-style-name:com;}
.MsoChpDefault
        {mso-style-type:export-only;}
@page WordSection1
        {size:8.5in 11.0in;
        margin:1.0in 1.0in 1.0in 1.0in;}
div.WordSection1
        {page:WordSection1;}
--></style><!--[if gte mso 9]><xml>
<o:shapedefaults v:ext="edit" spidmax="1026" />
</xml><![endif]--><!--[if gte mso 9]><xml>
<o:shapelayout v:ext="edit">
<o:idmap v:ext="edit" data="1" />
</o:shapelayout></xml><![endif]--></head><body lang=EN-US link=blue vlink=purple><div class=WordSection1><p class=MsoNormal>One of the benefits of Memcached is that it allows you to spread caching load across multiple servers. From looking at the config file for Calendar Server, it looked initially to me that it would support multiple Memcached servers, but now I guess I&#8217;m not so sure. &nbsp;This is how php handles multi-server configuration:<o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal style='background:#EFF0F1'><span style='font-size:10.0pt;font-family:Consolas;color:#303336;border:none windowtext 1.0pt;padding:0in;background:#EFF0F1'>$MEMCACHE_SERVERS = array(<o:p></o:p></span></p><p class=MsoNormal style='background:#EFF0F1'><span style='font-size:10.0pt;font-family:Consolas;color:#303336;border:none windowtext 1.0pt;padding:0in;background:#EFF0F1'>&nbsp;&nbsp;&nbsp; </span><span style='font-size:10.0pt;font-family:Consolas;color:#7D2727;border:none windowtext 1.0pt;padding:0in;background:#EFF0F1'>&quot;10.1.1.1&quot;</span><span style='font-size:10.0pt;font-family:Consolas;color:#303336;border:none windowtext 1.0pt;padding:0in;background:#EFF0F1'>, </span><span style='font-size:10.0pt;font-family:Consolas;color:#858C93;border:none windowtext 1.0pt;padding:0in;background:#EFF0F1'>//web1</span><span style='font-size:10.0pt;font-family:Consolas;color:#303336;border:none windowtext 1.0pt;padding:0in;background:#EFF0F1'><o:p></o:p></span></p><p class=MsoNormal style='background:#EFF0F1'><span style='font-size:10.0pt;font-family:Consolas;color:#303336;border:none windowtext 1.0pt;padding:0in;background:#EFF0F1'>&nbsp;&nbsp;&nbsp; </span><span style='font-size:10.0pt;font-family:Consolas;color:#7D2727;border:none windowtext 1.0pt;padding:0in;background:#EFF0F1'>&quot;10.1.1.2&quot;</span><span style='font-size:10.0pt;font-family:Consolas;color:#303336;border:none windowtext 1.0pt;padding:0in;background:#EFF0F1'>, </span><span style='font-size:10.0pt;font-family:Consolas;color:#858C93;border:none windowtext 1.0pt;padding:0in;background:#EFF0F1'>//web2</span><span style='font-size:10.0pt;font-family:Consolas;color:#303336;border:none windowtext 1.0pt;padding:0in;background:#EFF0F1'><o:p></o:p></span></p><p class=MsoNormal style='background:#EFF0F1'><span style='font-size:10.0pt;font-family:Consolas;color:#303336;border:none windowtext 1.0pt;padding:0in;background:#EFF0F1'> &nbsp;&nbsp;&nbsp;</span><span style='font-size:10.0pt;font-family:Consolas;color:#7D2727;border:none windowtext 1.0pt;padding:0in;background:#EFF0F1'>&quot;10.1.1.3&quot;</span><span style='font-size:10.0pt;font-family:Consolas;color:#303336;border:none windowtext 1.0pt;padding:0in;background:#EFF0F1'>, </span><span style='font-size:10.0pt;font-family:Consolas;color:#858C93;border:none windowtext 1.0pt;padding:0in;background:#EFF0F1'>//web3</span><span style='font-size:10.0pt;font-family:Consolas;color:#303336;border:none windowtext 1.0pt;padding:0in;background:#EFF0F1'><o:p></o:p></span></p><p class=MsoNormal style='background:#EFF0F1'><span style='font-size:10.0pt;font-family:Consolas;color:#303336;border:none windowtext 1.0pt;padding:0in;background:#EFF0F1'>);<o:p></o:p></span></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><p class=MsoNormal>I did a quick search of the code and I think I&#8217;ve found the connection method for memcache. I found this in txdav/who/cache.py so let me know if I&#8217;ve gone to the wrong place. It looks like it is only able to handle one server (hightlighted below). Am I missing some secret method to allow for multi-server memcached? <o:p></o:p></p><p class=MsoNormal><o:p>&nbsp;</o:p></p><table class=MsoNormalTable border=0 cellspacing=0 cellpadding=0 style='margin-left:6.75pt;background:white;border-collapse:collapse'><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'><p class=MsoNormal style='line-height:15.0pt'><span style='font-size:9.0pt;font-family:Consolas;color:#A71D5D'>def</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'> </span><span style='font-size:9.0pt;font-family:Consolas;color:#795DA3'>_getMemcacheClient</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'>(self, refresh</span><span style='font-size:9.0pt;font-family:Consolas;color:#A71D5D'>=</span><span style='font-size:9.0pt;font-family:Consolas;color:#0086B3'>False</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'>):<o:p></o:p></span></p></td></tr><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'><p class=MsoNormal style='line-height:15.0pt'><span style='font-size:9.0pt;font-family:Consolas;color:#333333'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style='font-size:9.0pt;font-family:Consolas;color:#183691'>&quot;&quot;&quot;</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'><o:p></o:p></span></p></td></tr><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'><p class=MsoNormal style='line-height:15.0pt'><span style='font-size:9.0pt;font-family:Consolas;color:#183691'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get the memcache client instance to use for caching.</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'><o:p></o:p></span></p></td></tr><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'></td></tr><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'><p class=MsoNormal style='line-height:15.0pt'><span style='font-size:9.0pt;font-family:Consolas;color:#183691'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @param refresh: whether or not to create a new memcache client</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'><o:p></o:p></span></p></td></tr><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'><p class=MsoNormal style='line-height:15.0pt'><span style='font-size:9.0pt;font-family:Consolas;color:#183691'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @type refresh: L{bool}</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'><o:p></o:p></span></p></td></tr><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'></td></tr><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'><p class=MsoNormal style='line-height:15.0pt'><span style='font-size:9.0pt;font-family:Consolas;color:#183691'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @return: the client to use</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'><o:p></o:p></span></p></td></tr><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'><p class=MsoNormal style='line-height:15.0pt'><span style='font-size:9.0pt;font-family:Consolas;color:#183691'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @rtype: L{memcacheclient.Client}</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'><o:p></o:p></span></p></td></tr><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'><p class=MsoNormal style='line-height:15.0pt'><span style='font-size:9.0pt;font-family:Consolas;color:#183691'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &quot;&quot;&quot;</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'><o:p></o:p></span></p></td></tr><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'><p class=MsoNormal style='line-height:15.0pt'><span style='font-size:9.0pt;font-family:Consolas;color:#333333'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style='font-size:9.0pt;font-family:Consolas;color:#A71D5D'>if</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'> refresh </span><span style='font-size:9.0pt;font-family:Consolas;color:#A71D5D'>or</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'> </span><span style='font-size:9.0pt;font-family:Consolas;color:#A71D5D'>not</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'> </span><span style='font-size:9.0pt;font-family:Consolas;color:#0086B3'>hasattr</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'>(</span><span style='font-size:9.0pt;font-family:Consolas;color:#0086B3'>self</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'>, </span><span style='font-size:9.0pt;font-family:Consolas;color:#183691'>&quot;memcacheClient&quot;</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'>):<o:p></o:p></span></p></td></tr><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'></td></tr><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'><p class=MsoNormal style='line-height:15.0pt'><span style='font-size:9.0pt;font-family:Consolas;color:#333333'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style='font-size:9.0pt;font-family:Consolas;color:#A71D5D'>if</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'> config.Memcached.Pools.Default.MemcacheSocket:<o:p></o:p></span></p></td></tr><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'><p class=MsoNormal style='line-height:15.0pt'><span style='font-size:9.0pt;font-family:Consolas;color:#333333'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client_addr </span><span style='font-size:9.0pt;font-family:Consolas;color:#A71D5D'>=</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'> </span><span style='font-size:9.0pt;font-family:Consolas;color:#183691'>&quot;unix:</span><span style='font-size:9.0pt;font-family:Consolas;color:#0086B3'>{}</span><span style='font-size:9.0pt;font-family:Consolas;color:#183691'>&quot;</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'>.format(config.Memcached.Pools.Default.MemcacheSocket)<o:p></o:p></span></p></td></tr><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'><p class=MsoNormal style='line-height:15.0pt'><span style='font-size:9.0pt;font-family:Consolas;color:#333333'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style='font-size:9.0pt;font-family:Consolas;color:#A71D5D'>else</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'>:<o:p></o:p></span></p></td></tr><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'><p class=MsoNormal style='line-height:15.0pt'><span style='font-size:9.0pt;font-family:Consolas;color:#333333;background:silver;mso-highlight:silver'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client_addr </span><span style='font-size:9.0pt;font-family:Consolas;color:#A71D5D;background:silver;mso-highlight:silver'>=</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333;background:silver;mso-highlight:silver'> </span><span style='font-size:9.0pt;font-family:Consolas;color:#183691;background:silver;mso-highlight:silver'>&quot;</span><span style='font-size:9.0pt;font-family:Consolas;color:#0086B3;background:silver;mso-highlight:silver'>{}</span><span style='font-size:9.0pt;font-family:Consolas;color:#183691;background:silver;mso-highlight:silver'>:</span><span style='font-size:9.0pt;font-family:Consolas;color:#0086B3;background:silver;mso-highlight:silver'>{}</span><span style='font-size:9.0pt;font-family:Consolas;color:#183691;background:silver;mso-highlight:silver'>&quot;</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333;background:silver;mso-highlight:silver'>.format(<o:p></o:p></span></p></td></tr><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'><p class=MsoNormal style='line-height:15.0pt'><span style='font-size:9.0pt;font-family:Consolas;color:#333333;background:silver;mso-highlight:silver'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; config.Memcached.Pools.Default.BindAddress,<o:p></o:p></span></p></td></tr><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'><p class=MsoNormal style='line-height:15.0pt'><span style='font-size:9.0pt;font-family:Consolas;color:#333333;background:silver;mso-highlight:silver'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; config.Memcached.Pools.Default.Port,<o:p></o:p></span></p></td></tr><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'><p class=MsoNormal style='line-height:15.0pt'><span style='font-size:9.0pt;font-family:Consolas;color:#333333;background:silver;mso-highlight:silver'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )<o:p></o:p></span></p></td></tr><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'><p class=MsoNormal style='line-height:15.0pt'><span style='font-size:9.0pt;font-family:Consolas;color:#333333'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style='font-size:9.0pt;font-family:Consolas;color:#0086B3'>self</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'>.memcacheClient </span><span style='font-size:9.0pt;font-family:Consolas;color:#A71D5D'>=</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'> ClientFactory.getClient([client_addr], </span><span style='font-size:9.0pt;font-family:Consolas;color:#ED6A43'>debug</span><span style='font-size:9.0pt;font-family:Consolas;color:#A71D5D'>=</span><span style='font-size:9.0pt;font-family:Consolas;color:#0086B3'>0</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'>, </span><span style='font-size:9.0pt;font-family:Consolas;color:#ED6A43'>pickleProtocol</span><span style='font-size:9.0pt;font-family:Consolas;color:#A71D5D'>=</span><span style='font-size:9.0pt;font-family:Consolas;color:#0086B3'>2</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'>)<o:p></o:p></span></p></td></tr><tr><td valign=top style='padding:0in 7.5pt 0in 7.5pt'><p class=MsoNormal style='line-height:15.0pt'><span style='font-size:9.0pt;font-family:Consolas;color:#333333'>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span style='font-size:9.0pt;font-family:Consolas;color:#A71D5D'>return</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'> </span><span style='font-size:9.0pt;font-family:Consolas;color:#0086B3'>self</span><span style='font-size:9.0pt;font-family:Consolas;color:#333333'>.memcacheClient<o:p></o:p></span></p></td></tr></table><p class=MsoNormal><o:p>&nbsp;</o:p></p></div></body></html>