<style>
/* Changing the layout to use less space for mobiles */
@media screen and (max-device-width: 480px), screen and (-webkit-min-device-pixel-ratio: 2) {
#email-body { min-width: 30em !important; }
#email-page { padding: 8px !important; }
#email-banner { padding: 8px 8px 0 8px !important; }
#email-avatar { margin: 1px 8px 8px 0 !important; padding: 0 !important; }
#email-fields { padding: 0 8px 8px 8px !important; }
#email-gutter { width: 0 !important; }
}
</style>
<div id="email-body">
<table id="email-wrap" align="center" border="0" cellpadding="0" cellspacing="0" style="background-color:#f0f0f0;color:#000000;width:100%;">
<tr valign="top">
<td id="email-page" style="padding:16px !important;">
<table align="center" border="0" cellpadding="0" cellspacing="0" style="background-color:#ffffff;border:1px solid #bbbbbb;color:#000000;width:100%;">
<tr valign="top">
<td bgcolor="#ffffff" style="background-color:#ffffff;color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;line-height:1;"><img src="https://shibboleth.net/images/shib_240x83.png" alt="" style="vertical-align:top;" /></td>
</tr><tr valign="top">
<td id="email-banner" style="padding:32px 32px 0 32px;">
<table align="left" border="0" cellpadding="0" cellspacing="0" width="100%" style="width:100%;">
<tr valign="top">
<td style="color:#505050;font-family:Arial,FreeSans,Helvetica,sans-serif;padding:0;">
<div id="email-action" style="padding: 0 0 8px 0;font-size:12px;line-height:18px;">
<a class="user-hover" rel="putmanb@shibboleth.net" id="email_putmanb@shibboleth.net" href="https://issues.shibboleth.net/jira/secure/ViewProfile.jspa?name=putmanb%40shibboleth.net" style="color:#326ca6;">Brent Putman</a>
edited a comment on <img src="https://issues.shibboleth.net/jira/images/icons/issuetypes/task.png" height="16" width="16" border="0" align="absmiddle" alt="Task"> <a style='color:#326ca6;text-decoration:none;' href='https://issues.shibboleth.net/jira/browse/IDP-538'>IDP-538</a>
</div>
<div id="email-summary" style="font-size:16px;line-height:20px;padding:2px 0 16px 0;">
<a style='color:#326ca6;text-decoration:none;' href='https://issues.shibboleth.net/jira/browse/IDP-538'><strong>Use caching HttpClient by default</strong></a>
</div>
</td>
</tr>
</table>
</td>
</tr>
<tr valign="top">
<td id="email-fields" style="padding:0 32px 32px 32px;">
<table border="0" cellpadding="0" cellspacing="0" style="padding:0;text-align:left;width:100%;" width="100%">
<tr valign="top">
<td id="email-gutter" style="width:64px;white-space:nowrap;"></td>
<td>
<table border="0" cellpadding="0" cellspacing="0" width="100%">
<tr valign="top">
<td colspan="2" style="color:#000000;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:12px;padding:0 0 16px 0;width:100%;">
<div class="comment-block" style="background-color:#edf5ff;border:1px solid #dddddd;color:#000000;padding:12px;"><p>Spent some time looking at how the file-based caching actually works. Turns out, some good, some bad. Just recording research here.</p>
<p>I think technically multiple instances <b>could</b> share a cache dir b/c unlike what I thought, what's stored on disk is just the response bodies. The other details of the response are stored in memory, AFAICT. That is at least the case for the ManagedHttpCacheStorage impl of the HttpCacheStorage interface, which is typically used with file-based cache. (Not sure yet about the Ehcache impl, that looks perhaps more promising...)</p>
<p>This means for example that when you shutdown and restart, you're not priming the cache based on what's already on disk, etc. I had thought it did (like a browser), so that's a little disappointing.</p>
<p>Different instances probably wouldn't step on one another in writing to the same directory on disk. File names are like:</p>
<p>1418429901939.0000000000000001-f0b6804a.Brent-Putmans-Mac-Pro.local.-</p>
<p>which is dot or hypen separated:</p>
<ul>
        <li>System.currentTimeMillis</li>
        <li>a long, padded 16 hex chars, incrementing counter, specific to each FileResourceFactory</li>
        <li>a int, padded 8 hex chars, randomly generated</li>
        <li>InetAddress.getLocalHost().getHostName()</li>
        <li>a String "request ID" parameter passed in, which seems to be the first 100 chars of the request URI path, with '-' replacing non-filesystem-safe chars.</li>
</ul>
<p>That's the good news. The bad news is that:</p>
<p>1) All the interesting stuff (headers, etc) is in memory, so isn't cached on disk.</p>
<p>2) AFAICT the scheduled maintenance of the cache is largely (entirely?) up to the caller. This is managed by methods on ManagedHttpCacheStorage. Unfortunately right now our FileCachingHttpClientBuilder just new()'s this internally and doesn't provide a handle to it. So that would have to change in order for us to realistically use this. We'd probably need to inject the ManagedHttpCacheStorage on the builder, so we can keep a handle to it. We'd then have to have something scheduled that periodically calls cleanResources() on it, at least according to the Javadocs. I presume this does things like remove expired entries, but not 100% sure. Most significantly, you need to call shutdown() on the storage at the end of the lifecycle, else all the stuff on disk stays around and gets orphaned, as far as I can tell. So the latter kind of sucks.</p>
<p>It may be that their Ehcache impl of the HttpCacheStorage interface might be more interesting to look at, and with more features, since all the good stuff is in Ehcache itself presumably. But I'm wholly unfamiliar and it's pretty late to start introducing such a major piece of new technology. Unless someone else on the team is a Ehcache whiz...</p>
<p>So somewhat pessimistic at the moment. Maybe we should punt on file-based and go with in-memory?</p></div>
<div style="color:#505050;padding:4px 0 0 0;"> </div>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>
</td><!-- End #email-page -->
</tr>
<tr valign="top">
<td style="color:#505050;font-family:Arial,FreeSans,Helvetica,sans-serif;font-size:10px;line-height:14px;padding: 0 16px 16px 16px;text-align:center;">
This message is automatically generated by JIRA.<br />
If you think it was sent incorrectly, please contact your JIRA administrators<br />
For more information on JIRA, see: <a style='color:#326ca6;' href='http://www.atlassian.com/software/jira'>http://www.atlassian.com/software/jira</a>
</td>
</tr>
</table><!-- End #email-wrap -->
</div><!-- End #email-body -->