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 2020/03/06 10:43:10 UTC

[lucene-solr] branch master updated: Remove SimpleFSDirectory in favor of NIOFSDirectory

This is an automated email from the ASF dual-hosted git repository.

rmuir pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/master by this push:
     new 8a88dd0  Remove SimpleFSDirectory in favor of NIOFSDirectory
     new 624f5a3  LUCENE-9264: Remove SimpleFSDirectory in favor of NIOFSDirectory
8a88dd0 is described below

commit 8a88dd02c6cb968c2c2e7ef0c9790648c5fec521
Author: Yannick Welsch <ya...@welsch.lu>
AuthorDate: Thu Mar 5 23:50:59 2020 +0100

    Remove SimpleFSDirectory in favor of NIOFSDirectory
---
 lucene/CHANGES.txt                                 |   3 +
 .../codecs/lucene50/TestBlockPostingsFormat.java   |   8 +-
 .../lucene/index/TestBackwardsCompatibility.java   |   4 +-
 .../java/org/apache/lucene/store/FSDirectory.java  |  17 +-
 .../org/apache/lucene/store/LockStressTest.java    |   2 +-
 .../org/apache/lucene/store/SimpleFSDirectory.java | 200 ---------------------
 .../lucene84/TestLucene84PostingsFormat.java       |   8 +-
 .../org/apache/lucene/index/TestIndexWriter.java   |   9 +-
 .../lucene/store/TestBufferedIndexInput.java       |   2 +-
 .../org/apache/lucene/store/TestDirectory.java     |   5 +-
 .../lucene/store/TestFileSwitchDirectory.java      |   6 +-
 .../apache/lucene/store/TestSimpleFSDirectory.java |  85 ---------
 .../java/org/apache/lucene/store/RAFDirectory.java |   2 +-
 .../store/TestHardLinkCopyDirectoryWrapper.java    |   4 +-
 .../org/apache/lucene/util/LuceneTestCase.java     |   5 +-
 .../apache/solr/core/SimpleFSDirectoryFactory.java |  42 -----
 .../repository/LocalFileSystemRepository.java      |  10 +-
 .../solr/core/SolrCoreCheckLockOnStartupTest.java  |   2 +-
 .../org/apache/solr/core/TestDirectoryFactory.java |   1 -
 .../solr/core/snapshots/TestSolrCoreSnapshots.java |   5 +-
 .../solr/handler/TestReplicationHandler.java       |   4 +-
 .../solr/handler/TestReplicationHandlerBackup.java |   6 +-
 .../example-DIH/solr/db/conf/solrconfig.xml        |   4 +-
 .../example-DIH/solr/mail/conf/solrconfig.xml      |   4 +-
 .../example-DIH/solr/solr/conf/solrconfig.xml      |   4 +-
 solr/example/files/conf/solrconfig.xml             |   4 +-
 .../solr/configsets/_default/conf/solrconfig.xml   |   4 +-
 .../conf/solrconfig.xml                            |   4 +-
 ...datadir-and-directoryfactory-in-solrconfig.adoc |   2 +-
 29 files changed, 58 insertions(+), 398 deletions(-)

diff --git a/lucene/CHANGES.txt b/lucene/CHANGES.txt
index 5e710ce..2919704 100644
--- a/lucene/CHANGES.txt
+++ b/lucene/CHANGES.txt
@@ -44,6 +44,9 @@ API Changes
 * LUCENE-9212: Deprecated Intervals.multiterm() methods that take a bare Automaton
   have been removed (Alan Woodward)
 
+* LUCENE-9264: SimpleFSDirectory has been removed in favor of NIOFSDirectory.
+  (Yannick Welsch)
+
 Improvements
 
 * LUCENE-8757: When provided with an ExecutorService to run queries across
diff --git a/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene50/TestBlockPostingsFormat.java b/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene50/TestBlockPostingsFormat.java
index 690eba8..8cfca52 100644
--- a/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene50/TestBlockPostingsFormat.java
+++ b/lucene/backward-codecs/src/test/org/apache/lucene/codecs/lucene50/TestBlockPostingsFormat.java
@@ -48,7 +48,7 @@ import org.apache.lucene.store.IOContext;
 import org.apache.lucene.store.IndexInput;
 import org.apache.lucene.store.IndexOutput;
 import org.apache.lucene.store.MMapDirectory;
