You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by et...@apache.org on 2008/10/14 09:02:25 UTC
svn commit: r704329 - in /incubator/shindig/trunk/java/gadgets/src:
main/java/org/apache/shindig/gadgets/
main/java/org/apache/shindig/gadgets/http/
test/java/org/apache/shindig/gadgets/
Author: etnu
Date: Tue Oct 14 00:02:24 2008
New Revision: 704329
URL: http://svn.apache.org/viewvc?rev=704329&view=rev
Log:
Ensured that forced TTLs on manifests will propagate to underlying HTTP caches. This will only apply when the upper and lower bounds of the cache are identical.
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/BasicGadgetSpecFactory.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/BasicMessageBundleFactory.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpRequest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicGadgetSpecFactoryTest.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicMessageBundleFactoryTest.java
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/BasicGadgetSpecFactory.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/BasicGadgetSpecFactory.java?rev=704329&r1=704328&r2=704329&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/BasicGadgetSpecFactory.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/BasicGadgetSpecFactory.java Tue Oct 14 00:02:24 2008
@@ -45,6 +45,8 @@
private final HttpFetcher fetcher;
private final TtlCache<Uri, GadgetSpec> ttlCache;
+ private final long minTtl;
+ private final long maxTtl;
@Inject
public BasicGadgetSpecFactory(HttpFetcher fetcher,
@@ -53,6 +55,8 @@
@Named("shindig.gadget-spec.cache.minTTL") long minTtl,
@Named("shindig.gadget-spec.cache.maxTTL") long maxTtl) {
this.fetcher = fetcher;
+ this.minTtl = minTtl;
+ this.maxTtl = maxTtl;
this.ttlCache = new TtlCache<Uri, GadgetSpec>(cacheProvider, capacity, minTtl, maxTtl);
}
@@ -103,6 +107,12 @@
*/
private GadgetSpec fetchObjectAndCache(Uri url, boolean ignoreCache) throws GadgetException {
HttpRequest request = new HttpRequest(url).setIgnoreCache(ignoreCache);
+ if (minTtl == maxTtl) {
+ // Since we don't allow any variance in cache time, we should just force the cache time
+ // globally. This ensures propagation to shared caches when this is set.
+ request.setCacheTtl((int) (maxTtl / 1000));
+ }
+
HttpResponse response = fetcher.fetch(request);
if (response.getHttpStatusCode() != HttpResponse.SC_OK) {
throw new GadgetException(GadgetException.Code.FAILED_TO_RETRIEVE_CONTENT,
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/BasicMessageBundleFactory.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/BasicMessageBundleFactory.java?rev=704329&r1=704328&r2=704329&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/BasicMessageBundleFactory.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/BasicMessageBundleFactory.java Tue Oct 14 00:02:24 2008
@@ -41,6 +41,8 @@
static final Logger logger = Logger.getLogger(BasicMessageBundleFactory.class.getName());
private final HttpFetcher fetcher;
private final TtlCache<Uri, MessageBundle> ttlCache;
+ private final long minTtl;
+ private final long maxTtl;
@Inject
public BasicMessageBundleFactory(HttpFetcher fetcher,
@@ -49,6 +51,8 @@
@Named("shindig.message-bundle.cache.minTTL")long minTtl,
@Named("shindig.message-bundle.cache.maxTTL")long maxTtl) {
this.fetcher = fetcher;
+ this.minTtl = minTtl;
+ this.maxTtl = maxTtl;
this.ttlCache = new TtlCache<Uri, MessageBundle>(cacheProvider, capacity, minTtl, maxTtl);
}
@@ -84,6 +88,12 @@
throws GadgetException {
Uri url = locale.getMessages();
HttpRequest request = new HttpRequest(url).setIgnoreCache(ignoreCache);
+ if (minTtl == maxTtl) {
+ // Since we don't allow any variance in cache time, we should just force the cache time
+ // globally. This ensures propagation to shared caches when this is set.
+ request.setCacheTtl((int) (maxTtl / 1000));
+ }
+
HttpResponse response = fetcher.fetch(request);
if (response.getHttpStatusCode() != HttpResponse.SC_OK) {
throw new GadgetException(GadgetException.Code.FAILED_TO_RETRIEVE_CONTENT,
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpRequest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpRequest.java?rev=704329&r1=704328&r2=704329&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpRequest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpRequest.java Tue Oct 14 00:02:24 2008
@@ -198,8 +198,8 @@
}
/**
- * @param cacheTtl The amount of time to cache the result object for, in milliseconds. If set to
- * -1, HTTP cache control headers will be honored. Otherwise objects will be cached for the time
+ * @param cacheTtl The amount of time to cache the result object for, in seconds. If set to -1,
+ * HTTP cache control headers will be honored. Otherwise objects will be cached for the time
* specified.
*/
public HttpRequest setCacheTtl(int cacheTtl) {
@@ -356,7 +356,7 @@
}
/**
- * @return The amount of time to cache any response objects for, in milliseconds.
+ * @return The amount of time to cache any response objects for, in seconds.
*/
public int getCacheTtl() {
return cacheTtl;
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicGadgetSpecFactoryTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicGadgetSpecFactoryTest.java?rev=704329&r1=704328&r2=704329&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicGadgetSpecFactoryTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicGadgetSpecFactoryTest.java Tue Oct 14 00:02:24 2008
@@ -182,6 +182,22 @@
}
@Test
+ public void identicalMaxTtlAndMinTtlPropagatesToFetcher() throws Exception {
+ CapturingFetcher capturingFetcher = new CapturingFetcher();
+
+ BasicGadgetSpecFactory forcedCacheFactory
+ = new BasicGadgetSpecFactory(capturingFetcher, cacheProvider, 5, 10000, 10000);
+
+ new HttpRequest(SPEC_URL)
+ .setIgnoreCache(false)
+ .setCacheTtl(10);
+
+ forcedCacheFactory.getGadgetSpec(SPEC_URL.toJavaUri(), false);
+
+ assertEquals(10, capturingFetcher.request.getCacheTtl());
+ }
+
+ @Test
public void typeUrlNotFetchedRemote() throws Exception {
HttpRequest request = new HttpRequest(SPEC_URL).setIgnoreCache(true);
HttpResponse response = new HttpResponse(URL_SPEC_XML);
@@ -212,4 +228,13 @@
specFactory.getGadgetSpec(SPEC_URL.toJavaUri(), true);
}
+
+ private static class CapturingFetcher implements HttpFetcher {
+ HttpRequest request;
+
+ public HttpResponse fetch(HttpRequest request) {
+ this.request = request;
+ return new HttpResponse(LOCAL_SPEC_XML);
+ }
+ }
}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicMessageBundleFactoryTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicMessageBundleFactoryTest.java?rev=704329&r1=704328&r2=704329&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicMessageBundleFactoryTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/BasicMessageBundleFactoryTest.java Tue Oct 14 00:02:24 2008
@@ -20,8 +20,8 @@
import static org.easymock.EasyMock.expect;
import static org.easymock.EasyMock.isA;
-import static org.easymock.EasyMock.replay;
import static org.easymock.EasyMock.verify;
+import static org.easymock.classextension.EasyMock.replay;
import static org.junit.Assert.assertEquals;
import org.apache.shindig.common.cache.CacheProvider;
@@ -146,4 +146,29 @@
assertEquals(MSG_0_VALUE, bundle.getMessages().get(MSG_0_NAME));
}
+
+ @Test
+ public void identicalMaxTtlAndMinTtlPropagatesToFetcher() throws Exception {
+ CapturingFetcher capturingFetcher = new CapturingFetcher();
+
+ BasicMessageBundleFactory forcedBundleFactory
+ = new BasicMessageBundleFactory(capturingFetcher, cacheProvider, 5, 10000, 10000);
+
+ HttpRequest request = new HttpRequest(BUNDLE_URI)
+ .setIgnoreCache(false)
+ .setCacheTtl(10);
+
+ forcedBundleFactory.getBundle(gadgetSpec, LOCALE, false);
+
+ assertEquals(10, capturingFetcher.request.getCacheTtl());
+ }
+
+ private static class CapturingFetcher implements HttpFetcher {
+ HttpRequest request;
+
+ public HttpResponse fetch(HttpRequest request) {
+ this.request = request;
+ return new HttpResponse(BASIC_BUNDLE);
+ }
+ }
}