You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ch...@apache.org on 2016/02/10 06:53:31 UTC

svn commit: r1729534 - in /sling/trunk/contrib/extensions/tracer/src: main/java/org/apache/sling/tracer/internal/ test/java/org/apache/sling/tracer/internal/

Author: chetanm
Date: Wed Feb 10 05:53:31 2016
New Revision: 1729534

URL: http://svn.apache.org/viewvc?rev=1729534&view=rev
Log:
SLING-5504 - Reduce memory footprint of stored recording data

Enable compression for in memory json data

Modified:
    sling/trunk/contrib/extensions/tracer/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java
    sling/trunk/contrib/extensions/tracer/src/main/java/org/apache/sling/tracer/internal/TracerLogServlet.java
    sling/trunk/contrib/extensions/tracer/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java
    sling/trunk/contrib/extensions/tracer/src/test/java/org/apache/sling/tracer/internal/LogTracerTest.java

Modified: sling/trunk/contrib/extensions/tracer/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/tracer/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java?rev=1729534&r1=1729533&r2=1729534&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/tracer/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java (original)
+++ sling/trunk/contrib/extensions/tracer/src/main/java/org/apache/sling/tracer/internal/JSONRecording.java Wed Feb 10 05:53:31 2016
@@ -22,6 +22,7 @@ package org.apache.sling.tracer.internal
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.IOException;
+import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
@@ -33,6 +34,8 @@ import java.io.Writer;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.zip.GZIPInputStream;
+import java.util.zip.GZIPOutputStream;
 
 import javax.servlet.http.HttpServletRequest;
 
@@ -51,20 +54,22 @@ class JSONRecording implements Recording
     private final String method;
     private final String requestId;
     private final String uri;
+    private final boolean compress;
     private final List<String> queries = new ArrayList<String>();
     private final List<LogEntry> logs = new ArrayList<LogEntry>();
     private RequestProgressTracker tracker;
     private byte[] json;
 
