You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ma...@apache.org on 2021/02/02 13:37:36 UTC

[lucene-solr] branch reference_impl updated: @1303 Finish up schema.

This is an automated email from the ASF dual-hosted git repository.

markrmiller pushed a commit to branch reference_impl
in repository https://gitbox.apache.org/repos/asf/lucene-solr.git


The following commit(s) were added to refs/heads/reference_impl by this push:
     new d449b01  @1303 Finish up schema.
d449b01 is described below

commit d449b019d71f14918610e3f005f4fc2153d0afd2
Author: markrmiller@gmail.com <ma...@gmail.com>
AuthorDate: Tue Feb 2 07:35:33 2021 -0600

    @1303 Finish up schema.
---
 ...ExtractNamedEntitiesUpdateProcessorFactory.java |  2 +-
 .../solr/schema/AbstractSubTypeFieldType.java      |  2 +-
 .../src/java/org/apache/solr/schema/BBoxField.java |  8 +++---
 .../java/org/apache/solr/schema/IndexSchema.java   | 11 ++++----
 .../org/apache/solr/schema/ManagedIndexSchema.java | 17 +++++++------
 .../java/org/apache/solr/schema/SchemaManager.java |  6 ++---
 .../solr/schema/SpatialPointVectorFieldType.java   | 29 ++++++++++------------
 .../similarities/SchemaSimilarityFactory.java      |  2 +-
 .../suggest/fst/AnalyzingInfixLookupFactory.java   |  2 +-
 .../suggest/fst/AnalyzingLookupFactory.java        |  2 +-
 .../suggest/fst/BlendedInfixLookupFactory.java     |  2 +-
 .../suggest/fst/FreeTextLookupFactory.java         |  2 +-
 .../spelling/suggest/fst/FuzzyLookupFactory.java   |  2 +-
 .../AddSchemaFieldsUpdateProcessorFactory.java     |  2 +-
 .../processor/DistributedUpdateProcessor.java      |  4 +--
 .../org/apache/solr/core/TestXIncludeConfig.java   |  8 +++---
 .../PhrasesIdentificationComponentTest.java        | 12 ++++-----
 .../solr/response/TestRetrieveFieldsOptimizer.java |  2 +-
 .../apache/solr/schema/CurrencyFieldTypeTest.java  |  2 +-
 .../test/org/apache/solr/schema/PolyFieldTest.java |  3 +--
 .../solr/schema/ResolveAnalyzerByNameTest.java     | 20 +++++++--------
 .../org/apache/solr/schema/TestSchemaField.java    |  2 +-
 .../apache/solr/schema/TestSortableTextField.java  |  4 +--
 .../org/apache/solr/search/LargeFieldTest.java     |  2 +-
 24 files changed, 74 insertions(+), 74 deletions(-)

