elastic/elasticsearch · error · IllegalArgumentException
{thisSettingKey} ({value}) must be greater than {otherSettin
Error message
{thisSettingKey} ({value}) must be greater than {otherSetting.getKey()} ({otherValue}) What it means
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).
Source
Thrown at modules/apm/src/main/java/org/elasticsearch/telemetry/apm/internal/export/otelsdk/OtelSdkSettings.java:368
private static final class GreaterThanTimeValueValidator implements Setting.Validator<TimeValue> {
private final String thisSettingKey;
private final Setting<TimeValue> otherSetting;
private GreaterThanTimeValueValidator(String thisSettingKey, Setting<TimeValue> otherSetting) {
this.thisSettingKey = thisSettingKey;
this.otherSetting = otherSetting;
}
@Override
public void validate(TimeValue value) {}
@Override
public void validate(TimeValue value, Map<Setting<?>, Object> settings) {
var otherValue = (TimeValue) settings.get(otherSetting);
if (value.compareTo(otherValue) <= 0) {
throw new IllegalArgumentException(
thisSettingKey + " (" + value + ") must be greater than " + otherSetting.getKey() + " (" + otherValue + ")"
);
}
}
@Override
public Iterator<Setting<?>> settings() {
return List.<Setting<?>>of(otherSetting).iterator();
}
}
}
View on GitHub (pinned to db6a809a66)
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.
Example fix
// before telemetry.export.connect_timeout: 10s telemetry.export.send_timeout: 5s // after telemetry.export.connect_timeout: 5s telemetry.export.send_timeout: 10s
Defensive patterns
Strategy: validation
Validate before calling
// Generic check for any guarded > reference pair
static String checkGT(String thisKey, org.elasticsearch.common.unit.TimeValue thisVal,
String otherKey, org.elasticsearch.common.unit.TimeValue otherVal) {
if (thisVal.compareTo(otherVal) <= 0)
return thisKey + " (" + thisVal + ") must be greater than " + otherKey + " (" + otherVal + ")";
return null;
} Prevention
- 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.
When it happens
Trigger: 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.
Common situations: 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.
Related errors
- Configuration [{qualifiedKey}] is either prohibited or unkno
- telemetry.logs.endpoint must be configured when telemetry.lo
- telemetry.logs.endpoint must be configured when telemetry.lo
- telemetry.logs.ssl.certificate and telemetry.logs.ssl.key mu
- Failed to initialise TLS context for OTel log export
AI-assisted analysis of elastic/elasticsearch@db6a809a66 (2026-08-12).
Data as JSON: /api/errors/5e6a49cdccfdd2e5.
Report an issue: GitHub.