-import org.apache.lucene.store.SimpleFSDirectory;
+import org.apache.lucene.store.NIOFSDirectory;
 import org.apache.lucene.util.TestUtil;
 
 /**
@@ -117,7 +117,7 @@ public class TestBlockPostingsFormat extends BasePostingsFormatTestCase {
       }
     }
 
-    try (Directory d = new SimpleFSDirectory(tempDir)) {
+    try (Directory d = new NIOFSDirectory(tempDir)) {
       // test auto
       try (DirectoryReader r = DirectoryReader.open(d)) {
         assertEquals(1, r.leaves().size());
@@ -128,7 +128,7 @@ public class TestBlockPostingsFormat extends BasePostingsFormatTestCase {
       }
     }
 
-    try (Directory d = new SimpleFSDirectory(tempDir)) {
+    try (Directory d = new NIOFSDirectory(tempDir)) {
       // test per field
       Map<String, String> readerAttributes = new HashMap<>();
       readerAttributes.put(BlockTreeTermsReader.FST_MODE_KEY, BlockTreeTermsReader.FSTLoadMode.OFF_HEAP.name());
@@ -143,7 +143,7 @@ public class TestBlockPostingsFormat extends BasePostingsFormatTestCase {
     }
 
     IllegalArgumentException invalid = expectThrows(IllegalArgumentException.class, () -> {
-      try (Directory d = new SimpleFSDirectory(tempDir)) {
+      try (Directory d = new NIOFSDirectory(tempDir)) {
         Map<String, String> readerAttributes = new HashMap<>();
         readerAttributes.put(BlockTreeTermsReader.FST_MODE_KEY, "invalid");
         DirectoryReader.open(d, readerAttributes);
diff --git a/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java b/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
index d2b1819..cfc501a 100644
--- a/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
+++ b/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
@@ -71,7 +71,6 @@ import org.apache.lucene.store.ByteBuffersDirectory;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.FSDirectory;
 import org.apache.lucene.store.NIOFSDirectory;
-import org.apache.lucene.store.SimpleFSDirectory;
 import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.BytesRef;
 import org.apache.lucene.util.IOUtils;
@@ -1442,8 +1441,7 @@ public class TestBackwardsCompatibility extends LuceneTestCase {
           //  - LuceneTestCase.FS_DIRECTORIES is private
           //  - newFSDirectory returns BaseDirectoryWrapper
           //  - BaseDirectoryWrapper doesn't expose delegate
-          Class<? extends FSDirectory> dirImpl = random().nextBoolean() ?
-              SimpleFSDirectory.class : NIOFSDirectory.class;
+          Class<? extends FSDirectory> dirImpl = NIOFSDirectory.class;
           
           args.add("-dir-impl");
           args.add(dirImpl.getName());
diff --git a/lucene/core/src/java/org/apache/lucene/store/FSDirectory.java b/lucene/core/src/java/org/apache/lucene/store/FSDirectory.java
index c76a3c3..ee9ec1e 100644
--- a/lucene/core/src/java/org/apache/lucene/store/FSDirectory.java
+++ b/lucene/core/src/java/org/apache/lucene/store/FSDirectory.java
@@ -53,13 +53,6 @@ import org.apache.lucene.util.IOUtils;
  *
  * <ul>
  *
- *  <li>{@link SimpleFSDirectory} is a straightforward
- *       implementation using Files.newByteChannel.
- *       However, it has poor concurrent performance
- *       (multiple threads will bottleneck) as it
- *       synchronizes when multiple threads read from the
- *       same file.
- *
  *  <li>{@link NIOFSDirectory} uses java.nio's
  *       FileChannel's positional io when reading to avoid
  *       synchronization when reading from the same file.
@@ -170,11 +163,9 @@ public abstract class FSDirectory extends BaseDirectory {
    * {@code IndexWriters} and create a new {@code FSDirectory} instance.
    *
    *  <p>Currently this returns {@link MMapDirectory} for Linux, MacOSX, Solaris,
-   *  and Windows 64-bit JREs, {@link NIOFSDirectory} for other
-   *  non-Windows JREs, and {@link SimpleFSDirectory} for other
-   *  JREs on Windows. It is highly recommended that you consult the
-   *  implementation's documentation for your platform before
-   *  using this method.
+   *  and Windows 64-bit JREs, and {@link NIOFSDirectory} for other JREs.
+   *  It is highly recommended that you consult the implementation's documentation
+   *  for your platform before using this method.
    *
    * <p><b>NOTE</b>: this method may suddenly change which
    * implementation is returned from release to release, in
@@ -194,8 +185,6 @@ public abstract class FSDirectory extends BaseDirectory {
   public static FSDirectory open(Path path, LockFactory lockFactory) throws IOException {
     if (Constants.JRE_IS_64BIT && MMapDirectory.UNMAP_SUPPORTED) {
       return new MMapDirectory(path, lockFactory);
-    } else if (Constants.WINDOWS) {
-      return new SimpleFSDirectory(path, lockFactory);
     } else {
       return new NIOFSDirectory(path, lockFactory);
     }
diff --git a/lucene/core/src/java/org/apache/lucene/store/LockStressTest.java b/lucene/core/src/java/org/apache/lucene/store/LockStressTest.java
index 8d8c042..b319df4 100644
--- a/lucene/core/src/java/org/apache/lucene/store/LockStressTest.java
+++ b/lucene/core/src/java/org/apache/lucene/store/LockStressTest.java
@@ -80,7 +80,7 @@ public class LockStressTest {
 
     final LockFactory lockFactory = getNewLockFactory(lockFactoryClassName);
     // we test the lock factory directly, so we don't need it on the directory itsself (the directory is just for testing)
-    final FSDirectory lockDir = new SimpleFSDirectory(lockDirPath, NoLockFactory.INSTANCE);
+    final FSDirectory lockDir = new NIOFSDirectory(lockDirPath, NoLockFactory.INSTANCE);
     final InetSocketAddress addr = new InetSocketAddress(verifierHost, verifierPort);
     System.out.println("Connecting to server " + addr +
         " and registering as client " + myID + "...");
diff --git a/lucene/core/src/java/org/apache/lucene/store/SimpleFSDirectory.java b/lucene/core/src/java/org/apache/lucene/store/SimpleFSDirectory.java
deleted file mode 100644
index 0d650ae..0000000
--- a/lucene/core/src/java/org/apache/lucene/store/SimpleFSDirectory.java
+++ /dev/null
@@ -1,200 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.lucene.store;
-
-
-import java.io.EOFException;
-import java.io.IOException;
-import java.nio.ByteBuffer;
-import java.nio.channels.SeekableByteChannel;
-import java.nio.channels.ClosedChannelException; // javadoc @link
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.StandardOpenOption;
-import java.util.concurrent.Future;
-
-/** A straightforward implementation of {@link FSDirectory}
- *  using {@link Files#newByteChannel(Path, java.nio.file.OpenOption...)}.  
- *  However, this class has
- *  poor concurrent performance (multiple threads will
- *  bottleneck) as it synchronizes when multiple threads
- *  read from the same file.  It's usually better to use
- *  {@link NIOFSDirectory} or {@link MMapDirectory} instead.
- * <p>
- * <b>NOTE:</b> Accessing this class either directly or
- * indirectly from a thread while it's interrupted can close the
- * underlying file descriptor immediately if at the same time the thread is
- * blocked on IO. The file descriptor will remain closed and subsequent access
- * to {@link SimpleFSDirectory} will throw a {@link ClosedChannelException}. If
- * your application uses either {@link Thread#interrupt()} or
- * {@link Future#cancel(boolean)} you should use the legacy {@code RAFDirectory}
- * from the Lucene {@code misc} module in favor of {@link SimpleFSDirectory}.
- * </p>
- */
-public class SimpleFSDirectory extends FSDirectory {
-    
-  /** Create a new SimpleFSDirectory for the named location.
-   *  The directory is created at the named location if it does not yet exist.
-   *
-   * @param path the path of the directory
-   * @param lockFactory the lock factory to use
-   * @throws IOException if there is a low-level I/O error
-   */
-  public SimpleFSDirectory(Path path, LockFactory lockFactory) throws IOException {
-    super(path, lockFactory);
-  }
-  
-  /** Create a new SimpleFSDirectory for the named location and {@link FSLockFactory#getDefault()}.
-   *  The directory is created at the named location if it does not yet exist.
-   *
-   * @param path the path of the directory
-   * @throws IOException if there is a low-level I/O error
-   */
-  public SimpleFSDirectory(Path path) throws IOException {
-    this(path, FSLockFactory.getDefault());
-  }
-
-  /** Creates an IndexInput for the file with the given name. */
-  @Override
-  public IndexInput openInput(String name, IOContext context) throws IOException {
-    ensureOpen();
-    ensureCanRead(name);
-    Path path = directory.resolve(name);
-    SeekableByteChannel channel = Files.newByteChannel(path, StandardOpenOption.READ);
-    return new SimpleFSIndexInput("SimpleFSIndexInput(path=\"" + path + "\")", channel, context);
-  }
-
-  /**
-   * Reads bytes with {@link SeekableByteChannel#read(ByteBuffer)}
-   */
-  static final class SimpleFSIndexInput extends BufferedIndexInput {
-    /**
-     * The maximum chunk size for reads of 16384 bytes.
-     */
-    private static final int CHUNK_SIZE = 16384;
-    
-    /** the channel we will read from */
-    protected final SeekableByteChannel channel;
-    /** is this instance a clone and hence does not own the file to close it */
-    boolean isClone = false;
-    /** start offset: non-zero in the slice case */
-    protected final long off;
-    /** end offset (start+length) */
-    protected final long end;
-    
-    private ByteBuffer byteBuf; // wraps the buffer for NIO
-
-    public SimpleFSIndexInput(String resourceDesc, SeekableByteChannel channel, IOContext context) throws IOException {
-      super(resourceDesc, context);
-      this.channel = channel; 
-      this.off = 0L;
-      this.end = channel.size();
-    }
-    
-    public SimpleFSIndexInput(String resourceDesc, SeekableByteChannel channel, long off, long length, int bufferSize) {
-      super(resourceDesc, bufferSize);
-      this.channel = channel;
-      this.off = off;
-      this.end = off + length;
-      this.isClone = true;
-    }
-    
-    @Override
-    public void close() throws IOException {
-      if (!isClone) {
-        channel.close();
-      }
-    }
-    
-    @Override
-    public SimpleFSIndexInput clone() {
-      SimpleFSIndexInput clone = (SimpleFSIndexInput)super.clone();
-      clone.isClone = true;
-      return clone;
-    }
-    
-    @Override
-    public IndexInput slice(String sliceDescription, long offset, long length) throws IOException {
-      if (offset < 0 || length < 0 || offset + length > this.length()) {
-        throw new IllegalArgumentException("slice() " + sliceDescription + " out of bounds: offset=" + offset + ",length=" + length + ",fileLength="  + this.length() + ": "  + this);
-      }
-      return new SimpleFSIndexInput(getFullSliceDescription(sliceDescription), channel, off + offset, length, getBufferSize());
-    }
-
-    @Override
-    public final long length() {
-      return end - off;
-    }
-
-    @Override
-    protected void newBuffer(byte[] newBuffer) {
-      super.newBuffer(newBuffer);
-      byteBuf = ByteBuffer.wrap(newBuffer);
-    }
-
-    @Override
-    protected void readInternal(byte[] b, int offset, int len) throws IOException {
-      final ByteBuffer bb;
-
-      // Determine the ByteBuffer we should use
-      if (b == buffer) {
-        // Use our own pre-wrapped byteBuf:
-        assert byteBuf != null;
-        bb = byteBuf;
-        byteBuf.clear().position(offset);
-      } else {
-        bb = ByteBuffer.wrap(b, offset, len);
-      }
-
-      synchronized(channel) {
-        long pos = getFilePointer() + off;
-        
-        if (pos + len > end) {
-          throw new EOFException("read past EOF: " + this);
-        }
-               
-        try {
-          channel.position(pos);
-
-          int readLength = len;
-          while (readLength > 0) {
-            final int toRead = Math.min(CHUNK_SIZE, readLength);
-            bb.limit(bb.position() + toRead);
-            assert bb.remaining() == toRead;
-            final int i = channel.read(bb);
-            if (i < 0) { // be defensive here, even though we checked before hand, something could have changed
-              throw new EOFException("read past EOF: " + this + " off: " + offset + " len: " + len + " pos: " + pos + " chunkLen: " + toRead + " end: " + end);
-            }
-            assert i > 0 : "SeekableByteChannel.read with non zero-length bb.remaining() must always read at least one byte (Channel is in blocking mode, see spec of ReadableByteChannel)";
-            pos += i;
-            readLength -= i;
-          }
-          assert readLength == 0;
-        } catch (IOException ioe) {
-          throw new IOException(ioe.getMessage() + ": " + this, ioe);
-        }
-      }
-    }
-
-    @Override
-    protected void seekInternal(long pos) throws IOException {
-      if (pos > length()) {
-        throw new EOFException("read past EOF: pos=" + pos + " vs length=" + length() + ": " + this);
-      }
-    }
-  }
-}
diff --git a/lucene/core/src/test/org/apache/lucene/codecs/lucene84/TestLucene84PostingsFormat.java b/lucene/core/src/test/org/apache/lucene/codecs/lucene84/TestLucene84PostingsFormat.java
index 0be30e3..c4d1407 100644
--- a/lucene/core/src/test/org/apache/lucene/codecs/lucene84/TestLucene84PostingsFormat.java
+++ b/lucene/core/src/test/org/apache/lucene/codecs/lucene84/TestLucene84PostingsFormat.java
@@ -50,7 +50,7 @@ import org.apache.lucene.store.IOContext;
 import org.apache.lucene.store.IndexInput;
 import org.apache.lucene.store.IndexOutput;
 import org.apache.lucene.store.MMapDirectory;
