{"record":{"id":"0b1fa3e1374d63c9","repo":"elastic/elasticsearch","slug":"failed-to-determine-indexmode-for-data-stream","errorCode":null,"errorMessage":"Failed to determine indexMode for data stream: {}","messagePattern":"Failed to determine indexMode for data stream: (.+?)","errorType":"exception","errorClass":"RuntimeException","httpStatus":500,"severity":"error","filePath":"modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportGetDataStreamsAction.java","lineNumber":308,"sourceCode":"                        state.metadata()\n                    );\n                    Settings templateSettings = MetadataIndexTemplateService.resolveSettings(\n                        template,\n                        state.metadata().componentTemplates()\n                    );\n                    final Settings settings = templateSettings.merge(dataStream.getSettings());\n                    ilmPolicyName = settings.get(IndexMetadata.LIFECYCLE_NAME);\n                    if (indexMode == null && state.metadata().templatesV2().get(indexTemplate) != null) {\n                        try {\n                            indexMode = resolveMode(\n                                state,\n                                indexSettingProviders,\n                                dataStream,\n                                settings,\n                                dataStream.getEffectiveIndexTemplate(state.metadata())\n                            );\n                        } catch (IOException e) {\n                            throw new RuntimeException(\"Failed to determine indexMode for data stream: \" + dataStream.getName(), e);\n                        }\n                    }\n                    indexTemplatePreferIlmValue = PREFER_ILM_SETTING.get(settings);\n                } else {\n                    LOGGER.warn(\n                        \"couldn't find any matching template for data stream [{}]. has it been restored (and possibly renamed)\"\n                            + \"from a snapshot?\",\n                        dataStream.getName()\n                    );\n                }\n            }\n\n            ClusterStateHealth streamHealth = new ClusterStateHealth(\n                state.cluster(),\n                dataStream.getIndices().stream().map(Index::getName).toArray(String[]::new),\n                state.projectId()\n            );\n","sourceCodeStart":290,"sourceCodeEnd":326,"githubUrl":"https://github.com/elastic/elasticsearch/blob/db6a809a667c081ca1dc7500389d26975573215f/modules/data-streams/src/main/java/org/elasticsearch/datastreams/action/TransportGetDataStreamsAction.java#L290-L326","documentation":"Thrown by TransportGetDataStreamsAction while resolving the index mode of a data stream when resolveMode throws an IOException (template parsing, settings merge, or mode computation failure). It is wrapped in a RuntimeException because the cluster-state applier path does not declare checked IOException; the original IOException is preserved as the cause.","triggerScenarios":"GET _data_stream during a state where the data stream's effective index template is present but its composable template definition fails to parse or its settings cannot be merged to compute a mode. Corrupted/invalid template metadata in the cluster state triggers it.","commonSituations":"Cluster state with a malformed or version-mismatched index template after upgrade/restore; concurrent template update leaving transient inconsistency; custom index_setting_provider throwing.","solutions":["Inspect the wrapped IOException cause for the underlying parse/merge failure.","Correct or recreate the offending composable index template referenced by the data stream.","If caused by version skew, ensure all nodes are on a compatible version and re-simulate the template with POST _index_template/_simulate_index."],"exampleFix":null,"handlingStrategy":"try-catch","validationCode":null,"typeGuard":null,"tryCatchPattern":"try {\n  DataStream resolved = resolveMode(state, providers, dataStream, settings, template);\n} catch (IOException | RuntimeException e) {\n  Throwable cause = e.getCause() != null ? e.getCause() : e;\n  log.warn(\"failed to determine indexMode for data stream {}\", dataStream.getName(), cause);\n  // surface a clearer error to the caller; do not silently default the mode\n  throw new IllegalStateException(\"cannot resolve index mode for \" + dataStream.getName(), cause);\n}","preventionTips":["Keep composable index templates well-formed and version-compatible across nodes.","After upgrade/restore, simulate templates with POST _index_template/_simulate_index to catch parse errors early."],"tags":["data-streams","index-mode","template","cluster-state","elasticsearch"],"backgroundTag":null,"analyzedSha":"db6a809a667c081ca1dc7500389d26975573215f","analyzedAt":"2026-08-12T01:39:14.192Z","schemaVersion":2},"datasetVersion":"2026-08-12T13:17:24.610Z"}