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 2013/10/09 21:46:00 UTC

svn commit: r1530772 - in /lucene/dev/trunk/solr: ./ core/src/java/org/apache/solr/core/ core/src/java/org/apache/solr/handler/admin/ core/src/test/org/apache/solr/cloud/ solrj/src/java/org/apache/solr/client/solrj/request/ test-framework/src/java/org/...

Author: markrmiller
Date: Wed Oct  9 19:46:00 2013
New Revision: 1530772

URL: http://svn.apache.org/r1530772
Log:
SOLR-5306: Extra collection creation parameters like collection.configName are not being respected.

Modified:
    lucene/dev/trunk/solr/CHANGES.txt
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIDistributedZkTest.java
    lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/request/CoreAdminRequest.java
    lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java
    lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/cloud/AbstractZkTestCase.java

Modified: lucene/dev/trunk/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/CHANGES.txt?rev=1530772&r1=1530771&r2=1530772&view=diff
==============================================================================
--- lucene/dev/trunk/solr/CHANGES.txt (original)
+++ lucene/dev/trunk/solr/CHANGES.txt Wed Oct  9 19:46:00 2013
@@ -118,6 +118,9 @@ Bug Fixes
 * SOLR-5314: Shard split action should use soft commits instead of hard commits
   to make sub shard data visible. (Kalle Aaltonen, shalin)
 
+* SOLR-5306: Extra collection creation parameters like collection.configName are
+  not being respected. (Mark Miller, Liang Tianyu, Nathan Neulinger)
+
 Security
 ----------------------
 

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java?rev=1530772&r1=1530771&r2=1530772&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/core/CoreDescriptor.java Wed Oct  9 19:46:00 2013
@@ -19,9 +19,11 @@ package org.apache.solr.core;
 
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableMap;
+
 import org.apache.commons.lang.StringUtils;
 import org.apache.solr.cloud.CloudDescriptor;
 import org.apache.solr.common.SolrException;
+import org.apache.solr.common.params.SolrParams;
 import org.apache.solr.util.IOUtils;
 import org.apache.solr.util.PropertiesUtil;
 
