You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by mi...@apache.org on 2016/02/03 21:47:36 UTC

[2/3] lucene-solr git commit: cutover more places back to deleteFile

cutover more places back to deleteFile


Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/845eec10
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/845eec10
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/845eec10

Branch: refs/heads/lucene-6835
Commit: 845eec103677dde05c34ffe1500a230dfecfd62e
Parents: a741ea5
Author: Mike McCandless <mi...@apache.org>
Authored: Wed Feb 3 15:44:08 2016 -0500
Committer: Mike McCandless <mi...@apache.org>
Committed: Wed Feb 3 15:44:08 2016 -0500

----------------------------------------------------------------------
 .../index/TestBackwardsCompatibility.java       |  2 --
 .../benchmark/byTask/utils/StreamUtilsTest.java | 14 +--------
 .../java/org/apache/lucene/store/Directory.java |  1 -
 .../org/apache/lucene/store/FSDirectory.java    | 13 ++++++--
 .../lucene/index/TestIndexFileDeleter.java      |  3 +-
 .../taxonomy/directory/TestAddTaxonomy.java     | 29 +++++++++---------
 .../writercache/TestCompactLabelToOrdinal.java  | 31 ++++++++++----------
 .../IndexAndTaxonomyReplicationClientTest.java  |  4 +--
 .../replicator/IndexReplicationClientTest.java  |  2 ++
 .../replicator/http/HttpReplicatorTest.java     |  7 ++---
 .../lucene/analysis/VocabularyAssert.java       |  4 +--
 .../apache/lucene/mockfile/VirusCheckingFS.java | 18 +++++++-----
 .../util/TestRuleTemporaryFilesCleanup.java     |  2 +-
 .../java/org/apache/lucene/util/TestUtil.java   |  7 ++---
 .../lucene/mockfile/TestVirusCheckingFS.java    |  2 +-
 .../org/apache/solr/core/DirectoryFactory.java  |  7 +++--
 .../org/apache/solr/handler/IndexFetcher.java   |  4 +--
 .../org/apache/solr/handler/RestoreCore.java    |  4 +--
 .../solr/store/blockcache/BlockDirectory.java   | 11 +++----
 .../apache/solr/store/hdfs/HdfsDirectory.java   | 10 +++----
 .../solr/store/hdfs/HdfsDirectoryTest.java      | 14 +++++----
 21 files changed, 87 insertions(+), 102 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/lucene/backward-codecs/src/test/org/apache/lucene/index/TestBackwardsCompatibility.java
----------------------------------------------------------------------
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 87cdea6..cad3974 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
@@ -60,7 +60,6 @@ import org.apache.lucene.search.TermQuery;
 import org.apache.lucene.store.BaseDirectoryWrapper;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.FSDirectory;
-import org.apache.lucene.store.MockDirectoryWrapper;
 import org.apache.lucene.store.NIOFSDirectory;
 import org.apache.lucene.store.RAMDirectory;
 import org.apache.lucene.store.SimpleFSDirectory;
@@ -584,7 +583,6 @@ public class TestBackwardsCompatibility extends LuceneTestCase {
       checker.close();
 
       dir.close();
-      IOUtils.rm(oldIndexDir);
     }
   }
   

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/utils/StreamUtilsTest.java
----------------------------------------------------------------------
diff --git a/lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/utils/StreamUtilsTest.java b/lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/utils/StreamUtilsTest.java
index df6bea1..762ee5c 100644
--- a/lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/utils/StreamUtilsTest.java
+++ b/lucene/benchmark/src/test/org/apache/lucene/benchmark/byTask/utils/StreamUtilsTest.java
@@ -30,8 +30,6 @@ import java.nio.file.Path;
 
 import org.apache.commons.compress.compressors.CompressorStreamFactory;
 import org.apache.lucene.benchmark.BenchmarkTestCase;
