Skip to content

Shard IP filtering does not support wildcards (which breaks 2.x to 5.5.1 upgrade) #26184

Closed
@joedj

Description

@joedj

Elasticsearch version (bin/elasticsearch --version):
Version: 5.5.1, Build: 19c13d0/2017-07-18T20:44:24.823Z, JVM: 1.8.0_141

Plugins installed:
discovery-ec2 ingest-geoip ingest-user-agent x-pack

JVM version (java -version):
openjdk version "1.8.0_141"
OpenJDK Runtime Environment (build 1.8.0_141-b16)
OpenJDK 64-Bit Server VM (build 25.141-b16, mixed mode)

OS version (uname -a if on a Unix-like system):
Linux cd24f177cfe3 4.9.38-16.33.amzn1.x86_64 #1 SMP Thu Jul 20 01:31:29 UTC 2017 x86_64 x86_64 x86_64 GNU/Linux

Description of the problem including expected versus actual behavior:

The docs at https://www.elastic.co/guide/en/elasticsearch/reference/current/shard-allocation-filtering.html and https://www.elastic.co/guide/en/elasticsearch/reference/current/allocation-filtering.html specify that these settings support wildcards (in our case, we're concerned specifically with index.routing.allocation.include._ip).

This is not currently true. Attempting to use the example from the docs results in:

{"error":{"root_cause":[{"type":"illegal_argument_exception","reason":"invalid IP address [192.168.2.*] for [_ip]"}],"type":"illegal_argument_exception","reason":"invalid IP address [192.168.2.*] for [_ip]"},"status":400}

This is preventing us from upgrading a 2.x cluster to 5.5.1, because the value is currently set to "*". In 2.x, I don't believe it's possible to delete these settings.

I'm sure we can think of some nasty workaround that will allow us to upgrade our old cluster, but suggestions are welcome

Steps to reproduce:

curl -s -XPUT localhost:9200/_cluster/settings --data-binary @- <<"END" | jq .
{
    "transient": {
        "cluster.routing.allocation.include._ip" : "*"
    }
}
END
{
  "error": {
    "root_cause": [
      {
        "type": "illegal_argument_exception",
        "reason": "invalid IP address [*] for [_ip]"
      }
    ],
    "type": "illegal_argument_exception",
    "reason": "invalid IP address [*] for [_ip]"
  },
  "status": 400
}

Provide logs:

Logs from an attempt to start a node using ES 5.5.1, with an index from ES 2.4.1:

