<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><br class=""><div><blockquote type="cite" class=""><div class="">On Feb 20, 2017, at 10:08 AM, Rob Archibald &lt;<a href="mailto:rob@robarchibald.com" class="">rob@robarchibald.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><div class="WordSection1" style="page: WordSection1; font-family: Geneva; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span style="color: rgb(31, 73, 125);" class="">Ok, makes sense, but that’s a bummer, especially since the memcache library in python already supports multi-server memcached (<a href="http://stackoverflow.com/questions/4038094/using-multiple-memcache-servers-in-a-pool" style="color: purple; text-decoration: underline;" class="">http://stackoverflow.com/questions/4038094/using-multiple-memcache-servers-in-a-pool</a>).<span class="Apple-converted-space">&nbsp;</span></span></div></div></div></blockquote><div><br class=""></div><div>Hashing is a good and useful feature of some memcache clients, and is a feature of "python-memcached" which provides the "memcache" module seen in the stackoverflow post you linked. CalendarServer doesn't use this module, so we can't get that behavior for free or cheap. We kind of have our own memcache client - I think we even have multiple memcache implementations for historical (read: bad) reasons. What we have isn't ideal, but the features we lack in this area are easily implemented out-of-band.</div><div><br class=""></div><blockquote type="cite" class=""><div class="WordSection1" style="page: WordSection1; font-family: Geneva; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span style="color: rgb(31, 73, 125);" class=""><o:p class=""></o:p></span></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span style="color: rgb(31, 73, 125);" class=""><o:p class="">&nbsp;</o:p></span><span style="color: rgb(31, 73, 125); font-size: 11pt;" class="">Not sure yet, but I’ll probably just use</span>&nbsp;<a href="https://github.com/twitter/twemproxy" class="" style="font-size: 11pt; color: purple;">https://github.com/twitter/twemproxy</a>&nbsp;<span style="color: rgb(31, 73, 125); font-size: 11pt;" class="">which is a reverse proxy to actual memcached servers. It’s written by Twitter and works well from what I’ve read. I tried using</span>&nbsp;<a href="https://github.com/zobo/mrproxy" class="" style="font-size: 11pt; color: purple;">https://github.com/zobo/mrproxy</a>&nbsp;<span style="color: rgb(31, 73, 125); font-size: 11pt;" class="">which proxies memcached protocol to Redis since I already had Redis servers but had issues getting that working for some reason. I’ll report back when I get one or the other working in case others are interested.</span></div></div></blockquote><div><br class=""></div><div>Please do.</div><div><br class=""></div><div>Thanks,</div><div>-dre</div><br class=""><blockquote type="cite" class=""><div class="WordSection1" style="page: WordSection1; font-family: Geneva; font-size: 13px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;"><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span style="color: rgb(31, 73, 125);" class=""><o:p class="">&nbsp;</o:p></span></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span style="color: rgb(31, 73, 125);" class="">Thanks!<o:p class=""></o:p></span></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span style="color: rgb(31, 73, 125);" class="">Rob Archibald<o:p class=""></o:p></span></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span style="color: rgb(31, 73, 125);" class=""><o:p class="">&nbsp;</o:p></span></div><div class=""><div style="border-style: solid none none; border-top-width: 1pt; border-top-color: rgb(181, 196, 223); padding: 3pt 0in 0in;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><b class=""><span style="font-size: 10pt; font-family: Tahoma, sans-serif;" class="">From:</span></b><span style="font-size: 10pt; font-family: Tahoma, sans-serif;" class=""><span class="Apple-converted-space">&nbsp;</span><a href="mailto:dre@apple.com" class="">dre@apple.com</a> [<a href="mailto:dre@apple.com" class="">mailto:dre@apple.com</a>]<span class="Apple-converted-space">&nbsp;</span><br class=""><b class="">Sent:</b><span class="Apple-converted-space">&nbsp;</span>Monday, February 20, 2017 9:46 AM<br class=""><b class="">To:</b><span class="Apple-converted-space">&nbsp;</span>Rob Archibald<br class=""><b class="">Cc:</b><span class="Apple-converted-space">&nbsp;</span><a href="mailto:calendarserver-users@lists.macosforge.org" class="">calendarserver-users@lists.macosforge.org</a><br class=""><b class="">Subject:</b><span class="Apple-converted-space">&nbsp;</span>Re: [CalendarServer-users] Multiple Memcached servers<o:p class=""></o:p></span></div></div></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class="">&nbsp;</o:p></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">Hi,<o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class="">&nbsp;</o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">CalendarServer doesn't have the ability to directly access more than one memcache server per pool, and although you can bind "HandleCacheTypes" to specific pools, that doesn't let you distribute data within a cachetype.<o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class="">&nbsp;</o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">To properly spread the load across multiple memcache servers, there needs to be a strategy for mapping the keys to one of the memcache services, which is already a feature of couchbase, and is known to work with CalendarServer. In this setup, couchbase reverse proxies to other cousebase nodes for a non local key, a behavior implemented both in their server and / or a local process that has no data store and is just a proxy.<o:p class=""></o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><o:p class="">&nbsp;</o:p></div></div><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">-dre<o:p class=""></o:p></div></div><div class=""><p class="MsoNormal" style="margin: 0in 0in 12pt; font-size: 11pt; font-family: Calibri, sans-serif;"><br class="">On Feb 18, 2017, at 7:18 PM, Rob Archibald &lt;<a href="mailto:rob@robarchibald.com" style="color: purple; text-decoration: underline;" class="">rob@robarchibald.com</a>&gt; wrote:<o:p class=""></o:p></p></div><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class=""><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">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’m not so sure. &nbsp;This is how php handles multi-server configuration:<o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">&nbsp;<o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; background-color: rgb(239, 240, 241);" class=""><span style="font-size: 10pt; font-family: Consolas; color: rgb(48, 51, 54); border: 1pt none windowtext; padding: 0in; background-color: rgb(239, 240, 241); background-position: initial initial; background-repeat: initial initial;" class="">$MEMCACHE_SERVERS = array(</span><o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; background-color: rgb(239, 240, 241);" class=""><span style="font-size: 10pt; font-family: Consolas; color: rgb(48, 51, 54); border: 1pt none windowtext; padding: 0in; background-color: rgb(239, 240, 241); background-position: initial initial; background-repeat: initial initial;" class="">&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 10pt; font-family: Consolas; color: rgb(125, 39, 39); border: 1pt none windowtext; padding: 0in; background-color: rgb(239, 240, 241); background-position: initial initial; background-repeat: initial initial;" class="">"10.1.1.1"</span><span style="font-size: 10pt; font-family: Consolas; color: rgb(48, 51, 54); border: 1pt none windowtext; padding: 0in; background-color: rgb(239, 240, 241); background-position: initial initial; background-repeat: initial initial;" class="">,<span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 10pt; font-family: Consolas; color: rgb(133, 140, 147); border: 1pt none windowtext; padding: 0in; background-color: rgb(239, 240, 241); background-position: initial initial; background-repeat: initial initial;" class="">//web1</span><o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; background-color: rgb(239, 240, 241);" class=""><span style="font-size: 10pt; font-family: Consolas; color: rgb(48, 51, 54); border: 1pt none windowtext; padding: 0in; background-color: rgb(239, 240, 241); background-position: initial initial; background-repeat: initial initial;" class="">&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 10pt; font-family: Consolas; color: rgb(125, 39, 39); border: 1pt none windowtext; padding: 0in; background-color: rgb(239, 240, 241); background-position: initial initial; background-repeat: initial initial;" class="">"10.1.1.2"</span><span style="font-size: 10pt; font-family: Consolas; color: rgb(48, 51, 54); border: 1pt none windowtext; padding: 0in; background-color: rgb(239, 240, 241); background-position: initial initial; background-repeat: initial initial;" class="">,<span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 10pt; font-family: Consolas; color: rgb(133, 140, 147); border: 1pt none windowtext; padding: 0in; background-color: rgb(239, 240, 241); background-position: initial initial; background-repeat: initial initial;" class="">//web2</span><o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; background-color: rgb(239, 240, 241);" class=""><span style="font-size: 10pt; font-family: Consolas; color: rgb(48, 51, 54); border: 1pt none windowtext; padding: 0in; background-color: rgb(239, 240, 241); background-position: initial initial; background-repeat: initial initial;" class="">&nbsp;&nbsp;&nbsp;</span><span style="font-size: 10pt; font-family: Consolas; color: rgb(125, 39, 39); border: 1pt none windowtext; padding: 0in; background-color: rgb(239, 240, 241); background-position: initial initial; background-repeat: initial initial;" class="">"10.1.1.3"</span><span style="font-size: 10pt; font-family: Consolas; color: rgb(48, 51, 54); border: 1pt none windowtext; padding: 0in; background-color: rgb(239, 240, 241); background-position: initial initial; background-repeat: initial initial;" class="">,<span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 10pt; font-family: Consolas; color: rgb(133, 140, 147); border: 1pt none windowtext; padding: 0in; background-color: rgb(239, 240, 241); background-position: initial initial; background-repeat: initial initial;" class="">//web3</span><o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; background-color: rgb(239, 240, 241);" class=""><span style="font-size: 10pt; font-family: Consolas; color: rgb(48, 51, 54); border: 1pt none windowtext; padding: 0in; background-color: rgb(239, 240, 241); background-position: initial initial; background-repeat: initial initial;" class="">);</span><o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">&nbsp;<o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">I did a quick search of the code and I think I’ve found the connection method for memcache. I found this in txdav/who/cache.py so let me know if I’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?<span class="Apple-converted-space">&nbsp;</span><o:p class=""></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">&nbsp;<o:p class=""></o:p></div><table class="MsoNormalTable" border="0" cellspacing="0" cellpadding="0" style="margin-left: 6.75pt; background-color: white; border-collapse: collapse; background-position: initial initial; background-repeat: initial initial;"><tbody class=""><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; line-height: 15pt;" class=""><span style="font-size: 9pt; font-family: Consolas; color: rgb(167, 29, 93);" class="">def</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class=""><span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 9pt; font-family: Consolas; color: rgb(121, 93, 163);" class="">_getMemcacheClient</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class="">(self, refresh</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(167, 29, 93);" class="">=</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(0, 134, 179);" class="">False</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class="">):</span><o:p class=""></o:p></div></td></tr><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; line-height: 15pt;" class=""><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 9pt; font-family: Consolas; color: rgb(24, 54, 145);" class="">"""</span><o:p class=""></o:p></div></td></tr><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; line-height: 15pt;" class=""><span style="font-size: 9pt; font-family: Consolas; color: rgb(24, 54, 145);" class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Get the memcache client instance to use for caching.</span><o:p class=""></o:p></div></td></tr><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""></td></tr><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; line-height: 15pt;" class=""><span style="font-size: 9pt; font-family: Consolas; color: rgb(24, 54, 145);" class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @param refresh: whether or not to create a new memcache client</span><o:p class=""></o:p></div></td></tr><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; line-height: 15pt;" class=""><span style="font-size: 9pt; font-family: Consolas; color: rgb(24, 54, 145);" class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @type refresh: L{bool}</span><o:p class=""></o:p></div></td></tr><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""></td></tr><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; line-height: 15pt;" class=""><span style="font-size: 9pt; font-family: Consolas; color: rgb(24, 54, 145);" class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @return: the client to use</span><o:p class=""></o:p></div></td></tr><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; line-height: 15pt;" class=""><span style="font-size: 9pt; font-family: Consolas; color: rgb(24, 54, 145);" class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; @rtype: L{memcacheclient.Client}</span><o:p class=""></o:p></div></td></tr><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; line-height: 15pt;" class=""><span style="font-size: 9pt; font-family: Consolas; color: rgb(24, 54, 145);" class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; """</span><o:p class=""></o:p></div></td></tr><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; line-height: 15pt;" class=""><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 9pt; font-family: Consolas; color: rgb(167, 29, 93);" class="">if</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class=""><span class="Apple-converted-space">&nbsp;</span>refresh<span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 9pt; font-family: Consolas; color: rgb(167, 29, 93);" class="">or</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class=""><span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 9pt; font-family: Consolas; color: rgb(167, 29, 93);" class="">not</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class=""><span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 9pt; font-family: Consolas; color: rgb(0, 134, 179);" class="">hasattr</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class="">(</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(0, 134, 179);" class="">self</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class="">,<span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 9pt; font-family: Consolas; color: rgb(24, 54, 145);" class="">"memcacheClient"</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class="">):</span><o:p class=""></o:p></div></td></tr><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""></td></tr><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; line-height: 15pt;" class=""><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 9pt; font-family: Consolas; color: rgb(167, 29, 93);" class="">if</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class=""><span class="Apple-converted-space">&nbsp;</span>config.Memcached.Pools.Default.MemcacheSocket:</span><o:p class=""></o:p></div></td></tr><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; line-height: 15pt;" class=""><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client_addr<span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 9pt; font-family: Consolas; color: rgb(167, 29, 93);" class="">=</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class=""><span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 9pt; font-family: Consolas; color: rgb(24, 54, 145);" class="">"unix:</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(0, 134, 179);" class="">{}</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(24, 54, 145);" class="">"</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class="">.format(config.Memcached.Pools.Default.MemcacheSocket)</span><o:p class=""></o:p></div></td></tr><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; line-height: 15pt;" class=""><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 9pt; font-family: Consolas; color: rgb(167, 29, 93);" class="">else</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class="">:</span><o:p class=""></o:p></div></td></tr><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; line-height: 15pt;" class=""><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51); background-color: silver; background-position: initial initial; background-repeat: initial initial;" class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; client_addr<span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 9pt; font-family: Consolas; color: rgb(167, 29, 93); background-color: silver; background-position: initial initial; background-repeat: initial initial;" class="">=</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51); background-color: silver; background-position: initial initial; background-repeat: initial initial;" class=""><span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 9pt; font-family: Consolas; color: rgb(24, 54, 145); background-color: silver; background-position: initial initial; background-repeat: initial initial;" class="">"</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(0, 134, 179); background-color: silver; background-position: initial initial; background-repeat: initial initial;" class="">{}</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(24, 54, 145); background-color: silver; background-position: initial initial; background-repeat: initial initial;" class="">:</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(0, 134, 179); background-color: silver; background-position: initial initial; background-repeat: initial initial;" class="">{}</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(24, 54, 145); background-color: silver; background-position: initial initial; background-repeat: initial initial;" class="">"</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51); background-color: silver; background-position: initial initial; background-repeat: initial initial;" class="">.format(</span><o:p class=""></o:p></div></td></tr><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; line-height: 15pt;" class=""><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51); background-color: silver; background-position: initial initial; background-repeat: initial initial;" class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; config.Memcached.Pools.Default.BindAddress,</span><o:p class=""></o:p></div></td></tr><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; line-height: 15pt;" class=""><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51); background-color: silver; background-position: initial initial; background-repeat: initial initial;" class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; config.Memcached.Pools.Default.Port,</span><o:p class=""></o:p></div></td></tr><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; line-height: 15pt;" class=""><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51); background-color: silver; background-position: initial initial; background-repeat: initial initial;" class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; )</span><o:p class=""></o:p></div></td></tr><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; line-height: 15pt;" class=""><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 9pt; font-family: Consolas; color: rgb(0, 134, 179);" class="">self</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class="">.memcacheClient<span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 9pt; font-family: Consolas; color: rgb(167, 29, 93);" class="">=</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class=""><span class="Apple-converted-space">&nbsp;</span>ClientFactory.getClient([client_addr],<span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 9pt; font-family: Consolas; color: rgb(237, 106, 67);" class="">debug</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(167, 29, 93);" class="">=</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(0, 134, 179);" class="">0</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class="">,<span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 9pt; font-family: Consolas; color: rgb(237, 106, 67);" class="">pickleProtocol</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(167, 29, 93);" class="">=</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(0, 134, 179);" class="">2</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class="">)</span><o:p class=""></o:p></div></td></tr><tr class=""><td valign="top" style="padding: 0in 7.5pt;" class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif; line-height: 15pt;" class=""><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class="">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 9pt; font-family: Consolas; color: rgb(167, 29, 93);" class="">return</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class=""><span class="Apple-converted-space">&nbsp;</span></span><span style="font-size: 9pt; font-family: Consolas; color: rgb(0, 134, 179);" class="">self</span><span style="font-size: 9pt; font-family: Consolas; color: rgb(51, 51, 51);" class="">.memcacheClient</span><o:p class=""></o:p></div></td></tr></tbody></table><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class="">&nbsp;<o:p class=""></o:p></div></div></blockquote><blockquote style="margin-top: 5pt; margin-bottom: 5pt;" class=""><div class=""><div style="margin: 0in 0in 0.0001pt; font-size: 11pt; font-family: Calibri, sans-serif;" class=""><span style="font-size: 12pt; font-family: 'Times New Roman', serif;" class="">_______________________________________________<br class="">calendarserver-users mailing list<br class=""><a href="mailto:calendarserver-users@lists.macosforge.org" style="color: purple; text-decoration: underline;" class="">calendarserver-users@lists.macosforge.org</a><br class=""><a href="https://lists.macosforge.org/mailman/listinfo/calendarserver-users" style="color: purple; text-decoration: underline;" class="">https://lists.macosforge.org/mailman/listinfo/calendarserver-users</a></span></div></div></blockquote></div></blockquote></div><br class=""></body></html>