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 fr...@apache.org on 2017/02/13 11:11:55 UTC
svn commit: r1782745 - in
/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file:
IOMonitor.java IOMonitorAdapter.java TarReader.java
tooling/ConsistencyChecker.java
Author: frm
Date: Mon Feb 13 11:11:55 2017
New Revision: 1782745
URL: http://svn.apache.org/viewvc?rev=1782745&view=rev
Log:
OAK-5631 - Expose segment read time from IOMonitor
Modified:
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/IOMonitor.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/IOMonitorAdapter.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TarReader.java
jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/IOMonitor.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/IOMonitor.java?rev=1782745&r1=1782744&r2=1782745&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/IOMonitor.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/IOMonitor.java Mon Feb 13 11:11:55 2017
@@ -21,6 +21,8 @@ import java.io.File;
public interface IOMonitor {
- void onSegmentRead(File file, long msb, long lsb, int length);
+ void beforeSegmentRead(File file, long msb, long lsb, int length);
+
+ void afterSegmentRead(File file, long msb, long lsb, int length, long elapsed);
}
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/IOMonitorAdapter.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/IOMonitorAdapter.java?rev=1782745&r1=1782744&r2=1782745&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/IOMonitorAdapter.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/IOMonitorAdapter.java Mon Feb 13 11:11:55 2017
@@ -22,7 +22,12 @@ import java.io.File;
public class IOMonitorAdapter implements IOMonitor {
@Override
- public void onSegmentRead(File file, long msb, long lsb, int length) {
+ public void beforeSegmentRead(File file, long msb, long lsb, int length) {
+ // Intentionally left blank
+ }
+
+ @Override
+ public void afterSegmentRead(File file, long msb, long lsb, int length, long elapsed) {
// Intentionally left blank
}
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TarReader.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TarReader.java?rev=1782745&r1=1782744&r2=1782745&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TarReader.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/TarReader.java Mon Feb 13 11:11:55 2017
@@ -47,6 +47,7 @@ import java.util.Map.Entry;
import java.util.Set;
import java.util.SortedMap;
import java.util.UUID;
+import java.util.concurrent.TimeUnit;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.zip.CRC32;
@@ -55,6 +56,7 @@ import javax.annotation.Nonnull;
import com.google.common.base.Charsets;
import com.google.common.base.Predicate;
+import com.google.common.base.Stopwatch;
import com.google.common.collect.Sets;
import org.apache.commons.io.FileUtils;
import org.apache.jackrabbit.oak.plugins.blob.ReferenceCollector;
@@ -574,8 +576,7 @@ class TarReader implements Closeable {
if (position != -1) {
int pos = index.getInt(position + 16);
int len = index.getInt(position + 20);
- ioMonitor.onSegmentRead(file, msb, lsb, len);
- return access.read(pos, len);
+ return readSegment(msb, lsb, pos, len);
} else {
return null;
}
@@ -845,10 +846,14 @@ class TarReader implements Closeable {
TarWriter writer = new TarWriter(newFile);
for (TarEntry entry : entries) {
if (entry != null) {
- byte[] data = new byte[entry.size()];
- ioMonitor.onSegmentRead(file, entry.msb(), entry.lsb(), entry.size());
- access.read(entry.offset(), entry.size()).get(data);
- writer.writeEntry(entry.msb(), entry.lsb(), data, 0, entry.size(), entry.generation());
+ long msb = entry.msb();
+ long lsb = entry.lsb();
+ int offset = entry.offset();
+ int size = entry.size();
+ int gen = entry.generation();
+ byte[] data = new byte[size];
+ readSegment(msb, lsb, offset, size).get(data);
+ writer.writeEntry(msb, lsb, data, 0, size, gen);
}
}
@@ -1109,6 +1114,15 @@ class TarReader implements Closeable {
return graph;
}
+ private ByteBuffer readSegment(long msb, long lsb, int offset, int size) throws IOException {
+ ioMonitor.beforeSegmentRead(file, msb, lsb, size);
+ Stopwatch stopwatch = Stopwatch.createStarted();
+ ByteBuffer buffer = access.read(offset, size);
+ long elapsed = stopwatch.elapsed(TimeUnit.MILLISECONDS);
+ ioMonitor.afterSegmentRead(file, msb, lsb, size, elapsed);
+ return buffer;
+ }
+
private static Map<UUID, List<UUID>> parseGraph(ByteBuffer buffer, boolean bulkOnly) {
int nEntries = buffer.getInt(buffer.limit() - 12);
Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java?rev=1782745&r1=1782744&r2=1782745&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/file/tooling/ConsistencyChecker.java Mon Feb 13 11:11:55 2017
@@ -68,7 +68,7 @@ public class ConsistencyChecker implemen
private final AtomicLong bytesRead = new AtomicLong(0);
@Override
- public void onSegmentRead(File file, long msb, long lsb, int length) {
+ public void beforeSegmentRead(File file, long msb, long lsb, int length) {
ioOperations.incrementAndGet();
bytesRead.addAndGet(length);
}