You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@shindig.apache.org by dd...@apache.org on 2012/09/19 18:33:37 UTC

svn commit: r1387677 - in /shindig/trunk/java/gadgets/src: main/java/org/apache/shindig/gadgets/uri/AllJsIframeVersioner.java test/java/org/apache/shindig/gadgets/uri/AllJsIframeVersionerTest.java

Author: ddumont
Date: Wed Sep 19 16:33:37 2012
New Revision: 1387677

URL: http://svn.apache.org/viewvc?rev=1387677&view=rev
Log:
SHINDIG-1867 - AllJsIFrameVersioner causes large memory allocation
Committed for Marshall Shi

Modified:
    shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/AllJsIframeVersioner.java
    shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/AllJsIframeVersionerTest.java

Modified: shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/AllJsIframeVersioner.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/AllJsIframeVersioner.java?rev=1387677&r1=1387676&r2=1387677&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/AllJsIframeVersioner.java (original)
+++ shindig/trunk/java/gadgets/src/main/java/org/apache/shindig/gadgets/uri/AllJsIframeVersioner.java Wed Sep 19 16:33:37 2012
@@ -18,6 +18,10 @@
  */
 package org.apache.shindig.gadgets.uri;
 
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
+import java.security.MessageDigest;
+
 import org.apache.shindig.common.uri.Uri;
 import org.apache.shindig.common.util.HashUtil;
 import org.apache.shindig.gadgets.features.FeatureRegistry;
@@ -47,11 +51,23 @@ public class AllJsIframeVersioner implem
 
   @Inject
   public AllJsIframeVersioner(FeatureRegistry registry) {
-    StringBuilder jsBuf = new StringBuilder();
+    String charset = Charset.defaultCharset().name();
+    MessageDigest digest = HashUtil.getMessageDigest();
+    digest.reset();
     for (FeatureResource resource : registry.getAllFeatures().getResources()) {
-      jsBuf.append(resource.getContent()).append(resource.getDebugContent());
+      // Emulate StringBuilder append of content
+      update(digest, resource.getContent(), charset);
+      update(digest, resource.getDebugContent(), charset);
+    }
+    allJsChecksum = HashUtil.bytesToHex(digest.digest());
+  }
+
+  private void update(MessageDigest digest, String content, String charset) {
+    try {
+      digest.update((content == null ? "null" : content).getBytes(charset));
+    } catch (UnsupportedEncodingException e) {
+      digest.update((content == null ? "null" : content).getBytes());
     }
-    allJsChecksum = HashUtil.checksum(jsBuf.toString().getBytes());
   }
 
   public String version(Uri gadgetUri, String container) {

Modified: shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/AllJsIframeVersionerTest.java
URL: http://svn.apache.org/viewvc/shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/AllJsIframeVersionerTest.java?rev=1387677&r1=1387676&r2=1387677&view=diff
==============================================================================
--- shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/AllJsIframeVersionerTest.java (original)
+++ shindig/trunk/java/gadgets/src/test/java/org/apache/shindig/gadgets/uri/AllJsIframeVersionerTest.java Wed Sep 19 16:33:37 2012
@@ -35,6 +35,9 @@ import org.junit.Test;
 
 import com.google.common.collect.Lists;
 
+import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
+import java.security.MessageDigest;
 import java.util.List;
 
 public class AllJsIframeVersionerTest {
@@ -49,7 +52,20 @@ public class AllJsIframeVersionerTest {
   public void setUp() {
     String featureContent = "THE_FEATURE_CONTENT";
     String debugContent = "FEATURE_DEBUG_CONTENT";
-    featureChecksum = HashUtil.checksum((featureContent + debugContent).getBytes());
+    String charset = Charset.defaultCharset().name();
+    MessageDigest digest = HashUtil.getMessageDigest();
+    try{
+      digest.update(featureContent.getBytes(charset));
+    } catch (UnsupportedEncodingException e) {
+      digest.update(featureContent.getBytes());
+    }
+    try{
+      digest.update(debugContent.getBytes(charset));
+    } catch (UnsupportedEncodingException e) {
+      digest.update(debugContent.getBytes());
+    }
+
+    featureChecksum = HashUtil.bytesToHex(digest.digest());
     FeatureRegistry registry = createMock(FeatureRegistry.class);
     FeatureResource resource = new FeatureResource.Simple(featureContent, debugContent, "js");
     List<FeatureResource> allResources = Lists.newArrayList(resource);