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;