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 md...@apache.org on 2017/05/15 07:13:16 UTC

svn commit: r1795138 - in /jackrabbit/oak/trunk: oak-run/src/main/java/org/apache/jackrabbit/oak/run/ oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/

Author: mduerig
Date: Mon May 15 07:13:16 2017
New Revision: 1795138

URL: http://svn.apache.org/viewvc?rev=1795138&view=rev
Log:
OAK-6208: oak-run compact should have an option to disable/enable memory mapping
Add --map flag to the compact command for controlling the access mode

Modified:
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CompactCommand.java
    jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java
    jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Compact.java

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CompactCommand.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CompactCommand.java?rev=1795138&r1=1795137&r2=1795138&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CompactCommand.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/CompactCommand.java Mon May 15 07:13:16 2017
@@ -41,6 +41,13 @@ class CompactCommand implements Command
         OptionParser parser = new OptionParser();
         OptionSpec<String> directoryArg = parser.nonOptions(
                 "Path to segment store (required)").ofType(String.class);
+        OptionSpec<Boolean> mmapArg = parser.accepts("mmap",
+                "Use memory mapped access if true, use file access if false. " +
+                        "If not specified memory mapped access is used on 64 bit systems " +
+                        "and file access is used on 32 bit systems.")
+                .withOptionalArg()
+                .ofType(Boolean.class);
+
         OptionSet options = parser.parse(args);
 
         String path = directoryArg.value(options);
@@ -57,7 +64,15 @@ class CompactCommand implements Command
         Set<String> afterLs = newHashSet();
         Stopwatch watch = Stopwatch.createStarted();
 
+        Boolean mmap = mmapArg.value(options);
         System.out.println("Compacting " + directory);
+        if (mmap == null) {
+            System.out.println("With default access mode");
+        } else if (mmap) {
+            System.out.println("With memory mapped access");
+        } else {
+            System.out.println("With file access");
+        }
         System.out.println("    before ");
         beforeLs.addAll(list(directory));
         long sizeBefore = FileUtils.sizeOfDirectory(directory);
@@ -67,7 +82,7 @@ class CompactCommand implements Command
         System.out.println("    -> compacting");
 
         try {
-            SegmentTarUtils.compact(directory);
+            SegmentTarUtils.compact(directory, mmap);
             success = true;
         } catch (Throwable e) {
             System.out.println("Compaction failure stack trace:");

Modified: jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java?rev=1795138&r1=1795137&r2=1795138&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java (original)
+++ jackrabbit/oak/trunk/oak-run/src/main/java/org/apache/jackrabbit/oak/run/SegmentTarUtils.java Mon May 15 07:13:16 2017
@@ -30,6 +30,9 @@ import java.util.Date;
 import java.util.List;
 import java.util.Set;
 
+import javax.annotation.Nonnull;
+import javax.annotation.Nullable;
+
 import org.apache.jackrabbit.oak.plugins.blob.BlobReferenceRetriever;
 import org.apache.jackrabbit.oak.segment.SegmentBlobReferenceRetriever;
 import org.apache.jackrabbit.oak.segment.SegmentNodeStoreBuilders;
@@ -202,9 +205,10 @@ final class SegmentTarUtils {
                 .run();
     }
 
-    static void compact(File directory) {
+    static void compact(@Nonnull File directory, @Nullable Boolean mmap) {
         Compact.builder()
                 .withPath(directory)
+                .withMmap(mmap)
                 .build()
                 .run();
     }

Modified: jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Compact.java
URL: http://svn.apache.org/viewvc/jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Compact.java?rev=1795138&r1=1795137&r2=1795138&view=diff
==============================================================================
--- jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Compact.java (original)
+++ jackrabbit/oak/trunk/oak-segment-tar/src/main/java/org/apache/jackrabbit/oak/segment/tool/Compact.java Mon May 15 07:13:16 2017
@@ -25,7 +25,11 @@ import java.io.File;
 import java.io.IOException;
 import java.io.RandomAccessFile;
 
+import javax.annotation.CheckForNull;
+import javax.annotation.Nullable;
+
 import org.apache.jackrabbit.oak.segment.file.FileStore;
+import org.apache.jackrabbit.oak.segment.file.FileStoreBuilder;
 import org.apache.jackrabbit.oak.segment.file.InvalidFileStoreVersionException;
 import org.apache.jackrabbit.oak.segment.file.JournalReader;
 
@@ -50,6 +54,9 @@ public class Compact implements Runnable
 
         private File path;
 
+        @CheckForNull
+        private Boolean mmap;
+
         private Builder() {
             // Prevent external instantiation.
         }
@@ -66,6 +73,18 @@ public class Compact implements Runnable
         }
 
         /**
+         * Whether to use memory mapped access or file access.
+         * @param mmap  {@code true} for memory mapped access, {@code false} for file access
+         *              {@code null} to determine the access mode from the system architecture:
+         *              memory mapped on 64 bit systems, file access on  32 bit systems.
+         * @return this builder.
+         */
+        public Builder withMmap(@Nullable Boolean mmap) {
+            this.mmap = mmap;
+            return this;
+        }
+
+        /**
          * Create an executable version of the {@link Compact} command.
          *
          * @return an instance of {@link Runnable}.
@@ -79,8 +98,12 @@ public class Compact implements Runnable
 
     private final File path;
 
+    @CheckForNull
+    private final Boolean mmap;
+
     private Compact(Builder builder) {
         this.path = builder.path;
+        this.mmap = builder.mmap;
     }
 
     @Override
@@ -116,7 +139,12 @@ public class Compact implements Runnable
     }
 
     private FileStore newFileStore() throws IOException, InvalidFileStoreVersionException {
-        return fileStoreBuilder(path.getAbsoluteFile()).withGCOptions(defaultGCOptions().setOffline()).build();
+        FileStoreBuilder fileStoreBuilder = fileStoreBuilder(path.getAbsoluteFile())
+                .withGCOptions(defaultGCOptions().setOffline());
+
+        return mmap == null
+            ? fileStoreBuilder.build()
+            : fileStoreBuilder.withMemoryMapping(mmap).build();
     }
 
 }