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 2016/02/26 21:47:25 UTC
lucene-solr git commit: SOLR-8497: Only mark diectory as done if it
was not previously in the cache.
Repository: lucene-solr
Updated Branches:
refs/heads/master efb7bb171 -> 54e7bb5f5
SOLR-8497: Only mark diectory as done if it was not previously in the cache.
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/54e7bb5f
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/54e7bb5f
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/54e7bb5f
Branch: refs/heads/master
Commit: 54e7bb5f58931cef9ead049313804c2b9a10ce88
Parents: efb7bb1
Author: markrmiller <ma...@apache.org>
Authored: Fri Feb 26 15:47:12 2016 -0500
Committer: markrmiller <ma...@apache.org>
Committed: Fri Feb 26 15:47:12 2016 -0500
----------------------------------------------------------------------
.../solr/core/CachingDirectoryFactory.java | 3 +--
.../solr/handler/admin/CoreAdminOperation.java | 22 ++++++++++++++++----
2 files changed, 19 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/54e7bb5f/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java b/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java
index b9fe834..f7877c4 100644
--- a/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java
+++ b/solr/core/src/java/org/apache/solr/core/CachingDirectoryFactory.java
@@ -487,11 +487,10 @@ public abstract class CachingDirectoryFactory extends DirectoryFactory {
}
/**
- * Test only method for inspecting the cache
+ * Method for inspecting the cache
* @return paths in the cache which have not been marked "done"
*
* @see #doneWithDirectory
- * @lucene.internal
*/
public synchronized Set<String> getLivePaths() {
HashSet<String> livePaths = new HashSet<>();
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/54e7bb5f/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminOperation.java
----------------------------------------------------------------------
diff --git a/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminOperation.java b/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminOperation.java
index 094a46c..8240189 100644
--- a/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminOperation.java
+++ b/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminOperation.java
@@ -26,6 +26,8 @@ import java.util.HashMap;
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.Map.Entry;
+import java.util.Set;
import java.util.concurrent.Future;
import com.google.common.collect.Lists;
@@ -52,6 +54,7 @@ import org.apache.solr.common.params.SolrParams;
import org.apache.solr.common.params.UpdateParams;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
+import org.apache.solr.core.CachingDirectoryFactory;
import org.apache.solr.core.CoreContainer;
import org.apache.solr.core.CoreDescriptor;
import org.apache.solr.core.DirectoryFactory;
@@ -236,7 +239,7 @@ enum CoreAdminOperation {
List<RefCounted<SolrIndexSearcher>> searchers = Lists.newArrayList();
// stores readers created from indexDir param values
List<DirectoryReader> readersToBeClosed = Lists.newArrayList();
- List<Directory> dirsToBeReleased = Lists.newArrayList();
+ Map<Directory,Boolean> dirsToBeReleased = new HashMap<>();
if (core != null) {
try {
String[] dirNames = params.getParams(CoreAdminParams.INDEX_DIR);
@@ -257,8 +260,14 @@ enum CoreAdminOperation {
} else {
DirectoryFactory dirFactory = core.getDirectoryFactory();
for (int i = 0; i < dirNames.length; i++) {
+ boolean markAsDone = false;
+ if (dirFactory instanceof CachingDirectoryFactory) {
+ if (!((CachingDirectoryFactory)dirFactory).getLivePaths().contains(dirNames[i])) {
+ markAsDone = true;
+ }
+ }
Directory dir = dirFactory.get(dirNames[i], DirectoryFactory.DirContext.DEFAULT, core.getSolrConfig().indexConfig.lockType);
- dirsToBeReleased.add(dir);
+ dirsToBeReleased.put(dir, markAsDone);
// TODO: why doesn't this use the IR factory? what is going on here?
readersToBeClosed.add(DirectoryReader.open(dir));
}
@@ -295,9 +304,14 @@ enum CoreAdminOperation {
if (solrCore != null) solrCore.close();
}
IOUtils.closeWhileHandlingException(readersToBeClosed);
- for (Directory dir : dirsToBeReleased) {
+ Set<Entry<Directory,Boolean>> entries = dirsToBeReleased.entrySet();
+ for (Entry<Directory,Boolean> entry : entries) {
DirectoryFactory dirFactory = core.getDirectoryFactory();
- dirFactory.doneWithDirectory(dir);
+ Directory dir = entry.getKey();
+ boolean markAsDone = entry.getValue();
+ if (markAsDone) {
+ dirFactory.doneWithDirectory(dir);
+ }
dirFactory.release(dir);
}
if (wrappedReq != null) wrappedReq.close();