You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2017/01/03 22:35:53 UTC

lucene-solr:branch_6x: SOLR-9902: StandardDirectoryFactory should use Files API for it's move implementation.

Repository: lucene-solr
Updated Branches:
  refs/heads/branch_6x 0ab1ddb31 -> cbf96e0d7


SOLR-9902: StandardDirectoryFactory should use Files API for it's move implementation.


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

Branch: refs/heads/branch_6x
Commit: cbf96e0d7572a28141226d92f978b8aef8bd2509
Parents: 0ab1ddb
Author: markrmiller <ma...@apache.org>
Authored: Tue Jan 3 17:35:35 2017 -0500
Committer: markrmiller <ma...@apache.org>
Committed: Tue Jan 3 17:35:45 2017 -0500

----------------------------------------------------------------------
 solr/CHANGES.txt                                |  1 +
 .../solr/core/StandardDirectoryFactory.java     | 20 +++++++++++---------
 2 files changed, 12 insertions(+), 9 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cbf96e0d/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 6d0ecc8..8cb645c 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -172,6 +172,7 @@ Optimizations
   resulting in less produced garbage and 5-7% better performance.
   (yonik)
 
+* SOLR-9902: StandardDirectoryFactory should use Files API for it's move implementation. (Mark Miller)
 
 Bug Fixes
 ----------------------

http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/cbf96e0d/solr/core/src/java/org/apache/solr/core/StandardDirectoryFactory.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/StandardDirectoryFactory.java b/solr/core/src/java/org/apache/solr/core/StandardDirectoryFactory.java
index b24be14..1d8793a 100644
--- a/solr/core/src/java/org/apache/solr/core/StandardDirectoryFactory.java
+++ b/solr/core/src/java/org/apache/solr/core/StandardDirectoryFactory.java
@@ -129,13 +129,14 @@ public class StandardDirectoryFactory extends CachingDirectoryFactory {
     Directory baseToDir = getBaseDir(toDir);
     
     if (baseFromDir instanceof FSDirectory && baseToDir instanceof FSDirectory) {
-      File dir1 = ((FSDirectory) baseFromDir).getDirectory().toFile();
-      File dir2 = ((FSDirectory) baseToDir).getDirectory().toFile();
-      File indexFileInTmpDir = new File(dir1, fileName);
-      File indexFileInIndex = new File(dir2, fileName);
-      boolean success = indexFileInTmpDir.renameTo(indexFileInIndex);
-      if (success) {
-        return;
+  
+      Path path1 = ((FSDirectory) baseFromDir).getDirectory().toAbsolutePath();
+      Path path2 = ((FSDirectory) baseFromDir).getDirectory().toAbsolutePath();
+      
+      try {
+        Files.move(path1.resolve(fileName), path2.resolve(fileName), StandardCopyOption.ATOMIC_MOVE);
+      } catch (AtomicMoveNotSupportedException e) {
+        Files.move(path1.resolve(fileName), path2.resolve(fileName));
       }
     }
 
@@ -148,8 +149,9 @@ public class StandardDirectoryFactory extends CachingDirectoryFactory {
     if (baseDir instanceof FSDirectory) {
       Path path = ((FSDirectory) baseDir).getDirectory().toAbsolutePath();
       try {
-      Files.move(FileSystems.getDefault().getPath(path.toString(), fileName),
-          FileSystems.getDefault().getPath(path.toString(), toName), StandardCopyOption.ATOMIC_MOVE, StandardCopyOption.REPLACE_EXISTING);
+        Files.move(path.resolve(fileName),
+            path.resolve(toName), StandardCopyOption.ATOMIC_MOVE,
+            StandardCopyOption.REPLACE_EXISTING);
       } catch (AtomicMoveNotSupportedException e) {
         Files.move(FileSystems.getDefault().getPath(path.toString(), fileName),
             FileSystems.getDefault().getPath(path.toString(), toName), StandardCopyOption.REPLACE_EXISTING);