-import org.apache.lucene.store.SimpleFSDirectory;
+import org.apache.lucene.store.NIOFSDirectory;
 import org.apache.lucene.util.TestUtil;
 
 public class TestLucene84PostingsFormat extends BasePostingsFormatTestCase {
@@ -116,7 +116,7 @@ public class TestLucene84PostingsFormat extends BasePostingsFormatTestCase {
       }
     }
 
-    try (Directory d = new SimpleFSDirectory(tempDir)) {
+    try (Directory d = new NIOFSDirectory(tempDir)) {
       // test auto
       try (DirectoryReader r = DirectoryReader.open(d)) {
         assertEquals(1, r.leaves().size());
@@ -127,7 +127,7 @@ public class TestLucene84PostingsFormat extends BasePostingsFormatTestCase {
       }
     }
 
-    try (Directory d = new SimpleFSDirectory(tempDir)) {
+    try (Directory d = new NIOFSDirectory(tempDir)) {
       // test per field
       Map<String, String> readerAttributes = new HashMap<>();
       readerAttributes.put(BlockTreeTermsReader.FST_MODE_KEY, BlockTreeTermsReader.FSTLoadMode.OFF_HEAP.name());
@@ -142,7 +142,7 @@ public class TestLucene84PostingsFormat extends BasePostingsFormatTestCase {
     }
 
     IllegalArgumentException invalid = expectThrows(IllegalArgumentException.class, () -> {
-      try (Directory d = new SimpleFSDirectory(tempDir)) {
+      try (Directory d = new NIOFSDirectory(tempDir)) {
         Map<String, String> readerAttributes = new HashMap<>();
         readerAttributes.put(BlockTreeTermsReader.FST_MODE_KEY, "invalid");
         DirectoryReader.open(d, readerAttributes);
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java
index 1e79f39..d6220ed 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexWriter.java
@@ -95,7 +95,6 @@ import org.apache.lucene.store.MMapDirectory;
 import org.apache.lucene.store.MockDirectoryWrapper;
 import org.apache.lucene.store.NIOFSDirectory;
 import org.apache.lucene.store.NoLockFactory;
-import org.apache.lucene.store.SimpleFSDirectory;
 import org.apache.lucene.store.SimpleFSLockFactory;
 import org.apache.lucene.util.Bits;
 import org.apache.lucene.util.BytesRef;
@@ -2684,7 +2683,7 @@ public class TestIndexWriter extends LuceneTestCase {
 
     // MMapDirectory doesn't work because it closes its file handles after mapping!
     List<Closeable> toClose = new ArrayList<>();
-    try (FSDirectory dir = new SimpleFSDirectory(root);
+    try (FSDirectory dir = new NIOFSDirectory(root);
          Closeable closeable = () -> IOUtils.close(toClose)) {
       assert closeable != null;
       IndexWriterConfig iwc = new IndexWriterConfig(new MockAnalyzer(random()))
@@ -2750,7 +2749,7 @@ public class TestIndexWriter extends LuceneTestCase {
     // Use WindowsFS to prevent open files from being deleted:
     FileSystem fs = new WindowsFS(path.getFileSystem()).getFileSystem(URI.create("file:///"));
     Path root = new FilterPath(path, fs);
-    try (FSDirectory _dir = new SimpleFSDirectory(root)) {
+    try (FSDirectory _dir = new NIOFSDirectory(root)) {
       Directory dir = new FilterDirectory(_dir) {};
 
       IndexWriterConfig iwc = new IndexWriterConfig(new MockAnalyzer(random()));
@@ -2792,7 +2791,7 @@ public class TestIndexWriter extends LuceneTestCase {
     IndexCommit indexCommit;
     DirectoryReader reader;
     // MMapDirectory doesn't work because it closes its file handles after mapping!
-    try (FSDirectory dir = new SimpleFSDirectory(root)) {
+    try (FSDirectory dir = new NIOFSDirectory(root)) {
       IndexWriterConfig iwc = new IndexWriterConfig(new MockAnalyzer(random())).setIndexDeletionPolicy(NoDeletionPolicy.INSTANCE);
       IndexWriter w = new IndexWriter(dir, iwc);
       w.commit();
@@ -2834,7 +2833,7 @@ public class TestIndexWriter extends LuceneTestCase {
     Path root = new FilterPath(path, fs);
     DirectoryReader reader;
     // MMapDirectory doesn't work because it closes its file handles after mapping!
-    try (FSDirectory dir = new SimpleFSDirectory(root)) {
+    try (FSDirectory dir = new NIOFSDirectory(root)) {
       IndexWriterConfig iwc = new IndexWriterConfig(new MockAnalyzer(random()));
       IndexWriter w = new IndexWriter(dir, iwc);
       w.commit();
diff --git a/lucene/core/src/test/org/apache/lucene/store/TestBufferedIndexInput.java b/lucene/core/src/test/org/apache/lucene/store/TestBufferedIndexInput.java
index 3d4607d..50a8203 100644
--- a/lucene/core/src/test/org/apache/lucene/store/TestBufferedIndexInput.java
+++ b/lucene/core/src/test/org/apache/lucene/store/TestBufferedIndexInput.java
@@ -264,7 +264,7 @@ public class TestBufferedIndexInput extends LuceneTestCase {
       final Random rand;
 
       public MockFSDirectory(Path path, Random rand) throws IOException {
-        super(new SimpleFSDirectory(path));
+        super(new NIOFSDirectory(path));
         this.rand = rand;
       }
 
diff --git a/lucene/core/src/test/org/apache/lucene/store/TestDirectory.java b/lucene/core/src/test/org/apache/lucene/store/TestDirectory.java
index 5ed902a..7b8c146 100644
--- a/lucene/core/src/test/org/apache/lucene/store/TestDirectory.java
+++ b/lucene/core/src/test/org/apache/lucene/store/TestDirectory.java
@@ -42,7 +42,6 @@ public class TestDirectory extends LuceneTestCase {
     }
 
     final List<FSDirectory> dirs0 = new ArrayList<>();
-    dirs0.add(new SimpleFSDirectory(path));
     dirs0.add(new NIOFSDirectory(path));
     if (hasWorkingMMapOnWindows()) {
       dirs0.add(new MMapDirectory(path));
@@ -117,13 +116,13 @@ public class TestDirectory extends LuceneTestCase {
   // LUCENE-1468
   public void testNotDirectory() throws Throwable {
     Path path = createTempDir("testnotdir");
-    Directory fsDir = new SimpleFSDirectory(path);
+    Directory fsDir = new NIOFSDirectory(path);
     try {
       IndexOutput out = fsDir.createOutput("afile", newIOContext(random()));
       out.close();
       assertTrue(slowFileExists(fsDir, "afile"));
       expectThrows(IOException.class, () -> {
-        new SimpleFSDirectory(path.resolve("afile"));
+        new NIOFSDirectory(path.resolve("afile"));
       });
     } finally {
       fsDir.close();
diff --git a/lucene/core/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java b/lucene/core/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java
index f241cb4..801c443 100644
--- a/lucene/core/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java
+++ b/lucene/core/src/test/org/apache/lucene/store/TestFileSwitchDirectory.java
@@ -99,8 +99,8 @@ public class TestFileSwitchDirectory extends BaseDirectoryTestCase {
   }
 
   private Directory newFSSwitchDirectory(Path aDir, Path bDir, Set<String> primaryExtensions) throws IOException {
-    Directory a = new SimpleFSDirectory(aDir);
-    Directory b = new SimpleFSDirectory(bDir);
+    Directory a = new NIOFSDirectory(aDir);
+    Directory b = new NIOFSDirectory(bDir);
     return new FileSwitchDirectory(primaryExtensions, a, b, true);
   }
   
@@ -173,7 +173,7 @@ public class TestFileSwitchDirectory extends BaseDirectoryTestCase {
     FileSystem fs = new WindowsFS(path.getFileSystem()).getFileSystem(URI.create("file:///"));
     Path indexPath = new FilterPath(path, fs);
     try (final FileSwitchDirectory dir = new FileSwitchDirectory(Collections.singleton("tim"),
-        new SimpleFSDirectory(indexPath), new SimpleFSDirectory(indexPath), true)) {
+        new NIOFSDirectory(indexPath), new NIOFSDirectory(indexPath), true)) {
       dir.createOutput("foo.tim", IOContext.DEFAULT).close();
       Function<String[], Long> stripExtra = array -> Arrays.asList(array).stream()
           .filter(f -> f.startsWith("extra") == false).count();
diff --git a/lucene/core/src/test/org/apache/lucene/store/TestSimpleFSDirectory.java b/lucene/core/src/test/org/apache/lucene/store/TestSimpleFSDirectory.java
deleted file mode 100644
index 15a26a0..0000000
--- a/lucene/core/src/test/org/apache/lucene/store/TestSimpleFSDirectory.java
+++ /dev/null
@@ -1,85 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.lucene.store;
-
-
-import java.io.IOException;
-import java.net.URI;
-import java.nio.file.FileSystem;
-import java.nio.file.Path;
-
-import org.apache.lucene.mockfile.FilterPath;
-import org.apache.lucene.mockfile.WindowsFS;
-import org.apache.lucene.util.Constants;
-import org.apache.lucene.util.IOUtils;
-
-/**
- * Tests SimpleFSDirectory
- */
-public class TestSimpleFSDirectory extends BaseDirectoryTestCase {
-
-  @Override
-  protected Directory getDirectory(Path path) throws IOException {
-    return new SimpleFSDirectory(path);
-  }
-
-  public void testRenameWithPendingDeletes() throws IOException {
-    Path path = createTempDir();
-    // irony: currently we don't emulate windows well enough to work on windows!
-    assumeFalse("windows is not supported", Constants.WINDOWS);
-    // Use WindowsFS to prevent open files from being deleted:
-    FileSystem fs = new WindowsFS(path.getFileSystem()).getFileSystem(URI.create("file:///"));
-    Path root = new FilterPath(path, fs);
-    Directory directory = getDirectory(root);
-    IndexOutput output = directory.createOutput("target.txt", IOContext.DEFAULT);
-    output.writeInt(1);
-    output.close();
-    IndexOutput output1 = directory.createOutput("source.txt", IOContext.DEFAULT);
-    output1.writeInt(2);
-    output1.close();
-
-    IndexInput input = directory.openInput("target.txt", IOContext.DEFAULT);
-    directory.deleteFile("target.txt");
-    directory.rename("source.txt", "target.txt");
-    IndexInput input1 = directory.openInput("target.txt", IOContext.DEFAULT);
-    assertTrue(directory.getPendingDeletions().isEmpty());
-    assertEquals(1, input.readInt());
-    assertEquals(2, input1.readInt());
-    IOUtils.close(input1, input, directory);
-  }
-
-  public void testCreateOutputWithPendingDeletes() throws IOException {
-    // irony: currently we don't emulate windows well enough to work on windows!
-    assumeFalse("windows is not supported", Constants.WINDOWS);
-    Path path = createTempDir();
-    // Use WindowsFS to prevent open files from being deleted:
-    FileSystem fs = new WindowsFS(path.getFileSystem()).getFileSystem(URI.create("file:///"));
-    Path root = new FilterPath(path, fs);
-    Directory directory = getDirectory(root);
-    IndexOutput output = directory.createOutput("file.txt", IOContext.DEFAULT);
-    output.writeInt(1);
-    output.close();
-    IndexInput input = directory.openInput("file.txt", IOContext.DEFAULT);
-    directory.deleteFile("file.txt");
-    expectThrows(IOException.class, () -> {
-      directory.createOutput("file.txt", IOContext.DEFAULT);
-    });
-    assertTrue(directory.getPendingDeletions().isEmpty());
-    assertEquals(1, input.readInt());
-    IOUtils.close(input, directory);
-  }
-}
diff --git a/lucene/misc/src/java/org/apache/lucene/store/RAFDirectory.java b/lucene/misc/src/java/org/apache/lucene/store/RAFDirectory.java
index 96963ae..cb5fc2d 100644
--- a/lucene/misc/src/java/org/apache/lucene/store/RAFDirectory.java
+++ b/lucene/misc/src/java/org/apache/lucene/store/RAFDirectory.java
@@ -51,7 +51,7 @@ public class RAFDirectory extends FSDirectory {
     path.toFile(); // throw exception if we can't get a File
   }
   
-  /** Create a new SimpleFSDirectory for the named location and {@link FSLockFactory#getDefault()}.
+  /** Create a new RAFDirectory for the named location and {@link FSLockFactory#getDefault()}.
    *  The directory is created at the named location if it does not yet exist.
    *
    * @param path the path of the directory
diff --git a/lucene/misc/src/test/org/apache/lucene/store/TestHardLinkCopyDirectoryWrapper.java b/lucene/misc/src/test/org/apache/lucene/store/TestHardLinkCopyDirectoryWrapper.java
index 4ae44e0..1fc4ccf 100644
--- a/lucene/misc/src/test/org/apache/lucene/store/TestHardLinkCopyDirectoryWrapper.java
+++ b/lucene/misc/src/test/org/apache/lucene/store/TestHardLinkCopyDirectoryWrapper.java
@@ -98,8 +98,8 @@ public class TestHardLinkCopyDirectoryWrapper extends BaseDirectoryTestCase {
     assumeFalse("windows is not supported", Constants.WINDOWS);
     Path path = createTempDir();
     FileSystem fs = new WindowsFS(path.getFileSystem()).getFileSystem(URI.create("file:///"));
-    Directory dir1 = new SimpleFSDirectory(new FilterPath(path, fs));
-    Directory dir2 = new SimpleFSDirectory(new FilterPath(path.resolve("link"), fs));
+    Directory dir1 = new NIOFSDirectory(new FilterPath(path, fs));
+    Directory dir2 = new NIOFSDirectory(new FilterPath(path.resolve("link"), fs));
 
     IndexOutput target = dir1.createOutput("target.txt", IOContext.DEFAULT);
     target.writeInt(1);
diff --git a/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java b/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
index c2846f6..63018fe 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/util/LuceneTestCase.java
@@ -483,10 +483,9 @@ public abstract class LuceneTestCase extends Assert {
 
   /** Filesystem-based {@link Directory} implementations. */
   private static final List<String> FS_DIRECTORIES = Arrays.asList(
-    "SimpleFSDirectory",
     "NIOFSDirectory",
-    // SimpleFSDirectory as replacement for MMapDirectory if unmapping is not supported on Windows (to make randomization stable):
-    hasWorkingMMapOnWindows() ? "MMapDirectory" : "SimpleFSDirectory"
+    // NIOFSDirectory as replacement for MMapDirectory if unmapping is not supported on Windows (to make randomization stable):
+    hasWorkingMMapOnWindows() ? "MMapDirectory" : "NIOFSDirectory"
   );
 
   /** All {@link Directory} implementations. */
diff --git a/solr/core/src/java/org/apache/solr/core/SimpleFSDirectoryFactory.java b/solr/core/src/java/org/apache/solr/core/SimpleFSDirectoryFactory.java
deleted file mode 100644
index 0784d21..0000000
--- a/solr/core/src/java/org/apache/solr/core/SimpleFSDirectoryFactory.java
+++ /dev/null
@@ -1,42 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more
- * contributor license agreements.  See the NOTICE file distributed with
- * this work for additional information regarding copyright ownership.
- * The ASF licenses this file to You under the Apache License, Version 2.0
- * (the "License"); you may not use this file except in compliance with
- * the License.  You may obtain a copy of the License at
- *
- *     http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-package org.apache.solr.core;
-import java.io.File;
-import java.io.IOException;
-
-import org.apache.lucene.store.Directory;
-import org.apache.lucene.store.LockFactory;
-import org.apache.lucene.store.SimpleFSDirectory;
-
-
-/**
- * Factory to instantiate {@link org.apache.lucene.store.SimpleFSDirectory}
- *
- **/
-public class SimpleFSDirectoryFactory extends StandardDirectoryFactory {
-
-  @Override
-  protected Directory create(String path, LockFactory lockFactory, DirContext dirContext) throws IOException {
-    // we pass NoLockFactory, because the real lock factory is set later by injectLockFactory:
-    return new SimpleFSDirectory(new File(path).toPath(), lockFactory);
-  }
-
-  @Override
-  public boolean isAbsolute(String path) {
-    return new File(path).isAbsolute();
-  }
-}
diff --git a/solr/core/src/java/org/apache/solr/core/backup/repository/LocalFileSystemRepository.java b/solr/core/src/java/org/apache/solr/core/backup/repository/LocalFileSystemRepository.java
index 01810f6..2379b0d 100644
--- a/solr/core/src/java/org/apache/solr/core/backup/repository/LocalFileSystemRepository.java
+++ b/solr/core/src/java/org/apache/solr/core/backup/repository/LocalFileSystemRepository.java
@@ -33,8 +33,8 @@ import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.FSDirectory;
 import org.apache.lucene.store.IOContext;
 import org.apache.lucene.store.IndexInput;
+import org.apache.lucene.store.NIOFSDirectory;
 import org.apache.lucene.store.NoLockFactory;
-import org.apache.lucene.store.SimpleFSDirectory;
 import org.apache.solr.common.util.NamedList;
 import org.apache.solr.core.DirectoryFactory;
 
@@ -117,7 +117,7 @@ public class LocalFileSystemRepository implements BackupRepository {
 
   @Override
   public IndexInput openInput(URI dirPath, String fileName, IOContext ctx) throws IOException {
-    try (FSDirectory dir = new SimpleFSDirectory(Paths.get(dirPath), NoLockFactory.INSTANCE)) {
+    try (FSDirectory dir = new NIOFSDirectory(Paths.get(dirPath), NoLockFactory.INSTANCE)) {
       return dir.openInput(fileName, ctx);
     }
   }
@@ -129,7 +129,7 @@ public class LocalFileSystemRepository implements BackupRepository {
 
   @Override
   public String[] listAll(URI dirPath) throws IOException {
-    try (FSDirectory dir = new SimpleFSDirectory(Paths.get(dirPath), NoLockFactory.INSTANCE)) {
+    try (FSDirectory dir = new NIOFSDirectory(Paths.get(dirPath), NoLockFactory.INSTANCE)) {
       return dir.listAll();
     }
   }
@@ -141,14 +141,14 @@ public class LocalFileSystemRepository implements BackupRepository {
 
   @Override
   public void copyFileFrom(Directory sourceDir, String fileName, URI dest) throws IOException {
-    try (FSDirectory dir = new SimpleFSDirectory(Paths.get(dest), NoLockFactory.INSTANCE)) {
+    try (FSDirectory dir = new NIOFSDirectory(Paths.get(dest), NoLockFactory.INSTANCE)) {
       dir.copyFrom(sourceDir, fileName, fileName, DirectoryFactory.IOCONTEXT_NO_CACHE);
     }
   }
 
   @Override
   public void copyFileTo(URI sourceDir, String fileName, Directory dest) throws IOException {
-    try (FSDirectory dir = new SimpleFSDirectory(Paths.get(sourceDir), NoLockFactory.INSTANCE)) {
+    try (FSDirectory dir = new NIOFSDirectory(Paths.get(sourceDir), NoLockFactory.INSTANCE)) {
       dest.copyFrom(dir, fileName, fileName, DirectoryFactory.IOCONTEXT_NO_CACHE);
     }
   }
diff --git a/solr/core/src/test/org/apache/solr/core/SolrCoreCheckLockOnStartupTest.java b/solr/core/src/test/org/apache/solr/core/SolrCoreCheckLockOnStartupTest.java
index e1e43de..1156aad 100644
--- a/solr/core/src/test/org/apache/solr/core/SolrCoreCheckLockOnStartupTest.java
+++ b/solr/core/src/test/org/apache/solr/core/SolrCoreCheckLockOnStartupTest.java
@@ -42,7 +42,7 @@ public class SolrCoreCheckLockOnStartupTest extends SolrTestCaseJ4 {
   public void setUp() throws Exception {
     super.setUp();
 
-    System.setProperty("solr.directoryFactory", "org.apache.solr.core.SimpleFSDirectoryFactory");
+    System.setProperty("solr.directoryFactory", "org.apache.solr.core.NIOFSDirectoryFactory");
     // test tests native and simple in the same jvm in the same exact directory:
     // the file will remain after the native test (it cannot safely be deleted without the risk of deleting another guys lock)
     // it's ok, these aren't "compatible" anyway: really this test should not re-use the same directory at all.
diff --git a/solr/core/src/test/org/apache/solr/core/TestDirectoryFactory.java b/solr/core/src/test/org/apache/solr/core/TestDirectoryFactory.java
index 72b02b3..6496b24 100644
--- a/solr/core/src/test/org/apache/solr/core/TestDirectoryFactory.java
+++ b/solr/core/src/test/org/apache/solr/core/TestDirectoryFactory.java
@@ -45,7 +45,6 @@ public class TestDirectoryFactory extends SolrTestCaseJ4 {
                     NRTCachingDirectoryFactory.class,
                     NIOFSDirectoryFactory.class,
                     RAMDirectoryFactory.class,
-                    SimpleFSDirectoryFactory.class,
                     StandardDirectoryFactory.class);
   
   /* Test that MockDirectoryFactory's exist method behaves consistent w/other impls */
diff --git a/solr/core/src/test/org/apache/solr/core/snapshots/TestSolrCoreSnapshots.java b/solr/core/src/test/org/apache/solr/core/snapshots/TestSolrCoreSnapshots.java
index b17e212..e2be8f9 100644
--- a/solr/core/src/test/org/apache/solr/core/snapshots/TestSolrCoreSnapshots.java
+++ b/solr/core/src/test/org/apache/solr/core/snapshots/TestSolrCoreSnapshots.java
@@ -29,7 +29,8 @@ import java.util.Optional;
 import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.IndexCommit;
 import org.apache.lucene.index.IndexNotFoundException;
-import org.apache.lucene.store.SimpleFSDirectory;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.store.NIOFSDirectory;
 import org.apache.lucene.util.LuceneTestCase.Slow;
 import org.apache.lucene.util.TestUtil;
 import org.apache.solr.SolrTestCaseJ4;
@@ -299,7 +300,7 @@ public class TestSolrCoreSnapshots extends SolrCloudTestCase {
   }
 
   private List<IndexCommit> listCommits(String directory) throws Exception {
-    SimpleFSDirectory dir = new SimpleFSDirectory(Paths.get(directory));
+    Directory dir = new NIOFSDirectory(Paths.get(directory));
     try {
       return DirectoryReader.listCommits(dir);
     } catch (IndexNotFoundException ex) {
diff --git a/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java b/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java
index 6f99201..8cc19d0 100644
--- a/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java
+++ b/solr/core/src/test/org/apache/solr/handler/TestReplicationHandler.java
@@ -44,7 +44,7 @@ import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.IndexReader;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.FSDirectory;
-import org.apache.lucene.store.SimpleFSDirectory;
+import org.apache.lucene.store.NIOFSDirectory;
 import org.apache.lucene.util.Constants;
 import org.apache.lucene.util.LuceneTestCase.Slow;
 import org.apache.lucene.util.TestUtil;
@@ -1624,7 +1624,7 @@ public class TestReplicationHandler extends SolrTestCaseJ4 {
     // confirm backups really are empty
     for (int i = 1; i <=2; i++) {
       final String name = "snapshot.empty_backup"+i;
-      try (Directory dir = new SimpleFSDirectory(new File(backupDir, name).toPath());
+      try (Directory dir = new NIOFSDirectory(new File(backupDir, name).toPath());
            IndexReader reader = DirectoryReader.open(dir)) {
         assertEquals(name + " is not empty", 0, reader.numDocs());
       }
diff --git a/solr/core/src/test/org/apache/solr/handler/TestReplicationHandlerBackup.java b/solr/core/src/test/org/apache/solr/handler/TestReplicationHandlerBackup.java
index 68bf77c..420c7c8 100644
--- a/solr/core/src/test/org/apache/solr/handler/TestReplicationHandlerBackup.java
+++ b/solr/core/src/test/org/apache/solr/handler/TestReplicationHandlerBackup.java
@@ -37,7 +37,7 @@ import org.apache.lucene.search.IndexSearcher;
 import org.apache.lucene.search.MatchAllDocsQuery;
 import org.apache.lucene.search.TopDocs;
 import org.apache.lucene.store.Directory;
-import org.apache.lucene.store.SimpleFSDirectory;
+import org.apache.lucene.store.NIOFSDirectory;
 import org.apache.lucene.util.TestUtil;
 import org.apache.solr.SolrJettyTestBase;
 import org.apache.solr.SolrTestCaseJ4;
@@ -146,8 +146,8 @@ public class TestReplicationHandlerBackup extends SolrJettyTestBase {
 
   private void verify(Path backup, int nDocs) throws IOException {
     log.info("Verifying ndocs={} in {}", nDocs, backup);
-    try (Directory dir = new SimpleFSDirectory(backup);
-        IndexReader reader = DirectoryReader.open(dir)) {
+    try (Directory dir = new NIOFSDirectory(backup);
+         IndexReader reader = DirectoryReader.open(dir)) {
       IndexSearcher searcher = new IndexSearcher(reader);
       TopDocs hits = searcher.search(new MatchAllDocsQuery(), 1);
       assertEquals(nDocs, hits.totalHits.value);
diff --git a/solr/example/example-DIH/solr/db/conf/solrconfig.xml b/solr/example/example-DIH/solr/db/conf/solrconfig.xml
index a88b39d..1127093 100644
--- a/solr/example/example-DIH/solr/db/conf/solrconfig.xml
+++ b/solr/example/example-DIH/solr/db/conf/solrconfig.xml
@@ -109,8 +109,8 @@
        wraps solr.StandardDirectoryFactory and caches small files in memory
        for better NRT performance.
 
-       One can force a particular implementation via solr.MMapDirectoryFactory,
-       solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
+       One can force a particular implementation via solr.MMapDirectoryFactory
+       or solr.NIOFSDirectoryFactory.
 
        solr.RAMDirectoryFactory is memory based and not persistent.
     -->
diff --git a/solr/example/example-DIH/solr/mail/conf/solrconfig.xml b/solr/example/example-DIH/solr/mail/conf/solrconfig.xml
index 3582ecb..91b9957 100644
--- a/solr/example/example-DIH/solr/mail/conf/solrconfig.xml
+++ b/solr/example/example-DIH/solr/mail/conf/solrconfig.xml
@@ -112,8 +112,8 @@
        wraps solr.StandardDirectoryFactory and caches small files in memory
        for better NRT performance.
 
-       One can force a particular implementation via solr.MMapDirectoryFactory,
-       solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
+       One can force a particular implementation via solr.MMapDirectoryFactory
+       or solr.NIOFSDirectoryFactory.
 
        solr.RAMDirectoryFactory is memory based and not persistent.
     -->
diff --git a/solr/example/example-DIH/solr/solr/conf/solrconfig.xml b/solr/example/example-DIH/solr/solr/conf/solrconfig.xml
index 81e8451..56e7ed6 100644
--- a/solr/example/example-DIH/solr/solr/conf/solrconfig.xml
+++ b/solr/example/example-DIH/solr/solr/conf/solrconfig.xml
@@ -109,8 +109,8 @@
        wraps solr.StandardDirectoryFactory and caches small files in memory
        for better NRT performance.
 
-       One can force a particular implementation via solr.MMapDirectoryFactory,
-       solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
+       One can force a particular implementation via solr.MMapDirectoryFactory
+       or solr.NIOFSDirectoryFactory.
 
        solr.RAMDirectoryFactory is memory based and not persistent.
     -->
diff --git a/solr/example/files/conf/solrconfig.xml b/solr/example/files/conf/solrconfig.xml
index 7c7a58d..d16d4bf 100644
--- a/solr/example/files/conf/solrconfig.xml
+++ b/solr/example/files/conf/solrconfig.xml
@@ -111,8 +111,8 @@
        wraps solr.StandardDirectoryFactory and caches small files in memory
        for better NRT performance.
 
-       One can force a particular implementation via solr.MMapDirectoryFactory,
-       solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
+       One can force a particular implementation via solr.MMapDirectoryFactory
+       or solr.NIOFSDirectoryFactory.
 
        solr.RAMDirectoryFactory is memory based and not persistent.
     -->
diff --git a/solr/server/solr/configsets/_default/conf/solrconfig.xml b/solr/server/solr/configsets/_default/conf/solrconfig.xml
index 548d2c5..db0e906 100644
--- a/solr/server/solr/configsets/_default/conf/solrconfig.xml
+++ b/solr/server/solr/configsets/_default/conf/solrconfig.xml
@@ -100,8 +100,8 @@
        wraps solr.StandardDirectoryFactory and caches small files in memory
        for better NRT performance.
 
-       One can force a particular implementation via solr.MMapDirectoryFactory,
-       solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
+       One can force a particular implementation via solr.MMapDirectoryFactory
+       or solr.NIOFSDirectoryFactory.
 
        solr.RAMDirectoryFactory is memory based and not persistent.
     -->
diff --git a/solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml b/solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
index 98f7595..554a82e 100644
--- a/solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
+++ b/solr/server/solr/configsets/sample_techproducts_configs/conf/solrconfig.xml
@@ -112,8 +112,8 @@
        wraps solr.StandardDirectoryFactory and caches small files in memory
        for better NRT performance.
 
-       One can force a particular implementation via solr.MMapDirectoryFactory,
-       solr.NIOFSDirectoryFactory, or solr.SimpleFSDirectoryFactory.
+       One can force a particular implementation via solr.MMapDirectoryFactory
+       or solr.NIOFSDirectoryFactory.
 
        solr.RAMDirectoryFactory is memory based and not persistent.
     -->
diff --git a/solr/solr-ref-guide/src/datadir-and-directoryfactory-in-solrconfig.adoc b/solr/solr-ref-guide/src/datadir-and-directoryfactory-in-solrconfig.adoc
index 0af9374..aa6d3c4 100644
--- a/solr/solr-ref-guide/src/datadir-and-directoryfactory-in-solrconfig.adoc
+++ b/solr/solr-ref-guide/src/datadir-and-directoryfactory-in-solrconfig.adoc
@@ -36,7 +36,7 @@ element `<solrDataHome>` then the location of data directory will be `<SOLR_DATA
 
 == Specifying the DirectoryFactory For Your Index
 
-The default {solr-javadocs}/solr-core/org/apache/solr/core/NRTCachingDirectoryFactory.html[`solr.NRTCachingDirectoryFactory`] is filesystem based, and tries to pick the best implementation for the current JVM and platform. You can force a particular implementation and/or configuration options by specifying {solr-javadocs}/solr-core/org/apache/solr/core/MMapDirectoryFactory.html[`solr.MMapDirectoryFactory`], {solr-javadocs}/solr-core/org/apache/solr/core/NIOFSDirectoryFactory.html[`solr.N [...]
+The default {solr-javadocs}/solr-core/org/apache/solr/core/NRTCachingDirectoryFactory.html[`solr.NRTCachingDirectoryFactory`] is filesystem based, and tries to pick the best implementation for the current JVM and platform. You can force a particular implementation and/or configuration options by specifying {solr-javadocs}/solr-core/org/apache/solr/core/MMapDirectoryFactory.html[`solr.MMapDirectoryFactory`] or {solr-javadocs}/solr-core/org/apache/solr/core/NIOFSDirectoryFactory.html[`solr [...]
 
 [source,xml]
 ----