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);
+    }
+  }
 }