-import org.apache.lucene.util.IOUtils;
-import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
@@ -135,16 +133,6 @@ public class StreamUtilsTest extends BenchmarkTestCase {
   @Before
   public void setUp() throws Exception {
     super.setUp();
-    testDir = getWorkDir().resolve("ContentSourceTest");
-    IOUtils.rm(testDir);
-    Files.createDirectory(testDir);
+    testDir = createTempDir("ContentSourceTest");
   }
-
-  @Override
-  @After
-  public void tearDown() throws Exception {
-    IOUtils.rm(testDir);
-    super.tearDown();
-  }
-
 }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/lucene/core/src/java/org/apache/lucene/store/Directory.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/java/org/apache/lucene/store/Directory.java b/lucene/core/src/java/org/apache/lucene/store/Directory.java
index b6da4cc..6aa46e9 100644
--- a/lucene/core/src/java/org/apache/lucene/store/Directory.java
+++ b/lucene/core/src/java/org/apache/lucene/store/Directory.java
@@ -47,7 +47,6 @@ public abstract class Directory implements Closeable {
    * 
    * @throws IOException in case of IO error
    */
-  // nocommit should this sort?
   public abstract String[] listAll() throws IOException;
 
   /** Removes an existing file in the directory. */

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/lucene/core/src/java/org/apache/lucene/store/FSDirectory.java
----------------------------------------------------------------------
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 a2edb84..fa6ce63 100644
--- a/lucene/core/src/java/org/apache/lucene/store/FSDirectory.java
+++ b/lucene/core/src/java/org/apache/lucene/store/FSDirectory.java
@@ -30,6 +30,7 @@ import java.nio.file.Path;
 import java.nio.file.StandardCopyOption;
 import java.nio.file.StandardOpenOption;
 import java.util.ArrayList;
+import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.HashSet;
@@ -217,7 +218,12 @@ public abstract class FSDirectory extends BaseDirectory {
       }
     }
     
-    return entries.toArray(new String[entries.size()]);
+    String[] array = entries.toArray(new String[entries.size()]);
+
+    // Don't let filesystem specifics leak out of this abstraction:
+    Arrays.sort(array);
+
+    return array;
   }
 
   @Override
@@ -249,7 +255,7 @@ public abstract class FSDirectory extends BaseDirectory {
         return new FSIndexOutput(name,
                                  StandardOpenOption.CREATE, StandardOpenOption.WRITE, StandardOpenOption.CREATE_NEW);
       } catch (FileAlreadyExistsException faee) {
-        // Retry with next random name
+        // Retry with next incremented name
       }
     }
   }