@@ -132,6 +134,19 @@ public class CoreDescriptor {
    */
   public CoreDescriptor(CoreContainer container, String name, String instanceDir,
                         Properties coreProps) {
+    this(container, name, instanceDir, coreProps, null);
+  }
+  
+  /**
+   * Create a new CoreDescriptor.
+   * @param container       the CoreDescriptor's container
+   * @param name            the CoreDescriptor's name
+   * @param instanceDir     a String containing the instanceDir
+   * @param coreProps       a Properties object of the properties for this core
+   * @param params          additional params
+   */
+  public CoreDescriptor(CoreContainer container, String name, String instanceDir,
+                        Properties coreProps, SolrParams params) {
 
     this.coreContainer = container;
 
@@ -169,6 +184,9 @@ public class CoreDescriptor {
     // TODO maybe make this a CloudCoreDescriptor subclass?
     if (container.isZooKeeperAware()) {
       cloudDesc = new CloudDescriptor(name, coreProperties);
+      if (params != null) {
+        cloudDesc.setParams(params);
+      }
     }
     else {
       cloudDesc = null;

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java?rev=1530772&r1=1530771&r2=1530772&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/handler/admin/CoreAdminHandler.java Wed Oct  9 19:46:00 2013
@@ -455,7 +455,7 @@ public class CoreAdminHandler extends Re
       coreProps.setProperty(propName, propValue);
     }
 
-    return new CoreDescriptor(container, name, instancedir, coreProps);
+    return new CoreDescriptor(container, name, instancedir, coreProps, params);
   }
 
   private static String checkNotEmpty(String value, String message) {

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIDistributedZkTest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIDistributedZkTest.java?rev=1530772&r1=1530771&r2=1530772&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIDistributedZkTest.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/cloud/CollectionsAPIDistributedZkTest.java Wed Oct  9 19:46:00 2013
@@ -65,6 +65,7 @@ import org.apache.solr.common.cloud.Clus
 import org.apache.solr.common.cloud.DocCollection;
 import org.apache.solr.common.cloud.Replica;
 import org.apache.solr.common.cloud.Slice;
+import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.cloud.ZkCoreNodeProps;
 import org.apache.solr.common.cloud.ZkNodeProps;
 import org.apache.solr.common.cloud.ZkStateReader;
@@ -99,6 +100,7 @@ public class CollectionsAPIDistributedZk
   
   CompletionService<Request> completionService;
   Set<Future<Request>> pending;
+  private boolean secondConfigSet = random().nextBoolean();
   
   @BeforeClass
   public static void beforeThisClass2() throws Exception {
@@ -109,6 +111,34 @@ public class CollectionsAPIDistributedZk
   @Override
   public void setUp() throws Exception {
     super.setUp();
+    
+    if (secondConfigSet ) {
+      String zkHost = zkServer.getZkHost();
+      String zkAddress = zkServer.getZkAddress();
+      SolrZkClient zkClient = new SolrZkClient(zkHost, AbstractZkTestCase.TIMEOUT);
+      zkClient.makePath("/solr", false, true);
+      zkClient.close();
+
+      zkClient = new SolrZkClient(zkAddress, AbstractZkTestCase.TIMEOUT);
+
+      File solrhome = new File(TEST_HOME());
+      
+      // for now, always upload the config and schema to the canonical names
+      AbstractZkTestCase.putConfig("conf2", zkClient, solrhome, "solrconfig.xml", "solrconfig.xml");
+      AbstractZkTestCase.putConfig("conf2", zkClient, solrhome, "schema.xml", "schema.xml");
+
+      AbstractZkTestCase.putConfig("conf2", zkClient, solrhome, "solrconfig.snippet.randomindexconfig.xml");
+      AbstractZkTestCase.putConfig("conf2", zkClient, solrhome, "stopwords.txt");
+      AbstractZkTestCase.putConfig("conf2", zkClient, solrhome, "protwords.txt");
+      AbstractZkTestCase.putConfig("conf2", zkClient, solrhome, "currency.xml");
+      AbstractZkTestCase.putConfig("conf2", zkClient, solrhome, "open-exchange-rates.json");
+      AbstractZkTestCase.putConfig("conf2", zkClient, solrhome, "mapping-ISOLatin1Accent.txt");
+      AbstractZkTestCase.putConfig("conf2", zkClient, solrhome, "old_synonyms.txt");
+      AbstractZkTestCase.putConfig("conf2", zkClient, solrhome, "synonyms.txt");
+      AbstractZkTestCase.putConfig("conf2", zkClient, solrhome, "elevate.xml");
+      zkClient.close();
+    }
+    
     System.setProperty("numShards", Integer.toString(sliceCount));
     System.setProperty("solr.xml.persist", "true");
   }
@@ -180,7 +210,6 @@ public class CollectionsAPIDistributedZk
     params.set("name", collectionName);
     QueryRequest request = new QueryRequest(params);
     request.setPath("/admin/collections");
-
     try {
       NamedList<Object> resp = createNewSolrServer("", baseUrl)
           .request(request);
@@ -205,6 +234,9 @@ public class CollectionsAPIDistributedZk
         + System.currentTimeMillis() + "halfcollection" + "_hdn";
     createCmd.setDataDir(dataDir);
     createCmd.setNumShards(2);
+    if (secondConfigSet) {
+      createCmd.setCollectionConfigName("conf1");
+    }
     createNewSolrServer("", baseUrl).request(createCmd);
 
     ModifiableSolrParams params = new ModifiableSolrParams();
@@ -224,6 +256,9 @@ public class CollectionsAPIDistributedZk
     params.set("numShards", 2);
     request = new QueryRequest(params);
     request.setPath("/admin/collections");
+    if (secondConfigSet) {
+      params.set("collection.configName", "conf1");
+    }
     resp = createNewSolrServer("", baseUrl).request(request);
   }
   
@@ -231,8 +266,13 @@ public class CollectionsAPIDistributedZk
   private void deleteCollectionWithDownNodes() throws Exception {
     String baseUrl = getBaseUrl((HttpSolrServer) clients.get(0));
     // now try to remove a collection when a couple of it's nodes are down
-    createCollection(null, "halfdeletedcollection2", 3, 2, 6,
-        createNewSolrServer("", baseUrl), null);
+    if (secondConfigSet) {
+      createCollection(null, "halfdeletedcollection2", 3, 2, 6,
+          createNewSolrServer("", baseUrl), null, "conf2");
+    } else {
+      createCollection(null, "halfdeletedcollection2", 3, 2, 6,
+          createNewSolrServer("", baseUrl), null);
+    }
     
     waitForRecoveriesToFinish("halfdeletedcollection2", false);
     
@@ -286,6 +326,9 @@ public class CollectionsAPIDistributedZk
     collectionName = "collection";
     // No Name
     // params.set("name", collectionName);
+    if (secondConfigSet) {
+      params.set("collection.configName", "conf1");
+    }
     request = new QueryRequest(params);
     request.setPath("/admin/collections");
     gotExp = false;
@@ -303,6 +346,9 @@ public class CollectionsAPIDistributedZk
     collectionName = "collection";
     params.set("name", collectionName);
     params.set("numShards", 2);
+    if (secondConfigSet) {
+      params.set("collection.configName", "conf1");
+    }
     params.set(REPLICATION_FACTOR, 10);
     request = new QueryRequest(params);
     request.setPath("/admin/collections");
@@ -321,6 +367,9 @@ public class CollectionsAPIDistributedZk
     collectionName = "acollection";
     params.set("name", collectionName);
     params.set(REPLICATION_FACTOR, 10);
+    if (secondConfigSet) {
+      params.set("collection.configName", "conf1");
+    }
     request = new QueryRequest(params);
     request.setPath("/admin/collections");
     gotExp = false;
@@ -339,6 +388,9 @@ public class CollectionsAPIDistributedZk
     params.set("name", collectionName);
     params.set(REPLICATION_FACTOR, 10);
     params.set("numShards", 0);
+    if (secondConfigSet) {
+      params.set("collection.configName", "conf1");
+    }
     request = new QueryRequest(params);
     request.setPath("/admin/collections");
     gotExp = false;
@@ -361,6 +413,9 @@ public class CollectionsAPIDistributedZk
         + System.currentTimeMillis() + "halfcollection" + "_3n";
     createCmd.setDataDir(dataDir);
     createCmd.setNumShards(1);
+    if (secondConfigSet) {
+      createCmd.setCollectionConfigName("conf1");
+    }
     createNewSolrServer("", baseUrl).request(createCmd);
     
     createCmd = new Create();
@@ -370,6 +425,9 @@ public class CollectionsAPIDistributedZk
         + System.currentTimeMillis() + "halfcollection" + "_3n";
     createCmd.setDataDir(dataDir);
     createCmd.setNumShards(1);
+    if (secondConfigSet) {
+      createCmd.setCollectionConfigName("conf1");
+    }
     createNewSolrServer("", getBaseUrl((HttpSolrServer) clients.get(1))).request(createCmd);
     
     params = new ModifiableSolrParams();
@@ -379,6 +437,10 @@ public class CollectionsAPIDistributedZk
     params.set("numShards", 2);
     params.set("wt", "xml");
     
+    if (secondConfigSet) {
+      params.set("collection.configName", "conf1");
+    }
+    
     String nn1 = ((SolrDispatchFilter) jettys.get(0).getDispatchFilter().getFilter()).getCores().getZkController().getNodeName();
     String nn2 =  ((SolrDispatchFilter) jettys.get(1).getDispatchFilter().getFilter()).getCores().getZkController().getNodeName();
     
@@ -391,6 +453,9 @@ public class CollectionsAPIDistributedZk
     SimpleOrderedMap success = (SimpleOrderedMap) resp.get("success");
     SimpleOrderedMap failure = (SimpleOrderedMap) resp.get("failure");
 
+    assertNotNull(resp.toString(), success);
+    assertNotNull(resp.toString(), failure);
+    
     String val1 = success.getVal(0).toString();
     String val2 = failure.getVal(0).toString();
     assertTrue(val1.contains("SolrException") || val2.contains("SolrException"));
@@ -408,6 +473,11 @@ public class CollectionsAPIDistributedZk
     String collectionName = "nodes_used_collection";
 
     params.set("name", collectionName);
+    
+    if (secondConfigSet) {
+      params.set("collection.configName", "conf1");
+    }
+    
     QueryRequest request = new QueryRequest(params);
     request.setPath("/admin/collections");
     createNewSolrServer("", baseUrl).request(request);
@@ -477,9 +547,13 @@ public class CollectionsAPIDistributedZk
           // and use this CloudSolrServer to create the collection
           client = createCloudClient("awholynewcollection_" + i);
         }
-        
-        createCollection(collectionInfos, "awholynewcollection_" + i,
-            numShards, replicationFactor, maxShardsPerNode, client, null);
+        if (secondConfigSet) {
+          createCollection(collectionInfos, "awholynewcollection_" + i,
+              numShards, replicationFactor, maxShardsPerNode, client, null, "conf2");
+        } else {
+          createCollection(collectionInfos, "awholynewcollection_" + i,
+              numShards, replicationFactor, maxShardsPerNode, client, null);
+        }
       } finally {
         if (client != null) client.shutdown();
       }
@@ -501,6 +575,19 @@ public class CollectionsAPIDistributedZk
     ZkStateReader zkStateReader = getCommonCloudSolrServer().getZkStateReader();
     for (int j = 0; j < cnt; j++) {
       waitForRecoveriesToFinish("awholynewcollection_" + j, zkStateReader, false);
+      
+      if (secondConfigSet) {
+        // let's see if they are using the second config set
+        byte[] data = zkStateReader.getZkClient()
+            .getData(
+                ZkStateReader.COLLECTIONS_ZKNODE + "/" + "awholynewcollection_"
+                    + j, null, null, true);
+        assertNotNull(data);
+        ZkNodeProps props = ZkNodeProps.load(data);
+        String configName = props.getStr(ZkController.CONFIGNAME_PROP);
+        assertEquals("conf2", configName);
+        
+      }
     }
     
     checkInstanceDirs(jettys.get(0)); 
@@ -594,6 +681,9 @@ public class CollectionsAPIDistributedZk
     collectionName = "acollectionafterbaddelete";
 
     params.set("name", collectionName);
+    if (secondConfigSet) {
+      params.set("collection.configName", "conf1");
+    }
     request = new QueryRequest(params);
     request.setPath("/admin/collections");
     createNewSolrServer("", baseUrl).request(request);
@@ -624,7 +714,8 @@ public class CollectionsAPIDistributedZk
     try {
       exp = false;
       try {
-      createCollection(collectionInfos, "awholynewcollection_" + cnt, numShards, replicationFactor, maxShardsPerNode, client, null);
+        createCollection(collectionInfos, "awholynewcollection_" + cnt,
+            numShards, replicationFactor, maxShardsPerNode, client, null, "conf1");
       } catch (SolrException e) {
         exp = true;
       }
@@ -654,7 +745,7 @@ public class CollectionsAPIDistributedZk
     collectionInfos = new HashMap<String,List<Integer>>();
     client = createCloudClient("awholynewcollection_" + (cnt+1));
     try {
-      createCollection(collectionInfos, "awholynewcollection_" + (cnt+1), numShards, replicationFactor, maxShardsPerNode, client, StrUtils.join(createNodeList, ','));
+      createCollection(collectionInfos, "awholynewcollection_" + (cnt+1), numShards, replicationFactor, maxShardsPerNode, client, StrUtils.join(createNodeList, ','), "conf1");
     } finally {
       client.shutdown();
     }

Modified: lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/request/CoreAdminRequest.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/request/CoreAdminRequest.java?rev=1530772&r1=1530771&r2=1530772&view=diff
==============================================================================
--- lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/request/CoreAdminRequest.java (original)
+++ lucene/dev/trunk/solr/solrj/src/java/org/apache/solr/client/solrj/request/CoreAdminRequest.java Wed Oct  9 19:46:00 2013
@@ -59,6 +59,7 @@ public class CoreAdminRequest extends So
     private String coreNodeName;
     private Boolean loadOnStartup;
     private Boolean isTransient;
+    private String collectionConfigName;
 
     public Create() {
       action = CoreAdminAction.CREATE;
@@ -76,6 +77,7 @@ public class CoreAdminRequest extends So
     public void setCoreNodeName(String coreNodeName) {this.coreNodeName = coreNodeName;}
     public void setIsTransient(Boolean isTransient) { this.isTransient = isTransient; }
     public void setIsLoadOnStartup(Boolean loadOnStartup) { this.loadOnStartup = loadOnStartup;}
+    public void setCollectionConfigName(String name) { this.collectionConfigName = name;}
 
     public String getInstanceDir() { return instanceDir; }
     public String getSchemaName()  { return schemaName; }
@@ -88,7 +90,8 @@ public class CoreAdminRequest extends So
     public String getCoreNodeName() { return coreNodeName; }
     public Boolean getIsLoadOnStartup() { return loadOnStartup; }
     public Boolean getIsTransient() { return isTransient; }
-
+    public String getCollectionConfigName() { return collectionConfigName;}
+    
     @Override
     public SolrParams getParams() {
       if( action == null ) {
@@ -137,6 +140,11 @@ public class CoreAdminRequest extends So
       if (loadOnStartup != null) {
         params.set(CoreAdminParams.LOAD_ON_STARTUP, loadOnStartup);
       }
+      
+      if (collectionConfigName != null) {
+        params.set("collection.configName", collectionConfigName);
+      }
+      
       return params;
     }
 

Modified: lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java?rev=1530772&r1=1530771&r2=1530772&view=diff
==============================================================================
--- lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java (original)
+++ lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/cloud/AbstractFullDistribZkTestBase.java Wed Oct  9 19:46:00 2013
@@ -1537,7 +1537,10 @@ public abstract class AbstractFullDistri
     createCollection(null, collectionName, numShards, numReplicas, maxShardsPerNode, null, null);
   }
 
-  protected void createCollection(Map<String,List<Integer>> collectionInfos, String collectionName, Map<String,Object> collectionProps, SolrServer client )  throws SolrServerException, IOException{
+  protected void createCollection(Map<String,List<Integer>> collectionInfos, String collectionName, Map<String,Object> collectionProps, SolrServer client)  throws SolrServerException, IOException{
+    createCollection(collectionInfos, collectionName, collectionProps, client, null);
+  }
+  protected void createCollection(Map<String,List<Integer>> collectionInfos, String collectionName, Map<String,Object> collectionProps, SolrServer client, String confSetName)  throws SolrServerException, IOException{
     ModifiableSolrParams params = new ModifiableSolrParams();
     params.set("action", CollectionAction.CREATE.toString());
     for (Map.Entry<String, Object> entry : collectionProps.entrySet()) {
@@ -1552,7 +1555,11 @@ public abstract class AbstractFullDistri
     if(numShards==null){
       numShards = (Integer) OverseerCollectionProcessor.COLL_PROPS.get(REPLICATION_FACTOR);
     }
-
+    
+    if (confSetName != null) {
+      params.set("collection.configName", confSetName);
+    }
+    
     int clientIndex = random().nextInt(2);
     List<Integer> list = new ArrayList<Integer>();
     list.add(numShards);
@@ -1591,6 +1598,18 @@ public abstract class AbstractFullDistri
         MAX_SHARDS_PER_NODE, maxShardsPerNode),
         client);
   }
+  
+  protected void createCollection(Map<String,List<Integer>> collectionInfos,
+      String collectionName, int numShards, int numReplicas, int maxShardsPerNode, SolrServer client, String createNodeSetStr, String configName) throws SolrServerException, IOException {
+
+    createCollection(collectionInfos, collectionName,
+        ZkNodeProps.makeMap(
+        NUM_SLICES, numShards,
+        REPLICATION_FACTOR, numReplicas,
+        CREATE_NODE_SET, createNodeSetStr,
+        MAX_SHARDS_PER_NODE, maxShardsPerNode),
+        client, configName);
+  }
 
   @Override
   protected SolrServer createNewSolrServer(int port) {

Modified: lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/cloud/AbstractZkTestCase.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/cloud/AbstractZkTestCase.java?rev=1530772&r1=1530771&r2=1530772&view=diff
==============================================================================
--- lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/cloud/AbstractZkTestCase.java (original)
+++ lucene/dev/trunk/solr/test-framework/src/java/org/apache/solr/cloud/AbstractZkTestCase.java Wed Oct  9 19:46:00 2013
@@ -102,27 +102,26 @@ public abstract class AbstractZkTestCase
     zkClient.makePath("/collections/control_collection/shards", CreateMode.PERSISTENT, true);
 
     // for now, always upload the config and schema to the canonical names
-    putConfig(zkClient, solrhome, config, "solrconfig.xml");
-    putConfig(zkClient, solrhome, schema, "schema.xml");
+    putConfig("conf1", zkClient, solrhome, config, "solrconfig.xml");
+    putConfig("conf1", zkClient, solrhome, schema, "schema.xml");
 
-    putConfig(zkClient, solrhome, "solrconfig.snippet.randomindexconfig.xml");
-    putConfig(zkClient, solrhome, "stopwords.txt");
-    putConfig(zkClient, solrhome, "protwords.txt");
-    putConfig(zkClient, solrhome, "currency.xml");
-    putConfig(zkClient, solrhome, "open-exchange-rates.json");
-    putConfig(zkClient, solrhome, "mapping-ISOLatin1Accent.txt");
-    putConfig(zkClient, solrhome, "old_synonyms.txt");
-    putConfig(zkClient, solrhome, "synonyms.txt");
-    
+    putConfig("conf1", zkClient, solrhome, "solrconfig.snippet.randomindexconfig.xml");
+    putConfig("conf1", zkClient, solrhome, "stopwords.txt");
+    putConfig("conf1", zkClient, solrhome, "protwords.txt");
+    putConfig("conf1", zkClient, solrhome, "currency.xml");
+    putConfig("conf1", zkClient, solrhome, "open-exchange-rates.json");
+    putConfig("conf1", zkClient, solrhome, "mapping-ISOLatin1Accent.txt");
+    putConfig("conf1", zkClient, solrhome, "old_synonyms.txt");
+    putConfig("conf1", zkClient, solrhome, "synonyms.txt");
     zkClient.close();
   }
 
-  private static void putConfig(SolrZkClient zkClient, File solrhome, final String name)
+  public static void putConfig(String confName, SolrZkClient zkClient, File solrhome, final String name)
       throws Exception {
-    putConfig(zkClient, solrhome, name, name);
+    putConfig(confName, zkClient, solrhome, name, name);
   }
 
-  private static void putConfig(SolrZkClient zkClient, File solrhome, final String srcName, String destName)
+  public static void putConfig(String confName, SolrZkClient zkClient, File solrhome, final String srcName, String destName)
       throws Exception {
     File file = new File(solrhome, "collection1"
         + File.separator + "conf" + File.separator + srcName);
@@ -131,7 +130,7 @@ public abstract class AbstractZkTestCase
       return;
     }
 
-    String destPath = "/configs/conf1/" + destName;
+    String destPath = "/configs/" + confName + "/" + destName;
     log.info("put " + file.getAbsolutePath() + " to " + destPath);
     zkClient.makePath(destPath, file, false, true);
   }