You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@lucene.apache.org by ja...@apache.org on 2016/09/27 10:27:30 UTC
lucene-solr:branch_6x: SOLR-9411: Better validation of dynamic field
for Schema API
Repository: lucene-solr
Updated Branches:
refs/heads/branch_6x 30c26b331 -> 53fcc7563
SOLR-9411: Better validation of dynamic field for Schema API
(cherry picked from commit 8046fe2)
Project: http://git-wip-us.apache.org/repos/asf/lucene-solr/repo
Commit: http://git-wip-us.apache.org/repos/asf/lucene-solr/commit/53fcc756
Tree: http://git-wip-us.apache.org/repos/asf/lucene-solr/tree/53fcc756
Diff: http://git-wip-us.apache.org/repos/asf/lucene-solr/diff/53fcc756
Branch: refs/heads/branch_6x
Commit: 53fcc7563c1010e34a8f0889968711816bcb89ff
Parents: 30c26b3
Author: Jan H�ydahl <ja...@apache.org>
Authored: Tue Sep 27 12:17:38 2016 +0200
Committer: Jan H�ydahl <ja...@apache.org>
Committed: Tue Sep 27 12:21:46 2016 +0200
----------------------------------------------------------------------
solr/CHANGES.txt | 2 ++
.../org/apache/solr/schema/SchemaManager.java | 2 +-
.../solr/rest/schema/TestBulkSchemaAPI.java | 22 ++++++++++++++++++++
.../solr/client/solrj/request/SchemaTest.java | 11 +++-------
4 files changed, 28 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/53fcc756/solr/CHANGES.txt
----------------------------------------------------------------------
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index f1a6db0..1106759 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -98,6 +98,8 @@ 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)
+
Optimizations
----------------------
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/53fcc756/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 ca3d756..0a83db2 100644
--- a/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
+++ b/solr/core/src/java/org/apache/solr/schema/SchemaManager.java
@@ -254,7 +254,7 @@ public class SchemaManager {
return false;
}
try {
- SchemaField field = SchemaField.create(name, ft, op.getValuesExcluding(NAME, TYPE));
+ SchemaField field = mgr.managedIndexSchema.newDynamicField(name, type, op.getValuesExcluding(NAME, TYPE));
mgr.managedIndexSchema
= mgr.managedIndexSchema.addDynamicFields(singletonList(field), Collections.emptyMap(), false);
return true;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/53fcc756/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 4fbd972..8335bc0d 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
@@ -195,6 +195,28 @@ public class TestBulkSchemaAPI extends RestTestBase {
assertNotNull("Field '" + newFieldName + "' is not in the schema", map);
}
+ public void testAddIllegalDynamicField() throws Exception {
+ RestTestHarness harness = restTestHarness;
+
+ String newFieldName = "illegal";
+
+ String payload = "{\n" +
+ " 'add-dynamic-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, "dynamicFields");
+ assertNull(newFieldName + " illegal dynamic field should not have been added to schema", map);
+ }
+
public void testAddFieldWithExistingCatchallDynamicField() throws Exception {
RestTestHarness harness = restTestHarness;
http://git-wip-us.apache.org/repos/asf/lucene-solr/blob/53fcc756/solr/solrj/src/test/org/apache/solr/client/solrj/request/SchemaTest.java
----------------------------------------------------------------------
diff --git a/solr/solrj/src/test/org/apache/solr/client/solrj/request/SchemaTest.java b/solr/solrj/src/test/org/apache/solr/client/solrj/request/SchemaTest.java
index 72051b1..3e8d001 100644
--- a/solr/solrj/src/test/org/apache/solr/client/solrj/request/SchemaTest.java
+++ b/solr/solrj/src/test/org/apache/solr/client/solrj/request/SchemaTest.java
@@ -54,8 +54,8 @@ import static org.hamcrest.CoreMatchers.is;
*/
public class SchemaTest extends RestTestBase {
private static void assertValidSchemaResponse(SolrResponseBase schemaResponse) {
- assertEquals(0, schemaResponse.getStatus());
- assertNull(schemaResponse.getResponse().get("errors"));
+ assertEquals("Response contained errors: " + schemaResponse.toString(), 0, schemaResponse.getStatus());
+ assertNull("Response contained errors: " + schemaResponse.toString(), schemaResponse.getResponse().get("errors"));
}
private static void createStoredStringField(String fieldName, SolrClient solrClient) throws Exception {
@@ -392,8 +392,7 @@ public class SchemaTest extends RestTestBase {
fieldAttributes.put("type", "string");
fieldAttributes.put("stored", false);
fieldAttributes.put("indexed", true);
- fieldAttributes.put("default", "accuracy");
- fieldAttributes.put("required", true);
+ // Dynamic fields cannot be required or have a default value
SchemaRequest.AddDynamicField addFieldUpdateSchemaRequest =
new SchemaRequest.AddDynamicField(fieldAttributes);
SchemaResponse.UpdateResponse addFieldResponse = addFieldUpdateSchemaRequest.process(getSolrClient());
@@ -413,8 +412,6 @@ public class SchemaTest extends RestTestBase {
assertThat("string", is(equalTo(newFieldAttributes.get("type"))));
assertThat(false, is(equalTo(newFieldAttributes.get("stored"))));
assertThat(true, is(equalTo(newFieldAttributes.get("indexed"))));
- assertThat("accuracy", is(equalTo(newFieldAttributes.get("default"))));
- assertThat(true, is(equalTo(newFieldAttributes.get("required"))));
}
@Test
@@ -481,7 +478,6 @@ public class SchemaTest extends RestTestBase {
fieldAttributes.put("type", "string");
fieldAttributes.put("stored", false);
fieldAttributes.put("indexed", true);
- fieldAttributes.put("required", true);
SchemaRequest.AddDynamicField addDFieldUpdateSchemaRequest =
new SchemaRequest.AddDynamicField(fieldAttributes);
SchemaResponse.UpdateResponse addFieldResponse = addDFieldUpdateSchemaRequest.process(getSolrClient());
@@ -506,7 +502,6 @@ public class SchemaTest extends RestTestBase {
assertThat("string", is(equalTo(newFieldAttributes.get("type"))));
assertThat(true, is(equalTo(newFieldAttributes.get("stored"))));
assertThat(false, is(equalTo(newFieldAttributes.get("indexed"))));
- assertThat(true, is(equalTo(newFieldAttributes.get("required"))));
}
@Test