You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by gc...@apache.org on 2015/10/05 22:54:18 UTC

svn commit: r1706919 - in /lucene/dev/branches/branch_5x/solr: ./ core/src/java/org/apache/solr/handler/admin/ core/src/test/org/apache/solr/cloud/ solrj/src/java/org/apache/solr/client/solrj/request/ solrj/src/java/org/apache/solr/client/solrj/respons...

Author: gchanan
Date: Mon Oct  5 20:54:17 2015
New Revision: 1706919

URL: http://svn.apache.org/viewvc?rev=1706919&view=rev
Log:
SOLR-7995: Add a LIST command to ConfigSets API

Modified:
    lucene/dev/branches/branch_5x/solr/CHANGES.txt
    lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/ConfigSetsHandler.java
    lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPI.java
    lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/client/solrj/request/ConfigSetAdminRequest.java
    lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/client/solrj/response/ConfigSetAdminResponse.java
    lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/params/ConfigSetParams.java
    lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestConfigSetAdminRequest.java

Modified: lucene/dev/branches/branch_5x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/CHANGES.txt?rev=1706919&r1=1706918&r2=1706919&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_5x/solr/CHANGES.txt Mon Oct  5 20:54:17 2015
@@ -64,6 +64,8 @@ New Features
 
 * SOLR-8053: Basic auth support in SolrJ (noble)
 
+* SOLR-7995: Add a LIST command to ConfigSets API (Gregory Chanan)
+
 Bug Fixes
 ----------------------
 

Modified: lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/ConfigSetsHandler.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/ConfigSetsHandler.java?rev=1706919&r1=1706918&r2=1706919&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/ConfigSetsHandler.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/java/org/apache/solr/handler/admin/ConfigSetsHandler.java Mon Oct  5 20:54:17 2015
@@ -18,14 +18,18 @@ package org.apache.solr.handler.admin;
  */
 
 import java.util.Iterator;
+import java.util.List;
 import java.util.Map;
 import java.util.concurrent.TimeUnit;
 
 import org.apache.solr.client.solrj.SolrResponse;
 import org.apache.solr.cloud.Overseer;
+import org.apache.solr.cloud.OverseerSolrResponse;
 import org.apache.solr.cloud.OverseerTaskQueue.QueueEvent;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.common.SolrException.ErrorCode;
+import org.apache.solr.common.cloud.SolrZkClient;
+import org.apache.solr.common.cloud.ZkConfigManager;
 import org.apache.solr.common.cloud.ZkNodeProps;
 import org.apache.solr.common.params.ConfigSetParams;
 import org.apache.solr.common.params.ConfigSetParams.ConfigSetAction;
@@ -170,6 +174,19 @@ public class ConfigSetsHandler extends R
       Map<String, Object> call(SolrQueryRequest req, SolrQueryResponse rsp, ConfigSetsHandler h) throws Exception {
         return req.getParams().required().getAll(null, NAME);
       }
+    },
+    LIST_OP(LIST) {
+      @Override
+      Map<String, Object> call(SolrQueryRequest req, SolrQueryResponse rsp, ConfigSetsHandler h) throws Exception {
+        NamedList<Object> results = new NamedList<>();
+        SolrZkClient zk = h.coreContainer.getZkController().getZkStateReader().getZkClient();
+        ZkConfigManager zkConfigManager = new ZkConfigManager(zk);
+        List<String> configSetsList = zkConfigManager.listConfigs();
+        results.add("configSets", configSetsList);
+        SolrResponse response = new OverseerSolrResponse(results);
+        rsp.getValues().addAll(response.getResponse());
+        return null;
+      }
     };
 
     ConfigSetAction action;

Modified: lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPI.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPI.java?rev=1706919&r1=1706918&r2=1706919&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPI.java (original)
+++ lucene/dev/branches/branch_5x/solr/core/src/test/org/apache/solr/cloud/TestConfigSetsAPI.java Mon Oct  5 20:54:17 2015
@@ -22,9 +22,12 @@ import java.io.ByteArrayInputStream;
 import java.io.File;
 import java.io.InputStreamReader;
 import java.nio.charset.StandardCharsets;
+import java.util.Collection;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Properties;
+import java.util.Set;
 
 import org.apache.commons.io.FileUtils;
 import org.apache.solr.SolrTestCaseJ4;
@@ -33,6 +36,7 @@ import org.apache.solr.client.solrj.impl
 import org.apache.solr.client.solrj.request.ConfigSetAdminRequest;
 import org.apache.solr.client.solrj.request.ConfigSetAdminRequest.Create;
 import org.apache.solr.client.solrj.request.ConfigSetAdminRequest.Delete;
