You are viewing a plain text version of this content. The canonical link for it is here.
Posted to oak-commits@jackrabbit.apache.org by ch...@apache.org on 2015/12/24 06:54:03 UTC

svn commit: r1721598 - in /jackrabbit/oak/trunk: oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/ oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/stats/ oak-blob/src/test/java/org/apache/jackrabbit/oak/spi/blob/ oak-blob/src/test/ja...

Author: chetanm
Date: Thu Dec 24 05:54:03 2015
New Revision: 1721598

URL: http://svn.apache.org/viewvc?rev=1721598&view=rev
Log:
OAK-3806 - Collect and expose statistics related to BlobStore operations

Differentiate between count due to chunk upload/download and complete file. The counts would reflect state for complete file

Modified:
    jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/AbstractBlobStore.java
    jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/stats/BlobStatsCollector.java
    jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/stats/StatsCollectingStreams.java
    jackrabbit/oak/trunk/oak-blob/src/test/java/org/apache/jackrabbit/oak/spi/blob/AbstractBlobStoreTest.java
    jackrabbit/oak/trunk/oak-blob/src/test/java/org/apache/jackrabbit/oak/spi/blob/stats/StatsCollectingStreamsTest.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreStats.java
    jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java
    jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreStatsTest.java

Modified: jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/AbstractBlobStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/AbstractBlobStore.java?rev=1721598&r1=1721597&r2=1721598&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/AbstractBlobStore.java (original)
+++ jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/AbstractBlobStore.java Thu Dec 24 05:54:03 2015
@@ -197,6 +197,7 @@ public abstract class AbstractBlobStore
             // System.out.println("    write blob " +  StringUtils.convertBytesToHex(id));
             String blobId = StringUtils.convertBytesToHex(id);
             usesBlobId(blobId);
+            statsCollector.uploadCompleted(blobId);
             return blobId;
         } finally {
             try {
@@ -433,6 +434,7 @@ public abstract class AbstractBlobStore
         while (true) {
             int type = idStream.read();
             if (type == -1) {
+                statsCollector.downloadCompleted(blobId);
                 return -1;
             } else if (type == TYPE_DATA) {
                 int len = IOUtils.readVarInt(idStream);

Modified: jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/stats/BlobStatsCollector.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/stats/BlobStatsCollector.java?rev=1721598&r1=1721597&r2=1721598&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/stats/BlobStatsCollector.java (original)
+++ jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/stats/BlobStatsCollector.java Thu Dec 24 05:54:03 2015
@@ -39,6 +39,16 @@ public interface BlobStatsCollector {
         public void downloaded(String blobId, long timeTaken, TimeUnit unit, long size) {
 
         }
+
+        @Override
+        public void uploadCompleted(String blobId) {
+
+        }
+
+        @Override
+        public void downloadCompleted(String blobId) {
+
+        }
     };
 
     /**
@@ -60,4 +70,22 @@ public interface BlobStatsCollector {
      * @param size size of binary content being read
      */
     void downloaded(String blobId, long timeTaken, TimeUnit unit, long size);
+
+    /**
+     * Invoked when upload for a binary file get completed. In case of chunked
+     * BlobStore this invoked when all the chunks have been uploaded
+     *
+     * @param blobId id of the blob which got uploaded. Even in case of chunked
+     *               blobStores its the id of main blob
+     */
+    void uploadCompleted(String blobId);
+
+    /**
+     * Invoked when download for a binary file get completed. In case of chunked
+     * BlobStore this invoked when all the chunks have been downloaded
+     *
+     * @param blobId id of the blob which got downloaded. Even in case of chunked
+     *               blobStores its the id of main blob
+     */
+    void downloadCompleted(String blobId);
 }

Modified: jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/stats/StatsCollectingStreams.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/stats/StatsCollectingStreams.java?rev=1721598&r1=1721597&r2=1721598&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/stats/StatsCollectingStreams.java (original)
+++ jackrabbit/oak/trunk/oak-blob/src/main/java/org/apache/jackrabbit/oak/spi/blob/stats/StatsCollectingStreams.java Thu Dec 24 05:54:03 2015
@@ -46,6 +46,7 @@ public final class StatsCollectingStream
                 //overhead would add to the download time
 
                 collector.downloaded(blobId, System.nanoTime() - startTime, TimeUnit.NANOSECONDS, cin.getCount());
+                collector.downloadCompleted(blobId);
             }
         };
     }

Modified: jackrabbit/oak/trunk/oak-blob/src/test/java/org/apache/jackrabbit/oak/spi/blob/AbstractBlobStoreTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob/src/test/java/org/apache/jackrabbit/oak/spi/blob/AbstractBlobStoreTest.java?rev=1721598&r1=1721597&r2=1721598&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob/src/test/java/org/apache/jackrabbit/oak/spi/blob/AbstractBlobStoreTest.java (original)
+++ jackrabbit/oak/trunk/oak-blob/src/test/java/org/apache/jackrabbit/oak/spi/blob/AbstractBlobStoreTest.java Thu Dec 24 05:54:03 2015
@@ -454,6 +454,7 @@ public abstract class AbstractBlobStoreT
         store.writeBlob(randomStream(42, size));
         //For chunked storage the actual stored size is greater than the file size
         assertCollectedSize(collector.size, size);
+        assertEquals(1, collector.uploadCount);
     }
 
     @Test
@@ -476,6 +477,7 @@ public abstract class AbstractBlobStoreT
 
         //For chunked storage the actual stored size is greater than the file size
         assertCollectedSize(collector.size, size);
+        assertEquals(1, collector.downloadCount);
     }
 
     protected void setupCollector(BlobStatsCollector statsCollector) {
@@ -516,6 +518,8 @@ public abstract class AbstractBlobStoreT
 
     private static class TestCollector implements BlobStatsCollector {
         long size;
+        int uploadCount;
+        int downloadCount;
 
         @Override
         public void uploaded(long timeTaken, TimeUnit unit, long size) {
@@ -527,8 +531,20 @@ public abstract class AbstractBlobStoreT
             this.size += size;
         }
 
+        @Override
+        public void uploadCompleted(String blobId) {
+            uploadCount++;
+        }
+
+        @Override
+        public void downloadCompleted(String blobId) {
+            downloadCount++;
+        }
+
         void reset(){
             size = 0;
+            downloadCount = 0;
+            uploadCount = 0;
         }
     }
 }

Modified: jackrabbit/oak/trunk/oak-blob/src/test/java/org/apache/jackrabbit/oak/spi/blob/stats/StatsCollectingStreamsTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-blob/src/test/java/org/apache/jackrabbit/oak/spi/blob/stats/StatsCollectingStreamsTest.java?rev=1721598&r1=1721597&r2=1721598&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-blob/src/test/java/org/apache/jackrabbit/oak/spi/blob/stats/StatsCollectingStreamsTest.java (original)
+++ jackrabbit/oak/trunk/oak-blob/src/test/java/org/apache/jackrabbit/oak/spi/blob/stats/StatsCollectingStreamsTest.java Thu Dec 24 05:54:03 2015
@@ -50,11 +50,13 @@ public class StatsCollectingStreamsTest
 
         wrappedStream.close();
         assertEquals(1042, stats.size);
+        assertEquals(1, stats.downloadCompletedCount);
     }
 
     private static class TestCollector implements BlobStatsCollector {
         long size = -1;
         int callbackCount;
+        int downloadCompletedCount;
 
         @Override
         public void uploaded(long timeTaken, TimeUnit unit, long size) {
@@ -66,5 +68,15 @@ public class StatsCollectingStreamsTest
             callbackCount++;
             this.size = size;
         }
+
+        @Override
+        public void uploadCompleted(String blobId) {
+
+        }
+
+        @Override
+        public void downloadCompleted(String blobId) {
+            downloadCompletedCount++;
+        }
     }
 }
