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 2016/09/27 22:17:46 UTC
[2/2] lucene-solr:branch_6x: SOLR-9411: Better validation for Schema
API add-field
SOLR-9411: Better validation for Schema API add-field
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/49c5a749
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/49c5a749
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/49c5a749
Branch: refs/heads/branch_6x
Commit: 49c5a749c3e95d33ca338331a270633503fe8ff7
Parents: 03b4ccf
Author: Steve Rowe <sa...@apache.org>
Authored: Tue Sep 27 18:16:55 2016 -0400
Committer: Steve Rowe <sa...@apache.org>
Committed: Tue Sep 27 18:17:21 2016 -0400
----------------------------------------------------------------------
solr/CHANGES.txt | 2 +-
.../org/apache/solr/schema/SchemaManager.java | 12 +----
.../solr/rest/schema/TestBulkSchemaAPI.java | 47 ++++++++++++++++++--
3 files changed, 46 insertions(+), 15 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/49c5a749/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index bd83635..2156ee9 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -98,7 +98,7 @@ Bug Fixes
* SOLR-9330: Fix AlreadyClosedException on admin/mbeans?stats=true (Mikhail Khludnev)
-* SOLR-9411: Better validation for Schema REST API add-dynamic-field (janhoy)
+* SOLR-9411: Better validation for Schema API add-field and add-dynamic-field (janhoy, Steve Rowe)
Optimizations
----------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/49c5a749/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
----------------------------------------------------------------------
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 0a83db2..4b0ea54 100644
--- a/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
+++ b/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
@@ -226,13 +226,8 @@ public class SchemaManager {
String type = op.getStr(TYPE);
if (op.hasError())
return false;
- FieldType ft = mgr.managedIndexSchema.getFieldTypeByName(type);
- if (ft == null) {
- op.addError("No such field type '" + type + "'");
- return false;
- }
try {
- SchemaField field = SchemaField.create(name, ft, op.getValuesExcluding(NAME, TYPE));
+ SchemaField field = mgr.managedIndexSchema.newField(name, type, op.getValuesExcluding(NAME, TYPE));
mgr.managedIndexSchema
= mgr.managedIndexSchema.addFields(singletonList(field), Collections.emptyMap(), false);
return true;
@@ -248,11 +243,6 @@ public class SchemaManager {
String type = op.getStr(TYPE);
if (op.hasError())
return false;
- FieldType ft = mgr.managedIndexSchema.getFieldTypeByName(type);
- if (ft == null) {
- op.addError("No such field type '" + type + "'");
- return false;
- }
try {
SchemaField field = mgr.managedIndexSchema.newDynamicField(name, type, op.getValuesExcluding(NAME, TYPE));
mgr.managedIndexSchema
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/49c5a749/solr/core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java
----------------------------------------------------------------------
diff --git a/solr/core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java b/solr/core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java
index 8335bc0d..d5db82e 100644
--- a/solr/core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java
+++ b/solr/core/src/test/org/apache/solr/rest/schema/TestBulkSchemaAPI.java
@@ -92,14 +92,13 @@ public class TestBulkSchemaAPI extends RestTestBase {
String response = restTestHarness.post("/schema?wt=json", json(payload));
Map map = (Map) ObjectBuilder.getVal(new JSONParser(new StringReader(response)));
List l = (List) map.get("errors");
-
+ assertNotNull("No errors", l);
List errorList = (List) ((Map) l.get(0)).get("errorMessages");
assertEquals(1, errorList.size());
- assertTrue (((String)errorList.get(0)).contains("No such field type"));
+ assertTrue (((String)errorList.get(0)).contains("Field 'a1': Field type 'string1' not found.\n"));
errorList = (List) ((Map) l.get(1)).get("errorMessages");
assertEquals(1, errorList.size());
assertTrue (((String)errorList.get(0)).contains("is a required field"));
-
}
public void testAnalyzerClass() throws Exception {
@@ -217,6 +216,48 @@ public class TestBulkSchemaAPI extends RestTestBase {
assertNull(newFieldName + " illegal dynamic field should not have been added to schema", map);
}
+ public void testAddIllegalFields() throws Exception {
+ RestTestHarness harness = restTestHarness;
+
+ // 1. Make sure you can't create a new field with an asterisk in its name
+ String newFieldName = "asterisk*";
+
+ String payload = "{\n" +
+ " 'add-field' : {\n" +
+ " 'name':'" + newFieldName + "',\n" +
+ " 'type':'string',\n" +
+ " 'stored':true,\n" +
+ " 'indexed':true\n" +
+ " }\n" +
+ "}";
+
+ String response = harness.post("/schema?wt=json", json(payload));
+ Map map = (Map)ObjectBuilder.getVal(new JSONParser(new StringReader(response)));
+ assertNotNull(response, map.get("errors"));
+
+ map = getObj(harness, newFieldName, "fields");
+ assertNull(newFieldName + " illegal dynamic field should not have been added to schema", map);
+
+ // 2. Make sure you get an error when you try to create a field that already exists
+ // Make sure 'wdf_nocase' field exists
+ newFieldName = "wdf_nocase";
+ Map m = getObj(harness, newFieldName, "fields");
+ assertNotNull("'" + newFieldName + "' field does not exist in the schema", m);
+
+ payload = "{\n" +
+ " 'add-field' : {\n" +
+ " 'name':'" + newFieldName + "',\n" +
+ " 'type':'string',\n" +
+ " 'stored':true,\n" +
+ " 'indexed':true\n" +
+ " }\n" +
+ "}";
+
+ response = harness.post("/schema?wt=json", json(payload));
+ map = (Map)ObjectBuilder.getVal(new JSONParser(new StringReader(response)));
+ assertNotNull(response, map.get("errors"));
+ }
+
public void testAddFieldWithExistingCatchallDynamicField() throws Exception {
RestTestHarness harness = restTestHarness;