diff --git a/solr/contrib/analysis-extras/src/java/org/apache/solr/update/processor/OpenNLPExtractNamedEntitiesUpdateProcessorFactory.java b/solr/contrib/analysis-extras/src/java/org/apache/solr/update/processor/OpenNLPExtractNamedEntitiesUpdateProcessorFactory.java
index ab2639a..074ae27 100644
--- a/solr/contrib/analysis-extras/src/java/org/apache/solr/update/processor/OpenNLPExtractNamedEntitiesUpdateProcessorFactory.java
+++ b/solr/contrib/analysis-extras/src/java/org/apache/solr/update/processor/OpenNLPExtractNamedEntitiesUpdateProcessorFactory.java
@@ -455,7 +455,7 @@ public class OpenNLPExtractNamedEntitiesUpdateProcessorFactory
       {
         try {
           nerTaggerOp = OpenNLPOpsFactory.getNERTagger(modelFile);
-          FieldType fieldType = req.getSchema().getFieldTypeByName(analyzerFieldType);
+          FieldType fieldType = req.getSchema().getFieldTypeByName(analyzerFieldType, req.getSchema().getFieldTypes());
           if (fieldType == null) {
             throw new SolrException
                 (SERVER_ERROR, ANALYZER_FIELD_TYPE_PARAM + " '" + analyzerFieldType + "' not found in the schema.");
diff --git a/solr/core/src/java/org/apache/solr/schema/AbstractSubTypeFieldType.java b/solr/core/src/java/org/apache/solr/schema/AbstractSubTypeFieldType.java
index 2f20fa1..e4c5922 100644
--- a/solr/core/src/java/org/apache/solr/schema/AbstractSubTypeFieldType.java
+++ b/solr/core/src/java/org/apache/solr/schema/AbstractSubTypeFieldType.java
@@ -58,7 +58,7 @@ public abstract class AbstractSubTypeFieldType extends FieldType implements Sche
     subSuffix = p.get(SUB_FIELD_SUFFIX);
     if (subFieldType != null) {
       args.remove(SUB_FIELD_TYPE);
-      subType = schema.getFieldTypeByName(subFieldType.trim());
+      subType = schema.getFieldTypeByName(subFieldType.trim(), schema.getFieldTypes());
       if (subType == null) {
         throw new SolrException(SolrException.ErrorCode.SERVER_ERROR, "subtype not found " + subFieldType.trim() + " in " + schema.getFieldTypes());
       }
diff --git a/solr/core/src/java/org/apache/solr/schema/BBoxField.java b/solr/core/src/java/org/apache/solr/schema/BBoxField.java
index 5607f3b..58a2f79 100644
--- a/solr/core/src/java/org/apache/solr/schema/BBoxField.java
+++ b/solr/core/src/java/org/apache/solr/schema/BBoxField.java
@@ -77,8 +77,8 @@ public class BBoxField extends AbstractSpatialFieldType<BBoxStrategy> implements
   @Override
   public void inform(IndexSchema schema) {
     this.schema = schema;
-    FieldType numberType = schema.getFieldTypeByName(numberTypeName);
-    FieldType booleanType = schema.getFieldTypeByName(booleanTypeName);
+    FieldType numberType = schema.getFieldTypeByName(numberTypeName, schema.getFieldTypes());
+    FieldType booleanType = schema.getFieldTypeByName(booleanTypeName, schema.getFieldTypes());
 
     if (numberType == null) {
       throw new RuntimeException("Cannot find number fieldType: " + numberTypeName);
@@ -129,8 +129,8 @@ public class BBoxField extends AbstractSpatialFieldType<BBoxStrategy> implements
   @Override
   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);
+    FieldType numberType = schema.getFieldTypeByName(numberTypeName, schema.getFieldTypes());
+    FieldType booleanType = schema.getFieldTypeByName(booleanTypeName, schema.getFieldTypes());
     if (schema.isDynamicField(fieldName)) {
       registerSubFields(schema, fieldName, numberType, booleanType);
     }
diff --git a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
index aafc12b..d421019 100644
--- a/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/IndexSchema.java
@@ -1333,7 +1333,7 @@ public class IndexSchema {
     // Hmmm, default field could also be implemented with a dynamic field of "*".
     // It would have to be special-cased and only used if nothing else matched.
     /***  REMOVED -YCS
-    if (defaultFieldType != null) return new SchemaField(fieldName,defaultFieldType);
+    if (defaultFieldType != null) return new SchemaField(fieldName,defaultFieldType, fields);
     ***/
     throw new SolrException(ErrorCode.BAD_REQUEST,"undefined field: \""+fieldName+"\"");
   }
@@ -1362,10 +1362,11 @@ public class IndexSchema {
   /**
    * Given the name of a {@link org.apache.solr.schema.FieldType} (not to be confused with {@link #getFieldType(String)} which
    * takes in the name of a field), return the {@link org.apache.solr.schema.FieldType}.
-   * @param fieldTypeName The name of the {@link org.apache.solr.schema.FieldType}
+   * @param fieldTypeName The name of the {@link FieldType}
+   * @param fieldTypes
    * @return The {@link org.apache.solr.schema.FieldType} or null.
    */
-  public FieldType getFieldTypeByName(String fieldTypeName){
+  public FieldType getFieldTypeByName(String fieldTypeName, Map<String,FieldType> fieldTypes){
     return fieldTypes.get(fieldTypeName);
   }
 
@@ -1927,7 +1928,7 @@ public class IndexSchema {
    * @param fieldTypeList a list of FieldTypes to add
    * @param persist to persist the schema or not
    * @return a new IndexSchema based on this schema with the new types added
-   * @see #newFieldType(String, String, Map)
+   * @see #newFieldType(String, String, Map, Map)
    */
   public IndexSchema addFieldTypes(List<FieldType> fieldTypeList, boolean persist) {
     String msg = "This IndexSchema is not mutable.";
@@ -1981,7 +1982,7 @@ public class IndexSchema {
    * @return The created FieldType
    * @see #addFieldTypes(java.util.List, boolean)
    */
-  public FieldType newFieldType(String typeName, String className, Map<String,?> options) {
+  public FieldType newFieldType(String typeName, String className, Map<String,?> options, Map<String,FieldType> fieldTypes) {
     String msg = "This IndexSchema is not mutable.";
     log.error(msg);
     throw new SolrException(ErrorCode.SERVER_ERROR, msg);
diff --git a/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java b/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
index 8401ba9..210c36a 100644
--- a/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
+++ b/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
@@ -1008,7 +1008,7 @@ public final class ManagedIndexSchema extends IndexSchema {
     // do a first pass to validate the field types don't exist already
     for (FieldType fieldType : fieldTypeList) {
       String typeName = fieldType.getTypeName();
-      if (newSchema.getFieldTypeByName(typeName) != null) {
+      if (newSchema.getFieldTypeByName(typeName, fieldTypes) != null) {
         throw new FieldExistsException(ErrorCode.BAD_REQUEST,
             "Field type '" + typeName + "' already exists!");
       }
@@ -1048,6 +1048,7 @@ public final class ManagedIndexSchema extends IndexSchema {
   public ManagedIndexSchema deleteFieldTypes(Collection<String> names) {
     ManagedIndexSchema newSchema;
     if (isMutable) {
+
       for (String name : names) {
         if ( ! fieldTypes.containsKey(name)) {
           String msg = "The field type '" + name + "' is not present in this schema, and so cannot be deleted.";
@@ -1067,9 +1068,11 @@ public final class ManagedIndexSchema extends IndexSchema {
         }
       }
       newSchema = shallowCopy(true);
+      Map<String,FieldType> fieldTypes = new HashMap<>(newSchema.fieldTypes);
       for (String name : names) {
-        newSchema.fieldTypes.remove(name);
+        fieldTypes.remove(name);
       }
+      newSchema.fieldTypes = Collections.unmodifiableMap(fieldTypes);
       newSchema.postReadInform();
       newSchema.refreshAnalyzers();
     } else {
@@ -1112,7 +1115,7 @@ public final class ManagedIndexSchema extends IndexSchema {
       System.arraycopy(dynamicFields, 0, newSchema.dynamicFields, 0, dynamicFields.length);
 
       fieldTypes.remove(typeName);
-      FieldType replacementFieldType = newSchema.newFieldType(typeName, replacementClassName, replacementArgs);
+      FieldType replacementFieldType = newSchema.newFieldType(typeName, replacementClassName, replacementArgs, fieldTypes);
       fieldTypes.put(typeName, replacementFieldType);
 
       // Rebuild fields of the type being replaced
@@ -1277,7 +1280,7 @@ public final class ManagedIndexSchema extends IndexSchema {
           String msg = "Field '" + fieldName + "' already exists.";
           throw new SolrException(ErrorCode.BAD_REQUEST, msg);
         }
-        FieldType type = getFieldTypeByName(fieldType);
+        FieldType type = getFieldTypeByName(fieldType, fieldTypes);
         if (null == type) {
           String msg = "Field '" + fieldName + "': Field type '" + fieldType + "' not found.";
           log.error(msg);
@@ -1306,7 +1309,7 @@ public final class ManagedIndexSchema extends IndexSchema {
     SchemaField sf;
     if (isMutable) {
       try {
-        FieldType type = getFieldTypeByName(fieldType);
+        FieldType type = getFieldTypeByName(fieldType, fieldTypes);
         if (null == type) {
           String msg = "Dynamic field '" + fieldNamePattern + "': Field type '" + fieldType + "' not found.";
           log.error(msg);
@@ -1332,14 +1335,14 @@ public final class ManagedIndexSchema extends IndexSchema {
   }
 
   @Override
-  public FieldType newFieldType(String typeName, String className, Map<String, ?> options) {
+  public FieldType newFieldType(String typeName, String className, Map<String, ?> options, Map<String,FieldType> fieldTypes) {
     if (!isMutable) {
       String msg = "This ManagedIndexSchema is not mutable.";
       log.error(msg);
       throw new SolrException(ErrorCode.SERVER_ERROR, msg);
     }
 
-    if (getFieldTypeByName(typeName) != null) {
+    if (getFieldTypeByName(typeName, fieldTypes) != null) {
       String msg = "Field type '" + typeName + "' already exists.";
       log.error(msg);
       throw new SolrException(ErrorCode.BAD_REQUEST, msg);
diff --git a/solr/core/src/java/org/apache/solr/schema/SchemaManager.java b/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
index 4b65719..729892d 100644
--- a/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
+++ b/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
@@ -195,7 +195,7 @@ public class SchemaManager {
         if (op.hasError())
           return false;
         try {
-          FieldType fieldType = mgr.managedIndexSchema.newFieldType(name, className, op.getDataMap());
+          FieldType fieldType = mgr.managedIndexSchema.newFieldType(name, className, op.getDataMap(), mgr.managedIndexSchema.fieldTypes);
           mgr.managedIndexSchema = mgr.managedIndexSchema.addFieldTypes(singletonList(fieldType), false);
           return true;
         } catch (Exception e) {
@@ -367,7 +367,7 @@ public class SchemaManager {
         String type = op.getStr(TYPE);
         if (op.hasError())
           return false;
-        FieldType ft = mgr.managedIndexSchema.getFieldTypeByName(type);
+        FieldType ft = mgr.managedIndexSchema.getFieldTypeByName(type, mgr.managedIndexSchema.fieldTypes);
         if (ft == null) {
           op.addError("No such field type '" + type + "'");
           return false;
@@ -387,7 +387,7 @@ public class SchemaManager {
         String type = op.getStr(TYPE);
         if (op.hasError())
           return false;
-        FieldType ft = mgr.managedIndexSchema.getFieldTypeByName(type);
+        FieldType ft = mgr.managedIndexSchema.getFieldTypeByName(type, mgr.managedIndexSchema.fieldTypes);
         if (ft == null) {
           op.addError("No such field type '" + type + "'");
           return  false;
diff --git a/solr/core/src/java/org/apache/solr/schema/SpatialPointVectorFieldType.java b/solr/core/src/java/org/apache/solr/schema/SpatialPointVectorFieldType.java
index eecec28..7d15b57 100644
--- a/solr/core/src/java/org/apache/solr/schema/SpatialPointVectorFieldType.java
+++ b/solr/core/src/java/org/apache/solr/schema/SpatialPointVectorFieldType.java
@@ -16,8 +16,7 @@
  */
 package org.apache.solr.schema;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.solr.legacy.LegacyFieldType;
@@ -54,7 +53,7 @@ public class SpatialPointVectorFieldType extends AbstractSpatialFieldType<PointV
    */
   @Override
   public void inform(IndexSchema schema) {
-    FieldType fieldType = schema.getFieldTypeByName(numberFieldName);
+    FieldType fieldType = schema.getFieldTypeByName(numberFieldName, schema.getFieldTypes());
     if( fieldType == null ) {
       throw new RuntimeException( "Can not find number field: "+ numberFieldName);
     }
@@ -70,19 +69,17 @@ public class SpatialPointVectorFieldType extends AbstractSpatialFieldType<PointV
     // In theory we should fix this, but since this class is already deprecated, we'll leave it alone
     // to simplify the risk of back-compat break for existing users.
 
-    // TODO: this is not legal
-//    final int p = (INDEXED | TOKENIZED | OMIT_NORMS | OMIT_TF_POSITIONS | UNINVERTIBLE);
-//    List<SchemaField> newFields = new ArrayList<>();
-//    for( SchemaField sf : schema.getFields().values() ) {
-//      if( sf.getType() == this ) {
-//        String name = sf.getName();
-//        newFields.add(new SchemaField(name + PointVectorStrategy.SUFFIX_X, fieldType, p, null));
-//        newFields.add(new SchemaField(name + PointVectorStrategy.SUFFIX_Y, fieldType, p, null));
-//      }
-//    }
-//    for (SchemaField newField : newFields) {
-//      schema.getFields().put(newField.getName(), newField);
-//    }
+
+    final int p = (INDEXED | TOKENIZED | OMIT_NORMS | OMIT_TF_POSITIONS | UNINVERTIBLE);
+    Map<String,SchemaField> newFields = new HashMap<>(schema.getFields());
+    for( SchemaField sf : schema.getFields().values() ) {
+      if( sf.getType() == this ) {
+        String name = sf.getName();
+        newFields.put(name, new SchemaField(name + PointVectorStrategy.SUFFIX_X, fieldType, p, null));
+        newFields.put(name, new SchemaField(name + PointVectorStrategy.SUFFIX_Y, fieldType, p, null));
+      }
+    }
+    schema.setFields(newFields);
   }
 
   @Override
diff --git a/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java b/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java
index e682b9ee..a8c8051 100644
--- a/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java
+++ b/solr/core/src/java/org/apache/solr/search/similarities/SchemaSimilarityFactory.java
@@ -115,7 +115,7 @@ public class SchemaSimilarityFactory extends SimilarityFactory implements SolrCo
             new BM25Similarity() :
             new LegacyBM25Similarity();
       } else {
-        FieldType defSimFT = core.getLatestSchema().getFieldTypeByName(defaultSimFromFieldType);
+        FieldType defSimFT = core.getLatestSchema().getFieldTypeByName(defaultSimFromFieldType, core.getLatestSchema().getFieldTypes());
         if (null == defSimFT) {
           throw new SolrException(ErrorCode.SERVER_ERROR,
                                   "SchemaSimilarityFactory configured with " + INIT_OPT + "='" +
diff --git a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingInfixLookupFactory.java b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingInfixLookupFactory.java
index 68bfaf6..89df295 100644
--- a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingInfixLookupFactory.java
+++ b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingInfixLookupFactory.java
@@ -88,7 +88,7 @@ public class AnalyzingInfixLookupFactory extends LookupFactory {
     if (fieldTypeName == null) {
       throw new IllegalArgumentException("Error in configuration: " + QUERY_ANALYZER + " parameter is mandatory");
     }
-    FieldType ft = core.getLatestSchema().getFieldTypeByName(fieldTypeName.toString());
+    FieldType ft = core.getLatestSchema().getFieldTypeByName(fieldTypeName.toString(), core.getLatestSchema().getFieldTypes());
     if (ft == null) {
       throw new IllegalArgumentException("Error in configuration: " + fieldTypeName.toString() + " is not defined in the schema");
     }
diff --git a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingLookupFactory.java b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingLookupFactory.java
index eb3ab5f..42f9f9e 100644
--- a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingLookupFactory.java
+++ b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/AnalyzingLookupFactory.java
@@ -81,7 +81,7 @@ public class AnalyzingLookupFactory extends LookupFactory {
     if (fieldTypeName == null) {
       throw new IllegalArgumentException("Error in configuration: " + QUERY_ANALYZER + " parameter is mandatory");
     }
-    FieldType ft = core.getLatestSchema().getFieldTypeByName(fieldTypeName.toString());
+    FieldType ft = core.getLatestSchema().getFieldTypeByName(fieldTypeName.toString(), core.getLatestSchema().getFieldTypes());
     if (ft == null) {
       throw new IllegalArgumentException("Error in configuration: " + fieldTypeName.toString() + " is not defined in the schema");
     }
diff --git a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/BlendedInfixLookupFactory.java b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/BlendedInfixLookupFactory.java
index 32a0ff0..7ca5aaa 100644
--- a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/BlendedInfixLookupFactory.java
+++ b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/BlendedInfixLookupFactory.java
@@ -76,7 +76,7 @@ public class BlendedInfixLookupFactory extends AnalyzingInfixLookupFactory {
     if (fieldTypeName == null) {
       throw new IllegalArgumentException("Error in configuration: " + QUERY_ANALYZER + " parameter is mandatory");
     }
-    FieldType ft = core.getLatestSchema().getFieldTypeByName(fieldTypeName.toString());
+    FieldType ft = core.getLatestSchema().getFieldTypeByName(fieldTypeName.toString(), core.getLatestSchema().getFieldTypes());
     if (ft == null) {
       throw new IllegalArgumentException("Error in configuration: " + fieldTypeName.toString() + " is not defined in the schema");
     }
diff --git a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FreeTextLookupFactory.java b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FreeTextLookupFactory.java
index dfd9d669..c21af44 100644
--- a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FreeTextLookupFactory.java
+++ b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FreeTextLookupFactory.java
@@ -58,7 +58,7 @@ public class FreeTextLookupFactory extends LookupFactory {
     if (fieldTypeName == null) {
       throw new IllegalArgumentException("Error in configuration: " + QUERY_ANALYZER + " parameter is mandatory");
     }
-    FieldType ft = core.getLatestSchema().getFieldTypeByName(fieldTypeName.toString());
+    FieldType ft = core.getLatestSchema().getFieldTypeByName(fieldTypeName.toString(), core.getLatestSchema().getFieldTypes());
     if (ft == null) {
       throw new IllegalArgumentException("Error in configuration: " + fieldTypeName.toString() + " is not defined in the schema");
     }
diff --git a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FuzzyLookupFactory.java b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FuzzyLookupFactory.java
index 236bc7b..dc2c7bb 100644
--- a/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FuzzyLookupFactory.java
+++ b/solr/core/src/java/org/apache/solr/spelling/suggest/fst/FuzzyLookupFactory.java
@@ -76,7 +76,7 @@ public class FuzzyLookupFactory extends LookupFactory {
       throw new IllegalArgumentException("Error in configuration: " + AnalyzingLookupFactory.QUERY_ANALYZER + " parameter is mandatory");
     }
     // retrieve index and query analyzers for the field
-    FieldType ft = core.getLatestSchema().getFieldTypeByName(fieldTypeName.toString());
+    FieldType ft = core.getLatestSchema().getFieldTypeByName(fieldTypeName.toString(), core.getLatestSchema().getFieldTypes());
     if (ft == null) {
       throw new IllegalArgumentException("Error in configuration: " + fieldTypeName.toString() + " is not defined in the schema");
     }
diff --git a/solr/core/src/java/org/apache/solr/update/processor/AddSchemaFieldsUpdateProcessorFactory.java b/solr/core/src/java/org/apache/solr/update/processor/AddSchemaFieldsUpdateProcessorFactory.java
index 888926f..14d7ab2 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/AddSchemaFieldsUpdateProcessorFactory.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/AddSchemaFieldsUpdateProcessorFactory.java
@@ -321,7 +321,7 @@ public class AddSchemaFieldsUpdateProcessorFactory extends UpdateRequestProcesso
     public void populateValueClasses(SolrCore core) {
       IndexSchema schema = core.getLatestSchema();
       ClassLoader loader = core.getResourceLoader().getClassLoader();
-      if (null == schema.getFieldTypeByName(fieldTypeName)) {
+      if (null == schema.getFieldTypeByName(fieldTypeName, schema.getFieldTypes())) {
         throw new SolrException(SERVER_ERROR, "fieldType '" + fieldTypeName + "' not found in the schema");
       }
       valueClasses = Collections.synchronizedList(new ArrayList<>());
diff --git a/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java b/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
index 269a29f..ce87096 100644
--- a/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
+++ b/solr/core/src/java/org/apache/solr/update/processor/DistributedUpdateProcessor.java
@@ -334,7 +334,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
           doLocalAdd(cmd);
         } catch (Exception e) {
           if (distFuture != null && isLeader) {
-            distFuture.cancel(true);
+            distFuture.cancel(false);
             cancelCmds.add(cloneCmd);
           }
           if (e instanceof RuntimeException) {
@@ -961,7 +961,7 @@ public class DistributedUpdateProcessor extends UpdateRequestProcessor {
         t = e;
       }
       if (distFuture != null && isLeader) {
-        distFuture.cancel(true);
+        distFuture.cancel(false);
         cancelCmds.add(cmd);
       }
       if (t instanceof SolrException) {
diff --git a/solr/core/src/test/org/apache/solr/core/TestXIncludeConfig.java b/solr/core/src/test/org/apache/solr/core/TestXIncludeConfig.java
index 9fc6da7..7db5099 100644
--- a/solr/core/src/test/org/apache/solr/core/TestXIncludeConfig.java
+++ b/solr/core/src/test/org/apache/solr/core/TestXIncludeConfig.java
@@ -58,18 +58,18 @@ public class TestXIncludeConfig extends SolrTestCaseJ4 {
     IndexSchema schema = core.getLatestSchema();
     
     // xinclude
-    assertNotNull("ft-included is null", schema.getFieldTypeByName("ft-included"));
+    assertNotNull("ft-included is null", schema.getFieldTypeByName("ft-included", schema.getFieldTypes()));
     assertNotNull("field-included is null", schema.getFieldOrNull("field-included"));
 
     // entity include
     assertNotNull("ft-entity-include1 is null", 
-                  schema.getFieldTypeByName("ft-entity-include1"));
+                  schema.getFieldTypeByName("ft-entity-include1", schema.getFieldTypes()));
     assertNotNull("ft-entity-include2 is null", 
-                  schema.getFieldTypeByName("ft-entity-include2"));
+                  schema.getFieldTypeByName("ft-entity-include2", schema.getFieldTypes()));
 
     // sanity check
     assertNull("ft-entity-include3 is not null",  // Does Not Exist Anywhere
-               schema.getFieldTypeByName("ft-entity-include3"));
+               schema.getFieldTypeByName("ft-entity-include3", schema.getFieldTypes()));
 
   }
 }
diff --git a/solr/core/src/test/org/apache/solr/handler/component/PhrasesIdentificationComponentTest.java b/solr/core/src/test/org/apache/solr/handler/component/PhrasesIdentificationComponentTest.java
index 8ec150b..03bdd6b 100644
--- a/solr/core/src/test/org/apache/solr/handler/component/PhrasesIdentificationComponentTest.java
+++ b/solr/core/src/test/org/apache/solr/handler/component/PhrasesIdentificationComponentTest.java
@@ -583,19 +583,19 @@ public class PhrasesIdentificationComponentTest extends SolrTestCaseJ4 {
     core.close();
     
     assertEquals(3, PhrasesIdentificationComponent.getMaxShingleSize
-                 (schema.getFieldTypeByName("multigrams_3_7").getIndexAnalyzer()));
+                 (schema.getFieldTypeByName("multigrams_3_7", schema.getFieldTypes()).getIndexAnalyzer()));
     assertEquals(7, PhrasesIdentificationComponent.getMaxShingleSize
-                 (schema.getFieldTypeByName("multigrams_3_7").getQueryAnalyzer()));
+                 (schema.getFieldTypeByName("multigrams_3_7", schema.getFieldTypes()).getQueryAnalyzer()));
     
     assertEquals(3, PhrasesIdentificationComponent.getMaxShingleSize
-                 (schema.getFieldTypeByName("multigrams_3").getIndexAnalyzer()));
+                 (schema.getFieldTypeByName("multigrams_3", schema.getFieldTypes()).getIndexAnalyzer()));
     assertEquals(3, PhrasesIdentificationComponent.getMaxShingleSize
-                 (schema.getFieldTypeByName("multigrams_3").getQueryAnalyzer()));
+                 (schema.getFieldTypeByName("multigrams_3", schema.getFieldTypes()).getQueryAnalyzer()));
     
     assertEquals(-1, PhrasesIdentificationComponent.getMaxShingleSize
-                 (schema.getFieldTypeByName("text").getIndexAnalyzer()));
+                 (schema.getFieldTypeByName("text", schema.getFieldTypes()).getIndexAnalyzer()));
     assertEquals(-1, PhrasesIdentificationComponent.getMaxShingleSize
-                 (schema.getFieldTypeByName("text").getQueryAnalyzer()));
+                 (schema.getFieldTypeByName("text", schema.getFieldTypes()).getQueryAnalyzer()));
     
   }
   
diff --git a/solr/core/src/test/org/apache/solr/response/TestRetrieveFieldsOptimizer.java b/solr/core/src/test/org/apache/solr/response/TestRetrieveFieldsOptimizer.java
index f504f0f..277f235 100644
--- a/solr/core/src/test/org/apache/solr/response/TestRetrieveFieldsOptimizer.java
+++ b/solr/core/src/test/org/apache/solr/response/TestRetrieveFieldsOptimizer.java
@@ -407,7 +407,7 @@ class RetrieveFieldType {
     opts.put("name", name);
     this.solrTypeClass = solrClassMap.get(type);
     opts.put("class", solrTypeClass);
-    solrFieldType = schema.newFieldType(name, solrTypeClass, opts);
+    solrFieldType = schema.newFieldType(name, solrTypeClass, opts, schema.getFieldTypes());
     this.testType = type;
   }
 
diff --git a/solr/core/src/test/org/apache/solr/schema/CurrencyFieldTypeTest.java b/solr/core/src/test/org/apache/solr/schema/CurrencyFieldTypeTest.java
index 7b9c723..9b58a01 100644
--- a/solr/core/src/test/org/apache/solr/schema/CurrencyFieldTypeTest.java
+++ b/solr/core/src/test/org/apache/solr/schema/CurrencyFieldTypeTest.java
@@ -139,7 +139,7 @@ public class CurrencyFieldTypeTest extends SolrTestCaseJ4 {
       assertTrue("Doesn't have a value: " + fields.get(i), hasValue);
     }
 
-    assertEquals(schema.getFieldTypeByName("string").toExternal(fields.get(2)), "1.50,EUR");
+    assertEquals(schema.getFieldTypeByName("string", schema.getFieldTypes()).toExternal(fields.get(2)), "1.50,EUR");
     
     // A few tests on the provider directly
     ExchangeRateProvider p = ((CurrencyFieldType)tmp).getProvider();
diff --git a/solr/core/src/test/org/apache/solr/schema/PolyFieldTest.java b/solr/core/src/test/org/apache/solr/schema/PolyFieldTest.java
index f71ccb2..512b24c 100644
--- a/solr/core/src/test/org/apache/solr/schema/PolyFieldTest.java
+++ b/solr/core/src/test/org/apache/solr/schema/PolyFieldTest.java
@@ -26,7 +26,6 @@ import org.apache.solr.SolrTestCaseJ4;
 import org.apache.solr.common.SolrException;
 import org.apache.solr.core.SolrCore;
 import org.junit.BeforeClass;
-import org.junit.Ignore;
 import org.junit.Test;
 
 
@@ -60,7 +59,7 @@ public class PolyFieldTest extends SolrTestCaseJ4 {
     assertTrue("Didn't find the expected dynamic field", seen);
     FieldType homeFT = schema.getFieldType("home");
     assertEquals(home.getType(), homeFT);
-    FieldType xy = schema.getFieldTypeByName("xy");
+    FieldType xy = schema.getFieldTypeByName("xy", schema.getFieldTypes());
     assertNotNull(xy);
     assertTrue(xy instanceof PointType);
     assertTrue(xy.isPolyField());
diff --git a/solr/core/src/test/org/apache/solr/schema/ResolveAnalyzerByNameTest.java b/solr/core/src/test/org/apache/solr/schema/ResolveAnalyzerByNameTest.java
index cb45b96..56490bb 100644
--- a/solr/core/src/test/org/apache/solr/schema/ResolveAnalyzerByNameTest.java
+++ b/solr/core/src/test/org/apache/solr/schema/ResolveAnalyzerByNameTest.java
@@ -45,12 +45,12 @@ public class                ResolveAnalyzerByNameTest extends SolrTestCaseJ4 {
     core.close();
     assertTrue( schema.getFieldTypes().containsKey("text_ws") );
     SimpleOrderedMap<Object> analyzerProps =
-        (SimpleOrderedMap<Object>)schema.getFieldTypeByName("text_ws")
+        (SimpleOrderedMap<Object>)schema.getFieldTypeByName("text_ws", schema.getFieldTypes())
         .getNamedPropertyValues(true).get("analyzer");
     checkTokenizerName(analyzerProps, "whitespace");
 
-    assertNotNull(schema.getFieldTypeByName("text_ws").getIndexAnalyzer());
-    assertNotNull(schema.getFieldTypeByName("text_ws").getQueryAnalyzer());
+    assertNotNull(schema.getFieldTypeByName("text_ws", schema.getFieldTypes()).getIndexAnalyzer());
+    assertNotNull(schema.getFieldTypeByName("text_ws", schema.getFieldTypes()).getQueryAnalyzer());
   }
 
   @Test
@@ -61,19 +61,19 @@ public class                ResolveAnalyzerByNameTest extends SolrTestCaseJ4 {
     assertTrue( schema.getFieldTypes().containsKey("text") );
 
     SimpleOrderedMap<Object> indexAnalyzerProps =
-        (SimpleOrderedMap<Object>)schema.getFieldTypeByName("text")
+        (SimpleOrderedMap<Object>)schema.getFieldTypeByName("text", schema.getFieldTypes())
             .getNamedPropertyValues(true).get("indexAnalyzer");
     checkTokenizerName(indexAnalyzerProps, "whitespace");
     checkTokenFilterNames(indexAnalyzerProps, new String[]{"stop", "wordDelimiterGraph", "lowercase", "keywordMarker", "porterStem", "removeDuplicates", "flattenGraph"});
 
     SimpleOrderedMap<Object> queryAnalyzerProps =
-        (SimpleOrderedMap<Object>)schema.getFieldTypeByName("text")
+        (SimpleOrderedMap<Object>)schema.getFieldTypeByName("text", schema.getFieldTypes())
             .getNamedPropertyValues(true).get("queryAnalyzer");
     checkTokenizerName(queryAnalyzerProps, "whitespace");
     checkTokenFilterNames(queryAnalyzerProps, new String[]{"synonymGraph", "stop", "wordDelimiterGraph", "lowercase", "keywordMarker", "porterStem", "removeDuplicates"});
 
-    assertNotNull(schema.getFieldTypeByName("text").getIndexAnalyzer());
-    assertNotNull(schema.getFieldTypeByName("text").getQueryAnalyzer());
+    assertNotNull(schema.getFieldTypeByName("text", schema.getFieldTypes()).getIndexAnalyzer());
+    assertNotNull(schema.getFieldTypeByName("text", schema.getFieldTypes()).getQueryAnalyzer());
   }
 
   @Test
@@ -83,13 +83,13 @@ public class                ResolveAnalyzerByNameTest extends SolrTestCaseJ4 {
     core.close();
     assertTrue( schema.getFieldTypes().containsKey("charfilthtmlmap") );
     SimpleOrderedMap<Object> analyzerProps =
-        (SimpleOrderedMap<Object>)schema.getFieldTypeByName("charfilthtmlmap")
+        (SimpleOrderedMap<Object>)schema.getFieldTypeByName("charfilthtmlmap", schema.getFieldTypes())
             .getNamedPropertyValues(true).get("analyzer");
     checkTokenizerName(analyzerProps, "whitespace");
     checkCharFilterNames(analyzerProps, new String[]{"htmlStrip", "mapping"});
 
-    assertNotNull(schema.getFieldTypeByName("charfilthtmlmap").getIndexAnalyzer());
-    assertNotNull(schema.getFieldTypeByName("charfilthtmlmap").getQueryAnalyzer());
+    assertNotNull(schema.getFieldTypeByName("charfilthtmlmap", schema.getFieldTypes()).getIndexAnalyzer());
+    assertNotNull(schema.getFieldTypeByName("charfilthtmlmap", schema.getFieldTypes()).getQueryAnalyzer());
   }
 
   @Test(expected = SolrException.class)
diff --git a/solr/core/src/test/org/apache/solr/schema/TestSchemaField.java b/solr/core/src/test/org/apache/solr/schema/TestSchemaField.java
index 8963a6b..dc33aad 100644
--- a/solr/core/src/test/org/apache/solr/schema/TestSchemaField.java
+++ b/solr/core/src/test/org/apache/solr/schema/TestSchemaField.java
@@ -42,7 +42,7 @@ public class TestSchemaField extends SolrTestCaseJ4 {
 
   private void assertFieldTypeFormats(String fieldTypeName, String expectedPostingsFormat, String expectedDocValuesFormat) {
     SolrCore core = h.getCore();
-    FieldType ft = core.getLatestSchema().getFieldTypeByName(fieldTypeName);
+    FieldType ft = core.getLatestSchema().getFieldTypeByName(fieldTypeName, core.getLatestSchema().getFieldTypes());
     core.close();
     assertNotNull("Field type " + fieldTypeName + " not found  - schema got changed?", ft);
     assertEquals("Field type " + ft.getTypeName() + " wrong " + FieldProperties.POSTINGS_FORMAT
diff --git a/solr/core/src/test/org/apache/solr/schema/TestSortableTextField.java b/solr/core/src/test/org/apache/solr/schema/TestSortableTextField.java
index b4f8f76..aafe5de 100644
--- a/solr/core/src/test/org/apache/solr/schema/TestSortableTextField.java
+++ b/solr/core/src/test/org/apache/solr/schema/TestSortableTextField.java
@@ -60,7 +60,7 @@ public class TestSortableTextField extends SolrTestCaseJ4 {
       // these should all use docValues (either explicitly or implicitly)...
       for (String n : Arrays.asList("keyword_stxt", "whitespace_stxt", "whitespace_f_stxt", "whitespace_l_stxt")) {
 
-        FieldType ft = core.getLatestSchema().getFieldTypeByName(n);
+        FieldType ft = core.getLatestSchema().getFieldTypeByName(n, core.getLatestSchema().getFieldTypes());
         assertEquals("type " + ft.getTypeName() + " should have docvalues - schema got changed?", true, ft.getNamedPropertyValues(true).get("docValues"));
 
       }
@@ -391,7 +391,7 @@ public class TestSortableTextField extends SolrTestCaseJ4 {
     try (SolrCore core = h.getCore()) {
       for (String n : Arrays.asList("keyword_stxt", "whitespace_max0_stxt", "whitespace_max6_stxt")) {
         {
-          FieldType ft = core.getLatestSchema().getFieldTypeByName(n);
+          FieldType ft = core.getLatestSchema().getFieldTypeByName(n, core.getLatestSchema().getFieldTypes());
           assertEquals("type " + ft.getTypeName() + " should not default to useDocValuesAsStored", false, ft.useDocValuesAsStored());
         }
         {
diff --git a/solr/core/src/test/org/apache/solr/search/LargeFieldTest.java b/solr/core/src/test/org/apache/solr/search/LargeFieldTest.java
index c4355bd..93f8dd4 100644
--- a/solr/core/src/test/org/apache/solr/search/LargeFieldTest.java
+++ b/solr/core/src/test/org/apache/solr/search/LargeFieldTest.java
@@ -51,7 +51,7 @@ public class LargeFieldTest extends SolrTestCaseJ4 {
       boolean PERSIST_FALSE = false; // don't write to test resource dir
       IndexSchema schema = core.getLatestSchema();
       schema = schema.addFieldTypes(Collections.singletonList(schema.newFieldType("textType", "solr.TextField", // redundant; TODO improve api
-          map("name", "textType", "class", "solr.TextField", "analyzer", map("class", "org.apache.lucene.analysis.standard.StandardAnalyzer")))), PERSIST_FALSE);
+          map("name", "textType", "class", "solr.TextField", "analyzer", map("class", "org.apache.lucene.analysis.standard.StandardAnalyzer")), schema.getFieldTypes())), PERSIST_FALSE);
       schema = schema.addFields(Arrays.asList(schema.newField(LAZY_FIELD, "textType", map()), schema.newField(BIG_FIELD, "textType", map("large", true))), Collections.emptyMap(), PERSIST_FALSE);
 
       core.setLatestSchema(schema);