[2017-08-14T00:43:25,522][ERROR][org.elasticsearch.gateway.GatewayMetaState] [cd24f177cfe3] failed to read local state, exiting...
org.elasticsearch.ElasticsearchException: java.io.IOException: failed to read [id:5, legacy:false, file:/var/lib/elasticsearch/data/nodes/0/indices/.kibana/_state/state-5.st]
	at org.elasticsearch.ExceptionsHelper.maybeThrowRuntimeAndSuppress(ExceptionsHelper.java:150) ~[elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.gateway.MetaDataStateFormat.loadLatestState(MetaDataStateFormat.java:334) ~[elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.util.IndexFolderUpgrader.upgrade(IndexFolderUpgrader.java:90) ~[elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.util.IndexFolderUpgrader.upgradeIndicesIfNeeded(IndexFolderUpgrader.java:128) ~[elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.gateway.GatewayMetaState.<init>(GatewayMetaState.java:91) [elasticsearch-5.5.1.jar:5.5.1]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:?]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) [?:1.8.0_141]
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) [?:1.8.0_141]
	at java.lang.reflect.Constructor.newInstance(Constructor.java:423) [?:1.8.0_141]
	at org.elasticsearch.common.inject.DefaultConstructionProxyFactory$1.newInstance(DefaultConstructionProxyFactory.java:49) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.ConstructorInjector.construct(ConstructorInjector.java:86) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:116) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:47) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.java:825) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:43) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.Scopes$1$1.get(Scopes.java:59) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:50) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.SingleParameterInjector.inject(SingleParameterInjector.java:42) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.SingleParameterInjector.getAll(SingleParameterInjector.java:66) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.ConstructorInjector.construct(ConstructorInjector.java:85) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.ConstructorBindingImpl$Factory.get(ConstructorBindingImpl.java:116) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter$1.call(ProviderToInternalFactoryAdapter.java:47) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.java:825) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.ProviderToInternalFactoryAdapter.get(ProviderToInternalFactoryAdapter.java:43) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.Scopes$1$1.get(Scopes.java:59) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.InternalFactoryToProviderAdapter.get(InternalFactoryToProviderAdapter.java:50) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.InjectorBuilder$1.call(InjectorBuilder.java:191) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.InjectorBuilder$1.call(InjectorBuilder.java:183) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.InjectorImpl.callInContext(InjectorImpl.java:818) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.InjectorBuilder.loadEagerSingletons(InjectorBuilder.java:183) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.InjectorBuilder.loadEagerSingletons(InjectorBuilder.java:173) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.InjectorBuilder.injectDynamically(InjectorBuilder.java:161) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.InjectorBuilder.build(InjectorBuilder.java:96) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.Guice.createInjector(Guice.java:96) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.Guice.createInjector(Guice.java:70) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.inject.ModulesBuilder.createInjector(ModulesBuilder.java:42) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.node.Node.<init>(Node.java:497) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.node.Node.<init>(Node.java:244) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.bootstrap.Bootstrap$5.<init>(Bootstrap.java:232) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.bootstrap.Bootstrap.setup(Bootstrap.java:232) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.bootstrap.Bootstrap.init(Bootstrap.java:351) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.bootstrap.Elasticsearch.init(Elasticsearch.java:123) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.bootstrap.Elasticsearch.execute(Elasticsearch.java:114) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.cli.EnvironmentAwareCommand.execute(EnvironmentAwareCommand.java:67) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.cli.Command.mainWithoutErrorHandling(Command.java:122) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.cli.Command.main(Command.java:88) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:91) [elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.bootstrap.Elasticsearch.main(Elasticsearch.java:84) [elasticsearch-5.5.1.jar:5.5.1]
Caused by: java.io.IOException: failed to read [id:5, legacy:false, file:/var/lib/elasticsearch/data/nodes/0/indices/.kibana/_state/state-5.st]
	at org.elasticsearch.gateway.MetaDataStateFormat.loadLatestState(MetaDataStateFormat.java:327) ~[elasticsearch-5.5.1.jar:5.5.1]
	... 46 more
Caused by: java.lang.IllegalArgumentException: invalid IP address [*] for [_ip]
	at org.elasticsearch.cluster.node.DiscoveryNodeFilters.lambda$static$0(DiscoveryNodeFilters.java:58) ~[elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.settings.Setting$3.get(Setting.java:908) ~[elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.common.settings.Setting$3.get(Setting.java:885) ~[elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.cluster.metadata.IndexMetaData$Builder.build(IndexMetaData.java:1026) ~[elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.cluster.metadata.IndexMetaData$Builder.fromXContent(IndexMetaData.java:1240) ~[elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.cluster.metadata.IndexMetaData$1.fromXContent(IndexMetaData.java:1302) ~[elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.cluster.metadata.IndexMetaData$1.fromXContent(IndexMetaData.java:1293) ~[elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.gateway.MetaDataStateFormat.read(MetaDataStateFormat.java:202) ~[elasticsearch-5.5.1.jar:5.5.1]
	at org.elasticsearch.gateway.MetaDataStateFormat.loadLatestState(MetaDataStateFormat.java:322) ~[elasticsearch-5.5.1.jar:5.5.1]
	... 46 more

Metadata

Metadata

Assignees

No one assigned

    Labels

    :Distributed Indexing/DistributedA catch all label for anything in the Distributed Indexing Area. Please avoid if you can.>bug

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions