You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by el...@apache.org on 2014/01/09 23:08:45 UTC
svn commit: r1556965 - in /lucene/dev/branches/lucene_solr_4_6: ./ solr/
solr/core/ solr/core/src/java/org/apache/solr/core/
solr/core/src/test/org/apache/solr/core/
Author: elyograg
Date: Thu Jan 9 22:08:45 2014
New Revision: 1556965
URL: http://svn.apache.org/r1556965
Log:
SOLR-5543: Backport to 4.6 branch, for 4.6.1 release.
Modified:
lucene/dev/branches/lucene_solr_4_6/ (props changed)
lucene/dev/branches/lucene_solr_4_6/solr/ (props changed)
lucene/dev/branches/lucene_solr_4_6/solr/CHANGES.txt
lucene/dev/branches/lucene_solr_4_6/solr/core/ (props changed)
lucene/dev/branches/lucene_solr_4_6/solr/core/src/java/org/apache/solr/core/CoreContainer.java
lucene/dev/branches/lucene_solr_4_6/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java
lucene/dev/branches/lucene_solr_4_6/solr/core/src/java/org/apache/solr/core/CoresLocator.java
lucene/dev/branches/lucene_solr_4_6/solr/core/src/java/org/apache/solr/core/SolrXMLCoresLocator.java
lucene/dev/branches/lucene_solr_4_6/solr/core/src/test/org/apache/solr/core/TestSolrXmlPersistence.java
Modified: lucene/dev/branches/lucene_solr_4_6/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/solr/CHANGES.txt?rev=1556965&r1=1556964&r2=1556965&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/solr/CHANGES.txt (original)
+++ lucene/dev/branches/lucene_solr_4_6/solr/CHANGES.txt Thu Jan 9 22:08:45 2014
@@ -100,6 +100,9 @@ Bug Fixes
* SOLR-5608: Don't allow a closed SolrCore to publish state to ZooKeeper.
(Mark Miller, Shawn Heisey)
+* SOLR-5543: Core swaps resulted in duplicate core entries in solr.xml when
+ using solr.xml persistence. (Bill Bell, Alan Woodward)
+
Optimizations
----------------------
Modified: lucene/dev/branches/lucene_solr_4_6/solr/core/src/java/org/apache/solr/core/CoreContainer.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/solr/core/src/java/org/apache/solr/core/CoreContainer.java?rev=1556965&r1=1556964&r2=1556965&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/solr/core/src/java/org/apache/solr/core/CoreContainer.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/solr/core/src/java/org/apache/solr/core/CoreContainer.java Thu Jan 9 22:08:45 2014
@@ -17,7 +17,26 @@
package org.apache.solr.core;
-import static com.google.common.base.Preconditions.checkNotNull;
+import com.google.common.collect.Maps;
+import org.apache.solr.cloud.ZkController;
+import org.apache.solr.cloud.ZkSolrResourceLoader;
+import org.apache.solr.common.SolrException;
+import org.apache.solr.common.SolrException.ErrorCode;
+import org.apache.solr.common.cloud.ZooKeeperException;
+import org.apache.solr.common.util.ExecutorUtil;
+import org.apache.solr.handler.admin.CollectionsHandler;
+import org.apache.solr.handler.admin.CoreAdminHandler;
+import org.apache.solr.handler.admin.InfoHandler;
+import org.apache.solr.handler.component.ShardHandlerFactory;
+import org.apache.solr.logging.LogWatcher;
+import org.apache.solr.schema.IndexSchema;
+import org.apache.solr.schema.IndexSchemaFactory;
+import org.apache.solr.update.UpdateShardHandler;
+import org.apache.solr.util.DefaultSolrThreadFactory;
+import org.apache.solr.util.FileUtils;
+import org.apache.zookeeper.KeeperException;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
import java.io.File;
import java.text.SimpleDateFormat;
@@ -40,28 +59,7 @@ import java.util.concurrent.ExecutorServ
import java.util.concurrent.Executors;
import java.util.concurrent.Future;
-import org.apache.solr.cloud.ZkController;
-import org.apache.solr.cloud.ZkSolrResourceLoader;
-import org.apache.solr.common.SolrException;
-import org.apache.solr.common.SolrException.ErrorCode;
-import org.apache.solr.common.cloud.ZooKeeperException;
-import org.apache.solr.common.util.ExecutorUtil;
-import org.apache.solr.handler.admin.CollectionsHandler;
-import org.apache.solr.handler.admin.CoreAdminHandler;
-import org.apache.solr.handler.admin.InfoHandler;
-import org.apache.solr.handler.component.ShardHandlerFactory;
-import org.apache.solr.logging.LogWatcher;
-import org.apache.solr.schema.IndexSchema;
-import org.apache.solr.schema.IndexSchemaFactory;
-import org.apache.solr.update.UpdateShardHandler;
-import org.apache.solr.util.DefaultSolrThreadFactory;
-import org.apache.solr.util.FileUtils;
-import org.apache.zookeeper.KeeperException;
-import org.slf4j.Logger;
-import org.slf4j.LoggerFactory;
-
-import com.google.common.collect.Maps;
-
+import static com.google.common.base.Preconditions.checkNotNull;
/**
*
@@ -748,7 +746,7 @@ public class CoreContainer {
n1 = checkDefault(n1);
solrCores.swap(n0, n1);
- coresLocator.persist(this, solrCores.getCoreDescriptor(n0), solrCores.getCoreDescriptor(n1));
+ coresLocator.swap(this, solrCores.getCoreDescriptor(n0), solrCores.getCoreDescriptor(n1));
log.info("swapped: "+n0 + " with " + n1);
}
Modified: lucene/dev/branches/lucene_solr_4_6/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java?rev=1556965&r1=1556964&r2=1556965&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java Thu Jan 9 22:08:45 2014
@@ -107,6 +107,11 @@ public class CorePropertiesLocator imple
}
@Override
+ public void swap(CoreContainer cc, CoreDescriptor cd1, CoreDescriptor cd2) {
+ persist(cc, cd1, cd2);
+ }
+
+ @Override
public List<CoreDescriptor> discover(CoreContainer cc) {
logger.info("Looking for core definitions underneath {}", rootDirectory.getAbsolutePath());
List<CoreDescriptor> cds = Lists.newArrayList();
Modified: lucene/dev/branches/lucene_solr_4_6/solr/core/src/java/org/apache/solr/core/CoresLocator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/solr/core/src/java/org/apache/solr/core/CoresLocator.java?rev=1556965&r1=1556964&r2=1556965&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/solr/core/src/java/org/apache/solr/core/CoresLocator.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/solr/core/src/java/org/apache/solr/core/CoresLocator.java Thu Jan 9 22:08:45 2014
@@ -56,6 +56,14 @@ public interface CoresLocator {
public void rename(CoreContainer cc, CoreDescriptor oldCD, CoreDescriptor newCD);
/**
+ * Swap two core definitions
+ * @param cc the CoreContainer
+ * @param cd1 the core descriptor of the first core, after swapping
+ * @param cd2 the core descriptor of the second core, after swapping
+ */
+ public void swap(CoreContainer cc, CoreDescriptor cd1, CoreDescriptor cd2);
+
+ /**
* Load all the CoreDescriptors from persistence store
* @param cc the CoreContainer
* @return a list of all CoreDescriptors found
Modified: lucene/dev/branches/lucene_solr_4_6/solr/core/src/java/org/apache/solr/core/SolrXMLCoresLocator.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/solr/core/src/java/org/apache/solr/core/SolrXMLCoresLocator.java?rev=1556965&r1=1556964&r2=1556965&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/solr/core/src/java/org/apache/solr/core/SolrXMLCoresLocator.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/solr/core/src/java/org/apache/solr/core/SolrXMLCoresLocator.java Thu Jan 9 22:08:45 2014
@@ -19,7 +19,6 @@ package org.apache.solr.core;
import com.google.common.base.Charsets;
import com.google.common.collect.ImmutableList;
-
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.slf4j.Logger;
@@ -32,11 +31,9 @@ import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Properties;
-import java.util.Set;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
@@ -191,6 +188,11 @@ public class SolrXMLCoresLocator impleme
}
@Override
+ public void swap(CoreContainer cc, CoreDescriptor cd1, CoreDescriptor cd2) {
+ this.persist(cc);
+ }
+
+ @Override
public List<CoreDescriptor> discover(CoreContainer cc) {
ImmutableList.Builder<CoreDescriptor> listBuilder = ImmutableList.builder();
Modified: lucene/dev/branches/lucene_solr_4_6/solr/core/src/test/org/apache/solr/core/TestSolrXmlPersistence.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene_solr_4_6/solr/core/src/test/org/apache/solr/core/TestSolrXmlPersistence.java?rev=1556965&r1=1556964&r2=1556965&view=diff
==============================================================================
--- lucene/dev/branches/lucene_solr_4_6/solr/core/src/test/org/apache/solr/core/TestSolrXmlPersistence.java (original)
+++ lucene/dev/branches/lucene_solr_4_6/solr/core/src/test/org/apache/solr/core/TestSolrXmlPersistence.java Thu Jan 9 22:08:45 2014
@@ -48,6 +48,8 @@ import java.io.InputStream;
import java.util.ArrayList;
import java.util.List;
+import static org.hamcrest.core.Is.is;
+
public class TestSolrXmlPersistence extends SolrTestCaseJ4 {
private File solrHomeDirectory = new File(TEMP_DIR, this.getClass().getName());
@@ -186,8 +188,24 @@ public class TestSolrXmlPersistence exte
doTestSwap("SystemVars2", "SystemVars1");
}
+ /*
+ Count the number of times substring appears in target
+ */
+ private int countOccurrences(String target, String substring) {
+ int pos = -1, count = 0;
+ while ((pos = target.indexOf(substring, pos + 1)) != -1) {
+ count++;
+ }
+ return count;
+ }
+
private void doTestSwap(String from, String to) throws Exception {
CoreContainer cc = init(SOLR_XML_LOTS_SYSVARS, "SystemVars1", "SystemVars2");
+ SolrXMLCoresLocator.NonPersistingLocator locator
+ = (SolrXMLCoresLocator.NonPersistingLocator) cc.getCoresLocator();
+
+ int coreCount = countOccurrences(locator.xml, "<core ");
+
try {
final CoreAdminHandler admin = new CoreAdminHandler(cc);
SolrQueryResponse resp = new SolrQueryResponse();
@@ -199,6 +217,9 @@ public class TestSolrXmlPersistence exte
resp);
assertNull("Exception on swap", resp.getException());
+ assertThat("Swapping cores should leave the same number of cores as before",
+ countOccurrences(locator.xml, "<core "), is(coreCount));
+
String[] persistList = getAllNodes();
String[] expressions = new String[persistList.length];