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);
         }