You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by sa...@apache.org on 2015/03/25 07:25:24 UTC

svn commit: r1669055 - in /lucene/dev/trunk/solr/core/src: java/org/apache/solr/schema/ManagedIndexSchema.java test/org/apache/solr/schema/TestBulkSchemaConcurrent.java

Author: sarowe
Date: Wed Mar 25 06:25:24 2015
New Revision: 1669055

URL: http://svn.apache.org/r1669055
Log:
SOLR-6141: fix TestBulkSchemaConcurrent; fix field deletion to fail when a dynamic copy field directive has the field as its source; don't attempt to decrement a SchemaField's count in copyFieldTargetCounts if it's not present in the map.

Modified:
    lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
    lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/TestBulkSchemaConcurrent.java

Modified: lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java?rev=1669055&r1=1669054&r2=1669055&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java (original)
+++ lucene/dev/trunk/solr/core/src/java/org/apache/solr/schema/ManagedIndexSchema.java Wed Mar 25 06:25:24 2015
@@ -449,9 +449,16 @@ public final class ManagedIndexSchema ex
       for (String name : names) {
         SchemaField field = getFieldOrNull(name); 
         if (null != field) {
-          if (copyFieldsMap.containsKey(name) || isCopyFieldTarget(field)) {
-            throw new SolrException(ErrorCode.BAD_REQUEST, "Can't delete '" + name
-                + "' because it's referred to by at least one copy field directive.");
+          String message = "Can't delete field '" + name
+              + "' because it's referred to by at least one copy field directive.";
+          if (newSchema.copyFieldsMap.containsKey(name) || newSchema.isCopyFieldTarget(field)) {
+            throw new SolrException(ErrorCode.BAD_REQUEST, message);
+          }
+          for (int i = 0 ; i < newSchema.dynamicCopyFields.length ; ++i) {
+            DynamicCopy dynamicCopy = newSchema.dynamicCopyFields[i];
+            if (name.equals(dynamicCopy.getRegex())) {
+              throw new SolrException(ErrorCode.BAD_REQUEST, message);
+            }
           }
           newSchema.fields.remove(name);
           newSchema.fieldsWithDefaultValue.remove(field);
@@ -844,7 +851,10 @@ public final class ManagedIndexSchema ex
           DynamicCopy dynamicCopy = dynamicCopyFields[i];
           if (source.equals(dynamicCopy.getRegex()) && dest.equals(dynamicCopy.getDestFieldName())) {
             found = true;
-            decrementCopyFieldTargetCount(dynamicCopy.getDestination().getPrototype());
+            SchemaField destinationPrototype = dynamicCopy.getDestination().getPrototype();
+            if (copyFieldTargetCounts.containsKey(destinationPrototype)) {
+              decrementCopyFieldTargetCount(destinationPrototype);
+            }
             if (dynamicCopyFields.length > 1) {
               DynamicCopy[] temp = new DynamicCopy[dynamicCopyFields.length - 1];
               System.arraycopy(dynamicCopyFields, 0, temp, 0, i);
@@ -1126,7 +1136,9 @@ public final class ManagedIndexSchema ex
         if (typeName.equals(destinationPrototype.getType().getTypeName())
             || (null != sourceDynamicBase && typeName.equals(sourceDynamicBase.getPrototype().getType().getTypeName()))) {
           dynamicCopyFieldsToRebuild.add(dynamicCopy);
-          newSchema.decrementCopyFieldTargetCount(destinationPrototype);
+          if (newSchema.copyFieldTargetCounts.containsKey(destinationPrototype)) {
+            newSchema.decrementCopyFieldTargetCount(destinationPrototype);
+          }
           // don't add this dynamic copy field to newDynamicCopyFields - effectively removing it
         } else {
           newDynamicCopyFields.add(dynamicCopy);

Modified: lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/TestBulkSchemaConcurrent.java
URL: http://svn.apache.org/viewvc/lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/TestBulkSchemaConcurrent.java?rev=1669055&r1=1669054&r2=1669055&view=diff
==============================================================================
--- lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/TestBulkSchemaConcurrent.java (original)
+++ lucene/dev/trunk/solr/core/src/test/org/apache/solr/schema/TestBulkSchemaConcurrent.java Wed Mar 25 06:25:24 2015
@@ -152,7 +152,7 @@ public class TestBulkSchemaConcurrent  e
 
     payload = payload.replace("replaceFieldA", aField);
     payload = payload.replace("replaceDynamicField", dynamicFldName);
-    payload = payload.replace("replaceDynamicCopyFieldDest",dynamicCopyFldDest);
+    payload = payload.replace("replaceDynamicCopyFieldDest", dynamicCopyFldDest);
     payload = payload.replace("myNewFieldTypeName", newFieldTypeName);
 
     RestTestHarness publisher = restTestHarnesses.get(r.nextInt(restTestHarnesses.size()));
@@ -269,12 +269,12 @@ public class TestBulkSchemaConcurrent  e
 
   private void invokeBulkDeleteCall(int seed, ArrayList<String> errs) throws Exception {
     String payload = "{\n" +
-        "          'delete-field' : {'name':'replaceFieldA'},\n" +
-        "          'delete-dynamic-field' : {'name' :'replaceDynamicField'},\n" +
         "          'delete-copy-field' : {\n" +
         "                       'source' :'replaceFieldA',\n" +
         "                       'dest':['replaceDynamicCopyFieldDest']\n" +
         "                       },\n" +
+        "          'delete-field' : {'name':'replaceFieldA'},\n" +
+        "          'delete-dynamic-field' : {'name' :'replaceDynamicField'},\n" +
         "          'delete-field-type' : {'name' :'myNewFieldTypeName'}\n" +
         " }";
     String aField = "a" + seed;