+import org.apache.solr.client.solrj.request.ConfigSetAdminRequest.List;
 import org.apache.solr.client.solrj.response.ConfigSetAdminResponse;
 import org.apache.solr.common.cloud.SolrZkClient;
 import org.apache.solr.common.cloud.ZkConfigManager;
@@ -292,6 +296,39 @@ public class TestConfigSetsAPI extends S
     } finally {
       zkClient.close();
     }
+
+    solrClient.close();
+  }
+
+  @Test
+  public void testList() throws Exception {
+    final SolrClient solrClient =
+        new HttpSolrClient(solrCluster.getJettySolrRunners().get(0).getBaseUrl().toString());
+
+    SolrZkClient zkClient = new SolrZkClient(solrCluster.getZkServer().getZkAddress(),
+        AbstractZkTestCase.TIMEOUT, 45000, null);
+    try {
+      // test empty
+      List list = new List();
+      ConfigSetAdminResponse.List response = list.process(solrClient);
+      Collection<String> actualConfigSets = response.getConfigSets();
+      assertEquals(0, actualConfigSets.size());
+
+      // test multiple
+      final File configDir = getFile("solr").toPath().resolve("configsets/configset-2/conf").toFile();
+      Set<String> configSets = new HashSet<String>();
+      for (int i = 0; i < 5; ++i) {
+        String configSet = "configSet" + i;
+        solrCluster.uploadConfigDir(configDir, configSet);
+        configSets.add(configSet);
+      }
+      response = list.process(solrClient);
+      actualConfigSets = response.getConfigSets();
+      assertEquals(configSets.size(), actualConfigSets.size());
+      assertTrue(configSets.containsAll(actualConfigSets));
+    } finally {
+      zkClient.close();
+    }
 
     solrClient.close();
   }

Modified: lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/client/solrj/request/ConfigSetAdminRequest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/client/solrj/request/ConfigSetAdminRequest.java?rev=1706919&r1=1706918&r2=1706919&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/client/solrj/request/ConfigSetAdminRequest.java (original)
+++ lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/client/solrj/request/ConfigSetAdminRequest.java Mon Oct  5 20:54:17 2015
@@ -38,10 +38,11 @@ import static org.apache.solr.common.par
  *
  * @since solr 5.4
  */
