{"record":{"id":"5e6a49cdccfdd2e5","repo":"elastic/elasticsearch","slug":"thissettingkey-value-must-be-greater-than-o","errorCode":null,"errorMessage":"{thisSettingKey} ({value}) must be greater than {otherSetting.getKey()} ({otherValue})","messagePattern":"(.+?) \\((.+?)\\) must be greater than (.+?) \\((.+?)\\)","errorType":"validation","errorClass":"IllegalArgumentException","httpStatus":null,"severity":"error","filePath":"modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/export/otelsdk/OtelSdkSettings.java","lineNumber":368,"sourceCode":"\n    private static final class GreaterThanTimeValueValidator implements Setting.Validator<TimeValue> {\n\n        private final String thisSettingKey;\n        private final Setting<TimeValue> otherSetting;\n\n        private GreaterThanTimeValueValidator(String thisSettingKey, Setting<TimeValue> otherSetting) {\n            this.thisSettingKey = thisSettingKey;\n            this.otherSetting = otherSetting;\n        }\n\n        @Override\n        public void validate(TimeValue value) {}\n\n        @Override\n        public void validate(TimeValue value, Map<Setting<?>, Object> settings) {\n            var otherValue = (TimeValue) settings.get(otherSetting);\n            if (value.compareTo(otherValue) <= 0) {\n                throw new IllegalArgumentException(\n                    thisSettingKey + \" (\" + value + \") must be greater than \" + otherSetting.getKey() + \" (\" + otherValue + \")\"\n                );\n            }\n        }\n\n        @Override\n        public Iterator<Setting<?>> settings() {\n            return List.<Setting<?>>of(otherSetting).iterator();\n        }\n    }\n}\n","sourceCodeStart":350,"sourceCodeEnd":380,"githubUrl":"https://github.com/elastic/elasticsearch/blob/db6a809a667c081ca1dc7500389d26975573215f/modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/export/otelsdk/OtelSdkSettings.java#L350-L380","documentation":"GreaterThanTimeValueValidator is a Setting.Validator<TimeValue> that enforces a strict ordering between two time-value settings: this setting's value must be strictly greater (compareTo > 0) than the referenced other setting's value. If value <= otherValue, throws IllegalArgumentException naming both keys and their resolved values. Used for paired OTel export timeouts (e.g. send_timeout must exceed connect_timeout).","triggerScenarios":"Setting a guarded timeout to a value equal to or smaller than its reference: e.g. send_timeout=5s when connect_timeout=10s, or making them equal.","commonSituations":"Tightening connect_timeout without re-tuning send_timeout; setting both to the same value during testing; importing a config from another deployment with different defaults.","solutions":["Make the guarded setting strictly greater than the referenced one (e.g. send_timeout > connect_timeout).","If you intend them to be equal, raise the guarded one by at least 1ms.","Read the error message — it names both keys and both resolved values for quick correction."],"exampleFix":"// before\ntelemetry.export.connect_timeout: 10s\ntelemetry.export.send_timeout: 5s\n// after\ntelemetry.export.connect_timeout: 5s\ntelemetry.export.send_timeout: 10s","handlingStrategy":"validation","validationCode":"// Generic check for any guarded > reference pair\nstatic String checkGT(String thisKey, org.elasticsearch.common.unit.TimeValue thisVal,\n                     String otherKey, org.elasticsearch.common.unit.TimeValue otherVal) {\n  if (thisVal.compareTo(otherVal) <= 0)\n    return thisKey + \" (\" + thisVal + \") must be greater than \" + otherKey + \" (\" + otherVal + \")\";\n  return null;\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["When tightening connect_timeout, re-check that send_timeout is still strictly larger.","Never set guarded pairs equal — the comparator is strict (>0).","Read both resolved values from the error message before re-applying."],"tags":["apm","telemetry","configuration","validation","timeouts"],"analyzedSha":"db6a809a667c081ca1dc7500389d26975573215f","analyzedAt":"2026-08-12T01:39:14.192Z","schemaVersion":2},"datasetVersion":"2026-08-12T08:17:17.861Z"}