You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ro...@apache.org on 2013/12/14 22:11:19 UTC

svn commit: r1550969 - in /lucene/dev/trunk/solr: ./ core/src/java/org/apache/solr/core/ core/src/test/org/apache/solr/core/

Author: romseygeek
Date: Sat Dec 14 21:11:18 2013
New Revision: 1550969

URL: http://svn.apache.org/r1550969
Log:
SOLR-5543: Core Swaps result in duplicate entries in solr.xml

Modified:
    lucene/dev/trunk/solr/CHANGES.txt
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoresLocator.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrXMLCoresLocator.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestSolrXmlPersistence.java

Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1550969&r1=1550968&r2=1550969&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Sat Dec 14 21:11:18 2013
@@ -74,7 +74,7 @@ Apache ZooKeeper 3.4.5
 Upgrading from Solr 4.6.0
 ----------------------
 
-* CloudSolrServer and LBHttpSolrServer no longer declare MalfurmedURLException
+* CloudSolrServer and LBHttpSolrServer no longer declare MalformedURLException
   as thrown from their constructors.  
                       
 Detailed Change List
@@ -204,6 +204,9 @@ Bug Fixes
 * SOLR-5547: Creating a collection alias using SolrJ's CollectionAdminRequest
   sets the alias name and the collections to alias to the same value.
   (Aaron Schram, Mark Miller)
+
+* 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/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java?rev=1550969&r1=1550968&r2=1550969&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreContainer.java Sat Dec 14 21:11:18 2013
@@ -17,14 +17,32 @@
 
 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;
 import java.util.Collection;
 import java.util.Collections;
 import java.util.Date;
-import java.util.HashMap;
 import java.util.HashSet;
 import java.util.LinkedHashMap;
 import java.util.List;
@@ -41,31 +59,7 @@ import java.util.concurrent.ExecutorServ
 import java.util.concurrent.Executors;
 import java.util.concurrent.Future;
 
-import org.apache.http.client.HttpClient;
-import org.apache.http.conn.ClientConnectionManager;
-import org.apache.http.impl.conn.PoolingClientConnectionManager;
-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.common.util.SolrjNamedThreadFactory;
-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;
 
 
 /**
@@ -737,7 +731,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/trunk/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java?rev=1550969&r1=1550968&r2=1550969&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CorePropertiesLocator.java Sat Dec 14 21:11:18 2013
@@ -111,6 +111,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/trunk/solr/core/src/java/org/apache/solr/core/CoresLocator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoresLocator.java?rev=1550969&r1=1550968&r2=1550969&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoresLocator.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoresLocator.java Sat Dec 14 21:11:18 2013
@@ -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/trunk/solr/core/src/java/org/apache/solr/core/SolrXMLCoresLocator.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrXMLCoresLocator.java?rev=1550969&r1=1550968&r2=1550969&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrXMLCoresLocator.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/SolrXMLCoresLocator.java Sat Dec 14 21:11:18 2013
@@ -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/trunk/solr/core/src/test/org/apache/solr/core/TestSolrXmlPersistence.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestSolrXmlPersistence.java?rev=1550969&r1=1550968&r2=1550969&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestSolrXmlPersistence.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/core/TestSolrXmlPersistence.java Sat Dec 14 21:11:18 2013
@@ -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];