Skip to content

Setting empty string as null_value in date field breaks 7.9 upgrade #62363

@psanz-estc

Description

@psanz-estc

Elasticsearch version (bin/elasticsearch --version): 7.9.X

Plugins installed: []

JVM version (java -version):

OS version (uname -a if on a Unix-like system):

Related to: #61712

Description of the problem including expected versus actual behavior:

7.9.X upgrade is broken when there are indexes with "null_value": "" in their mappings.

Steps to reproduce:

In 7.8 (or earlier) create an index with the following mappings:

PUT testindex1
{
  "mappings": {
    "properties": {
      "testdate": {
        "type": "date",
        "null_value": "",
        "format": "dd/MM/yyyy HH:mm:ss"
      }
    }
  }
}

That didn't return any warning/error message...

Then when trying to upgrade to 7.9..X, ES is unable to upgrade the mappings for the testindex1, and exits.

Provide logs (if relevant):

Logs after ES has been upgraded to 7.9.1:

[2020-09-15T11:33:53,429][INFO ][o.e.n.Node               ] [node-1] starting ...
[2020-09-15T11:33:53,844][INFO ][o.e.t.TransportService   ] [node-1] publish_address {192.168.64.3:9300}, bound_addresses {[::]:9300}
[2020-09-15T11:33:56,861][ERROR][o.e.b.Bootstrap          ] [node-1] Exception
java.lang.IllegalStateException: unable to upgrade the mappings for the index [[testindex1/UHhZyWKOSGu2wkfRvTH-mg]]
	at org.elasticsearch.cluster.metadata.MetadataIndexUpgradeService.checkMappingsCompatibility(MetadataIndexUpgradeService.java:192) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.cluster.metadata.MetadataIndexUpgradeService.upgradeIndexMetadata(MetadataIndexUpgradeService.java:92) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.gateway.GatewayMetaState.upgradeMetadata(GatewayMetaState.java:247) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.gateway.GatewayMetaState.upgradeMetadataForNode(GatewayMetaState.java:230) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.gateway.GatewayMetaState.start(GatewayMetaState.java:161) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.node.Node.start(Node.java:786) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Bootstrap.start(Bootstrap.java:317) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:402) [elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:170) [elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:161) [elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) [elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:127) [elasticsearch-cli-7.9.1.jar:7.9.1]
	at org.elasticsearch.cli.Command.main(Command.java:90) [elasticsearch-cli-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:126) [elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) [elasticsearch-7.9.1.jar:7.9.1]
Caused by: org.elasticsearch.index.mapper.MapperParsingException: Failed to parse mapping [_doc]: failed to parse date field [NULL] with format [dd/MM/yyyy HH:mm:ss]
	at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:423) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:377) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.MapperService.merge(MapperService.java:355) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.cluster.metadata.MetadataIndexUpgradeService.checkMappingsCompatibility(MetadataIndexUpgradeService.java:188) ~[elasticsearch-7.9.1.jar:7.9.1]
	... 14 more
Caused by: java.lang.IllegalArgumentException: failed to parse date field [NULL] with format [dd/MM/yyyy HH:mm:ss]
	at org.elasticsearch.common.time.JavaDateFormatter.parse(JavaDateFormatter.java:169) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.common.time.DateFormatter.parseMillis(DateFormatter.java:51) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.DateFieldMapper$Builder.build(DateFieldMapper.java:257) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.DateFieldMapper$Builder.build(DateFieldMapper.java:182) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.ObjectMapper$Builder.build(ObjectMapper.java:180) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.RootObjectMapper$Builder.build(RootObjectMapper.java:88) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.DocumentMapper$Builder.<init>(DocumentMapper.java:74) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.DocumentMapperParser.parse(DocumentMapperParser.java:108) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.DocumentMapperParser.parse(DocumentMapperParser.java:88) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:421) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:377) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.MapperService.merge(MapperService.java:355) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.cluster.metadata.MetadataIndexUpgradeService.checkMappingsCompatibility(MetadataIndexUpgradeService.java:188) ~[elasticsearch-7.9.1.jar:7.9.1]
	... 14 more
