You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sa...@apache.org on 2014/04/05 06:32:32 UTC
svn commit: r1584959 - in /lucene/dev/branches/branch_4x: ./ solr/
solr/core/ solr/core/src/java/org/apache/solr/core/
solr/core/src/java/org/apache/solr/rest/
solr/core/src/java/org/apache/solr/rest/schema/
solr/core/src/java/org/apache/solr/rest/sche...
Author: sarowe
Date: Sat Apr 5 04:32:30 2014
New Revision: 1584959
URL: http://svn.apache.org/r1584959
Log:
SOLR-5653: Create a RestManager to provide REST API endpoints for reconfigurable plugins (merged trunk r1576939 and r1576942)
Added:
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/BaseSolrResource.java
- copied unchanged from r1576939, lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/BaseSolrResource.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/DELETEable.java
- copied unchanged from r1576939, lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/DELETEable.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/ManagedResource.java
- copied unchanged from r1576939, lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/ManagedResource.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/ManagedResourceObserver.java
- copied unchanged from r1576939, lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/ManagedResourceObserver.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/ManagedResourceStorage.java
- copied unchanged from r1576939, lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/ManagedResourceStorage.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/RestManager.java
- copied unchanged from r1576939, lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/RestManager.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/SolrConfigRestApi.java
- copied unchanged from r1576939, lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/SolrConfigRestApi.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/SolrSchemaRestApi.java
- copied unchanged from r1576939, lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/SolrSchemaRestApi.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/analysis/
- copied from r1576939, lucene/dev/trunk/solr/core/src/java/org/apache/solr/rest/schema/analysis/
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/TestManagedResource.java
- copied unchanged from r1576939, lucene/dev/trunk/solr/core/src/test/org/apache/solr/rest/TestManagedResource.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/TestManagedResourceStorage.java
- copied unchanged from r1576939, lucene/dev/trunk/solr/core/src/test/org/apache/solr/rest/TestManagedResourceStorage.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/TestRestManager.java
- copied unchanged from r1576939, lucene/dev/trunk/solr/core/src/test/org/apache/solr/rest/TestRestManager.java
Removed:
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/SolrRestApi.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/BaseSchemaResource.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/DefaultSchemaResource.java
Modified:
lucene/dev/branches/branch_4x/ (props changed)
lucene/dev/branches/branch_4x/solr/ (props changed)
lucene/dev/branches/branch_4x/solr/CHANGES.txt (contents, props changed)
lucene/dev/branches/branch_4x/solr/core/ (props changed)
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrConfig.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrCore.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/BaseFieldResource.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/BaseFieldTypeResource.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/DefaultSearchFieldResource.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SchemaNameResource.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SchemaResource.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SchemaSimilarityResource.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SchemaVersionResource.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SolrQueryParserDefaultOperatorResource.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SolrQueryParserResource.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/UniqueKeyFieldResource.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java
lucene/dev/branches/branch_4x/solr/core/src/test-files/solr/collection1/conf/solrconfig.xml
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/SolrRestletTestBase.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/schema/TestClassNameShortening.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaFieldResource.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/schema/TestSerializedLuceneMatchVersion.java
lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/schema/TestCloudManagedSchemaAddField.java
lucene/dev/branches/branch_4x/solr/solrj/ (props changed)
lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/util/NamedList.java
lucene/dev/branches/branch_4x/solr/test-framework/ (props changed)
lucene/dev/branches/branch_4x/solr/test-framework/src/java/org/apache/solr/util/RestTestBase.java
lucene/dev/branches/branch_4x/solr/test-framework/src/java/org/apache/solr/util/RestTestHarness.java
lucene/dev/branches/branch_4x/solr/webapp/ (props changed)
lucene/dev/branches/branch_4x/solr/webapp/web/WEB-INF/web.xml
Modified: lucene/dev/branches/branch_4x/solr/CHANGES.txt
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/CHANGES.txt?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/CHANGES.txt (original)
+++ lucene/dev/branches/branch_4x/solr/CHANGES.txt Sat Apr 5 04:32:30 2014
@@ -114,6 +114,9 @@ New Features
* SOLR-5829: Allow ExpandComponent to accept query and filter query parameters
(Joel Bernstein)
+* SOLR-5653: Create a RestManager to provide REST API endpoints for
+ reconfigurable plugins. (Tim Potter, Steve Rowe)
+
Bug Fixes
----------------------
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrConfig.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrConfig.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrConfig.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrConfig.java Sat Apr 5 04:32:30 2014
@@ -27,6 +27,7 @@ import org.apache.solr.handler.component
import org.apache.solr.request.SolrRequestHandler;
import org.apache.solr.response.QueryResponseWriter;
import org.apache.solr.response.transform.TransformerFactory;
+import org.apache.solr.rest.RestManager;
import org.apache.solr.schema.IndexSchemaFactory;
import org.apache.solr.search.CacheConfig;
import org.apache.solr.search.FastLRUCache;
@@ -147,7 +148,7 @@ public class SolrConfig extends Config {
throw new SolrException(ErrorCode.SERVER_ERROR, "Error loading solr config from " + resource, e);
}
}
-
+
/** Creates a configuration instance from a resource loader, a configuration name and a stream.
* If the stream is null, the resource loader will open the configuration stream.
* If the stream is not null, no attempt to load the resource will occur (the name is not used).
@@ -287,7 +288,7 @@ public class SolrConfig extends Config {
loadPluginInfo(UpdateLog.class,"updateHandler/updateLog");
loadPluginInfo(IndexSchemaFactory.class,"schemaFactory",
REQUIRE_CLASS);
-
+ loadPluginInfo(RestManager.class, "restManager");
updateHandlerInfo = loadUpdatehandlerInfo();
multipartUploadLimitKB = getInt(
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrCore.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrCore.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrCore.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrCore.java Sat Apr 5 04:32:30 2014
@@ -64,6 +64,9 @@ import org.apache.solr.response.SchemaXm
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.response.XMLResponseWriter;
import org.apache.solr.response.transform.TransformerFactory;
+import org.apache.solr.rest.ManagedResourceStorage;
+import org.apache.solr.rest.RestManager;
+import org.apache.solr.rest.ManagedResourceStorage.StorageIO;
import org.apache.solr.schema.FieldType;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.IndexSchemaFactory;
@@ -174,6 +177,12 @@ public final class SolrCore implements S
public long getStartTime() { return startTime; }
+ private RestManager restManager;
+
+ public RestManager getRestManager() {
+ return restManager;
+ }
+
static int boolean_query_max_clause_count = Integer.MIN_VALUE;
// only change the BooleanQuery maxClauseCount once for ALL cores...
void booleanQueryMaxClauseCount() {
@@ -187,7 +196,6 @@ public final class SolrCore implements S
}
}
-
/**
* The SolrResourceLoader used to load all resources for this core.
* @since solr 1.3
@@ -833,6 +841,9 @@ public final class SolrCore implements S
if (iwRef != null) iwRef.decref();
}
+ // Initialize the RestManager
+ restManager = initRestManager();
+
// Finally tell anyone who wants to know
resourceLoader.inform(resourceLoader);
resourceLoader.inform(this); // last call before the latch is released.
@@ -2294,6 +2305,43 @@ public final class SolrCore implements S
"update your config to use <string name='facet.sort'>.");
}
}
+
+ /**
+ * Creates and initializes a RestManager based on configuration args in solrconfig.xml.
+ * RestManager provides basic storage support for managed resource data, such as to
+ * persist stopwords to ZooKeeper if running in SolrCloud mode.
+ */
+ @SuppressWarnings("unchecked")
+ protected RestManager initRestManager() throws SolrException {
+
+ PluginInfo restManagerPluginInfo =
+ getSolrConfig().getPluginInfo(RestManager.class.getName());
+
+ NamedList<String> initArgs = null;
+ RestManager mgr = null;
+ if (restManagerPluginInfo != null) {
+ if (restManagerPluginInfo.className != null) {
+ mgr = resourceLoader.newInstance(restManagerPluginInfo.className, RestManager.class);
+ }
+
+ if (restManagerPluginInfo.initArgs != null) {
+ initArgs = (NamedList<String>)restManagerPluginInfo.initArgs;
+ }
+ }
+
+ if (mgr == null)
+ mgr = new RestManager();
+
+ if (initArgs == null)
+ initArgs = new NamedList<>();
+
+ String collection = coreDescriptor.getCollectionName();
+ StorageIO storageIO =
+ ManagedResourceStorage.newStorageIO(collection, resourceLoader, initArgs);
+ mgr.init(resourceLoader, initArgs, storageIO);
+
+ return mgr;
+ }
public CoreDescriptor getCoreDescriptor() {
return coreDescriptor;
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/core/SolrResourceLoader.java Sat Apr 5 04:32:30 2014
@@ -33,6 +33,7 @@ import org.apache.solr.handler.component
import org.apache.solr.handler.component.ShardHandlerFactory;
import org.apache.solr.request.SolrRequestHandler;
import org.apache.solr.response.QueryResponseWriter;
+import org.apache.solr.rest.RestManager;
import org.apache.solr.schema.FieldType;
import org.apache.solr.schema.ManagedIndexSchemaFactory;
import org.apache.solr.schema.SimilarityFactory;
@@ -81,7 +82,11 @@ public class SolrResourceLoader implemen
static final String project = "solr";
static final String base = "org.apache" + "." + project;
- static final String[] packages = {"","analysis.","schema.","handler.","search.","update.","core.","response.","request.","update.processor.","util.", "spelling.", "handler.component.", "handler.dataimport.", "spelling.suggest.", "spelling.suggest.fst." };
+ static final String[] packages = {
+ "", "analysis.", "schema.", "handler.", "search.", "update.", "core.", "response.", "request.",
+ "update.processor.", "util.", "spelling.", "handler.component.", "handler.dataimport.",
+ "spelling.suggest.", "spelling.suggest.fst.", "rest.schema.analysis."
+ };
protected URLClassLoader classLoader;
private final String instanceDir;
@@ -96,7 +101,20 @@ public class SolrResourceLoader implemen
private final Properties coreProperties;
private volatile boolean live;
-
+
+ // Provide a registry so that managed resources can register themselves while the XML configuration
+ // documents are being parsed ... after all are registered, they are asked by the RestManager to
+ // initialize themselves. This two-step process is required because not all resources are available
+ // (such as the SolrZkClient) when XML docs are being parsed.
+ private RestManager.Registry managedResourceRegistry;
+
+ public synchronized RestManager.Registry getManagedResourceRegistry() {
+ if (managedResourceRegistry == null) {
+ managedResourceRegistry = new RestManager.Registry();
+ }
+ return managedResourceRegistry;
+ }
+
/**
* <p>
* This loader will delegate to the context classloader when possible,
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/BaseFieldResource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/BaseFieldResource.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/BaseFieldResource.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/BaseFieldResource.java Sat Apr 5 04:32:30 2014
@@ -18,6 +18,7 @@ package org.apache.solr.rest.schema;
import org.apache.solr.common.params.CommonParams;
import org.apache.solr.common.util.SimpleOrderedMap;
+import org.apache.solr.rest.BaseSolrResource;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.SchemaField;
import org.restlet.resource.ResourceException;
@@ -28,7 +29,7 @@ import java.util.LinkedHashSet;
/**
* Base class for Schema Field and DynamicField requests.
*/
-abstract class BaseFieldResource extends BaseSchemaResource {
+abstract class BaseFieldResource extends BaseSolrResource {
protected static final String INCLUDE_DYNAMIC_PARAM = "includeDynamic";
private static final String DYNAMIC_BASE = "dynamicBase";
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/BaseFieldTypeResource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/BaseFieldTypeResource.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/BaseFieldTypeResource.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/BaseFieldTypeResource.java Sat Apr 5 04:32:30 2014
@@ -18,6 +18,7 @@ package org.apache.solr.rest.schema;
*/
import org.apache.solr.common.util.SimpleOrderedMap;
+import org.apache.solr.rest.BaseSolrResource;
import org.apache.solr.schema.FieldType;
import org.apache.solr.schema.IndexSchema;
import org.restlet.resource.ResourceException;
@@ -27,7 +28,7 @@ import java.util.List;
/**
* Base class for the FieldType resource classes.
*/
-abstract class BaseFieldTypeResource extends BaseSchemaResource {
+abstract class BaseFieldTypeResource extends BaseSolrResource {
private boolean showDefaults;
protected BaseFieldTypeResource() {
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/DefaultSearchFieldResource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/DefaultSearchFieldResource.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/DefaultSearchFieldResource.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/DefaultSearchFieldResource.java Sat Apr 5 04:32:30 2014
@@ -18,6 +18,7 @@ package org.apache.solr.rest.schema;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
+import org.apache.solr.rest.BaseSolrResource;
import org.apache.solr.rest.GETable;
import org.apache.solr.schema.IndexSchema;
import org.restlet.representation.Representation;
@@ -29,7 +30,7 @@ import org.slf4j.LoggerFactory;
/**
* This class responds to requests at /solr/(corename)/schema/defaultsearchfield
*/
-public class DefaultSearchFieldResource extends BaseSchemaResource implements GETable {
+public class DefaultSearchFieldResource extends BaseSolrResource implements GETable {
private static final Logger log = LoggerFactory.getLogger(DefaultSearchFieldResource.class);
public DefaultSearchFieldResource() {
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SchemaNameResource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SchemaNameResource.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SchemaNameResource.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SchemaNameResource.java Sat Apr 5 04:32:30 2014
@@ -17,6 +17,7 @@ package org.apache.solr.rest.schema;
*/
import org.apache.solr.common.SolrException;
+import org.apache.solr.rest.BaseSolrResource;
import org.apache.solr.rest.GETable;
import org.apache.solr.schema.IndexSchema;
import org.restlet.representation.Representation;
@@ -28,7 +29,7 @@ import org.slf4j.LoggerFactory;
/**
* This class responds to requests at /solr/(corename)/schema/name
*/
-public class SchemaNameResource extends BaseSchemaResource implements GETable {
+public class SchemaNameResource extends BaseSolrResource implements GETable {
private static final Logger log = LoggerFactory.getLogger(SchemaNameResource.class);
public SchemaNameResource() {
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SchemaResource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SchemaResource.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SchemaResource.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SchemaResource.java Sat Apr 5 04:32:30 2014
@@ -16,6 +16,7 @@ package org.apache.solr.rest.schema;
* limitations under the License.
*/
+import org.apache.solr.rest.BaseSolrResource;
import org.apache.solr.rest.GETable;
import org.apache.solr.schema.IndexSchema;
import org.restlet.representation.Representation;
@@ -26,7 +27,7 @@ import org.slf4j.LoggerFactory;
/**
* This class responds to requests at /solr/(corename)/schema
*/
-public class SchemaResource extends BaseSchemaResource implements GETable {
+public class SchemaResource extends BaseSolrResource implements GETable {
private static final Logger log = LoggerFactory.getLogger(SchemaResource.class);
public SchemaResource() {
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SchemaSimilarityResource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SchemaSimilarityResource.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SchemaSimilarityResource.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SchemaSimilarityResource.java Sat Apr 5 04:32:30 2014
@@ -16,8 +16,8 @@ package org.apache.solr.rest.schema;
* limitations under the License.
*/
+import org.apache.solr.rest.BaseSolrResource;
import org.apache.solr.rest.GETable;
-import org.apache.solr.rest.SolrRestApi;
import org.apache.solr.schema.IndexSchema;
import org.restlet.representation.Representation;
import org.restlet.resource.ResourceException;
@@ -28,7 +28,7 @@ import org.slf4j.LoggerFactory;
/**
* This class responds to requests at /solr/(corename)/schema/similarity
*/
-public class SchemaSimilarityResource extends BaseSchemaResource implements GETable {
+public class SchemaSimilarityResource extends BaseSolrResource implements GETable {
private static final Logger log = LoggerFactory.getLogger(SchemaSimilarityResource.class);
public SchemaSimilarityResource() {
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SchemaVersionResource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SchemaVersionResource.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SchemaVersionResource.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SchemaVersionResource.java Sat Apr 5 04:32:30 2014
@@ -16,8 +16,8 @@ package org.apache.solr.rest.schema;
* limitations under the License.
*/
+import org.apache.solr.rest.BaseSolrResource;
import org.apache.solr.rest.GETable;
-import org.apache.solr.rest.SolrRestApi;
import org.apache.solr.schema.IndexSchema;
import org.restlet.representation.Representation;
import org.restlet.resource.ResourceException;
@@ -28,7 +28,7 @@ import org.slf4j.LoggerFactory;
/**
* This class responds to requests at /solr/(corename)/schema/version
*/
-public class SchemaVersionResource extends BaseSchemaResource implements GETable {
+public class SchemaVersionResource extends BaseSolrResource implements GETable {
private static final Logger log = LoggerFactory.getLogger(SchemaVersionResource.class);
public SchemaVersionResource() {
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SolrQueryParserDefaultOperatorResource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SolrQueryParserDefaultOperatorResource.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SolrQueryParserDefaultOperatorResource.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SolrQueryParserDefaultOperatorResource.java Sat Apr 5 04:32:30 2014
@@ -16,6 +16,7 @@ package org.apache.solr.rest.schema;
* limitations under the License.
*/
+import org.apache.solr.rest.BaseSolrResource;
import org.apache.solr.rest.GETable;
import org.apache.solr.schema.IndexSchema;
import org.restlet.representation.Representation;
@@ -27,7 +28,7 @@ import org.slf4j.LoggerFactory;
/**
* This class responds to requests at /solr/(corename)/schema/solrqueryparser/defaultoperator
*/
-public class SolrQueryParserDefaultOperatorResource extends BaseSchemaResource implements GETable {
+public class SolrQueryParserDefaultOperatorResource extends BaseSolrResource implements GETable {
private static final Logger log = LoggerFactory.getLogger(SolrQueryParserDefaultOperatorResource.class);
public SolrQueryParserDefaultOperatorResource() {
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SolrQueryParserResource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SolrQueryParserResource.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SolrQueryParserResource.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/SolrQueryParserResource.java Sat Apr 5 04:32:30 2014
@@ -17,6 +17,7 @@ package org.apache.solr.rest.schema;
*/
import org.apache.solr.common.util.SimpleOrderedMap;
+import org.apache.solr.rest.BaseSolrResource;
import org.apache.solr.rest.GETable;
import org.apache.solr.schema.IndexSchema;
import org.restlet.representation.Representation;
@@ -28,7 +29,7 @@ import org.slf4j.LoggerFactory;
/**
* This class responds to requests at /solr/(corename)/schema/solrqueryparser
*/
-public class SolrQueryParserResource extends BaseSchemaResource implements GETable {
+public class SolrQueryParserResource extends BaseSolrResource implements GETable {
private static final Logger log = LoggerFactory.getLogger(SolrQueryParserResource.class);
public SolrQueryParserResource() {
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/UniqueKeyFieldResource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/UniqueKeyFieldResource.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/UniqueKeyFieldResource.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/rest/schema/UniqueKeyFieldResource.java Sat Apr 5 04:32:30 2014
@@ -16,6 +16,7 @@ package org.apache.solr.rest.schema;
* limitations under the License.
*/
+import org.apache.solr.rest.BaseSolrResource;
import org.apache.solr.rest.GETable;
import org.apache.solr.schema.IndexSchema;
import org.restlet.representation.Representation;
@@ -27,7 +28,7 @@ import org.slf4j.LoggerFactory;
/**
* This class responds to requests at /solr/(corename)/schema/uniquekey
*/
-public class UniqueKeyFieldResource extends BaseSchemaResource implements GETable {
+public class UniqueKeyFieldResource extends BaseSolrResource implements GETable {
private static final Logger log = LoggerFactory.getLogger(UniqueKeyFieldResource.class);
public UniqueKeyFieldResource() {
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java Sat Apr 5 04:32:30 2014
@@ -20,6 +20,7 @@ package org.apache.solr.servlet;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpEntityEnclosingRequestBase;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpHead;
@@ -353,8 +354,9 @@ public class SolrDispatchFilter extends
// get or create/cache the parser for the core
SolrRequestParsers parser = config.getRequestParsers();
- // Handle /schema/* paths via Restlet
- if( path.startsWith("/schema") ) {
+ // Handle /schema/* and /config/* paths via Restlet
+ if( path.equals("/schema") || path.startsWith("/schema/")
+ || path.equals("/config") || path.startsWith("/config/")) {
solrReq = parser.parse(core, path, req);
SolrRequestInfo.setRequestInfo(new SolrRequestInfo(solrReq, new SolrQueryResponse()));
if( path.equals(req.getServletPath()) ) {
@@ -525,6 +527,9 @@ public class SolrDispatchFilter extends
entityRequest.setEntity(entity);
method = entityRequest;
}
+ else if ("DELETE".equals(req.getMethod())) {
+ method = new HttpDelete(urlstr);
+ }
else {
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
"Unexpected method type: " + req.getMethod());
Modified: lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java Sat Apr 5 04:32:30 2014
@@ -666,7 +666,9 @@ public class SolrRequestParsers
{
String method = req.getMethod().toUpperCase(Locale.ROOT);
if ("GET".equals(method) || "HEAD".equals(method)
- || ("PUT".equals(method) && req.getRequestURI().contains("/schema"))) {
+ || (("PUT".equals(method) || "DELETE".equals(method))
+ && (req.getRequestURI().contains("/schema")
+ || req.getRequestURI().contains("/config")))) {
return parseQueryString(req.getQueryString());
}
if ("POST".equals( method ) ) {
Modified: lucene/dev/branches/branch_4x/solr/core/src/test-files/solr/collection1/conf/solrconfig.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test-files/solr/collection1/conf/solrconfig.xml?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test-files/solr/collection1/conf/solrconfig.xml (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test-files/solr/collection1/conf/solrconfig.xml Sat Apr 5 04:32:30 2014
@@ -570,5 +570,13 @@
<processor class="solr.RunUpdateProcessorFactory" />
</updateRequestProcessorChain>
+ <restManager>
+ <!--
+ IMPORTANT: Due to the Lucene SecurityManager, tests can only write to their runtime directory or below.
+ But its easier to just keep everything in memory for testing so no remnants are left behind.
+ -->
+ <str name="storageIO">org.apache.solr.rest.ManagedResourceStorage$InMemoryStorageIO</str>
+ </restManager>
+
</config>
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/SolrRestletTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/SolrRestletTestBase.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/SolrRestletTestBase.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/SolrRestletTestBase.java Sat Apr 5 04:32:30 2014
@@ -24,13 +24,26 @@ import org.restlet.ext.servlet.ServerSer
import java.util.SortedMap;
import java.util.TreeMap;
+/**
+ * Base class for Solr Restlet-based tests. Creates test harness,
+ * including "extra" servlets for all Solr Restlet Application subclasses.
+ */
abstract public class SolrRestletTestBase extends RestTestBase {
+
+ /**
+ * Creates test harness, including "extra" servlets for all
+ * Solr Restlet Application subclasses.
+ */
@BeforeClass
public static void init() throws Exception {
final SortedMap<ServletHolder,String> extraServlets = new TreeMap<>();
- final ServletHolder solrRestApi = new ServletHolder("SolrRestApi", ServerServlet.class);
- solrRestApi.setInitParameter("org.restlet.application", "org.apache.solr.rest.SolrRestApi");
- extraServlets.put(solrRestApi, "/schema/*"); // '/schema/*' matches '/schema', '/schema/', and '/schema/whatever...'
+ final ServletHolder solrSchemaRestApi = new ServletHolder("SolrSchemaRestApi", ServerServlet.class);
+ solrSchemaRestApi.setInitParameter("org.restlet.application", "org.apache.solr.rest.SolrSchemaRestApi");
+ extraServlets.put(solrSchemaRestApi, "/schema/*"); // '/schema/*' matches '/schema', '/schema/', and '/schema/whatever...'
+
+ final ServletHolder solrConfigRestApi = new ServletHolder("SolrConfigRestApi", ServerServlet.class);
+ solrConfigRestApi.setInitParameter("org.restlet.application", "org.apache.solr.rest.SolrConfigRestApi");
+ extraServlets.put(solrConfigRestApi, "/config/*");
createJettyAndHarness(TEST_HOME(), "solrconfig.xml", "schema-rest.xml", "/solr", true, extraServlets);
}
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/schema/TestClassNameShortening.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/schema/TestClassNameShortening.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/schema/TestClassNameShortening.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/schema/TestClassNameShortening.java Sat Apr 5 04:32:30 2014
@@ -31,8 +31,8 @@ public class TestClassNameShortening ext
@BeforeClass
public static void init() throws Exception {
final SortedMap<ServletHolder,String> extraServlets = new TreeMap<>();
- final ServletHolder solrRestApi = new ServletHolder("SolrRestApi", ServerServlet.class);
- solrRestApi.setInitParameter("org.restlet.application", "org.apache.solr.rest.SolrRestApi");
+ final ServletHolder solrRestApi = new ServletHolder("SolrSchemaRestApi", ServerServlet.class);
+ solrRestApi.setInitParameter("org.restlet.application", "org.apache.solr.rest.SolrSchemaRestApi");
extraServlets.put(solrRestApi, "/schema/*"); // '/schema/*' matches '/schema', '/schema/', and '/schema/whatever...'
createJettyAndHarness(TEST_HOME(), "solrconfig-minimal.xml", "schema-class-name-shortening-on-serialization.xml",
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaFieldResource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaFieldResource.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaFieldResource.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/schema/TestManagedSchemaFieldResource.java Sat Apr 5 04:32:30 2014
@@ -46,8 +46,8 @@ public class TestManagedSchemaFieldResou
FileUtils.copyDirectory(new File(TEST_HOME()), tmpSolrHome.getAbsoluteFile());
final SortedMap<ServletHolder,String> extraServlets = new TreeMap<>();
- final ServletHolder solrRestApi = new ServletHolder("SolrRestApi", ServerServlet.class);
- solrRestApi.setInitParameter("org.restlet.application", "org.apache.solr.rest.SolrRestApi");
+ final ServletHolder solrRestApi = new ServletHolder("SolrSchemaRestApi", ServerServlet.class);
+ solrRestApi.setInitParameter("org.restlet.application", "org.apache.solr.rest.SolrSchemaRestApi");
extraServlets.put(solrRestApi, "/schema/*"); // '/schema/*' matches '/schema', '/schema/', and '/schema/whatever...'
System.setProperty("managed.schema.mutable", "true");
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/schema/TestSerializedLuceneMatchVersion.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/schema/TestSerializedLuceneMatchVersion.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/schema/TestSerializedLuceneMatchVersion.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/rest/schema/TestSerializedLuceneMatchVersion.java Sat Apr 5 04:32:30 2014
@@ -31,8 +31,8 @@ public class TestSerializedLuceneMatchVe
@BeforeClass
public static void init() throws Exception {
final SortedMap<ServletHolder,String> extraServlets = new TreeMap<>();
- final ServletHolder solrRestApi = new ServletHolder("SolrRestApi", ServerServlet.class);
- solrRestApi.setInitParameter("org.restlet.application", "org.apache.solr.rest.SolrRestApi");
+ final ServletHolder solrRestApi = new ServletHolder("SolrSchemaRestApi", ServerServlet.class);
+ solrRestApi.setInitParameter("org.restlet.application", "org.apache.solr.rest.SolrSchemaRestApi");
extraServlets.put(solrRestApi, "/schema/*"); // '/schema/*' matches '/schema', '/schema/', and '/schema/whatever...'
createJettyAndHarness(TEST_HOME(), "solrconfig-minimal.xml", "schema-rest-lucene-match-version.xml",
Modified: lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/schema/TestCloudManagedSchemaAddField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/schema/TestCloudManagedSchemaAddField.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/schema/TestCloudManagedSchemaAddField.java (original)
+++ lucene/dev/branches/branch_4x/solr/core/src/test/org/apache/solr/schema/TestCloudManagedSchemaAddField.java Sat Apr 5 04:32:30 2014
@@ -58,8 +58,8 @@ public class TestCloudManagedSchemaAddFi
@Override
public SortedMap<ServletHolder,String> getExtraServlets() {
final SortedMap<ServletHolder,String> extraServlets = new TreeMap<>();
- final ServletHolder solrRestApi = new ServletHolder("SolrRestApi", ServerServlet.class);
- solrRestApi.setInitParameter("org.restlet.application", "org.apache.solr.rest.SolrRestApi");
+ final ServletHolder solrRestApi = new ServletHolder("SolrSchemaRestApi", ServerServlet.class);
+ solrRestApi.setInitParameter("org.restlet.application", "org.apache.solr.rest.SolrSchemaRestApi");
extraServlets.put(solrRestApi, "/schema/*"); // '/schema/*' matches '/schema', '/schema/', and '/schema/whatever...'
return extraServlets;
}
Modified: lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/util/NamedList.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/util/NamedList.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/util/NamedList.java (original)
+++ lucene/dev/branches/branch_4x/solr/solrj/src/java/org/apache/solr/common/util/NamedList.java Sat Apr 5 04:32:30 2014
@@ -81,6 +81,31 @@ public class NamedList<T> implements Clo
}
/**
+ * Creates a NamedList instance containing the "name,value" pairs contained in the
+ * Map.
+ *
+ * <p>
+ * Modifying the contents of the Map after calling this constructor may change
+ * the NamedList (in future versions of Solr), but this is not guaranteed and should
+ * not be relied upon. To modify the NamedList, refer to {@link #add(String, Object)}
+ * or {@link #remove(String)}.
+ * </p>
+ *
+ * @param nameValueMap the name value pairs
+ */
+ public NamedList(Map<String,? extends T> nameValueMap) {
+ if (null == nameValueMap) {
+ nvPairs = new ArrayList<>();
+ } else {
+ nvPairs = new ArrayList<>(nameValueMap.size());
+ for (Map.Entry<String,? extends T> ent : nameValueMap.entrySet()) {
+ nvPairs.add(ent.getKey());
+ nvPairs.add(ent.getValue());
+ }
+ }
+ }
+
+ /**
* Creates an instance backed by an explicitly specified list of
* pairwise names/values.
*
@@ -528,6 +553,30 @@ public class NamedList<T> implements Clo
* not a Boolean or a String.
*/
public Boolean removeBooleanArg(final String name) {
+ Boolean bool = getBooleanArg(name);
+ if (null != bool) {
+ remove(name);
+ }
+ return bool;
+ }
+
+ /**
+ * Used for getting a boolean argument from a NamedList object. If the name
+ * is not present, returns null. If there is more than one value with that
+ * name, or if the value found is not a Boolean or a String, throws an
+ * exception. If there is only one value present and it is a Boolean or a
+ * String, the value is returned as a Boolean. The NamedList is not
+ * modified. See {@link #remove(String)}, {@link #removeAll(String)}
+ * and {@link #removeConfigArgs(String)} for additional ways of gathering
+ * configuration information from a NamedList.
+ *
+ * @param name The key to look up in the NamedList.
+ * @return The boolean value found.
+ * @throws SolrException
+ * If multiple values are found for the name or the value found is
+ * not a Boolean or a String.
+ */
+ public Boolean getBooleanArg(final String name) {
Boolean bool;
List<T> values = getAll(name);
if (0 == values.size()) {
@@ -544,12 +593,11 @@ public class NamedList<T> implements Clo
bool = Boolean.parseBoolean(o.toString());
} else {
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
- "'" + name + "' must have type 'bool' or 'str'; found " + o.getClass());
+ "'" + name + "' must have type Boolean or CharSequence; found " + o.getClass());
}
- remove(name);
return bool;
}
-
+
/**
* Used for getting one or many arguments from NamedList objects that hold
* configuration parameters. Finds all entries in the NamedList that match
Modified: lucene/dev/branches/branch_4x/solr/test-framework/src/java/org/apache/solr/util/RestTestBase.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/test-framework/src/java/org/apache/solr/util/RestTestBase.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/test-framework/src/java/org/apache/solr/util/RestTestBase.java (original)
+++ lucene/dev/branches/branch_4x/solr/test-framework/src/java/org/apache/solr/util/RestTestBase.java Sat Apr 5 04:32:30 2014
@@ -422,8 +422,73 @@ abstract public class RestTestBase exten
}
}
}
+
+ /**
+ * Deletes a resource and then matches some JSON test expressions against the
+ * response using the default double delta tolerance.
+ * @see org.apache.solr.JSONTestUtil#DEFAULT_DELTA
+ * @see #assertJDelete(String,double,String...)
+ */
+ public static void assertJDelete(String request, String... tests) throws Exception {
+ assertJDelete(request, JSONTestUtil.DEFAULT_DELTA, tests);
+ }
+
+ /**
+ * Deletes a resource and then matches some JSON test expressions against the
+ * response using the specified double delta tolerance.
+ */
+ public static void assertJDelete(String request, double delta, String... tests) throws Exception {
+ int queryStartPos = request.indexOf('?');
+ String query;
+ String path;
+ if (-1 == queryStartPos) {
+ query = "";
+ path = request;
+ } else {
+ query = request.substring(queryStartPos + 1);
+ path = request.substring(0, queryStartPos);
+ }
+ query = setParam(query, "wt", "json");
+ request = path + '?' + setParam(query, "indent", "on");
+
+ String response;
+ boolean failed = true;
+ try {
+ response = restTestHarness.delete(request);
+ failed = false;
+ } finally {
+ if (failed) {
+ log.error("REQUEST FAILED: " + request);
+ }
+ }
+ for (String test : tests) {
+ if (null == test || 0 == test.length()) continue;
+ String testJSON = json(test);
+ try {
+ failed = true;
+ String err = JSONTestUtil.match(response, testJSON, delta);
+ failed = false;
+ if (err != null) {
+ log.error("query failed JSON validation. error=" + err +
+ "\n expected =" + testJSON +
+ "\n response = " + response +
+ "\n request = " + request + "\n"
+ );
+ throw new RuntimeException(err);
+ }
+ } finally {
+ if (failed) {
+ log.error("JSON query validation threw an exception." +
+ "\n expected =" + testJSON +
+ "\n response = " + response +
+ "\n request = " + request + "\n"
+ );
+ }
+ }
+ }
+ }
/**
* Insures that the given param is included in the query with the given value.
Modified: lucene/dev/branches/branch_4x/solr/test-framework/src/java/org/apache/solr/util/RestTestHarness.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/test-framework/src/java/org/apache/solr/util/RestTestHarness.java?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/test-framework/src/java/org/apache/solr/util/RestTestHarness.java (original)
+++ lucene/dev/branches/branch_4x/solr/test-framework/src/java/org/apache/solr/util/RestTestHarness.java Sat Apr 5 04:32:30 2014
@@ -24,6 +24,7 @@ import javax.xml.xpath.XPathExpressionEx
import org.apache.http.HttpEntity;
import org.apache.http.client.HttpClient;
+import org.apache.http.client.methods.HttpDelete;
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.methods.HttpPost;
import org.apache.http.client.methods.HttpPut;
@@ -111,6 +112,18 @@ public class RestTestHarness extends Bas
}
/**
+ * Processes a DELETE request using a URL path (with no context path) + optional query params,
+ * e.g. "/schema/analysis/protwords/english", and returns the response content.
+ *
+ * @param request the URL path and optional query params
+ * @return The response to the DELETE request
+ */
+ public String delete(String request) throws IOException {
+ HttpDelete httpDelete = new HttpDelete(getBaseURL() + request);
+ return getResponse(httpDelete);
+ }
+
+ /**
* Processes a POST request using a URL path (with no context path) + optional query params,
* e.g. "/schema/fields/newfield", PUTs the given content, and returns the response content.
*
@@ -161,7 +174,10 @@ public class RestTestHarness extends Bas
throw new RuntimeException(e);
}
}
-
+
+ /**
+ * Executes the given request and returns the response.
+ */
private String getResponse(HttpUriRequest request) throws IOException {
HttpEntity entity = null;
try {
Modified: lucene/dev/branches/branch_4x/solr/webapp/web/WEB-INF/web.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/branch_4x/solr/webapp/web/WEB-INF/web.xml?rev=1584959&r1=1584958&r2=1584959&view=diff
==============================================================================
--- lucene/dev/branches/branch_4x/solr/webapp/web/WEB-INF/web.xml (original)
+++ lucene/dev/branches/branch_4x/solr/webapp/web/WEB-INF/web.xml Sat Apr 5 04:32:30 2014
@@ -131,7 +131,16 @@
<servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
<init-param>
<param-name>org.restlet.application</param-name>
- <param-value>org.apache.solr.rest.SolrRestApi</param-value>
+ <param-value>org.apache.solr.rest.SolrSchemaRestApi</param-value>
+ </init-param>
+ </servlet>
+
+ <servlet>
+ <servlet-name>SolrConfigRestApi</servlet-name>
+ <servlet-class>org.restlet.ext.servlet.ServerServlet</servlet-class>
+ <init-param>
+ <param-name>org.restlet.application</param-name>
+ <param-value>org.apache.solr.rest.SolrConfigRestApi</param-value>
</init-param>
</servlet>
@@ -168,6 +177,11 @@
<url-pattern>/schema/*</url-pattern>
</servlet-mapping>
+ <servlet-mapping>
+ <servlet-name>SolrConfigRestApi</servlet-name>
+ <url-pattern>/config/*</url-pattern>
+ </servlet-mapping>
+
<mime-mapping>
<extension>.xsl</extension>
<!-- per http://www.w3.org/TR/2006/PR-xslt20-20061121/ -->