-
Notifications
You must be signed in to change notification settings - Fork 25.6k
Description
The code to use .ml-config for storing configurations currently assumes that .ml-config will be a concrete index, not an alias.
Until now we had assumed that we would have until 7.last to sort this out, as that is when people will potentially do a rolling upgrade to 8.x. However, this assumption is wrong. The migration assistant that can reindex indices in the 6.x format into 7.x format will exist in 7.0. There is nothing to stop somebody reindexing a .ml-config index created in 6.x into 7.x format as soon as they install 7.0.
Currently it causes a problem if you do this. I reindexed a 6.x .ml-config index in 7.0.0-beta1 using the migration assistant and got an index called .reindexed-v7-ml-config with an alias .ml-config pointing at it. Some parts of ML still worked in this state, but creating a new job did not:
[2019-02-12T16:13:30,043][DEBUG][o.e.a.b.TransportShardBulkAction] [Davids-MacBook-Pro-7.local] [.reindexed-v7-ml-config][0] failed to execute bulk item (create) index {[.ml-config][doc][anomaly_detector-farequote7], source[{"job_id":"farequote7","job_type":"anomaly_detector","job_version":"7.0.0","create_time":1549988009886,"analysis_config":{"bucket_span":"1h","detectors":[{"detector_description":"metric(responsetime) by airline partitionfield=sourcetype","function":"metric","field_name":"responsetime","by_field_name":"airline","partition_field_name":"sourcetype"}],"influencers":["airline","sourcetype"]},"analysis_limits":{"model_memory_limit":"1024mb","categorization_examples_limit":4},"data_description":{"format":"delimited","time_field":"time","time_format":"yyyy-MM-dd HH:mm:ssX","field_delimiter":",","quote_character":"\""},"model_snapshot_retention_days":1,"results_index_name":"custom-foo"}]}
java.lang.IllegalArgumentException: Rejecting mapping update to [.reindexed-v7-ml-config] as the final mapping would have more than 1 type: [_doc, doc]
at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:449) ~[elasticsearch-7.0.0-beta1.jar:7.0.0-beta1]
at org.elasticsearch.index.mapper.MapperService.internalMerge(MapperService.java:398) ~[elasticsearch-7.0.0-beta1.jar:7.0.0-beta1]
at org.elasticsearch.index.mapper.MapperService.merge(MapperService.java:331) ~[elasticsearch-7.0.0-beta1.jar:7.0.0-beta1]
at org.elasticsearch.cluster.metadata.MetaDataMappingService$PutMappingExecutor.applyRequest(MetaDataMappingService.java:315) ~[elasticsearch-7.0.0-beta1.jar:7.0.0-beta1]
at org.elasticsearch.cluster.metadata.MetaDataMappingService$PutMappingExecutor.execute(MetaDataMappingService.java:238) ~[elasticsearch-7.0.0-beta1.jar:7.0.0-beta1]
at org.elasticsearch.cluster.service.MasterService.executeTasks(MasterService.java:687) ~[elasticsearch-7.0.0-beta1.jar:7.0.0-beta1]
at org.elasticsearch.cluster.service.MasterService.calculateTaskOutputs(MasterService.java:310) ~[elasticsearch-7.0.0-beta1.jar:7.0.0-beta1]
at org.elasticsearch.cluster.service.MasterService.runTasks(MasterService.java:210) ~[elasticsearch-7.0.0-beta1.jar:7.0.0-beta1]
at org.elasticsearch.cluster.service.MasterService$Batcher.run(MasterService.java:142) ~[elasticsearch-7.0.0-beta1.jar:7.0.0-beta1]
at org.elasticsearch.cluster.service.TaskBatcher.runIfNotProcessed(TaskBatcher.java:150) ~[elasticsearch-7.0.0-beta1.jar:7.0.0-beta1]
at org.elasticsearch.cluster.service.TaskBatcher$BatchedTask.run(TaskBatcher.java:188) ~[elasticsearch-7.0.0-beta1.jar:7.0.0-beta1]
at org.elasticsearch.common.util.concurrent.ThreadContext$ContextPreservingRunnable.run(ThreadContext.java:681) ~[elasticsearch-7.0.0-beta1.jar:7.0.0-beta1]
at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.runAndClean(PrioritizedEsThreadPoolExecutor.java:252) ~[elasticsearch-7.0.0-beta1.jar:7.0.0-beta1]
at org.elasticsearch.common.util.concurrent.PrioritizedEsThreadPoolExecutor$TieBreakingPrioritizedRunnable.run(PrioritizedEsThreadPoolExecutor.java:215) ~[elasticsearch-7.0.0-beta1.jar:7.0.0-beta1]
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128) [?:?]
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628) [?:?]
at java.lang.Thread.run(Thread.java:834) [?:?]
Our 7.0 code needs to be made robust to the possibility that .ml-config is an alias to some other index before 7.0.0 GA.