Caused by: java.time.format.DateTimeParseException: Text 'NULL' could not be parsed at index 0
	at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2050) ~[?:?]
	at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1878) ~[?:?]
	at org.elasticsearch.common.time.JavaDateFormatter.doParse(JavaDateFormatter.java:198) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.common.time.JavaDateFormatter.parse(JavaDateFormatter.java:167) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.common.time.DateFormatter.parseMillis(DateFormatter.java:51) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.DateFieldMapper$Builder.build(DateFieldMapper.java:257) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.DateFieldMapper$Builder.build(DateFieldMapper.java:182) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.ObjectMapper$Builder.build(ObjectMapper.java:180) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.RootObjectMapper$Builder.build(RootObjectMapper.java:88) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.DocumentMapper$Builder.<init>(DocumentMapper.java:74) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.DocumentMapperParser.parse(DocumentMapperParser.java:108) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.DocumentMapperParser.parse(DocumentMapperParser.java:88) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:421) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:377) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.MapperService.merge(MapperService.java:355) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.cluster.metadata.MetadataIndexUpgradeService.checkMappingsCompatibility(MetadataIndexUpgradeService.java:188) ~[elasticsearch-7.9.1.jar:7.9.1]
	... 14 more
[2020-09-15T11:33:56,894][ERROR][o.e.b.ElasticsearchUncaughtExceptionHandler] [node-1] uncaught exception in thread [main]
org.elasticsearch.bootstrap.StartupException: java.lang.IllegalStateException: unable to upgrade the mappings for the index [[testindex1/UHhZyWKOSGu2wkfRvTH-mg]]
	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:174) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:161) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:86) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:127) ~[elasticsearch-cli-7.9.1.jar:7.9.1]
	at org.elasticsearch.cli.Command.main(Command.java:90) ~[elasticsearch-cli-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:126) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:92) ~[elasticsearch-7.9.1.jar:7.9.1]
Caused by: java.lang.IllegalStateException: unable to upgrade the mappings for the index [[testindex1/UHhZyWKOSGu2wkfRvTH-mg]]
	at org.elasticsearch.cluster.metadata.MetadataIndexUpgradeService.checkMappingsCompatibility(MetadataIndexUpgradeService.java:192) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.cluster.metadata.MetadataIndexUpgradeService.upgradeIndexMetadata(MetadataIndexUpgradeService.java:92) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.gateway.GatewayMetaState.upgradeMetadata(GatewayMetaState.java:247) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.gateway.GatewayMetaState.upgradeMetadataForNode(GatewayMetaState.java:230) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.gateway.GatewayMetaState.start(GatewayMetaState.java:161) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.node.Node.start(Node.java:786) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Bootstrap.start(Bootstrap.java:317) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:402) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:170) ~[elasticsearch-7.9.1.jar:7.9.1]
	... 6 more
Caused by: org.elasticsearch.index.mapper.MapperParsingException: Failed to parse mapping [_doc]: failed to parse date field [NULL] with format [dd/MM/yyyy HH:mm:ss]
	at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:423) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:377) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.MapperService.merge(MapperService.java:355) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.cluster.metadata.MetadataIndexUpgradeService.checkMappingsCompatibility(MetadataIndexUpgradeService.java:188) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.cluster.metadata.MetadataIndexUpgradeService.upgradeIndexMetadata(MetadataIndexUpgradeService.java:92) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.gateway.GatewayMetaState.upgradeMetadata(GatewayMetaState.java:247) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.gateway.GatewayMetaState.upgradeMetadataForNode(GatewayMetaState.java:230) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.gateway.GatewayMetaState.start(GatewayMetaState.java:161) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.node.Node.start(Node.java:786) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Bootstrap.start(Bootstrap.java:317) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:402) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:170) ~[elasticsearch-7.9.1.jar:7.9.1]
	... 6 more
