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

[08/50] lucene-solr:jira/solr-8593: SOLR-9902: StandardDirectoryFactory should use Files API for it's move implementation.

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/2781145e
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/2781145e
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/2781145e

Branch: refs/heads/jira/solr-8593
Commit: 2781145eb3760489922530fd92d5f1d4c35215a9
Parents: 662be93
Author: markrmiller <ma...@apache.org>
Authored: Thu Dec 29 05:29:51 2016 -0500
Committer: markrmiller <ma...@apache.org>
Committed: Thu Dec 29 05:29:51 2016 -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/2781145e/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 852a306..06566e0 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -222,6 +222,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/2781145e/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);