{"record":{"id":"b1f2df64150b14a1","repo":"elastic/elasticsearch","slug":"failed-to-parse-value-s-for-setting-s-must-be","errorCode":null,"errorMessage":"failed to parse value%s for setting [%s], must be lower than setting [%s] which is [%s]","messagePattern":"failed to parse value(.+?) for setting \\[(.+?)\\], must be lower than setting \\[(.+?)\\] which is \\[(.+?)\\]","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":400,"severity":"error","filePath":"modules/data-streams/src/main/java/org/elasticsearch/datastreams/DataStreamsPlugin.java","lineNumber":203,"sourceCode":"        return extensions.isEmpty() ? fallback : extensions.get(0);\n    }\n\n    protected Clock getClock() {\n        return Clock.systemUTC();\n    }\n\n    // The dependency of index.look_ahead_time is a cluster setting and currently there is no clean validation approach for this:\n    static void additionalLookAheadTimeValidation(TimeValue lookAhead, TimeValue timeSeriesPollInterval) {\n        if (lookAhead.compareTo(timeSeriesPollInterval) < 0) {\n            final String message = String.format(\n                Locale.ROOT,\n                \"failed to parse value%s for setting [%s], must be lower than setting [%s] which is [%s]\",\n                \" [\" + lookAhead.getStringRep() + \"]\",\n                LOOK_AHEAD_TIME.getKey(),\n                TIME_SERIES_POLL_INTERVAL.getKey(),\n                timeSeriesPollInterval.getStringRep()\n            );\n            throw new IllegalArgumentException(message);\n        }\n    }\n\n    @Override\n    public List<Setting<?>> getSettings() {\n        List<Setting<?>> pluginSettings = new ArrayList<>();\n        pluginSettings.add(TIME_SERIES_POLL_INTERVAL);\n        pluginSettings.add(LOOK_AHEAD_TIME);\n        pluginSettings.add(LOOK_BACK_TIME);\n        pluginSettings.add(DataStreamIndexSettingsProvider.SUPPORT_SEQ_NO_DISABLED);\n        pluginSettings.add(DataStreamIndexSettingsProvider.SUPPORT_SYNTHETIC_ID);\n        pluginSettings.add(DataStreamLifecycleService.DATA_STREAM_LIFECYCLE_POLL_INTERVAL_SETTING);\n        pluginSettings.add(DataStreamLifecycleService.DATA_STREAM_MERGE_POLICY_TARGET_FLOOR_SEGMENT_SETTING);\n        pluginSettings.add(DataStreamLifecycleService.DATA_STREAM_MERGE_POLICY_TARGET_FACTOR_SETTING);\n        pluginSettings.add(DataStreamLifecycleService.DLM_CREATED_SETTING);\n        pluginSettings.add(DataStreamLifecycleService.DATA_STREAM_MAX_DOWNSAMPLING_INDICES_IN_PROGRESS_SETTING);\n        pluginSettings.add(TransportPastTimeSeriesIndexCreationAction.PAST_TSDB_INDEX_INTERVAL);\n        return pluginSettings;","sourceCodeStart":185,"sourceCodeEnd":221,"githubUrl":"https://github.com/elastic/elasticsearch/blob/db6a809a667c081ca1dc7500389d26975573215f/modules/data-streams/src/main/java/org/elasticsearch/datastreams/DataStreamsPlugin.java#L185-L221","documentation":"Thrown by DataStreamsPlugin.additionalLookAheadTimeValidation when index.look_ahead_time is set to a value greater than or equal to the cluster setting index.time_series.poll_interval. The look-ahead window must be strictly smaller than the poll interval so that successive time-series windows do not overlap incorrectly. The message names both settings and their values.","triggerScenarios":"Configuring index.look_ahead_time >= index.time_series.poll_interval, e.g. look_ahead_time=2m with poll_interval=1m. The validation runs when the look-ahead setting is parsed/updated.","commonSituations":"Tuning tsdb ingestion bounds and forgetting the poll_interval constraint; changing poll_interval down without re-checking look_ahead_time; defaults overridden by a template.","solutions":["Lower index.look_ahead_time to a value strictly below index.time_series.poll_interval.","Or raise index.time_series.poll_interval above the configured look_ahead_time.","Re-apply the change with both values consistent, e.g. look_ahead_time=30s, poll_interval=1m."],"exampleFix":"// before\nPUT _cluster/settings\n{\"persistent\":{\"index.look_ahead_time\":\"2m\",\"index.time_series.poll_interval\":\"1m\"}}\n// after\n{\"persistent\":{\"index.look_ahead_time\":\"30s\",\"index.time_series.poll_interval\":\"1m\"}}","handlingStrategy":"validation","validationCode":"// Validate look_ahead_time < time_series_poll_interval before applying.\nfunction validateLookAhead(lookAheadMs, pollIntervalMs) {\n  if (!(lookAheadMs < pollIntervalMs)) {\n    throw new Error(`index.look_ahead_time (${lookAheadMs}ms) must be lower than index.time_series.poll_interval (${pollIntervalMs}ms)`);\n  }\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Treat look_ahead_time and time_series_poll_interval as a pair; change them together.","Keep look_ahead_time well under poll_interval to absorb future tuning."],"tags":["data-streams","tsdb","settings-validation","time-series","elasticsearch"],"backgroundTag":null,"analyzedSha":"db6a809a667c081ca1dc7500389d26975573215f","analyzedAt":"2026-08-12T01:39:14.192Z","schemaVersion":2},"datasetVersion":"2026-08-13T09:17:06.757Z"}