Caused by: java.lang.IllegalArgumentException: failed to parse date field [NULL] with format [dd/MM/yyyy HH:mm:ss]
	at org.elasticsearch.common.time.JavaDateFormatter.parse(JavaDateFormatter.java:169) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.common.time.DateFormatter.parseMillis(DateFormatter.java:51) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.DateFieldMapper$Builder.build(DateFieldMapper.java:257) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.DateFieldMapper$Builder.build(DateFieldMapper.java:182) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.ObjectMapper$Builder.build(ObjectMapper.java:180) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.RootObjectMapper$Builder.build(RootObjectMapper.java:88) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.DocumentMapper$Builder.<init>(DocumentMapper.java:74) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.DocumentMapperParser.parse(DocumentMapperParser.java:108) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.DocumentMapperParser.parse(DocumentMapperParser.java:88) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:421) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:377) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.MapperService.merge(MapperService.java:355) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.cluster.metadata.MetadataIndexUpgradeService.checkMappingsCompatibility(MetadataIndexUpgradeService.java:188) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.cluster.metadata.MetadataIndexUpgradeService.upgradeIndexMetadata(MetadataIndexUpgradeService.java:92) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.gateway.GatewayMetaState.upgradeMetadata(GatewayMetaState.java:247) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.gateway.GatewayMetaState.upgradeMetadataForNode(GatewayMetaState.java:230) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.gateway.GatewayMetaState.start(GatewayMetaState.java:161) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.node.Node.start(Node.java:786) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Bootstrap.start(Bootstrap.java:317) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:402) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:170) ~[elasticsearch-7.9.1.jar:7.9.1]
	... 6 more
Caused by: java.time.format.DateTimeParseException: Text 'NULL' could not be parsed at index 0
	at java.time.format.DateTimeFormatter.parseResolved0(DateTimeFormatter.java:2050) ~[?:?]
	at java.time.format.DateTimeFormatter.parse(DateTimeFormatter.java:1878) ~[?:?]
	at org.elasticsearch.common.time.JavaDateFormatter.doParse(JavaDateFormatter.java:198) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.common.time.JavaDateFormatter.parse(JavaDateFormatter.java:167) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.common.time.DateFormatter.parseMillis(DateFormatter.java:51) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.DateFieldMapper$Builder.build(DateFieldMapper.java:257) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.DateFieldMapper$Builder.build(DateFieldMapper.java:182) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.ObjectMapper$Builder.build(ObjectMapper.java:180) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.RootObjectMapper$Builder.build(RootObjectMapper.java:88) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.DocumentMapper$Builder.<init>(DocumentMapper.java:74) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.DocumentMapperParser.parse(DocumentMapperParser.java:108) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.DocumentMapperParser.parse(DocumentMapperParser.java:88) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:421) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:377) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.index.mapper.MapperService.merge(MapperService.java:355) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.cluster.metadata.MetadataIndexUpgradeService.checkMappingsCompatibility(MetadataIndexUpgradeService.java:188) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.cluster.metadata.MetadataIndexUpgradeService.upgradeIndexMetadata(MetadataIndexUpgradeService.java:92) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.gateway.GatewayMetaState.upgradeMetadata(GatewayMetaState.java:247) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.gateway.GatewayMetaState.upgradeMetadataForNode(GatewayMetaState.java:230) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.gateway.GatewayMetaState.start(GatewayMetaState.java:161) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.node.Node.start(Node.java:786) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Bootstrap.start(Bootstrap.java:317) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:402) ~[elasticsearch-7.9.1.jar:7.9.1]
	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:170) ~[elasticsearch-7.9.1.jar:7.9.1]
	... 6 more
[2020-09-15T11:33:56,957][INFO ][o.e.n.Node               ] [node-1] stopping ...
[2020-09-15T11:33:57,010][INFO ][o.e.n.Node               ] [node-1] stopped
[2020-09-15T11:33:57,011][INFO ][o.e.n.Node               ] [node-1] closing ...
[2020-09-15T11:33:57,094][INFO ][o.e.n.Node               ] [node-1] closed
[2020-09-15T11:33:57,099][INFO ][o.e.x.m.p.NativeController] [node-1] Native controller process has stopped - no new native processes can be started

Metadata

Metadata

Assignees

Labels

:Search Foundations/MappingIndex mappings, including merging and defining field types>bugTeam:Search FoundationsMeta label for the Search Foundations team in Elasticsearch

Type

No type

Projects

No projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions