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