You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by rm...@apache.org on 2015/06/11 23:08:11 UTC

svn commit: r1684974 - in /lucene/dev/branches/branch_5x: ./ lucene/ lucene/CHANGES.txt lucene/core/ lucene/core/src/java/org/apache/lucene/store/MMapDirectory.java lucene/core/src/test/org/apache/lucene/store/TestMmapDirectory.java

Author: rmuir
Date: Thu Jun 11 21:08:10 2015
New Revision: 1684974

URL: http://svn.apache.org/r1684974
Log:
LUCENE-6549: add preload option to MMapDirectory

Modified:
    lucene/dev/branches/branch_5x/   (props changed)
    lucene/dev/branches/branch_5x/lucene/   (props changed)
    lucene/dev/branches/branch_5x/lucene/CHANGES.txt   (contents, props changed)
    lucene/dev/branches/branch_5x/lucene/core/   (props changed)
    lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/store/MMapDirectory.java
    lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/store/TestMmapDirectory.java

Modified: lucene/dev/branches/branch_5x/lucene/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/CHANGES.txt?rev=1684974&r1=1684973&r2=1684974&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/lucene/CHANGES.txt Thu Jun 11 21:08:10 2015
@@ -41,6 +41,8 @@ New Features
   the per-hit polygon check when a leaf cell is fully contained by the
   polygon.  (Nick Knize, Mike McCandless)
 
+* LUCENE-6549: Add preload option to MMapDirectory. (Robert Muir)
+
 API Changes
 
 * LUCENE-6508: Simplify Lock api, there is now just 

Modified: lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/store/MMapDirectory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/store/MMapDirectory.java?rev=1684974&r1=1684973&r2=1684974&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/store/MMapDirectory.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/java/org/apache/lucene/store/MMapDirectory.java Thu Jun 11 21:08:10 2015
@@ -19,6 +19,7 @@ package org.apache.lucene.store;
  
 import java.io.IOException;
 import java.nio.ByteBuffer;
+import java.nio.MappedByteBuffer;
 import java.nio.channels.ClosedChannelException; // javadoc @link
 import java.nio.channels.FileChannel;
 import java.nio.channels.FileChannel.MapMode;
@@ -86,6 +87,8 @@ import org.apache.lucene.util.Constants;
  */
 public class MMapDirectory extends FSDirectory {
   private boolean useUnmapHack = UNMAP_SUPPORTED;
+  private boolean preload;
+
   /** 
    * Default max chunk size.
    * @see #MMapDirectory(Path, LockFactory, int)
@@ -198,6 +201,24 @@ public class MMapDirectory extends FSDir
   }
   
   /**
+   * Set to {@code true} to ask mapped pages to be loaded
+   * into physical memory on init. The behavior is best-effort 
+   * and operating system dependent.
+   * @see MappedByteBuffer#load
+   */
+  public void setPreload(boolean preload) {
+    this.preload = preload;
+  }
+  
+  /**
+   * Returns {@code true} if mapped pages should be loaded.
+   * @see #setPreload
+   */
+  public boolean getPreload() {
+    return preload;
+  }
+  
+  /**
    * Returns the current mmap chunk size.
    * @see #MMapDirectory(Path, LockFactory, int)
    */
@@ -237,11 +258,16 @@ public class MMapDirectory extends FSDir
           ? chunkSize
               : (length - bufferStart)
           );
+      MappedByteBuffer buffer;
       try {
-        buffers[bufNr] = fc.map(MapMode.READ_ONLY, offset + bufferStart, bufSize);
+        buffer = fc.map(MapMode.READ_ONLY, offset + bufferStart, bufSize);
       } catch (IOException ioe) {
         throw convertMapFailedIOException(ioe, resourceDescription, bufSize);
       }
+      if (preload) {
+        buffer.load();
+      }
+      buffers[bufNr] = buffer;
       bufferStart += bufSize;
     }
     

Modified: lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/store/TestMmapDirectory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/store/TestMmapDirectory.java?rev=1684974&r1=1684973&r2=1684974&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/store/TestMmapDirectory.java (original)
+++ lucene/dev/branches/branch_5x/lucene/core/src/test/org/apache/lucene/store/TestMmapDirectory.java Thu Jun 11 21:08:10 2015
@@ -27,6 +27,8 @@ public class TestMmapDirectory extends B
 
   @Override
   protected Directory getDirectory(Path path) throws IOException {
-    return new MMapDirectory(path);
+    MMapDirectory m = new MMapDirectory(path);
+    m.setPreload(random().nextBoolean());
+    return m;
   }
 }