@@ -303,11 +309,12 @@ public abstract class FSDirectory extends BaseDirectory {
 
   @Override
   public void deleteFile(String name) throws IOException {  
-    pendingDeletes.remove(name);
     try {
       Files.delete(directory.resolve(name));
+      pendingDeletes.remove(name);
     } catch (NoSuchFileException | FileNotFoundException e) {
       // We were asked to delete a non-existent file:
+      pendingDeletes.remove(name);
       throw e;
     } catch (IOException ioe) {
       // On windows, a file delete can fail because there's still an open

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/lucene/core/src/test/org/apache/lucene/index/TestIndexFileDeleter.java
----------------------------------------------------------------------
diff --git a/lucene/core/src/test/org/apache/lucene/index/TestIndexFileDeleter.java b/lucene/core/src/test/org/apache/lucene/index/TestIndexFileDeleter.java
index a5e3c7e..8c2dd91 100644
--- a/lucene/core/src/test/org/apache/lucene/index/TestIndexFileDeleter.java
+++ b/lucene/core/src/test/org/apache/lucene/index/TestIndexFileDeleter.java
@@ -39,7 +39,6 @@ import org.apache.lucene.store.IndexOutput;
 import org.apache.lucene.store.MockDirectoryWrapper;
 import org.apache.lucene.util.InfoStream;
 import org.apache.lucene.util.LuceneTestCase;
-import org.apache.lucene.util.TestUtil;
 
 /*
   Verify we can read the pre-2.1 file format, do searches
@@ -225,7 +224,7 @@ public class TestIndexFileDeleter extends LuceneTestCase {
   
   public void testVirusScannerDoesntCorruptIndex() throws IOException {
     Path path = createTempDir();
-    VirusCheckingFS fs = new VirusCheckingFS(path.getFileSystem(), random());
+    VirusCheckingFS fs = new VirusCheckingFS(path.getFileSystem(), random().nextLong());
     FileSystem filesystem = fs.getFileSystem(URI.create("file:///"));
     fs.disable();
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestAddTaxonomy.java
----------------------------------------------------------------------
diff --git a/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestAddTaxonomy.java b/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestAddTaxonomy.java
index 215067b..7dc73e1 100644
--- a/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestAddTaxonomy.java
+++ b/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/directory/TestAddTaxonomy.java
@@ -1,19 +1,5 @@
 package org.apache.lucene.facet.taxonomy.directory;
 
-import java.io.IOException;
-import java.util.HashSet;
-import java.util.Random;
-import java.util.concurrent.atomic.AtomicInteger;
-
-import org.apache.lucene.facet.FacetTestCase;
-import org.apache.lucene.facet.taxonomy.FacetLabel;
-import org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyWriter.DiskOrdinalMap;
-import org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyWriter.MemoryOrdinalMap;
-import org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyWriter.OrdinalMap;
-import org.apache.lucene.store.Directory;
-import org.apache.lucene.util.IOUtils;
-import org.apache.lucene.util.TestUtil;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -31,6 +17,21 @@ import org.apache.lucene.util.TestUtil;
  * limitations under the License.
  */
 
+import java.io.IOException;
+import java.util.HashSet;
+import java.util.Random;
+import java.util.concurrent.atomic.AtomicInteger;
+
+import org.apache.lucene.facet.FacetTestCase;
+import org.apache.lucene.facet.taxonomy.FacetLabel;
+import org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyWriter.DiskOrdinalMap;
+import org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyWriter.MemoryOrdinalMap;
+import org.apache.lucene.facet.taxonomy.directory.DirectoryTaxonomyWriter.OrdinalMap;
+import org.apache.lucene.store.Directory;
+import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.TestUtil;
+
+//@SuppressFileSystems("VirusCheckingFS")
 public class TestAddTaxonomy extends FacetTestCase {
 
   private void dotest(int ncats, final int range) throws Exception {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/writercache/TestCompactLabelToOrdinal.java
----------------------------------------------------------------------
diff --git a/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/writercache/TestCompactLabelToOrdinal.java b/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/writercache/TestCompactLabelToOrdinal.java
index 9826645..bf67929 100644
--- a/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/writercache/TestCompactLabelToOrdinal.java
+++ b/lucene/facet/src/test/org/apache/lucene/facet/taxonomy/writercache/TestCompactLabelToOrdinal.java
@@ -1,20 +1,5 @@
 package org.apache.lucene.facet.taxonomy.writercache;
 
-import java.nio.ByteBuffer;
-import java.nio.charset.CharsetDecoder;
-import java.nio.charset.CodingErrorAction;
-import java.nio.charset.StandardCharsets;
-import java.nio.file.Files;
-import java.nio.file.Path;
-import java.util.HashMap;
-import java.util.Map;
-import java.util.Random;
-
-import org.apache.lucene.facet.FacetTestCase;
-import org.apache.lucene.facet.taxonomy.FacetLabel;
-
-import org.junit.Test;
-
 /*
  * Licensed to the Apache Software Foundation (ASF) under one or more
  * contributor license agreements.  See the NOTICE file distributed with
@@ -32,6 +17,22 @@ import org.junit.Test;
  * limitations under the License.
  */
 
+import java.nio.ByteBuffer;
+import java.nio.charset.CharsetDecoder;
+import java.nio.charset.CodingErrorAction;
+import java.nio.charset.StandardCharsets;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.HashMap;
+import java.util.Map;
+import java.util.Random;
+
+import org.apache.lucene.facet.FacetTestCase;
+import org.apache.lucene.facet.taxonomy.FacetLabel;
+import org.apache.lucene.util.LuceneTestCase.SuppressFileSystems;
+import org.junit.Test;
+
+@SuppressFileSystems("VirusCheckingFS")
 public class TestCompactLabelToOrdinal extends FacetTestCase {
 
   @Test

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/lucene/replicator/src/test/org/apache/lucene/replicator/IndexAndTaxonomyReplicationClientTest.java
----------------------------------------------------------------------
diff --git a/lucene/replicator/src/test/org/apache/lucene/replicator/IndexAndTaxonomyReplicationClientTest.java b/lucene/replicator/src/test/org/apache/lucene/replicator/IndexAndTaxonomyReplicationClientTest.java
index 51ebae6..26e68d32 100644
--- a/lucene/replicator/src/test/org/apache/lucene/replicator/IndexAndTaxonomyReplicationClientTest.java
+++ b/lucene/replicator/src/test/org/apache/lucene/replicator/IndexAndTaxonomyReplicationClientTest.java
@@ -22,7 +22,6 @@ import java.io.Closeable;
 import java.io.IOException;
 import java.io.PrintStream;
 import java.nio.file.Path;
-import java.util.Collections;
 import java.util.HashMap;
 import java.util.concurrent.Callable;
 import java.util.concurrent.atomic.AtomicBoolean;
@@ -43,7 +42,6 @@ import org.apache.lucene.index.CheckIndex;
 import org.apache.lucene.index.DirectoryReader;
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.index.IndexWriterConfig;
-import org.apache.lucene.index.SegmentInfos;
 import org.apache.lucene.index.SnapshotDeletionPolicy;
 import org.apache.lucene.replicator.IndexAndTaxonomyRevision.SnapshotDirectoryTaxonomyWriter;
 import org.apache.lucene.replicator.ReplicationClient.ReplicationHandler;
@@ -54,12 +52,14 @@ import org.apache.lucene.search.TopDocs;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.MockDirectoryWrapper;
 import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.LuceneTestCase.SuppressFileSystems;
 import org.apache.lucene.util.TestUtil;
 import org.apache.lucene.util.ThreadInterruptedException;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
+@SuppressFileSystems("VirusCheckingFS")
 public class IndexAndTaxonomyReplicationClientTest extends ReplicatorTestCase {
   
   private static class IndexAndTaxonomyReadyCallback implements Callable<Boolean>, Closeable {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/lucene/replicator/src/test/org/apache/lucene/replicator/IndexReplicationClientTest.java
----------------------------------------------------------------------
diff --git a/lucene/replicator/src/test/org/apache/lucene/replicator/IndexReplicationClientTest.java b/lucene/replicator/src/test/org/apache/lucene/replicator/IndexReplicationClientTest.java
index 3f91013..bcbf9cb 100644
--- a/lucene/replicator/src/test/org/apache/lucene/replicator/IndexReplicationClientTest.java
+++ b/lucene/replicator/src/test/org/apache/lucene/replicator/IndexReplicationClientTest.java
@@ -33,12 +33,14 @@ import org.apache.lucene.replicator.ReplicationClient.SourceDirectoryFactory;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.store.MockDirectoryWrapper;
 import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.LuceneTestCase.SuppressFileSystems;
 import org.apache.lucene.util.TestUtil;
 import org.apache.lucene.util.ThreadInterruptedException;
 import org.junit.After;
 import org.junit.Before;
 import org.junit.Test;
 
+@SuppressFileSystems("VirusCheckingFS")
 public class IndexReplicationClientTest extends ReplicatorTestCase {
   
   private static class IndexReadyCallback implements Callable<Boolean>, Closeable {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/lucene/replicator/src/test/org/apache/lucene/replicator/http/HttpReplicatorTest.java
----------------------------------------------------------------------
diff --git a/lucene/replicator/src/test/org/apache/lucene/replicator/http/HttpReplicatorTest.java b/lucene/replicator/src/test/org/apache/lucene/replicator/http/HttpReplicatorTest.java
index ecbe3b6..4298af8 100644
--- a/lucene/replicator/src/test/org/apache/lucene/replicator/http/HttpReplicatorTest.java
+++ b/lucene/replicator/src/test/org/apache/lucene/replicator/http/HttpReplicatorTest.java
@@ -36,17 +36,14 @@ import org.apache.lucene.replicator.Replicator;
 import org.apache.lucene.replicator.ReplicatorTestCase;
 import org.apache.lucene.store.Directory;
 import org.apache.lucene.util.IOUtils;
+import org.apache.lucene.util.LuceneTestCase.SuppressFileSystems;
 import org.eclipse.jetty.server.Server;
 import org.eclipse.jetty.servlet.ServletHandler;
 import org.eclipse.jetty.servlet.ServletHolder;
 import org.junit.Before;
-import org.junit.Rule;
 import org.junit.Test;
-import org.junit.rules.RuleChain;
-import org.junit.rules.TestRule;
-
-import com.carrotsearch.randomizedtesting.rules.SystemPropertiesRestoreRule;
 
+@SuppressFileSystems("VirusCheckingFS")
 public class HttpReplicatorTest extends ReplicatorTestCase {
   private Path clientWorkDir;
   private Replicator serverReplicator;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/lucene/test-framework/src/java/org/apache/lucene/analysis/VocabularyAssert.java
----------------------------------------------------------------------
diff --git a/lucene/test-framework/src/java/org/apache/lucene/analysis/VocabularyAssert.java b/lucene/test-framework/src/java/org/apache/lucene/analysis/VocabularyAssert.java
index 208eab9..ef4ff28 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/analysis/VocabularyAssert.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/analysis/VocabularyAssert.java
@@ -25,8 +25,6 @@ import java.nio.charset.StandardCharsets;
 import java.nio.file.Files;
 import java.nio.file.Path;
 
-import org.apache.lucene.analysis.Analyzer;
-import org.apache.lucene.analysis.BaseTokenStreamTestCase;
 import org.apache.lucene.util.LuceneTestCase;
 import org.apache.lucene.util.TestUtil;
 import org.junit.Assert;
@@ -76,7 +74,7 @@ public class VocabularyAssert {
   
   /** Run a vocabulary test against a tab-separated data file inside a zip file */
   public static void assertVocabulary(Analyzer a, Path zipFile, String vocOut) throws IOException {
-    Path tmp = LuceneTestCase.createTempDir().resolve("unzipped");
+    Path tmp = LuceneTestCase.createTempDir();
     try (InputStream in = Files.newInputStream(zipFile)) {
       TestUtil.unzip(in, tmp);
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/lucene/test-framework/src/java/org/apache/lucene/mockfile/VirusCheckingFS.java
----------------------------------------------------------------------
diff --git a/lucene/test-framework/src/java/org/apache/lucene/mockfile/VirusCheckingFS.java b/lucene/test-framework/src/java/org/apache/lucene/mockfile/VirusCheckingFS.java
index 759a840..8b34551 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/mockfile/VirusCheckingFS.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/mockfile/VirusCheckingFS.java
@@ -22,7 +22,7 @@ import java.nio.file.AccessDeniedException;
 import java.nio.file.FileSystem;
 import java.nio.file.Files;
 import java.nio.file.Path;
-import java.util.Random;
+import java.util.concurrent.atomic.AtomicLong;
 
 import org.apache.lucene.index.IndexWriter;
 import org.apache.lucene.util.LuceneTestCase;
@@ -33,17 +33,16 @@ import org.apache.lucene.util.LuceneTestCase;
  */
 public class VirusCheckingFS extends FilterFileSystemProvider {
 
-  // nocommit cannot use random here
-  final Random random;
-
   private boolean enabled = true;
 
+  private final AtomicLong state;
+
   /** 
    * Create a new instance, wrapping {@code delegate}.
    */
-  public VirusCheckingFS(FileSystem delegate, Random random) {
+  public VirusCheckingFS(FileSystem delegate, long salt) {
     super("viruschecking://", delegate);
-    this.random = new Random(random.nextLong());
+    this.state = new AtomicLong(salt);
   }
 
   public void enable() {
@@ -56,11 +55,14 @@ public class VirusCheckingFS extends FilterFileSystemProvider {
 
   @Override
   public void delete(Path path) throws IOException {
+
+    // Fake but deterministic and hopefully portable like-randomness:
+    long hash = state.incrementAndGet() * path.getFileName().hashCode();
     
-    if (enabled // test infra disables when it's "really" time to delete after test is done
+    if (enabled // test infra disables when it's "really" time to delete after test is done, so it can reclaim temp dirs
         && Files.exists(path) // important that we NOT delay a NoSuchFileException until later
         && path.getFileName().toString().equals(IndexWriter.WRITE_LOCK_NAME) == false // life is particularly difficult if the virus checker hits our lock file
-        && random.nextInt(5) == 1) {
+        && (hash % 5) == 1) {
       if (LuceneTestCase.VERBOSE) {
         System.out.println("NOTE: VirusCheckingFS now refusing to delete " + path);
       }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/lucene/test-framework/src/java/org/apache/lucene/util/TestRuleTemporaryFilesCleanup.java
----------------------------------------------------------------------
diff --git a/lucene/test-framework/src/java/org/apache/lucene/util/TestRuleTemporaryFilesCleanup.java b/lucene/test-framework/src/java/org/apache/lucene/util/TestRuleTemporaryFilesCleanup.java
index 27e4fb9..6e30b4c 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/util/TestRuleTemporaryFilesCleanup.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/util/TestRuleTemporaryFilesCleanup.java
@@ -183,7 +183,7 @@ final class TestRuleTemporaryFilesCleanup extends TestRuleAdapter {
       // nocommit true:
       if (allowed(avoid, VirusCheckingFS.class) && (true || random.nextInt(10) == 1)) {
         // 10% of the time we swap in virus checking (acts-like-windows) FS:    
-        virusCheckingFS = new VirusCheckingFS(fs, random);
+        virusCheckingFS = new VirusCheckingFS(fs, random.nextLong());
         fs = virusCheckingFS.getFileSystem(null);
       }
     }

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/lucene/test-framework/src/java/org/apache/lucene/util/TestUtil.java
----------------------------------------------------------------------
diff --git a/lucene/test-framework/src/java/org/apache/lucene/util/TestUtil.java b/lucene/test-framework/src/java/org/apache/lucene/util/TestUtil.java
index 89af2e2..0329f4b 100644
--- a/lucene/test-framework/src/java/org/apache/lucene/util/TestUtil.java
+++ b/lucene/test-framework/src/java/org/apache/lucene/util/TestUtil.java
@@ -108,7 +108,6 @@ import org.junit.Assert;
 import com.carrotsearch.randomizedtesting.generators.RandomInts;
 import com.carrotsearch.randomizedtesting.generators.RandomPicks;
 
-
 /**
  * General utility methods for Lucene unit tests. 
  */
@@ -118,14 +117,12 @@ public final class TestUtil {
   }
 
   /** 
-   * Convenience method unzipping zipName into destDir, cleaning up 
-   * destDir first.
+   * Convenience method unzipping zipName into destDir. You must pass it a clean destDir.
+   *
    * Closes the given InputStream after extracting! 
    */
   public static void unzip(InputStream in, Path destDir) throws IOException {
     in = new BufferedInputStream(in);
-    IOUtils.rm(destDir);
-    Files.createDirectory(destDir);
 
     try (ZipInputStream zipInput = new ZipInputStream(in)) {
       ZipEntry entry;

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/lucene/test-framework/src/test/org/apache/lucene/mockfile/TestVirusCheckingFS.java
----------------------------------------------------------------------
diff --git a/lucene/test-framework/src/test/org/apache/lucene/mockfile/TestVirusCheckingFS.java b/lucene/test-framework/src/test/org/apache/lucene/mockfile/TestVirusCheckingFS.java
index 17b1575..4a34ab8 100644
--- a/lucene/test-framework/src/test/org/apache/lucene/mockfile/TestVirusCheckingFS.java
+++ b/lucene/test-framework/src/test/org/apache/lucene/mockfile/TestVirusCheckingFS.java
@@ -30,7 +30,7 @@ public class TestVirusCheckingFS extends MockFileSystemTestCase {
   
   @Override
   protected Path wrap(Path path) {
-    FileSystem fs = new VirusCheckingFS(path.getFileSystem(), random()).getFileSystem(URI.create("file:///"));
+    FileSystem fs = new VirusCheckingFS(path.getFileSystem(), random().nextLong()).getFileSystem(URI.create("file:///"));
     return new FilterPath(path, fs);
   }
   

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java b/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java
index cf7220d..715b6a6 100644
--- a/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java
+++ b/solr/core/src/java/org/apache/solr/core/DirectoryFactory.java
@@ -22,7 +22,6 @@ import java.io.File;
 import java.io.FileFilter;
 import java.io.IOException;
 import java.lang.invoke.MethodHandles;
-import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
 
@@ -156,7 +155,7 @@ public abstract class DirectoryFactory implements NamedListInitializedPlugin,
    */
   public void move(Directory fromDir, Directory toDir, String fileName, IOContext ioContext) throws IOException {
     toDir.copyFrom(fromDir, fileName, fileName, ioContext);
-    fromDir.deleteFiles(Collections.singleton(fileName));
+    fromDir.deleteFile(fileName);
   }
   
   /**
@@ -249,7 +248,9 @@ public abstract class DirectoryFactory implements NamedListInitializedPlugin,
     try {
       contents = dir.listAll();
       if (contents != null) {
-        dir.deleteFiles(Arrays.asList(contents));
+        for (String file : contents) {
+          dir.deleteFile(file);
+        }
       }
     } catch (IOException e) {
       SolrException.log(log, "Error deleting files from Directory", e);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java b/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
index 86aaf95..862d4e7 100644
--- a/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
+++ b/solr/core/src/java/org/apache/solr/handler/IndexFetcher.java
@@ -1206,7 +1206,7 @@ public class IndexFetcher {
         }
       }
       try {
-        dir.deleteFiles(Collections.singleton(IndexFetcher.INDEX_PROPERTIES));
+        dir.deleteFile(IndexFetcher.INDEX_PROPERTIES);
       } catch (IOException e) {
         // no problem
       }
@@ -1651,7 +1651,7 @@ public class IndexFetcher {
     }
 
     public void delete() throws Exception {
-      copy2Dir.deleteFiles(Collections.singleton(saveAs));
+      copy2Dir.deleteFile(saveAs);
     }
   }
 

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/solr/core/src/java/org/apache/solr/handler/RestoreCore.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/RestoreCore.java b/solr/core/src/java/org/apache/solr/handler/RestoreCore.java
index cf426ce..735163b 100644
--- a/solr/core/src/java/org/apache/solr/handler/RestoreCore.java
+++ b/solr/core/src/java/org/apache/solr/handler/RestoreCore.java
@@ -17,11 +17,9 @@ package org.apache.solr.handler;
  * limitations under the License.
  */
 
-import java.io.IOException;
 import java.lang.invoke.MethodHandles;
 import java.nio.file.Path;
 import java.nio.file.Paths;
-import java.util.Collections;
 import java.util.concurrent.Callable;
 import java.util.concurrent.Future;
 
@@ -112,7 +110,7 @@ public class RestoreCore implements Callable<Boolean> {
         try {
           dir = core.getDirectoryFactory().get(core.getDataDir(), DirectoryFactory.DirContext.META_DATA,
               core.getSolrConfig().indexConfig.lockType);
-          dir.deleteFiles(Collections.singleton(IndexFetcher.INDEX_PROPERTIES));
+          dir.deleteFile(IndexFetcher.INDEX_PROPERTIES);
         } finally {
           if (dir != null) {
             core.getDirectoryFactory().release(dir);

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/solr/core/src/java/org/apache/solr/store/blockcache/BlockDirectory.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/store/blockcache/BlockDirectory.java b/solr/core/src/java/org/apache/solr/store/blockcache/BlockDirectory.java
index da03aea..5d9a8a6 100644
--- a/solr/core/src/java/org/apache/solr/store/blockcache/BlockDirectory.java
+++ b/solr/core/src/java/org/apache/solr/store/blockcache/BlockDirectory.java
@@ -21,7 +21,6 @@ import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.IOException;
 import java.lang.invoke.MethodHandles;
-import java.util.Collection;
 import java.util.Set;
 
 import org.apache.lucene.index.IndexFileNames;
@@ -325,12 +324,10 @@ public class BlockDirectory extends FilterDirectory {
     }
     return dest;
   }
-  
-  public void deleteFiles(Collection<String> names) throws IOException {
-    for(String name : names) {
-      cache.delete(getFileCacheName(name));
-    }
-    super.deleteFiles(names);
+
+  public void deleteFile(String name) throws IOException {
+    cache.delete(getFileCacheName(name));
+    super.deleteFile(name);
   }
     
   public boolean isBlockCacheReadEnabled() {

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/solr/core/src/java/org/apache/solr/store/hdfs/HdfsDirectory.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/store/hdfs/HdfsDirectory.java b/solr/core/src/java/org/apache/solr/store/hdfs/HdfsDirectory.java
index e5317bc..bee0f54 100644
--- a/solr/core/src/java/org/apache/solr/store/hdfs/HdfsDirectory.java
+++ b/solr/core/src/java/org/apache/solr/store/hdfs/HdfsDirectory.java
@@ -144,12 +144,10 @@ public class HdfsDirectory extends BaseDirectory {
   }
   
   @Override
-  public void deleteFiles(Collection<String> names) throws IOException {
-    for(String name : names) {
-      Path path = new Path(hdfsDirPath, name);
-      LOG.debug("Deleting {}", path);
-      getFileSystem().delete(path, false);
-    }
+  public void deleteFile(String name) throws IOException {
+    Path path = new Path(hdfsDirPath, name);
+    LOG.debug("Deleting {}", path);
+    getFileSystem().delete(path, false);
   }
   
   @Override

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/845eec10/solr/core/src/test/org/apache/solr/store/hdfs/HdfsDirectoryTest.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/store/hdfs/HdfsDirectoryTest.java b/solr/core/src/test/org/apache/solr/store/hdfs/HdfsDirectoryTest.java
index e3a0e7b..153d324 100644
--- a/solr/core/src/test/org/apache/solr/store/hdfs/HdfsDirectoryTest.java
+++ b/solr/core/src/test/org/apache/solr/store/hdfs/HdfsDirectoryTest.java
@@ -18,8 +18,6 @@ package org.apache.solr.store.hdfs;
  */
 
 import java.io.IOException;
-import java.util.Arrays;
-import java.util.Collections;
 import java.util.HashSet;
 import java.util.Random;
 import java.util.Set;
@@ -90,7 +88,9 @@ public class HdfsDirectoryTest extends SolrTestCaseJ4 {
   @Test
   public void testWritingAndReadingAFile() throws IOException {
     String[] listAll = directory.listAll();
-    directory.deleteFiles(Arrays.asList(listAll));
+    for (String file : listAll) {
+      directory.deleteFile(file);
+    }
     
     IndexOutput output = directory.createOutput("testing.test", new IOContext());
     output.writeInt(12345);
@@ -117,13 +117,15 @@ public class HdfsDirectoryTest extends SolrTestCaseJ4 {
 
     assertFalse(slowFileExists(directory, "testing.test.other"));
     assertTrue(slowFileExists(directory, "testing.test"));
-    directory.deleteFiles(Collections.singleton("testing.test"));
+    directory.deleteFile("testing.test");
     assertFalse(slowFileExists(directory, "testing.test"));
   }
   
   public void testRename() throws IOException {
     String[] listAll = directory.listAll();
-    directory.deleteFiles(Arrays.asList(listAll));
+    for (String file : listAll) {
+      directory.deleteFile(file);
+    }
     
     IndexOutput output = directory.createOutput("testing.test", new IOContext());
     output.writeInt(12345);
@@ -135,7 +137,7 @@ public class HdfsDirectoryTest extends SolrTestCaseJ4 {
     assertEquals(12345, input.readInt());
     assertEquals(input.getFilePointer(), input.length());
     input.close();
-    directory.deleteFiles(Collections.singleton("testing.test.renamed"));
+    directory.deleteFile("testing.test.renamed");
     assertFalse(slowFileExists(directory, "testing.test.renamed"));
   }