From 0e7fb54791126c7f1a0c72025e597d9e7497f81e Mon Sep 17 00:00:00 2001 From: Adrien Grand Date: Mon, 20 Jan 2014 13:40:18 +0100 Subject: [PATCH] Return a conflict when trying to enable/disable norms. Close #4761 --- .../index/mapper/core/AbstractFieldMapper.java | 3 +++ .../indices/mapping/UpdateMappingTests.java | 10 ++++++++++ 2 files changed, 13 insertions(+) diff --git a/src/main/java/org/elasticsearch/index/mapper/core/AbstractFieldMapper.java b/src/main/java/org/elasticsearch/index/mapper/core/AbstractFieldMapper.java index f635c55590889..7dabdc301dc48 100644 --- a/src/main/java/org/elasticsearch/index/mapper/core/AbstractFieldMapper.java +++ b/src/main/java/org/elasticsearch/index/mapper/core/AbstractFieldMapper.java @@ -561,6 +561,9 @@ public void merge(Mapper mergeWith, MergeContext mergeContext) throws MergeMappi // when the doc_values field data format is configured mergeContext.addConflict("mapper [" + names.fullName() + "] has different " + TypeParsers.DOC_VALUES + " values"); } + if (this.fieldType().omitNorms() != fieldMergeWith.fieldType.omitNorms()) { + mergeContext.addConflict("mapper [" + names.fullName() + "] has different `norms.enabled` values"); + } if (this.fieldType().tokenized() != fieldMergeWith.fieldType().tokenized()) { mergeContext.addConflict("mapper [" + names.fullName() + "] has different tokenize values"); } diff --git a/src/test/java/org/elasticsearch/indices/mapping/UpdateMappingTests.java b/src/test/java/org/elasticsearch/indices/mapping/UpdateMappingTests.java index 81ed364e80b3a..f2de136ef9d4f 100644 --- a/src/test/java/org/elasticsearch/indices/mapping/UpdateMappingTests.java +++ b/src/test/java/org/elasticsearch/indices/mapping/UpdateMappingTests.java @@ -182,6 +182,16 @@ public void updateMappingWithConflicts() throws Exception { assertThat(putMappingResponse.isAcknowledged(), equalTo(true)); } + @Test(expected = MergeMappingException.class) + public void updateMappingWithNormsConflicts() throws Exception { + client().admin().indices().prepareCreate("test") + .addMapping("type", "{\"type\":{\"properties\":{\"body\":{\"type\":\"string\", \"norms\": { \"enabled\": false }}}}}") + .execute().actionGet(); + PutMappingResponse putMappingResponse = client().admin().indices().preparePutMapping("test").setType("type") + .setSource("{\"type\":{\"properties\":{\"body\":{\"type\":\"string\", \"norms\": { \"enabled\": true }}}}}") + .execute().actionGet(); + } + /* First regression test for https://github.com/elasticsearch/elasticsearch/issues/3381 */