-    public JSONRecording(String requestId, HttpServletRequest r) {
+    public JSONRecording(String requestId, HttpServletRequest r, boolean compress) {
         this.requestId = requestId;
+        this.compress = compress;
         this.method = r.getMethod();
         this.uri = r.getRequestURI();
     }
 
     public boolean render(Writer w) throws IOException {
         if (json != null) {
-            Reader r = new InputStreamReader(new ByteArrayInputStream(json), "UTF-8");
+            Reader r = new InputStreamReader(getInputStream(), "UTF-8");
             IOUtils.copy(r, w);
             return true;
         }
@@ -73,7 +78,7 @@ class JSONRecording implements Recording
 
     public boolean render(OutputStream os) throws IOException {
         if (json != null) {
-            os.write(json);
+            IOUtils.copyLarge(getInputStream(), os);
             return true;
         }
         return false;
@@ -130,7 +135,11 @@ class JSONRecording implements Recording
 
     private byte[] toJSON() throws JSONException, IOException {
         ByteArrayOutputStream baos = new ByteArrayOutputStream();
-        OutputStreamWriter osw = new OutputStreamWriter(baos, "UTF-8");
+        OutputStream os = baos;
+        if (compress) {
+            os = new GZIPOutputStream(os);
+        }
+        OutputStreamWriter osw = new OutputStreamWriter(os, "UTF-8");
         JSONWriter jw = new JSONWriter(osw);
         jw.setTidy(true);
         jw.object();
@@ -157,6 +166,7 @@ class JSONRecording implements Recording
         addJson(jw, "logs", logs);
         jw.endObject();
         osw.flush();
+        os.close();
         return baos.toByteArray();
     }
 
@@ -171,6 +181,14 @@ class JSONRecording implements Recording
         jw.endArray();
     }
 
+    private InputStream getInputStream() throws IOException {
+        InputStream is = new ByteArrayInputStream(json);
+        if (compress) {
+            is = new GZIPInputStream(is);
+        }
+        return is;
+    }
+
     private interface JsonEntry {
         void toJson(JSONWriter jw) throws JSONException;
     }

Modified: sling/trunk/contrib/extensions/tracer/src/main/java/org/apache/sling/tracer/internal/TracerLogServlet.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/tracer/src/main/java/org/apache/sling/tracer/internal/TracerLogServlet.java?rev=1729534&r1=1729533&r2=1729534&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/tracer/src/main/java/org/apache/sling/tracer/internal/TracerLogServlet.java (original)
+++ sling/trunk/contrib/extensions/tracer/src/main/java/org/apache/sling/tracer/internal/TracerLogServlet.java Wed Feb 10 05:53:31 2016
@@ -53,6 +53,8 @@ class TracerLogServlet extends SimpleWeb
 
     private final Cache<String, JSONRecording> cache;
 
+    private boolean compressRecording = true;
+
     public TracerLogServlet(BundleContext context) {
         super(LABEL, "Sling Tracer", "Sling", null);
         //TODO Make things configurable
@@ -196,7 +198,7 @@ class TracerLogServlet extends SimpleWeb
     }
 
     private JSONRecording record(String requestId, HttpServletRequest request) {
-        JSONRecording data = new JSONRecording(requestId, request);
+        JSONRecording data = new JSONRecording(requestId, request, compressRecording);
         cache.put(requestId, data);
         return data;
     }

Modified: sling/trunk/contrib/extensions/tracer/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/tracer/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java?rev=1729534&r1=1729533&r2=1729534&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/tracer/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java (original)
+++ sling/trunk/contrib/extensions/tracer/src/test/java/org/apache/sling/tracer/internal/JSONRecordingTest.java Wed Feb 10 05:53:31 2016
@@ -43,7 +43,7 @@ public class JSONRecordingTest {
         StringWriter sw = new StringWriter();
 
         when(request.getMethod()).thenReturn("GET");
-        JSONRecording r = new JSONRecording("abc", request);
+        JSONRecording r = new JSONRecording("abc", request, true);
 
         r.log(Level.INFO, TracerContext.QUERY_LOGGER, MessageFormatter.arrayFormat("foo bar", new Object[]{"x" , "y"}));
         r.log(Level.INFO, TracerContext.QUERY_LOGGER, MessageFormatter.arrayFormat("foo bar", new Object[]{"x" , "z"}));
@@ -59,7 +59,7 @@ public class JSONRecordingTest {
     @Test
     public void requestTrackerLogs() throws Exception{
         StringWriter sw = new StringWriter();
-        JSONRecording r = new JSONRecording("abc", request);
+        JSONRecording r = new JSONRecording("abc", request, true);
 
         r.registerTracker(TestUtil.createTracker("x", "y"));
 
@@ -73,7 +73,7 @@ public class JSONRecordingTest {
     @Test
     public void logs() throws Exception{
         StringWriter sw = new StringWriter();
-        JSONRecording r = new JSONRecording("abc", request);
+        JSONRecording r = new JSONRecording("abc", request, true);
 
         FormattingTuple tp1 = MessageFormatter.arrayFormat("{} is going", new Object[]{"Jack"});
         r.log(Level.INFO, "foo", tp1);

Modified: sling/trunk/contrib/extensions/tracer/src/test/java/org/apache/sling/tracer/internal/LogTracerTest.java
URL: http://svn.apache.org/viewvc/sling/trunk/contrib/extensions/tracer/src/test/java/org/apache/sling/tracer/internal/LogTracerTest.java?rev=1729534&r1=1729533&r2=1729534&view=diff
==============================================================================
--- sling/trunk/contrib/extensions/tracer/src/test/java/org/apache/sling/tracer/internal/LogTracerTest.java (original)
+++ sling/trunk/contrib/extensions/tracer/src/test/java/org/apache/sling/tracer/internal/LogTracerTest.java Wed Feb 10 05:53:31 2016
@@ -235,6 +235,11 @@ public class LogTracerTest {
             public RequestProgressTracker getRequestProgressTracker() {
                 return createTracker("x", "y");
             }
+
+            @Override
+            public String getRequestURI() {
+                return "foo";
+            }
         };
         request.setHeader(TracerLogServlet.HEADER_TRACER_RECORDING, "true");
 
@@ -272,6 +277,11 @@ public class LogTracerTest {
             public RequestProgressTracker getRequestProgressTracker() {
                 return createTracker("x", "y");
             }
+
+            @Override
+            public String getRequestURI() {
+                return "foo";
+            }
         };
         request.setHeader(TracerLogServlet.HEADER_TRACER_RECORDING, "true");
         request.setHeader(LogTracer.HEADER_TRACER_CONFIG, "a.b.c;level=trace,a.b;level=debug");