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 2014/12/01 18:25:47 UTC
svn commit: r1642718 [10/12] - in /lucene/dev/branches/lucene2878: ./
dev-tools/ dev-tools/eclipse/dot.settings/ dev-tools/idea/.idea/
dev-tools/idea/lucene/benchmark/src/ dev-tools/idea/lucene/highlighter/
dev-tools/maven/ dev-tools/maven/solr/webapp/...
Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/rest/RestManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/rest/RestManager.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/rest/RestManager.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/rest/RestManager.java Mon Dec 1 17:25:39 2014
@@ -60,7 +60,6 @@ public class RestManager {
public static final Logger log = LoggerFactory.getLogger(RestManager.class);
public static final String SCHEMA_BASE_PATH = "/schema";
- public static final String CONFIG_BASE_PATH = "/config";
public static final String MANAGED_ENDPOINT = "/managed";
// used for validating resourceIds provided during registration
@@ -118,15 +117,12 @@ public class RestManager {
private final Pattern reservedEndpointsPattern;
public Registry() {
- reservedEndpoints.add(CONFIG_BASE_PATH + MANAGED_ENDPOINT);
reservedEndpoints.add(SCHEMA_BASE_PATH + MANAGED_ENDPOINT);
for (String reservedEndpoint : SolrSchemaRestApi.getReservedEndpoints()) {
reservedEndpoints.add(reservedEndpoint);
}
- for (String reservedEndpoint : SolrConfigRestApi.getReservedEndpoints()) {
- reservedEndpoints.add(reservedEndpoint);
- }
+
reservedEndpointsPattern = getReservedEndpointsPattern();
}
@@ -192,8 +188,8 @@ public class RestManager {
Matcher resourceIdValidator = resourceIdRegex.matcher(resourceId);
if (!resourceIdValidator.matches()) {
String errMsg = String.format(Locale.ROOT,
- "Invalid resourceId '%s'; must start with %s or %s.",
- resourceId, CONFIG_BASE_PATH, SCHEMA_BASE_PATH);
+ "Invalid resourceId '%s'; must start with %s.",
+ resourceId, SCHEMA_BASE_PATH);
throw new SolrException(ErrorCode.SERVER_ERROR, errMsg);
}
@@ -603,7 +599,6 @@ public class RestManager {
endpoint = new RestManagerManagedResource(this);
endpoint.loadManagedDataAndNotify(null); // no observers for my endpoint
// responds to requests to /config/managed and /schema/managed
- managed.put(CONFIG_BASE_PATH+MANAGED_ENDPOINT, endpoint);
managed.put(SCHEMA_BASE_PATH+MANAGED_ENDPOINT, endpoint);
// init registered managed resources
@@ -734,10 +729,7 @@ public class RestManager {
* @param router - Restlet Router
*/
public synchronized void attachManagedResources(String routerPath, Router router) {
-
- if (CONFIG_BASE_PATH.equals(routerPath)) {
- this.configRouter = router;
- } else if (SCHEMA_BASE_PATH.equals(routerPath)) {
+ if (SCHEMA_BASE_PATH.equals(routerPath)) {
this.schemaRouter = router;
} else {
throw new SolrException(ErrorCode.SERVER_ERROR,
Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/rest/SolrSchemaRestApi.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/rest/SolrSchemaRestApi.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/rest/SolrSchemaRestApi.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/rest/SolrSchemaRestApi.java Mon Dec 1 17:25:39 2014
@@ -18,21 +18,12 @@ package org.apache.solr.rest;
import org.apache.solr.request.SolrRequestInfo;
import org.apache.solr.rest.schema.CopyFieldCollectionResource;
-import org.apache.solr.rest.schema.SchemaResource;
-import org.apache.solr.rest.schema.DefaultSearchFieldResource;
import org.apache.solr.rest.schema.DynamicFieldCollectionResource;
import org.apache.solr.rest.schema.DynamicFieldResource;
import org.apache.solr.rest.schema.FieldCollectionResource;
import org.apache.solr.rest.schema.FieldResource;
import org.apache.solr.rest.schema.FieldTypeCollectionResource;
import org.apache.solr.rest.schema.FieldTypeResource;
-import org.apache.solr.rest.schema.SchemaNameResource;
-import org.apache.solr.rest.schema.SchemaSimilarityResource;
-import org.apache.solr.rest.schema.SchemaVersionResource;
-import org.apache.solr.rest.schema.SchemaZkVersionResource;
-import org.apache.solr.rest.schema.SolrQueryParserDefaultOperatorResource;
-import org.apache.solr.rest.schema.SolrQueryParserResource;
-import org.apache.solr.rest.schema.UniqueKeyFieldResource;
import org.apache.solr.schema.IndexSchema;
import org.restlet.Application;
import org.restlet.Restlet;
@@ -58,30 +49,11 @@ public class SolrSchemaRestApi extends A
public static final String FIELDTYPES = IndexSchema.FIELD_TYPES.toLowerCase(Locale.ROOT);
public static final String FIELDTYPES_PATH = "/" + FIELDTYPES;
- public static final String NAME_PATH = "/" + IndexSchema.NAME.toLowerCase(Locale.ROOT);
public static final String NAME_SEGMENT = "/{" + IndexSchema.NAME.toLowerCase(Locale.ROOT) + "}";
public static final String COPY_FIELDS = IndexSchema.COPY_FIELDS.toLowerCase(Locale.ROOT);
public static final String COPY_FIELDS_PATH = "/" + COPY_FIELDS;
- public static final String VERSION_PATH = "/" + IndexSchema.VERSION.toLowerCase(Locale.ROOT);
-
- public static final String DEFAULT_SEARCH_FIELD = IndexSchema.DEFAULT_SEARCH_FIELD.toLowerCase(Locale.ROOT);
- public static final String DEFAULT_SEARCH_FIELD_PATH = "/" + DEFAULT_SEARCH_FIELD;
-
- public static final String SIMILARITY_PATH = "/" + IndexSchema.SIMILARITY.toLowerCase(Locale.ROOT);
-
- public static final String SOLR_QUERY_PARSER = IndexSchema.SOLR_QUERY_PARSER.toLowerCase(Locale.ROOT);
- public static final String SOLR_QUERY_PARSER_PATH = "/" + SOLR_QUERY_PARSER;
-
- public static final String DEFAULT_OPERATOR = IndexSchema.DEFAULT_OPERATOR.toLowerCase(Locale.ROOT);
- public static final String DEFAULT_OPERATOR_PATH = SOLR_QUERY_PARSER_PATH + "/" + DEFAULT_OPERATOR;
-
- public static final String UNIQUE_KEY_FIELD = IndexSchema.UNIQUE_KEY.toLowerCase(Locale.ROOT);
- public static final String UNIQUE_KEY_FIELD_PATH = "/" + UNIQUE_KEY_FIELD;
-
- public static final String ZK_VERSION_PATH = "/zkversion";
-
/**
* Returns reserved endpoints under /schema
*/
@@ -90,15 +62,7 @@ public class SolrSchemaRestApi extends A
reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + FIELDS_PATH);
reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + DYNAMIC_FIELDS_PATH);
reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + FIELDTYPES_PATH);
- reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + NAME_PATH);
reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + COPY_FIELDS_PATH);
- reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + VERSION_PATH);
- reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + DEFAULT_SEARCH_FIELD_PATH);
- reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + SIMILARITY_PATH);
- reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + SOLR_QUERY_PARSER_PATH);
- reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + DEFAULT_OPERATOR_PATH);
- reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + UNIQUE_KEY_FIELD_PATH);
- reservedEndpoints.add(RestManager.SCHEMA_BASE_PATH + ZK_VERSION_PATH);
return Collections.unmodifiableSet(reservedEndpoints);
}
@@ -123,10 +87,7 @@ public class SolrSchemaRestApi extends A
log.info("createInboundRoot started for /schema");
- router.attach("", SchemaResource.class);
- // Allow a trailing slash on full-schema requests
- router.attach("/", SchemaResource.class);
-
+
router.attach(FIELDS_PATH, FieldCollectionResource.class);
// Allow a trailing slash on collection requests
router.attach(FIELDS_PATH + "/", FieldCollectionResource.class);
@@ -145,23 +106,7 @@ public class SolrSchemaRestApi extends A
router.attach(COPY_FIELDS_PATH, CopyFieldCollectionResource.class);
// Allow a trailing slash on collection requests
router.attach(COPY_FIELDS_PATH + "/", CopyFieldCollectionResource.class);
-
- router.attach(NAME_PATH, SchemaNameResource.class);
-
- router.attach(VERSION_PATH, SchemaVersionResource.class);
-
- router.attach(UNIQUE_KEY_FIELD_PATH, UniqueKeyFieldResource.class);
- router.attach(DEFAULT_SEARCH_FIELD_PATH, DefaultSearchFieldResource.class);
-
- router.attach(SIMILARITY_PATH, SchemaSimilarityResource.class);
-
- // At present solrQueryParser only contains defaultOperator, but there may be more children in the future
- router.attach(SOLR_QUERY_PARSER_PATH, SolrQueryParserResource.class);
- router.attach(DEFAULT_OPERATOR_PATH, SolrQueryParserDefaultOperatorResource.class);
-
- router.attach(ZK_VERSION_PATH, SchemaZkVersionResource.class);
-
router.attachDefault(RestManager.ManagedEndpoint.class);
// attach all the dynamically registered schema resources
Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/AbstractSpatialFieldType.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/AbstractSpatialFieldType.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/AbstractSpatialFieldType.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/AbstractSpatialFieldType.java Mon Dec 1 17:25:39 2014
@@ -59,6 +59,8 @@ import java.util.Collections;
import java.util.List;
import java.util.Locale;
import java.util.Map;
+import java.util.Set;
+import java.util.TreeSet;
import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
@@ -76,6 +78,11 @@ public abstract class AbstractSpatialFie
*/
public static final String FILTER_PARAM = "filter";
+ //score param values:
+ public static final String DISTANCE = "distance";
+ public static final String RECIP_DISTANCE = "recipDistance";
+ public static final String NONE = "none";
+
protected final Logger log = LoggerFactory.getLogger( getClass() );
protected SpatialContext ctx;
@@ -83,6 +90,21 @@ public abstract class AbstractSpatialFie
private final Cache<String, T> fieldStrategyCache = CacheBuilder.newBuilder().build();
+ protected final Set<String> supportedScoreModes;
+
+ protected AbstractSpatialFieldType() {
+ this(Collections.emptySet());
+ }
+
+ protected AbstractSpatialFieldType(Set<String> moreScoreModes) {
+ Set<String> set = new TreeSet<>();//sorted for consistent display order
+ set.add(NONE);
+ set.add(DISTANCE);
+ set.add(RECIP_DISTANCE);
+ set.addAll(moreScoreModes);
+ supportedScoreModes = Collections.unmodifiableSet(set);
+ }
+
@Override
protected void init(IndexSchema schema, Map<String, String> args) {
super.init(schema, args);
@@ -290,16 +312,27 @@ public abstract class AbstractSpatialFie
return new FilteredQuery(functionQuery, filter);
}
+ /** The set of values supported for the score local-param. Not null. */
+ public Set<String> getSupportedScoreModes() {
+ return supportedScoreModes;
+ }
+
protected ValueSource getValueSourceFromSpatialArgs(QParser parser, SchemaField field, SpatialArgs spatialArgs, String score, T strategy) {
- if (score == null || "none".equals(score) || "".equals(score)) {
+ if (score == null) {
return null;
- } else if ("distance".equals(score)) {
- double multiplier = 1.0;//TODO support units=kilometers
- return strategy.makeDistanceValueSource(spatialArgs.getShape().getCenter(), multiplier);
- } else if ("recipDistance".equals(score)) {
- return strategy.makeRecipDistanceValueSource(spatialArgs.getShape());
- } else {
- throw new SolrException(SolrException.ErrorCode.BAD_REQUEST, "'score' local-param must be one of 'none', 'distance', or 'recipDistance'");
+ }
+ switch (score) {
+ case NONE:
+ case "":
+ return null;
+ case DISTANCE:
+ double multiplier = 1.0;//TODO support units=kilometers
+ return strategy.makeDistanceValueSource(spatialArgs.getShape().getCenter(), multiplier);
+ case RECIP_DISTANCE:
+ return strategy.makeRecipDistanceValueSource(spatialArgs.getShape());
+ default:
+ throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
+ "'score' local-param must be one of " + supportedScoreModes);
}
}
Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/BBoxField.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/BBoxField.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/BBoxField.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/BBoxField.java Mon Dec 1 17:25:39 2014
@@ -28,17 +28,29 @@ import org.apache.solr.common.SolrExcept
import org.apache.solr.search.QParser;
import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.HashSet;
import java.util.List;
import java.util.Map;
public class BBoxField extends AbstractSpatialFieldType<BBoxStrategy> implements SchemaAware {
private static final String PARAM_QUERY_TARGET_PROPORTION = "queryTargetProportion";
private static final String PARAM_MIN_SIDE_LENGTH = "minSideLength";
- private String numberFieldName;//required
- private String booleanFieldName = "boolean";
+
+ //score modes:
+ private static final String OVERLAP_RATIO = "overlapRatio";
+ private static final String AREA = "area";
+ private static final String AREA2D = "area2D";
+
+ private String numberTypeName;//required
+ private String booleanTypeName = "boolean";
private IndexSchema schema;
+ public BBoxField() {
+ super(new HashSet<>(Arrays.asList(OVERLAP_RATIO, AREA, AREA2D)));
+ }
+
@Override
protected void init(IndexSchema schema, Map<String, String> args) {
super.init(schema, args);
@@ -48,25 +60,25 @@ public class BBoxField extends AbstractS
throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "The field type: " + typeName
+ " must specify the numberType attribute.");
}
- numberFieldName = v;
+ numberTypeName = v;
v = args.remove("booleanType");
if (v != null) {
- booleanFieldName = v;
+ booleanTypeName = v;
}
}
@Override
public void inform(IndexSchema schema) {
this.schema = schema;
- FieldType numberType = schema.getFieldTypeByName(numberFieldName);
- FieldType booleanType = schema.getFieldTypeByName(booleanFieldName);
+ FieldType numberType = schema.getFieldTypeByName(numberTypeName);
+ FieldType booleanType = schema.getFieldTypeByName(booleanTypeName);
if (numberType == null) {
- throw new RuntimeException("Cannot find number fieldType: " + numberFieldName);
+ throw new RuntimeException("Cannot find number fieldType: " + numberTypeName);
}
if (booleanType == null) {
- throw new RuntimeException("Cannot find boolean fieldType: " + booleanFieldName);
+ throw new RuntimeException("Cannot find boolean fieldType: " + booleanTypeName);
}
if (!(booleanType instanceof BoolField)) {
throw new RuntimeException("Must be a BoolField: " + booleanType);
@@ -75,33 +87,47 @@ public class BBoxField extends AbstractS
throw new RuntimeException("Must be TrieDoubleField: " + numberType);
}
+ //note: this only works for explicit fields, not dynamic fields
List<SchemaField> fields = new ArrayList<>(schema.getFields().values());//copy, because we modify during iteration
for (SchemaField sf : fields) {
if (sf.getType() == this) {
String name = sf.getName();
- register(schema, name + BBoxStrategy.SUFFIX_MINX, numberType);
- register(schema, name + BBoxStrategy.SUFFIX_MAXX, numberType);
- register(schema, name + BBoxStrategy.SUFFIX_MINY, numberType);
- register(schema, name + BBoxStrategy.SUFFIX_MAXY, numberType);
- register(schema, name + BBoxStrategy.SUFFIX_XDL, booleanType);
+ registerSubFields(schema, name, numberType, booleanType);
}
}
}
+ private void registerSubFields(IndexSchema schema, String name, FieldType numberType, FieldType booleanType) {
+ register(schema, name + BBoxStrategy.SUFFIX_MINX, numberType);
+ register(schema, name + BBoxStrategy.SUFFIX_MAXX, numberType);
+ register(schema, name + BBoxStrategy.SUFFIX_MINY, numberType);
+ register(schema, name + BBoxStrategy.SUFFIX_MAXY, numberType);
+ register(schema, name + BBoxStrategy.SUFFIX_XDL, booleanType);
+ }
+
+ // note: Registering the field is probably optional; it makes it show up in the schema browser and may have other
+ // benefits.
private void register(IndexSchema schema, String name, FieldType fieldType) {
SchemaField sf = new SchemaField(name, fieldType);
schema.getFields().put(sf.getName(), sf);
}
@Override
- protected BBoxStrategy newSpatialStrategy(String s) {
- BBoxStrategy strategy = new BBoxStrategy(ctx, s);
+ protected BBoxStrategy newSpatialStrategy(String fieldName) {
+ //if it's a dynamic field, we register the sub-fields now.
+ FieldType numberType = schema.getFieldTypeByName(numberTypeName);
+ FieldType booleanType = schema.getFieldTypeByName(booleanTypeName);
+ if (schema.isDynamicField(fieldName)) {
+ registerSubFields(schema, fieldName, numberType, booleanType);
+ }
+
+ BBoxStrategy strategy = new BBoxStrategy(ctx, fieldName);
//Solr's FieldType ought to expose Lucene FieldType. Instead as a hack we create a Field with a dummy value.
- SchemaField field = schema.getField(strategy.getFieldName() + BBoxStrategy.SUFFIX_MINX);
+ final SchemaField solrNumField = new SchemaField("_", numberType);//dummy temp
org.apache.lucene.document.FieldType luceneType =
- (org.apache.lucene.document.FieldType) field.createField(0.0, 1.0f).fieldType();
- //and annoyingly this field isn't going to have a docValues format because Solr uses a separate Field for that
- if (field.hasDocValues()) {
+ (org.apache.lucene.document.FieldType) solrNumField.createField(0.0, 1.0f).fieldType();
+ //and annoyingly this Field isn't going to have a docValues format because Solr uses a separate Field for that
+ if (solrNumField.hasDocValues()) {
luceneType = new org.apache.lucene.document.FieldType(luceneType);
luceneType.setDocValuesType(DocValuesType.NUMERIC);
}
@@ -111,9 +137,12 @@ public class BBoxField extends AbstractS
@Override
protected ValueSource getValueSourceFromSpatialArgs(QParser parser, SchemaField field, SpatialArgs spatialArgs, String scoreParam, BBoxStrategy strategy) {
+ if (scoreParam == null) {
+ return null;
+ }
switch (scoreParam) {
//TODO move these to superclass after LUCENE-5804 ?
- case "overlapRatio":
+ case OVERLAP_RATIO:
double queryTargetProportion = 0.25;//Suggested default; weights towards target area
String v = parser.getParam(PARAM_QUERY_TARGET_PROPORTION);
@@ -130,10 +159,10 @@ public class BBoxField extends AbstractS
(Rectangle) spatialArgs.getShape(),
queryTargetProportion, minSideLength);
- case "area":
+ case AREA:
return new ShapeAreaValueSource(strategy.makeShapeValueSource(), ctx, ctx.isGeo());
- case "area2D":
+ case AREA2D:
return new ShapeAreaValueSource(strategy.makeShapeValueSource(), ctx, false);
default:
Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/SchemaManager.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/SchemaManager.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/schema/SchemaManager.java Mon Dec 1 17:25:39 2014
@@ -18,17 +18,26 @@ package org.apache.solr.schema;
*/
+import org.apache.solr.cloud.ZkController;
import org.apache.solr.cloud.ZkSolrResourceLoader;
import org.apache.solr.common.SolrException;
+import org.apache.solr.core.ConfigOverlay;
import org.apache.solr.core.CoreDescriptor;
import org.apache.solr.core.SolrCore;
+import org.apache.solr.core.SolrResourceLoader;
import org.apache.solr.request.SolrQueryRequest;
import org.apache.solr.rest.BaseSolrResource;
import org.apache.solr.util.CommandOperation;
+import org.apache.zookeeper.KeeperException;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
+import org.xml.sax.InputSource;
+import java.io.IOException;
+import java.io.InputStream;
import java.io.Reader;
+import java.io.StringWriter;
+import java.nio.charset.StandardCharsets;
import java.util.Collection;
import java.util.Collections;
import java.util.HashSet;
@@ -79,7 +88,7 @@ public class SchemaManager {
* @param rdr The input as a Reader
* @return Lis of errors . If the List is empty then the operation is successful.
*/
- public List performOperations(Reader rdr) {
+ public List performOperations(Reader rdr) throws Exception {
List<CommandOperation> ops = null;
try {
ops = CommandOperation.parse(rdr);
@@ -102,13 +111,13 @@ public class SchemaManager {
}
- private List doOperations(List<CommandOperation> operations){
+ private List doOperations(List<CommandOperation> operations) throws InterruptedException, IOException, KeeperException {
int timeout = req.getParams().getInt(BaseSolrResource.UPDATE_TIMEOUT_SECS, -1);
long startTime = System.nanoTime();
- long endTime = timeout >0 ? System.nanoTime()+ (timeout * 1000*1000) : Long.MAX_VALUE;
+ long endTime = timeout > 0 ? System.nanoTime() + (timeout * 1000 * 1000) : Long.MAX_VALUE;
SolrCore core = req.getCore();
- for(;System.nanoTime() < endTime ;) {
- managedIndexSchema = (ManagedIndexSchema) core.getLatestSchema();
+ for (; System.nanoTime() < endTime; ) {
+ managedIndexSchema = getFreshManagedSchema();
for (CommandOperation op : operations) {
if (ADD_FIELD.equals(op.name) || ADD_DYNAMIC_FIELD.equals(op.name)) {
applyAddField(op);
@@ -123,20 +132,51 @@ public class SchemaManager {
}
List errs = CommandOperation.captureErrors(operations);
if (!errs.isEmpty()) return errs;
+ SolrResourceLoader loader = req.getCore().getResourceLoader();
+ if (loader instanceof ZkSolrResourceLoader) {
- try {
- managedIndexSchema.persistManagedSchema(false);
- core.setLatestSchema(managedIndexSchema);
- waitForOtherReplicasToUpdate(timeout, startTime);
- return EMPTY_LIST;
- } catch (ManagedIndexSchema.SchemaChangedInZkException e) {
- String s = "Failed to update schema because schema is modified";
- log.warn(s, e);
- continue;
- } catch (Exception e){
- String s = "Exception persisting schema";
- log.warn(s, e);
- return singletonList(s + e.getMessage());
+ StringWriter sw = new StringWriter();
+ try {
+ managedIndexSchema.persist(sw);
+ } catch (IOException e) {
+ log.info("race condition ");
+ throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "unable to serialize schema");
+ //unlikely
+ }
+
+ try {
+ ZkController.persistConfigResourceToZooKeeper(loader,
+ managedIndexSchema.getSchemaZkVersion(),
+ managedIndexSchema.getResourceName(),
+ sw.toString().getBytes(StandardCharsets.UTF_8),
+ true);
+ return EMPTY_LIST;
+ } catch (ZkController.ResourceModifiedInZkException e) {
+ log.info("Race condition schema modified by another node");
+ continue;
+ } catch (Exception e) {
+ String s = "Exception persisting schema";
+ log.warn(s, e);
+ return singletonList(s + e.getMessage());
+ }
+
+ }else {
+
+ try {
+ //only for non cloud stuff
+ managedIndexSchema.persistManagedSchema(false);
+ core.setLatestSchema(managedIndexSchema);
+ waitForOtherReplicasToUpdate(timeout, startTime);
+ return EMPTY_LIST;
+ } catch (ManagedIndexSchema.SchemaChangedInZkException e) {
+ String s = "Failed to update schema because schema is modified";
+ log.warn(s, e);
+ continue;
+ } catch (Exception e) {
+ String s = "Exception persisting schema";
+ log.warn(s, e);
+ return singletonList(s + e.getMessage());
+ }
}
}
@@ -231,4 +271,28 @@ public class SchemaManager {
return true;
}
+ public ManagedIndexSchema getFreshManagedSchema() throws IOException, KeeperException, InterruptedException {
+ SolrResourceLoader resourceLoader = req.getCore().getResourceLoader();
+ if (resourceLoader instanceof ZkSolrResourceLoader) {
+ ZkSolrResourceLoader loader = (ZkSolrResourceLoader) resourceLoader;
+ InputStream in = resourceLoader.openResource(req.getSchema().getResourceName());
+ if (in instanceof ZkSolrResourceLoader.ZkByteArrayInputStream) {
+ int version = ((ZkSolrResourceLoader.ZkByteArrayInputStream) in).getStat().getVersion();
+ log.info("managed schema loaded . version : {} ", version);
+ return new ManagedIndexSchema(req.getCore().getSolrConfig(),
+ req.getSchema().getResourceName() ,new InputSource(in),
+ true,
+ req.getSchema().getResourceName(),
+ version,new Object());
+ }else {
+ return (ManagedIndexSchema) req.getCore().getLatestSchema();
+ }
+
+ } else {
+ return (ManagedIndexSchema) req.getCore().getLatestSchema();
+ }
+
+
+
+ }
}
Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/search/SolrIndexSearcher.java Mon Dec 1 17:25:39 2014
@@ -753,9 +753,7 @@ public class SolrIndexSearcher extends I
* @return the first document number containing the term
*/
public int getFirstMatch(Term t) throws IOException {
- Fields fields = leafReader.fields();
- if (fields == null) return -1;
- Terms terms = fields.terms(t.field());
+ Terms terms = leafReader.terms(t.field());
if (terms == null) return -1;
BytesRef termBytes = t.bytes();
final TermsEnum termsEnum = terms.iterator(null);
Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/search/function/FileFloatSource.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/search/function/FileFloatSource.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/search/function/FileFloatSource.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/search/function/FileFloatSource.java Mon Dec 1 17:25:39 2014
@@ -132,9 +132,9 @@ public class FileFloatSource extends Val
* @param reader the IndexReader whose cache needs refreshing
*/
public void refreshCache(IndexReader reader) {
- log.info("Refreshing FlaxFileFloatSource cache for field {}", this.field.getName());
+ log.info("Refreshing FileFloatSource cache for field {}", this.field.getName());
floatCache.refresh(reader, new Entry(this));
- log.info("FlaxFileFloatSource cache for field {} reloaded", this.field.getName());
+ log.info("FileFloatSource cache for field {} reloaded", this.field.getName());
}
private final float[] getCachedFloats(IndexReader reader) {
Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/servlet/SolrDispatchFilter.java Mon Dec 1 17:25:39 2014
@@ -49,7 +49,6 @@ import org.apache.solr.common.params.Com
import org.apache.solr.common.params.MapSolrParams;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.params.SolrParams;
-import org.apache.solr.common.util.ContentStreamBase;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.common.util.SimpleOrderedMap;
import org.apache.solr.common.util.StrUtils;
@@ -64,7 +63,6 @@ import org.apache.solr.request.SolrQuery
import org.apache.solr.request.SolrQueryRequestBase;
import org.apache.solr.request.SolrRequestHandler;
import org.apache.solr.request.SolrRequestInfo;
-import org.apache.solr.response.BinaryQueryResponseWriter;
import org.apache.solr.response.QueryResponseWriter;
import org.apache.solr.response.QueryResponseWriterUtil;
import org.apache.solr.response.SolrQueryResponse;
@@ -83,6 +81,7 @@ import javax.servlet.http.HttpServletReq
import javax.servlet.http.HttpServletResponse;
import java.io.ByteArrayInputStream;
+import java.io.EOFException;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
@@ -203,15 +202,17 @@ public class SolrDispatchFilter extends
}
public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain, boolean retry) throws IOException, ServletException {
- if( abortErrorMessage != null ) {
- ((HttpServletResponse)response).sendError( 500, abortErrorMessage );
+
+ if (abortErrorMessage != null) {
+ sendError((HttpServletResponse) response, 500, abortErrorMessage);
return;
}
-
+
if (this.cores == null) {
- ((HttpServletResponse)response).sendError( 503, "Server is shutting down or failed to initialize" );
+ sendError((HttpServletResponse) response, 503, "Server is shutting down or failed to initialize");
return;
}
+
CoreContainer cores = this.cores;
SolrCore core = null;
SolrQueryRequest solrReq = null;
@@ -298,7 +299,7 @@ public class SolrDispatchFilter extends
if (core == null && cores.isZooKeeperAware()) {
// we couldn't find the core - lets make sure a collection was not specified instead
- core = getCoreByCollection(cores, corename, path);
+ core = getCoreByCollection(cores, corename);
if (core != null) {
// we found a core, update the path
@@ -342,26 +343,31 @@ public class SolrDispatchFilter extends
// get or create/cache the parser for the core
SolrRequestParsers parser = config.getRequestParsers();
- // 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()) ) {
- // avoid endless loop - pass through to Restlet via webapp
- chain.doFilter(request, response);
- } else {
- // forward rewritten URI (without path prefix and core/collection name) to Restlet
- req.getRequestDispatcher(path).forward(request, response);
- }
- return;
- }
// Determine the handler from the url path if not set
// (we might already have selected the cores handler)
if( handler == null && path.length() > 1 ) { // don't match "" or "/" as valid path
handler = core.getRequestHandler( path );
+
+ if(handler == null){
+ //may be a restlet path
+ // Handle /schema/* paths via Restlet
+ if( path.equals("/schema") || path.startsWith("/schema/")) {
+ solrReq = parser.parse(core, path, req);
+ SolrRequestInfo.setRequestInfo(new SolrRequestInfo(solrReq, new SolrQueryResponse()));
+ if( path.equals(req.getServletPath()) ) {
+ // avoid endless loop - pass through to Restlet via webapp
+ chain.doFilter(request, response);
+ } else {
+ // forward rewritten URI (without path prefix and core/collection name) to Restlet
+ req.getRequestDispatcher(path).forward(request, response);
+ }
+ return;
+ }
+
+ }
// no handler yet but allowed to handle select; let's check
+
if( handler == null && parser.isHandleSelect() ) {
if( "/select".equals( path ) || "/select/".equals( path ) ) {
solrReq = parser.parse( core, path, req );
@@ -520,7 +526,7 @@ public class SolrDispatchFilter extends
String queryString = req.getQueryString();
urlstr += queryString == null ? "" : "?" + queryString;
-
+
URL url = new URL(urlstr);
boolean isPostOrPutRequest = "POST".equals(req.getMethod()) || "PUT".equals(req.getMethod());
@@ -634,9 +640,7 @@ public class SolrDispatchFilter extends
boolean byCoreName, boolean activeReplicas) {
String coreUrl;
Set<String> liveNodes = clusterState.getLiveNodes();
- Iterator<Slice> it = slices.iterator();
- while (it.hasNext()) {
- Slice slice = it.next();
+ for (Slice slice : slices) {
Map<String,Replica> sliceShards = slice.getReplicasMap();
for (ZkNodeProps nodeProps : sliceShards.values()) {
ZkCoreNodeProps coreNodeProps = new ZkCoreNodeProps(nodeProps);
@@ -680,13 +684,12 @@ public class SolrDispatchFilter extends
}
return slices;
}
-
- private SolrCore getCoreByCollection(CoreContainer cores, String corename, String path) {
- String collection = corename;
+
+ private SolrCore getCoreByCollection(CoreContainer cores, String corename) {
ZkStateReader zkStateReader = cores.getZkController().getZkStateReader();
ClusterState clusterState = zkStateReader.getClusterState();
- Map<String,Slice> slices = clusterState.getActiveSlicesMap(collection);
+ Map<String,Slice> slices = clusterState.getActiveSlicesMap(corename);
if (slices == null) {
return null;
}
@@ -696,9 +699,9 @@ public class SolrDispatchFilter extends
done:
for (Entry<String,Slice> entry : entries) {
// first see if we have the leader
- ZkNodeProps leaderProps = clusterState.getLeader(collection, entry.getKey());
+ ZkNodeProps leaderProps = clusterState.getLeader(corename, entry.getKey());
if (leaderProps != null) {
- core = checkProps(cores, path, leaderProps);
+ core = checkProps(cores, leaderProps);
}
if (core != null) {
break done;
@@ -709,7 +712,7 @@ public class SolrDispatchFilter extends
Set<Entry<String,Replica>> shardEntries = shards.entrySet();
for (Entry<String,Replica> shardEntry : shardEntries) {
Replica zkProps = shardEntry.getValue();
- core = checkProps(cores, path, zkProps);
+ core = checkProps(cores, zkProps);
if (core != null) {
break done;
}
@@ -718,8 +721,7 @@ public class SolrDispatchFilter extends
return core;
}
- private SolrCore checkProps(CoreContainer cores, String path,
- ZkNodeProps zkProps) {
+ private SolrCore checkProps(CoreContainer cores, ZkNodeProps zkProps) {
String corename;
SolrCore core = null;
if (cores.getZkController().getNodeName().equals(zkProps.getStr(ZkStateReader.NODE_NAME_PROP))) {
@@ -746,23 +748,27 @@ public class SolrDispatchFilter extends
private void writeResponse(SolrQueryResponse solrRsp, ServletResponse response,
QueryResponseWriter responseWriter, SolrQueryRequest solrReq, Method reqMethod)
throws IOException {
+ try {
+ // Now write it out
+ final String ct = responseWriter.getContentType(solrReq, solrRsp);
+ // don't call setContentType on null
+ if (null != ct) response.setContentType(ct);
+
+ if (solrRsp.getException() != null) {
+ NamedList info = new SimpleOrderedMap();
+ int code = ResponseUtils.getErrorInfo(solrRsp.getException(), info, log);
+ solrRsp.add("error", info);
+ ((HttpServletResponse) response).setStatus(code);
+ }
- // Now write it out
- final String ct = responseWriter.getContentType(solrReq, solrRsp);
- // don't call setContentType on null
- if (null != ct) response.setContentType(ct);
-
- if (solrRsp.getException() != null) {
- NamedList info = new SimpleOrderedMap();
- int code = ResponseUtils.getErrorInfo(solrRsp.getException(), info, log);
- solrRsp.add("error", info);
- ((HttpServletResponse) response).setStatus(code);
+ if (Method.HEAD != reqMethod) {
+ QueryResponseWriterUtil.writeQueryResponse(response.getOutputStream(), responseWriter, solrReq, solrRsp, ct);
+ }
+ //else http HEAD request, nothing to write out, waited this long just to get ContentType
}
-
- if (Method.HEAD != reqMethod) {
- QueryResponseWriterUtil.writeQueryResponse(response.getOutputStream(), responseWriter, solrReq, solrRsp, ct);
+ catch (EOFException e) {
+ log.info("Unable to write response, client closed connection or we are shutting down", e);
}
- //else http HEAD request, nothing to write out, waited this long just to get ContentType
}
protected void execute( HttpServletRequest req, SolrRequestHandler handler, SolrQueryRequest sreq, SolrQueryResponse rsp) {
@@ -773,7 +779,16 @@ public class SolrDispatchFilter extends
sreq.getCore().execute( handler, sreq, rsp );
}
- protected void sendError(SolrCore core,
+ private void sendError(HttpServletResponse response, int code, String message) throws IOException {
+ try {
+ response.sendError(code, message);
+ }
+ catch (EOFException e) {
+ log.info("Unable to write error response, client closed connection or we are shutting down", e);
+ }
+ }
+
+ protected void sendError(SolrCore core,
SolrQueryRequest req,
ServletRequest request,
HttpServletResponse response,
@@ -814,7 +829,7 @@ public class SolrDispatchFilter extends
if (exp != null) {
SimpleOrderedMap info = new SimpleOrderedMap();
int code = ResponseUtils.getErrorInfo(ex, info, log);
- response.sendError(code, info.toString());
+ sendError(response, code, info.toString());
}
} finally {
if (core == null && localCore != null) {
Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/servlet/SolrRequestParsers.java Mon Dec 1 17:25:39 2014
@@ -53,6 +53,7 @@ import org.apache.solr.common.util.Conte
import org.apache.solr.common.util.ContentStreamBase;
import org.apache.solr.common.util.FastInputStream;
import org.apache.solr.core.CoreContainer;
+import org.apache.solr.core.RequestHandlers;
import org.apache.solr.core.SolrConfig;
import org.apache.solr.core.SolrCore;
import org.apache.solr.request.SolrQueryRequest;
@@ -149,7 +150,7 @@ public class SolrRequestParsers
// Handlers and login will want to know the path. If it contains a ':'
// the handler could use it for RESTful URLs
- sreq.getContext().put( "path", path );
+ sreq.getContext().put( "path", RequestHandlers.normalize(path) );
sreq.getContext().put("httpMethod", req.getMethod());
if(addHttpRequestToContext) {
Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingInfixLookupFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingInfixLookupFactory.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingInfixLookupFactory.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingInfixLookupFactory.java Mon Dec 1 17:25:39 2014
@@ -19,11 +19,15 @@ package org.apache.solr.spelling.suggest
import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.search.suggest.Lookup;
import org.apache.lucene.search.suggest.analyzing.AnalyzingInfixSuggester;
import org.apache.lucene.store.FSDirectory;
+import org.apache.lucene.util.BytesRef;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.SolrCore;
import org.apache.solr.schema.FieldType;
@@ -92,9 +96,26 @@ public class AnalyzingInfixLookupFactory
: AnalyzingInfixSuggester.DEFAULT_MIN_PREFIX_CHARS;
try {
- return new AnalyzingInfixSuggester(core.getSolrConfig().luceneMatchVersion,
- FSDirectory.open(new File(indexPath).toPath()), indexAnalyzer,
- queryAnalyzer, minPrefixChars, true);
+ return new AnalyzingInfixSuggester(FSDirectory.open(new File(indexPath).toPath()), indexAnalyzer,
+ queryAnalyzer, minPrefixChars, true) {
+ @Override
+ public List<LookupResult> lookup(CharSequence key, Set<BytesRef> contexts, int num, boolean allTermsRequired, boolean doHighlight) throws IOException {
+ List<LookupResult> res = super.lookup(key, contexts, num, allTermsRequired, doHighlight);
+ if (doHighlight) {
+ List<LookupResult> res2 = new ArrayList<>();
+ for(LookupResult hit : res) {
+ res2.add(new LookupResult(hit.highlightKey.toString(),
+ hit.highlightKey,
+ hit.value,
+ hit.payload,
+ hit.contexts));
+ }
+ res = res2;
+ }
+
+ return res;
+ }
+ };
} catch (IOException e) {
throw new RuntimeException();
}
Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/spelling/suggest/fst/BlendedInfixLookupFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/spelling/suggest/fst/BlendedInfixLookupFactory.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/spelling/suggest/fst/BlendedInfixLookupFactory.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/spelling/suggest/fst/BlendedInfixLookupFactory.java Mon Dec 1 17:25:39 2014
@@ -19,13 +19,17 @@ package org.apache.solr.spelling.suggest
import java.io.File;
import java.io.IOException;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Set;
import org.apache.lucene.analysis.Analyzer;
import org.apache.lucene.search.suggest.Lookup;
import org.apache.lucene.search.suggest.analyzing.AnalyzingInfixSuggester;
-import org.apache.lucene.search.suggest.analyzing.BlendedInfixSuggester.BlenderType;
import org.apache.lucene.search.suggest.analyzing.BlendedInfixSuggester;
+import org.apache.lucene.search.suggest.analyzing.BlendedInfixSuggester.BlenderType;
import org.apache.lucene.store.FSDirectory;
+import org.apache.lucene.util.BytesRef;
import org.apache.solr.common.util.NamedList;
import org.apache.solr.core.SolrCore;
import org.apache.solr.schema.FieldType;
@@ -97,10 +101,27 @@ public class BlendedInfixLookupFactory e
: BlendedInfixSuggester.DEFAULT_NUM_FACTOR;
try {
- return new BlendedInfixSuggester(core.getSolrConfig().luceneMatchVersion,
- FSDirectory.open(new File(indexPath).toPath()),
+ return new BlendedInfixSuggester(FSDirectory.open(new File(indexPath).toPath()),
indexAnalyzer, queryAnalyzer, minPrefixChars,
- blenderType, numFactor, true);
+ blenderType, numFactor, true) {
+ @Override
+ public List<LookupResult> lookup(CharSequence key, Set<BytesRef> contexts, int num, boolean allTermsRequired, boolean doHighlight) throws IOException {
+ List<LookupResult> res = super.lookup(key, contexts, num, allTermsRequired, doHighlight);
+ if (doHighlight) {
+ List<LookupResult> res2 = new ArrayList<>();
+ for(LookupResult hit : res) {
+ res2.add(new LookupResult(hit.highlightKey.toString(),
+ hit.highlightKey,
+ hit.value,
+ hit.payload,
+ hit.contexts));
+ }
+ res = res2;
+ }
+
+ return res;
+ }
+ };
} catch (IOException e) {
throw new RuntimeException();
}
Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/BufferStore.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/BufferStore.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/BufferStore.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/BufferStore.java Mon Dec 1 17:25:39 2014
@@ -21,6 +21,7 @@ import java.util.concurrent.ArrayBlockin
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentMap;
+import java.util.concurrent.atomic.AtomicLong;
/**
* @lucene.experimental
@@ -45,7 +46,14 @@ public class BufferStore implements Stor
private final int bufferSize;
+ private final AtomicLong shardBuffercacheAllocate;
+ private final AtomicLong shardBuffercacheLost;
+
public synchronized static void initNewBuffer(int bufferSize, long totalAmount) {
+ initNewBuffer(bufferSize, totalAmount, null);
+ }
+
+ public synchronized static void initNewBuffer(int bufferSize, long totalAmount, Metrics metrics) {
if (totalAmount == 0) {
return;
}
@@ -55,13 +63,21 @@ public class BufferStore implements Stor
if (count > Integer.MAX_VALUE) {
count = Integer.MAX_VALUE;
}
- BufferStore store = new BufferStore(bufferSize, (int) count);
+ AtomicLong shardBuffercacheLost = new AtomicLong(0);
+ AtomicLong shardBuffercacheAllocate = new AtomicLong(0);
+ if (metrics != null) {
+ shardBuffercacheLost = metrics.shardBuffercacheLost;
+ shardBuffercacheAllocate = metrics.shardBuffercacheAllocate;
+ }
+ BufferStore store = new BufferStore(bufferSize, (int) count, shardBuffercacheAllocate, shardBuffercacheLost);
bufferStores.put(bufferSize, store);
}
}
- private BufferStore(int bufferSize, int count) {
+ private BufferStore(int bufferSize, int count, AtomicLong shardBuffercacheAllocate, AtomicLong shardBuffercacheLost) {
this.bufferSize = bufferSize;
+ this.shardBuffercacheAllocate = shardBuffercacheAllocate;
+ this.shardBuffercacheLost = shardBuffercacheLost;
buffers = setupBuffers(bufferSize, count);
}
@@ -102,14 +118,17 @@ public class BufferStore implements Stor
checkReturn(buffers.offer(buffer));
}
- private void checkReturn(boolean offer) {
-
+ private void checkReturn(boolean accepted) {
+ if (!accepted) {
+ shardBuffercacheLost.incrementAndGet();
+ }
}
private byte[] newBuffer(byte[] buf) {
if (buf != null) {
return buf;
}
+ shardBuffercacheAllocate.incrementAndGet();
return new byte[bufferSize];
}
}
Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/Metrics.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/Metrics.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/Metrics.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/store/blockcache/Metrics.java Mon Dec 1 17:25:39 2014
@@ -49,9 +49,7 @@ public class Metrics implements Updater
public AtomicLong recordWrites = new AtomicLong(0);
public AtomicLong queriesExternal = new AtomicLong(0);
public AtomicLong queriesInternal = new AtomicLong(0);
- public AtomicLong shardBuffercacheAllocate1024 = new AtomicLong(0);
- public AtomicLong shardBuffercacheAllocate8192 = new AtomicLong(0);
- public AtomicLong shardBuffercacheAllocateOther = new AtomicLong(0);
+ public AtomicLong shardBuffercacheAllocate = new AtomicLong(0);
public AtomicLong shardBuffercacheLost = new AtomicLong(0);
public Map<String,MethodCall> methodCalls = new ConcurrentHashMap<>();
@@ -101,6 +99,8 @@ public class Metrics implements Updater
metricsRecord.setMetric("record.writes", getPerSecond(recordWrites.getAndSet(0), seconds));
metricsRecord.setMetric("query.external", getPerSecond(queriesExternal.getAndSet(0), seconds));
metricsRecord.setMetric("query.internal", getPerSecond(queriesInternal.getAndSet(0), seconds));
+ metricsRecord.setMetric("buffercache.allocations", getPerSecond(shardBuffercacheAllocate.getAndSet(0), seconds));
+ metricsRecord.setMetric("buffercache.lost", getPerSecond(shardBuffercacheLost.getAndSet(0), seconds));
for (Entry<String,MethodCall> entry : methodCalls.entrySet()) {
String key = entry.getKey();
MethodCall value = entry.getValue();
Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/DirectUpdateHandler2.java Mon Dec 1 17:25:39 2014
@@ -165,7 +165,7 @@ public class DirectUpdateHandler2 extend
} catch (SolrException e) {
throw e;
} catch (RuntimeException t) {
- throw new SolrException(SolrException.ErrorCode.SERVER_ERROR,
+ throw new SolrException(SolrException.ErrorCode.BAD_REQUEST,
String.format(Locale.ROOT, "Exception writing document id %s to the index; possible analysis error.",
cmd.getPrintableId()), t);
}
Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java Mon Dec 1 17:25:39 2014
@@ -47,6 +47,7 @@ import org.apache.solr.cloud.Distributed
import org.apache.solr.cloud.LeaderInitiatedRecoveryThread;
import org.apache.solr.cloud.Overseer;
import org.apache.solr.cloud.ZkController;
+import org.apache.solr.cloud.overseer.OverseerAction;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.SolrInputDocument;
@@ -77,7 +78,6 @@ import org.apache.solr.request.SolrReque
import org.apache.solr.response.SolrQueryResponse;
import org.apache.solr.schema.IndexSchema;
import org.apache.solr.schema.SchemaField;
-import org.apache.solr.schema.TrieDateField;
import org.apache.solr.update.AddUpdateCommand;
import org.apache.solr.update.CommitUpdateCommand;
import org.apache.solr.update.DeleteUpdateCommand;
@@ -542,7 +542,7 @@ public class DistributedUpdateProcessor
if (ruleExpiryLock.tryLock(10, TimeUnit.MILLISECONDS)) {
log.info("Going to expire routing rule");
try {
- Map<String, Object> map = ZkNodeProps.makeMap(Overseer.QUEUE_OPERATION, Overseer.OverseerAction.REMOVEROUTINGRULE.toLower(),
+ Map<String, Object> map = ZkNodeProps.makeMap(Overseer.QUEUE_OPERATION, OverseerAction.REMOVEROUTINGRULE.toLower(),
ZkStateReader.COLLECTION_PROP, collection,
ZkStateReader.SHARD_ID_PROP, myShardId,
"routeKey", routeKey + "!");
Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/MaxFieldValueUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/MaxFieldValueUpdateProcessorFactory.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/MaxFieldValueUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/MaxFieldValueUpdateProcessorFactory.java Mon Dec 1 17:25:39 2014
@@ -59,8 +59,9 @@ public final class MaxFieldValueUpdatePr
public Collection pickSubset(Collection values) {
Collection result = values;
try {
- result = Collections.singletonList
- (Collections.max(values));
+ // NOTE: the extra cast to Object is needed to prevent compile
+ // errors on Eclipse Compiler (ecj) used for javadoc lint
+ result = Collections.singletonList((Object) Collections.max(values));
} catch (ClassCastException e) {
throw new SolrException
(BAD_REQUEST,
Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/MinFieldValueUpdateProcessorFactory.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/MinFieldValueUpdateProcessorFactory.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/MinFieldValueUpdateProcessorFactory.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/update/processor/MinFieldValueUpdateProcessorFactory.java Mon Dec 1 17:25:39 2014
@@ -59,8 +59,9 @@ public final class MinFieldValueUpdatePr
public Collection pickSubset(Collection values) {
Collection result = values;
try {
- result = Collections.singletonList
- (Collections.min(values));
+ // NOTE: the extra cast to Object is needed to prevent compile
+ // errors on Eclipse Compiler (ecj) used for javadoc lint
+ result = Collections.singletonList((Object) Collections.min(values));
} catch (ClassCastException e) {
throw new SolrException
(BAD_REQUEST,
Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/util/CommandOperation.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/util/CommandOperation.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/util/CommandOperation.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/util/CommandOperation.java Mon Dec 1 17:25:39 2014
@@ -210,5 +210,19 @@ public class CommandOperation {
}
}
+ public CommandOperation getCopy(){
+ return new CommandOperation(name,commandData);
+ }
+
+ public Map getMap(String key, Map def) {
+ Object o =getMapVal(key);
+ if(o==null) return def;
+ if ( !(o instanceof Map)) {
+ addError(MessageFormat.format("''{0}'' must be a map", key));
+ return def;
+ } else {
+ return (Map) o;
+ }
+ }
}
Modified: lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/util/SolrCLI.java
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/util/SolrCLI.java?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/util/SolrCLI.java (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/java/org/apache/solr/util/SolrCLI.java Mon Dec 1 17:25:39 2014
@@ -43,6 +43,7 @@ import org.apache.commons.cli.Option;
import org.apache.commons.cli.OptionBuilder;
import org.apache.commons.cli.Options;
import org.apache.commons.cli.ParseException;
+import org.apache.commons.io.FileUtils;
import org.apache.http.HttpEntity;
import org.apache.http.HttpResponse;
import org.apache.http.NoHttpResponseException;
@@ -54,7 +55,6 @@ import org.apache.http.client.ResponseHa
import org.apache.http.client.methods.HttpGet;
import org.apache.http.client.utils.URIBuilder;
import org.apache.http.conn.ConnectTimeoutException;
-import org.apache.http.impl.client.BasicResponseHandler;
import org.apache.http.util.EntityUtils;
import org.apache.log4j.Level;
import org.apache.log4j.LogManager;
@@ -204,6 +204,8 @@ public class SolrCLI {
return new ApiTool();
else if ("create_collection".equals(toolType))
return new CreateCollectionTool();
+ else if ("create_core".equals(toolType))
+ return new CreateCoreTool();
// If you add a built-in tool to this class, add it here to avoid
// classpath scanning
@@ -223,6 +225,7 @@ public class SolrCLI {
formatter.printHelp("status", getToolOptions(new StatusTool()));
formatter.printHelp("api", getToolOptions(new ApiTool()));
formatter.printHelp("create_collection", getToolOptions(new CreateCollectionTool()));
+ formatter.printHelp("create_core", getToolOptions(new CreateCoreTool()));
List<Class<Tool>> toolClasses = findToolClassesInPackage("org.apache.solr.util");
for (Class<Tool> next : toolClasses) {
@@ -701,13 +704,13 @@ public class SolrCLI {
}
} // end ApiTool class
+ private static final String DEFAULT_CONFIG_SET = "data_driven_schema_configs";
+
/**
* Supports create_collection command in the bin/solr script.
*/
public static class CreateCollectionTool implements Tool {
- private static final String DEFAULT_CONFIG_SET = "data_driven_schema_configs";
-
@Override
public String getName() {
return "create_collection";
@@ -796,8 +799,12 @@ public class SolrCLI {
Map<String,Object> status = statusTool.reportStatus(solrUrl, systemInfo, httpClient);
Map<String,Object> cloud = (Map<String, Object>)status.get("cloud");
- if (cloud == null)
- throw new IllegalArgumentException("Solr server at "+solrUrl+" not running in SolrCloud mode!");
+ if (cloud == null) {
+ System.err.println("\nERROR: Solr at "+solrUrl+
+ " is running in standalone server mode, please use the create_core command instead;\n" +
+ "create_collection can only be used when running in SolrCloud mode.\n");
+ return 1;
+ }
String zookeeper = (String) cloud.get("ZooKeeper");
if (zookeeper.endsWith("(embedded)")) {
@@ -869,7 +876,7 @@ public class SolrCLI {
String collectionName = cli.getOptionValue("name");
String createCollectionUrl =
String.format(Locale.ROOT,
- "%s/admin/collections?action=CREATE&name=%s&numShards=%d&replicationFactor=%d&maxShardsPerNode=%d&configSet=%s",
+ "%s/admin/collections?action=CREATE&name=%s&numShards=%d&replicationFactor=%d&maxShardsPerNode=%d&collection.configName=%s",
baseUrl,
collectionName,
numShards,
@@ -883,6 +890,7 @@ public class SolrCLI {
CharArr arr = new CharArr();
new JSONWriter(arr, 2).write(json);
System.out.println(arr.toString());
+ System.out.println();
}
protected int optionAsInt(CommandLine cli, String option, int defaultVal) {
@@ -1164,5 +1172,112 @@ public class SolrCLI {
new JSONWriter(arr, 2).write(report);
System.out.println(arr.toString());
}
- } // end HealthcheckTool
+ } // end HealthcheckTool
+
+ public static class CreateCoreTool implements Tool {
+
+ @Override
+ public String getName() {
+ return "create_core";
+ }
+
+ @SuppressWarnings("static-access")
+ @Override
+ public Option[] getOptions() {
+ return new Option[] {
+ OptionBuilder
+ .withArgName("URL")
+ .hasArg()
+ .isRequired(false)
+ .withDescription("Base Solr URL, default is http://localhost:8983/solr")
+ .create("solrUrl"),
+ OptionBuilder
+ .withArgName("NAME")
+ .hasArg()
+ .isRequired(true)
+ .withDescription("Name of the core to create.")
+ .create("name"),
+ OptionBuilder
+ .withArgName("CONFIG")
+ .hasArg()
+ .isRequired(false)
+ .withDescription("Name of the configuration for this core; default is "+DEFAULT_CONFIG_SET)
+ .create("config"),
+ OptionBuilder
+ .withArgName("DIR")
+ .hasArg()
+ .isRequired(true)
+ .withDescription("Path to configsets directory on the local system.")
+ .create("configsetsDir")
+ };
+ }
+
+ @Override
+ public int runTool(CommandLine cli) throws Exception {
+
+ String solrUrl = cli.getOptionValue("solrUrl", "http://localhost:8983/solr");
+ if (!solrUrl.endsWith("/"))
+ solrUrl += "/";
+
+ File configsetsDir = new File(cli.getOptionValue("configsetsDir"));
+ if (!configsetsDir.isDirectory())
+ throw new FileNotFoundException(configsetsDir.getAbsolutePath()+" not found!");
+
+ String configSet = cli.getOptionValue("config", DEFAULT_CONFIG_SET);
+ File configSetDir = new File(configsetsDir, configSet);
+ if (!configSetDir.isDirectory())
+ throw new FileNotFoundException("Specified config "+configSet+
+ " not found in "+configsetsDir.getAbsolutePath());
+
+ File confDir = new File(configSetDir,"conf");
+
+ String coreName = cli.getOptionValue("name");
+
+ String systemInfoUrl = solrUrl+"admin/info/system";
+ HttpClient httpClient = getHttpClient();
+ String solrHome = null;
+ try {
+ Map<String,Object> systemInfo = getJson(httpClient, systemInfoUrl, 2);
+ if ("solrcloud".equals(systemInfo.get("mode"))) {
+ System.err.println("\nERROR: Solr at "+solrUrl+
+ " is running in SolrCloud mode, please use create_collection command instead.\n");
+ return 1;
+ }
+
+ // convert raw JSON into user-friendly output
+ solrHome = (String)systemInfo.get("solr_home");
+ if (solrHome == null) {
+ solrHome = configsetsDir.getParentFile().getAbsolutePath();
+ }
+ } finally {
+ closeHttpClient(httpClient);
+ }
+
+ File coreInstanceDir = new File(solrHome, coreName);
+ if (!coreInstanceDir.isDirectory()) {
+ coreInstanceDir.mkdirs();
+ if (!coreInstanceDir.isDirectory())
+ throw new IOException("Failed to create new core instance directory: "+coreInstanceDir.getAbsolutePath());
+ }
+
+ FileUtils.copyDirectoryToDirectory(confDir, coreInstanceDir);
+
+ String createCoreUrl =
+ String.format(Locale.ROOT,
+ "%sadmin/cores?action=CREATE&name=%s&instanceDir=%s",
+ solrUrl,
+ coreName,
+ coreName);
+
+ System.out.println("Creating new core '"+coreName+"' using command:\n\n"+createCoreUrl+"\n");
+
+ Map<String,Object> json = getJson(createCoreUrl);
+ CharArr arr = new CharArr();
+ new JSONWriter(arr, 2).write(json);
+ System.out.println(arr.toString());
+ System.out.println();
+
+ return 0;
+ }
+ } // end CreateCoreTool class
}
Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-sorts.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-sorts.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-sorts.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-sorts.xml Mon Dec 1 17:25:39 2014
@@ -201,9 +201,10 @@ NOTE: Tests expect every field in this s
<fieldtype name="str_dv_last" class="solr.StrField" stored="true" indexed="false" docValues="true" sortMissingLast="true"/>
<fieldtype name="str_dv_first" class="solr.StrField" stored="true" indexed="false" docValues="true" sortMissingFirst="true"/>
- <fieldtype name="bin" class="solr.SortableBinaryField" stored="true" indexed="true" />
- <fieldtype name="bin_last" class="solr.SortableBinaryField" stored="true" indexed="true" sortMissingLast="true"/>
- <fieldtype name="bin_first" class="solr.SortableBinaryField" stored="true" indexed="true" sortMissingFirst="true"/>
+ <!-- note: all 'binary' fields have docvalues, because this fieldtype doesnt support indexing -->
+ <fieldtype name="bin" class="solr.SortableBinaryField" stored="true" indexed="true" docValues="true"/>
+ <fieldtype name="bin_last" class="solr.SortableBinaryField" stored="true" indexed="true" docValues="true" sortMissingLast="true"/>
+ <fieldtype name="bin_first" class="solr.SortableBinaryField" stored="true" indexed="true" docValues="true" sortMissingFirst="true"/>
<fieldtype name="bin_dv" class="solr.SortableBinaryField" stored="true" indexed="false" docValues="true"/>
<fieldtype name="bin_dv_last" class="solr.SortableBinaryField" stored="true" indexed="false" docValues="true" sortMissingLast="true"/>
<fieldtype name="bin_dv_first" class="solr.SortableBinaryField" stored="true" indexed="false" docValues="true" sortMissingFirst="true"/>
Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-spatial.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-spatial.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-spatial.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-spatial.xml Mon Dec 1 17:25:39 2014
@@ -65,6 +65,8 @@
<field name="pointvector" type="pointvector" />
<field name="bbox" type="bbox" />
+ <dynamicField name="bboxD_*" type="bbox" indexed="true" />
+
</fields>
<uniqueKey>id</uniqueKey>
Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-trie.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-trie.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-trie.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema-trie.xml Mon Dec 1 17:25:39 2014
@@ -219,7 +219,7 @@
See the Java Regular Expression documentation for more
infomation on pattern and replacement string syntax.
- http://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html
+ http://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html
-->
<filter class="solr.PatternReplaceFilterFactory"
pattern="([^a-z])" replacement="" replace="all"
Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema11.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema11.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema11.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/schema11.xml Mon Dec 1 17:25:39 2014
@@ -214,7 +214,7 @@
See the Java Regular Expression documentation for more
infomation on pattern and replacement string syntax.
- http://docs.oracle.com/javase/7/docs/api/java/util/regex/package-summary.html
+ http://docs.oracle.com/javase/8/docs/api/java/util/regex/package-summary.html
-->
<filter class="solr.PatternReplaceFilterFactory"
pattern="([^a-z])" replacement="" replace="all"
@@ -330,6 +330,7 @@ valued. -->
Longer patterns will be matched first. if equal size patterns
both match, the first appearing in the schema will be used. -->
<dynamicField name="*_s" type="string" indexed="true" stored="true"/>
+ <dynamicField name="*_s_dv" type="string" indexed="true" stored="true" docValues="true"/>
<dynamicField name="*_ss" type="string" indexed="true" stored="true" multiValued="true"/>
<dynamicField name="*_sS" type="string" indexed="false" stored="true"/>
<dynamicField name="*_i" type="int" indexed="true" stored="true"/>
Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-analytics-query.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-analytics-query.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-analytics-query.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-analytics-query.xml Mon Dec 1 17:25:39 2014
@@ -185,7 +185,6 @@
<queryResponseWriter name="xml" default="true"
class="solr.XMLResponseWriter" />
- <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />
<!-- An alternate set representation that uses an integer hash to store filters (sets of docids).
If the set cardinality <= maxSize elements, then HashDocSet will be used instead of the bitset
@@ -201,11 +200,6 @@ based HashBitset. -->
<bool name="httpCaching">true</bool>
</requestHandler>
- <requestHandler name="/get" class="solr.RealTimeGetHandler">
- <lst name="defaults">
- <str name="omitHeader">true</str>
- </lst>
- </requestHandler>
<requestHandler name="dismax" class="solr.SearchHandler" >
<lst name="defaults">
@@ -230,8 +224,6 @@ based HashBitset. -->
<requestHandler name="mock" class="org.apache.solr.core.MockQuerySenderListenerReqHandler"/>
- <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
-
<!-- test query parameter defaults -->
<requestHandler name="defaults" class="solr.StandardRequestHandler">
<lst name="defaults">
Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-collapseqparser.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-collapseqparser.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-collapseqparser.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-collapseqparser.xml Mon Dec 1 17:25:39 2014
@@ -185,8 +185,6 @@
<queryResponseWriter name="xml" default="true"
class="solr.XMLResponseWriter" />
- <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />
-
<!-- An alternate set representation that uses an integer hash to store filters (sets of docids).
If the set cardinality <= maxSize elements, then HashDocSet will be used instead of the bitset
based HashBitset. -->
@@ -201,12 +199,6 @@ based HashBitset. -->
<bool name="httpCaching">true</bool>
</requestHandler>
- <requestHandler name="/get" class="solr.RealTimeGetHandler">
- <lst name="defaults">
- <str name="omitHeader">true</str>
- </lst>
- </requestHandler>
-
<requestHandler name="dismax" class="solr.SearchHandler" >
<lst name="defaults">
<str name="defType">dismax</str>
@@ -230,8 +222,6 @@ based HashBitset. -->
<requestHandler name="mock" class="org.apache.solr.core.MockQuerySenderListenerReqHandler"/>
- <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
-
<!-- test query parameter defaults -->
<requestHandler name="defaults" class="solr.StandardRequestHandler">
<lst name="defaults">
Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-components-name.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-components-name.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-components-name.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-components-name.xml Mon Dec 1 17:25:39 2014
@@ -50,8 +50,6 @@
</arr>
</requestHandler>
- <requestHandler name="/update" class="solr.UpdateRequestHandler" />
-
<!-- enable streaming for testing... -->
<requestDispatcher handleSelect="true" >
<requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048" />
Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-deeppaging.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-deeppaging.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-deeppaging.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-deeppaging.xml Mon Dec 1 17:25:39 2014
@@ -45,15 +45,6 @@
<useFilterForSortedQuery>${solr.test.useFilterForSortedQuery}</useFilterForSortedQuery>
</query>
-
- <requestHandler name="/get" class="solr.RealTimeGetHandler">
- <lst name="defaults">
- <str name="omitHeader">true</str>
- </lst>
- </requestHandler>
- <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />
<requestHandler name="/select" class="solr.SearchHandler" default="true" />
- <requestHandler name="/update" class="solr.UpdateRequestHandler" />
- <requestHandler name="/admin/" class="solr.admin.AdminHandlers" />
</config>
Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-doc-expire-update-processor.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-doc-expire-update-processor.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-doc-expire-update-processor.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-doc-expire-update-processor.xml Mon Dec 1 17:25:39 2014
@@ -38,15 +38,7 @@
</updateLog>
</updateHandler>
- <requestHandler name="/get" class="solr.RealTimeGetHandler">
- <lst name="defaults">
- <str name="omitHeader">true</str>
- </lst>
- </requestHandler>
- <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />
<requestHandler name="/select" class="solr.SearchHandler" default="true" />
- <requestHandler name="/update" class="solr.UpdateRequestHandler" />
- <requestHandler name="/admin/" class="solr.admin.AdminHandlers" />
<updateRequestProcessorChain name="convert-ttl-defaults">
<processor class="solr.processor.DocExpirationUpdateProcessorFactory">
Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-externalversionconstraint.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-externalversionconstraint.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
Binary files - no diff available.
Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-implicitproperties.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-implicitproperties.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-implicitproperties.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-implicitproperties.xml Mon Dec 1 17:25:39 2014
@@ -48,8 +48,6 @@
</query>
- <requestHandler name="/admin/" class="solr.admin.AdminHandlers" />
-
<requestDispatcher handleSelect="false">
<httpCaching never304="true"/>
</requestDispatcher>
@@ -66,8 +64,6 @@
</lst>
</requestHandler>
- <requestHandler name="/update" class="solr.UpdateRequestHandler">
- </requestHandler>
<queryResponseWriter name="json" class="solr.JSONResponseWriter">
<!-- For the purposes of the tutorial, JSON responses are written as
Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-managed-schema.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-managed-schema.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-managed-schema.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-managed-schema.xml Mon Dec 1 17:25:39 2014
@@ -39,14 +39,6 @@
<bool name="httpCaching">true</bool>
</requestHandler>
- <requestHandler name="/get" class="solr.RealTimeGetHandler">
- <lst name="defaults">
- <str name="omitHeader">true</str>
- </lst>
- </requestHandler>
- <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
- <requestHandler name="/update" class="solr.UpdateRequestHandler"/>
- <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />
<requestHandler name="/dump" class="DumpRequestHandler" initParams="a">
<lst name="defaults">
Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master-throttled.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master-throttled.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master-throttled.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master-throttled.xml Mon Dec 1 17:25:39 2014
@@ -55,8 +55,6 @@
</lst>
</requestHandler>
- <requestHandler name="/update" class="solr.UpdateRequestHandler" />
-
<!-- enable streaming for testing... -->
<requestDispatcher handleSelect="true">
<requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048"/>
Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master1-keepOneBackup.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master1-keepOneBackup.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master1-keepOneBackup.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master1-keepOneBackup.xml Mon Dec 1 17:25:39 2014
@@ -36,7 +36,6 @@
<str name="maxNumberOfBackups">1</str>
</requestHandler>
- <requestHandler name="/update" class="solr.UpdateRequestHandler" />
<!-- enable streaming for testing... -->
<requestDispatcher handleSelect="true">
Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master2.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master2.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master2.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-master2.xml Mon Dec 1 17:25:39 2014
@@ -56,8 +56,6 @@
</lst>
</requestHandler>
- <requestHandler name="/update" class="solr.UpdateRequestHandler" />
-
<!-- enable streaming for testing... -->
<requestDispatcher handleSelect="true">
<requestParsers enableRemoteStreaming="true" multipartUploadLimitInKB="2048"/>
Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-minimal.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-minimal.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-minimal.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-minimal.xml Mon Dec 1 17:25:39 2014
@@ -54,8 +54,5 @@
</requestHandler>
- <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
-
- <requestHandler name="/update" class="solr.UpdateRequestHandler" />
</config>
Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-plugcollector.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-plugcollector.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-plugcollector.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-plugcollector.xml Mon Dec 1 17:25:39 2014
@@ -185,8 +185,6 @@
<queryResponseWriter name="xml" default="true"
class="solr.XMLResponseWriter" />
- <requestHandler name="/replication" class="solr.ReplicationHandler" startup="lazy" />
-
<!-- An alternate set representation that uses an integer hash to store filters (sets of docids).
If the set cardinality <= maxSize elements, then HashDocSet will be used instead of the bitset
based HashBitset. -->
@@ -201,11 +199,6 @@ based HashBitset. -->
<bool name="httpCaching">true</bool>
</requestHandler>
- <requestHandler name="/get" class="solr.RealTimeGetHandler">
- <lst name="defaults">
- <str name="omitHeader">true</str>
- </lst>
- </requestHandler>
<requestHandler name="dismax" class="solr.SearchHandler" >
<lst name="defaults">
@@ -230,8 +223,6 @@ based HashBitset. -->
<requestHandler name="mock" class="org.apache.solr.core.MockQuerySenderListenerReqHandler"/>
- <requestHandler name="/admin/" class="org.apache.solr.handler.admin.AdminHandlers" />
-
<!-- test query parameter defaults -->
<requestHandler name="defaults" class="solr.StandardRequestHandler">
<lst name="defaults">
@@ -250,8 +241,6 @@ based HashBitset. -->
</lst>
</requestHandler>
- <requestHandler name="/update" class="solr.UpdateRequestHandler" />
-
<searchComponent name="spellcheck" class="org.apache.solr.handler.component.SpellCheckComponent">
<!-- This is slightly different from the field value so we can test dealing with token offset changes -->
<str name="queryAnalyzerFieldType">lowerpunctfilt</str>
Modified: lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-repeater.xml
URL: http://svn.apache.org/viewvc/lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-repeater.xml?rev=1642718&r1=1642717&r2=1642718&view=diff
==============================================================================
--- lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-repeater.xml (original)
+++ lucene/dev/branches/lucene2878/solr/core/src/test-files/solr/collection1/conf/solrconfig-repeater.xml Mon Dec 1 17:25:39 2014
@@ -40,8 +40,6 @@
<requestHandler name="lazy" class="solr.StandardRequestHandler" startup="lazy">
</requestHandler>
- <requestHandler name="/update" class="solr.UpdateRequestHandler" />
-
<requestHandler name="/replication" class="solr.ReplicationHandler">
<lst name="master">
<str name="replicateAfter">commit</str>