\ No newline at end of file

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreStats.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreStats.java?rev=1721598&r1=1721597&r2=1721598&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreStats.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreStats.java Thu Dec 24 05:54:03 2015
@@ -89,7 +89,6 @@ public class BlobStoreStats extends Anno
         //it got completed. So acts like a rough approximation
         uploadSizeSeries.mark(size);
         uploadTimeSeries.mark(recordedTimeUnit.convert(timeTaken, unit));
-        uploadCount.mark();
     }
 
     @Override
@@ -98,6 +97,15 @@ public class BlobStoreStats extends Anno
 
         downloadSizeSeries.mark(size);
         downloadTimeSeries.mark(recordedTimeUnit.convert(timeTaken, unit));
+    }
+
+    @Override
+    public void uploadCompleted(String blobId) {
+        uploadCount.mark();
+    }
+
+    @Override
+    public void downloadCompleted(String blobId) {
         downloadCount.mark();
     }
 
@@ -110,7 +118,7 @@ public class BlobStoreStats extends Anno
 
     @Override
     public long getUploadCount() {
-        return uploadHisto.getCount();
+        return uploadCount.getCount();
     }
 
     @Override
@@ -125,7 +133,7 @@ public class BlobStoreStats extends Anno
 
     @Override
     public long getDownloadCount() {
-        return downloadHisto.getCount();
+        return downloadCount.getCount();
     }
 
     @Override

Modified: jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java?rev=1721598&r1=1721597&r2=1721598&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/main/java/org/apache/jackrabbit/oak/plugins/blob/datastore/DataStoreBlobStore.java Thu Dec 24 05:54:03 2015
@@ -201,6 +201,7 @@ public class DataStoreBlobStore implemen
             String id = getBlobId(dr);
             threw = false;
             stats.uploaded(System.nanoTime() - start, TimeUnit.NANOSECONDS, dr.getLength());
+            stats.uploadCompleted(id);
             return id;
         } catch (DataStoreException e) {
             throw new IOException(e);

Modified: jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreStatsTest.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreStatsTest.java?rev=1721598&r1=1721597&r2=1721598&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreStatsTest.java (original)
+++ jackrabbit/oak/trunk/oak-core/src/test/java/org/apache/jackrabbit/oak/plugins/blob/BlobStoreStatsTest.java Thu Dec 24 05:54:03 2015
@@ -46,11 +46,16 @@ public class BlobStoreStatsTest {
         stats.uploaded(103, TimeUnit.SECONDS, 1079);
         assertEquals(103, stats.getUploadTotalSeconds());
         assertEquals(1079, stats.getUploadTotalSize());
+        assertEquals(0, stats.getUploadCount());
+
+        stats.uploadCompleted("foo");
         assertEquals(1, stats.getUploadCount());
 
         stats.uploaded(53, TimeUnit.SECONDS, 47);
         assertEquals(103 + 53, stats.getUploadTotalSeconds());
         assertEquals(1079 + 47, stats.getUploadTotalSize());
+
+        stats.uploadCompleted("foo");
         assertEquals(2, stats.getUploadCount());
     }
 
@@ -59,11 +64,16 @@ public class BlobStoreStatsTest {
         stats.downloaded("foo", 103, TimeUnit.SECONDS, 1079);
         assertEquals(103, stats.getDownloadTotalSeconds());
         assertEquals(1079, stats.getDownloadTotalSize());
+        assertEquals(0, stats.getDownloadCount());
+
+        stats.downloadCompleted("foo");
         assertEquals(1, stats.getDownloadCount());
 
         stats.downloaded("foo", 53, TimeUnit.SECONDS, 47);
         assertEquals(103 + 53, stats.getDownloadTotalSeconds());
         assertEquals(1079 + 47, stats.getDownloadTotalSize());
+
+        stats.downloadCompleted("foo");
         assertEquals(2, stats.getDownloadCount());
     }
 }
\ No newline at end of file