From 1db9e9be1d813bbc51a33f7d30466398c80076f5 Mon Sep 17 00:00:00 2001 From: David Pilato Date: Sat, 10 Jan 2015 12:06:57 +0100 Subject: [PATCH] [Mapper] Using default=null for _timestamp field creates a index loss on restart Step to reproduce: * Create new index and type. ``` DELETE new_index PUT new_index { "mappings": { "power": { "_timestamp" : { "enabled" : true, "default": null } } } } ``` * Add a document ``` PUT new_index/power/1 { "foo": "bar" } ``` * Restart cluster ... and **index is missing**... ``` GET new_index ``` Gives IndexMissingException Closes #9223. --- .../cluster/metadata/MappingMetaData.java | 2 +- .../mapper/timestamp/TimestampMappingTests.java | 16 ++++++++++++++++ 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/main/java/org/elasticsearch/cluster/metadata/MappingMetaData.java b/src/main/java/org/elasticsearch/cluster/metadata/MappingMetaData.java index c06c9a7185e99..6abc565798fb3 100644 --- a/src/main/java/org/elasticsearch/cluster/metadata/MappingMetaData.java +++ b/src/main/java/org/elasticsearch/cluster/metadata/MappingMetaData.java @@ -354,7 +354,7 @@ private void initMappers(Map withoutType) { path = fieldNode.toString(); } else if (fieldName.equals("format")) { format = fieldNode.toString(); - } else if (fieldName.equals("default")) { + } else if (fieldName.equals("default") && fieldNode != null) { defaultTimestamp = fieldNode.toString(); } } diff --git a/src/test/java/org/elasticsearch/index/mapper/timestamp/TimestampMappingTests.java b/src/test/java/org/elasticsearch/index/mapper/timestamp/TimestampMappingTests.java index 35a941e91b0ce..b4cf4ec363094 100644 --- a/src/test/java/org/elasticsearch/index/mapper/timestamp/TimestampMappingTests.java +++ b/src/test/java/org/elasticsearch/index/mapper/timestamp/TimestampMappingTests.java @@ -606,6 +606,22 @@ public void testMergingNullValues() throws Exception { assertThat(mergeResult.hasConflicts(), is(true)); } + /** + * Test for issue #9223 + */ + @Test + public void testInitMappers() throws IOException { + String mapping = XContentFactory.jsonBuilder().startObject() + .startObject("type") + .startObject("_timestamp") + .field("enabled", true) + .field("default", (String) null) + .endObject() + .endObject().endObject().string(); + // This was causing a NPE + new MappingMetaData(new CompressedString(mapping)); + } + @Test public void testMergePaths() throws Exception { String[] possiblePathValues = {"some_path", "anotherPath", null};