You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@shindig.apache.org by lr...@apache.org on 2008/07/18 02:21:01 UTC
svn commit: r677786 - in /incubator/shindig/trunk/java/gadgets/src:
main/java/org/apache/shindig/gadgets/http/
main/java/org/apache/shindig/gadgets/servlet/
test/java/org/apache/shindig/gadgets/http/
Author: lryan
Date: Thu Jul 17 17:21:00 2008
New Revision: 677786
URL: http://svn.apache.org/viewvc?rev=677786&view=rev
Log:
Add support for open-proxy requests to force a minimum TTL for the fetched content to live in the HTTP cache.
Modified:
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/AbstractHttpCache.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpRequest.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java
incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/BasicHttpCacheTest.java
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/AbstractHttpCache.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/AbstractHttpCache.java?rev=677786&r1=677785&r2=677786&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/AbstractHttpCache.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/AbstractHttpCache.java Thu Jul 17 17:21:00 2008
@@ -43,6 +43,13 @@
public HttpResponse addResponse(HttpRequest request, HttpResponse response) {
if (canCacheRequest(request)) {
+
+ // If the request forces a minimum TTL for the cached content then have
+ // the response honor it
+ if (response != null) {
+ response.setForcedCacheTTL(request.getOptions().minCacheTtl);
+ }
+
// !!! Note that we only rewrite cacheable content. Move this call above the if
// to rewrite all content that passes through the cache regardless of cacheability
rewrite(request, response);
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=677786&r1=677785&r2=677786&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 Thu Jul 17 17:21:00 2008
@@ -19,8 +19,8 @@
package org.apache.shindig.gadgets.http;
-import org.apache.shindig.gadgets.rewrite.ContentRewriter;
import org.apache.commons.lang.ArrayUtils;
+import org.apache.shindig.gadgets.rewrite.ContentRewriter;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
@@ -29,9 +29,9 @@
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
-import java.util.TreeMap;
import java.util.List;
import java.util.Map;
+import java.util.TreeMap;
/**
* Holds request data for passing to a RemoteContentFetcher.
@@ -358,6 +358,7 @@
public boolean ignoreCache = false;
public boolean ownerSigned = true;
public boolean viewerSigned = true;
+ public int minCacheTtl = -1;
public ContentRewriter rewriter = null;
public String rewriteMimeType = null;
public URI gadgetUri;
@@ -372,6 +373,7 @@
this.ownerSigned = copyFrom.ownerSigned;
this.viewerSigned = copyFrom.viewerSigned;
this.rewriter = copyFrom.rewriter;
+ this.minCacheTtl = copyFrom.minCacheTtl;
if (copyFrom.gadgetUri != null) {
this.gadgetUri = URI.create(copyFrom.gadgetUri.toString());
}
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java?rev=677786&r1=677785&r2=677786&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/http/HttpResponse.java Thu Jul 17 17:21:00 2008
@@ -17,14 +17,16 @@
*/
package org.apache.shindig.gadgets.http;
-import org.apache.shindig.common.util.DateUtil;
-import org.apache.commons.lang.ArrayUtils;
-
+import com.google.common.collect.Lists;
import com.google.inject.Inject;
import com.google.inject.name.Named;
+
import com.ibm.icu.text.CharsetDetector;
import com.ibm.icu.text.CharsetMatch;
+import org.apache.commons.lang.ArrayUtils;
+import org.apache.shindig.common.util.DateUtil;
+
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import java.nio.ByteBuffer;
@@ -318,6 +320,19 @@
}
/**
+ * Set the externally forced minimum cache min-TTL
+ * This is derived from the "refresh" param on OpenProxy request
+ * Value is in seconds
+ */
+ public void setForcedCacheTTL(int forcedCacheTtl) {
+ if (forcedCacheTtl > 0) {
+ this.headers.remove("Expires");
+ this.headers.remove("Pragma");
+ this.headers.put("Cache-Control", Lists.newArrayList("public,max-age=" + forcedCacheTtl));
+ }
+ }
+
+ /**
* @return consolidated cache expiration time or -1
*/
public long getCacheExpiration() {
Modified: incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java?rev=677786&r1=677785&r2=677786&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/servlet/ProxyHandler.java Thu Jul 17 17:21:00 2008
@@ -18,6 +18,9 @@
*/
package org.apache.shindig.gadgets.servlet;
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
import org.apache.shindig.gadgets.GadgetException;
import org.apache.shindig.gadgets.LockedDomainService;
import org.apache.shindig.gadgets.http.HttpFetcher;
@@ -25,9 +28,6 @@
import org.apache.shindig.gadgets.http.HttpResponse;
import org.apache.shindig.gadgets.rewrite.ContentRewriter;
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
-
import java.io.IOException;
import java.net.URI;
import java.util.HashSet;
@@ -94,6 +94,17 @@
// a content type like text/html which unfortunately happens all too often
options.rewriteMimeType = request.getParameter(REWRITE_MIME_TYPE_PARAM);
+ // If the proxy request specifies a refresh param then we want to force the min TTL for
+ // the retrieved entry in the cache regardless of the headers on the content when it
+ // is fetched from the original source.
+ if (request.getParameter(REFRESH_PARAM) != null) {
+ try {
+ options.minCacheTtl = Integer.parseInt(request.getParameter(REFRESH_PARAM));
+ } catch (NumberFormatException nfe) {
+ // Ignore
+ }
+ }
+
return new HttpRequest(url, options);
}
Modified: incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/BasicHttpCacheTest.java
URL: http://svn.apache.org/viewvc/incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/BasicHttpCacheTest.java?rev=677786&r1=677785&r2=677786&view=diff
==============================================================================
--- incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/BasicHttpCacheTest.java (original)
+++ incubator/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/http/BasicHttpCacheTest.java Thu Jul 17 17:21:00 2008
@@ -17,11 +17,11 @@
*/
package org.apache.shindig.gadgets.http;
-import org.apache.shindig.common.util.DateUtil;
-import org.apache.commons.lang.ArrayUtils;
-
import junit.framework.TestCase;
+import org.apache.commons.lang.ArrayUtils;
+import org.apache.shindig.common.util.DateUtil;
+
import java.net.URI;
import java.util.Arrays;
import java.util.Date;
@@ -161,4 +161,20 @@
assertNull(cache.getResponse(req));
}
+ public void testCacheableWithForcedMinTTL() {
+ HttpRequest req = createRequest("GET");
+ // in seconds
+ req.getOptions().minCacheTtl = 5;
+ HttpResponse resp = createExpiresResponse(200, System.currentTimeMillis());
+ cache.addResponse(req, resp);
+ try {
+ synchronized (cache) {
+ cache.wait(2000L);
+ }
+ } catch (InterruptedException ie) {
+ fail("Failed to wait for cache");
+ }
+ assertNotNull(cache.getResponse(req));
+ }
+
}