-public abstract class ConfigSetAdminRequest <Q extends ConfigSetAdminRequest<Q>> extends SolrRequest<ConfigSetAdminResponse> {
+public abstract class ConfigSetAdminRequest
+      <Q extends ConfigSetAdminRequest<Q,R>, R extends ConfigSetAdminResponse>
+      extends SolrRequest<R> {
 
   protected ConfigSetAction action = null;
-  protected String configSetName = null;
 
   protected ConfigSetAdminRequest setAction(ConfigSetAction action) {
     this.action = action;
@@ -63,12 +64,8 @@ public abstract class ConfigSetAdminRequ
     if (action == null) {
       throw new RuntimeException( "no action specified!" );
     }
-    if (configSetName == null) {
-      throw new RuntimeException( "no ConfigSet specified!" );
-    }
     ModifiableSolrParams params = new ModifiableSolrParams();
     params.set(ConfigSetParams.ACTION, action.toString());
-    params.set(NAME, configSetName);
     return params;
   }
 
@@ -78,21 +75,40 @@ public abstract class ConfigSetAdminRequ
   }
 
   @Override
-  protected ConfigSetAdminResponse createResponse(SolrClient client) {
-    return new ConfigSetAdminResponse();
-  }
+  protected abstract R createResponse(SolrClient client);
 
-  public final Q setConfigSetName(String configSetName) {
-    this.configSetName = configSetName;
-    return getThis();
-  }
+  protected abstract static class ConfigSetSpecificAdminRequest
+       <T extends ConfigSetAdminRequest<T,ConfigSetAdminResponse>>
+       extends ConfigSetAdminRequest<T,ConfigSetAdminResponse> {
+    protected String configSetName = null;
+
+    public final T setConfigSetName(String configSetName) {
+      this.configSetName = configSetName;
+      return getThis();
+    }
+
+    public final String getConfigSetName() {
+      return configSetName;
+    }
 
-  public final String getConfigSetName() {
-    return configSetName;
+    @Override
+    public SolrParams getParams() {
+      ModifiableSolrParams params = new ModifiableSolrParams(super.getParams());
+      if (configSetName == null) {
+        throw new RuntimeException( "no ConfigSet specified!" );
+      }
+      params.set(NAME, configSetName);
+      return params;
+    }
+
+    @Override
+    protected ConfigSetAdminResponse createResponse(SolrClient client) {
+      return new ConfigSetAdminResponse();
+    }
   }
 
   // CREATE request
-  public static class Create extends ConfigSetAdminRequest<Create> {
+  public static class Create extends ConfigSetSpecificAdminRequest<Create> {
     protected static String PROPERTY_PREFIX = "configSetProp";
     protected String baseConfigSetName;
     protected Properties properties;
@@ -142,7 +158,7 @@ public abstract class ConfigSetAdminRequ
   }
 
   // DELETE request
-  public static class Delete extends ConfigSetAdminRequest<Delete> {
+  public static class Delete extends ConfigSetSpecificAdminRequest<Delete> {
     public Delete() {
       action = ConfigSetAction.DELETE;
     }
@@ -152,4 +168,21 @@ public abstract class ConfigSetAdminRequ
       return this;
     }
   }
+
+  // LIST request
+  public static class List extends ConfigSetAdminRequest<List, ConfigSetAdminResponse.List> {
+    public List() {
+      action = ConfigSetAction.LIST;
+    }
+
+    @Override
+    protected List getThis() {
+      return this;
+    }
+
+    @Override
+    protected ConfigSetAdminResponse.List createResponse(SolrClient client) {
+      return new ConfigSetAdminResponse.List();
+    }
+  }
 }

Modified: lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/client/solrj/response/ConfigSetAdminResponse.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/client/solrj/response/ConfigSetAdminResponse.java?rev=1706919&r1=1706918&r2=1706919&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/client/solrj/response/ConfigSetAdminResponse.java (original)
+++ lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/client/solrj/response/ConfigSetAdminResponse.java Mon Oct  5 20:54:17 2015
@@ -30,4 +30,9 @@ public class ConfigSetAdminResponse exte
      return (NamedList<String>) getResponse().get( "exceptions" );
   }
 
+  public static class List extends ConfigSetAdminResponse {
+    public java.util.List<String> getConfigSets() {
+      return (java.util.List<String>) getResponse().get("configSets");
+    }
+  }
 }

Modified: lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/params/ConfigSetParams.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/params/ConfigSetParams.java?rev=1706919&r1=1706918&r2=1706919&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/params/ConfigSetParams.java (original)
+++ lucene/dev/branches/branch_5x/solr/solrj/src/java/org/apache/solr/common/params/ConfigSetParams.java Mon Oct  5 20:54:17 2015
@@ -28,7 +28,8 @@ public interface ConfigSetParams
 
   public enum ConfigSetAction {
     CREATE,
-    DELETE;
+    DELETE,
+    LIST;
 
     public static ConfigSetAction get(String p) {
       if (p != null) {

Modified: lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestConfigSetAdminRequest.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestConfigSetAdminRequest.java?rev=1706919&r1=1706918&r2=1706919&view=diff
==============================================================================
--- lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestConfigSetAdminRequest.java (original)
+++ lucene/dev/branches/branch_5x/solr/solrj/src/test/org/apache/solr/client/solrj/request/TestConfigSetAdminRequest.java Mon Oct  5 20:54:17 2015
@@ -18,6 +18,8 @@
 package org.apache.solr.client.solrj.request;
 
 import org.apache.solr.SolrTestCaseJ4;
+import org.apache.solr.client.solrj.SolrClient;
+import org.apache.solr.client.solrj.response.ConfigSetAdminResponse;
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -29,7 +31,6 @@ public class TestConfigSetAdminRequest e
   @Test
   public void testNoAction() {
     ConfigSetAdminRequest request = new MyConfigSetAdminRequest();
-    request.setConfigSetName("name");
     verifyException(request, "action");
   }
 
@@ -59,12 +60,17 @@ public class TestConfigSetAdminRequest e
     }
   }
 
-  private static class MyConfigSetAdminRequest extends ConfigSetAdminRequest<MyConfigSetAdminRequest> {
+  private static class MyConfigSetAdminRequest extends ConfigSetAdminRequest<MyConfigSetAdminRequest, ConfigSetAdminResponse> {
       public MyConfigSetAdminRequest() {}
 
       @Override
       public MyConfigSetAdminRequest getThis() {
         return this;
       }
+
+      @Override
+      public ConfigSetAdminResponse createResponse(SolrClient client) {
+        return new ConfigSetAdminResponse();
+      }
     };
 }