jaegertracing/jaeger · error
duration Minimum is above Maximum
Error message
duration Minimum is above Maximum
What it means
ErrDurationMinGreaterThanMax is a sentinel error returned by validateQuery when a trace query's minimum duration is greater than its maximum duration. Such a range filter (duration_min > duration_max) can never match any span, so the reader rejects it before querying Elasticsearch. It is asserted in TestTraceQueryParameterValidation as part of the documented validation contract.
Source
Thrown at internal/storage/v2/elasticsearch/tracestore/core/reader.go:59
objectProcessTagsField = "process.tag"
nestedTagsField = "tags"
nestedProcessTagsField = "process.tags"
nestedLogFieldsField = "logs.fields"
tagKeyField = "key"
tagValueField = "value"
errorTag = "error"
defaultSearchDepth = 100
DawnOfTimeSpanAge = time.Hour * 24 * 365 * 50
)
var (
// ErrStartTimeMinGreaterThanMax occurs when start time min is above start time max
ErrStartTimeMinGreaterThanMax = errors.New("start Time Minimum is above Maximum")
// ErrDurationMinGreaterThanMax occurs when duration min is above duration max
ErrDurationMinGreaterThanMax = errors.New("duration Minimum is above Maximum")
// ErrMalformedRequestObject occurs when a request object is nil
ErrMalformedRequestObject = errors.New("malformed request object")
// ErrStartAndEndTimeNotSet occurs when start time and end time are not set
ErrStartAndEndTimeNotSet = errors.New("start and End Time must be set")
// ErrUnableToFindTraceIDAggregation occurs when an aggregation query for TraceIDs fail.
ErrUnableToFindTraceIDAggregation = errors.New("could not find aggregation of traceIDs")
defaultMaxDuration = model.DurationAsMicroseconds(time.Hour * 24)
objectTagFieldList = []string{objectTagsField, objectProcessTagsField}
nestedTagFieldList = []string{nestedTagsField, nestedProcessTagsField, nestedLogFieldsField}
_ Reader = (*SpanReader)(nil) // check API conformance
)View on GitHub (pinned to 806f444784)
Solutions
- Swap the values so DurationMin <= DurationMax.
- Validate the duration ordering in your caller before building TraceQueryParameters.
- If only one bound is needed, leave the other at its zero value instead of duplicating a bound.
Example fix
// before
params := v2api.TraceQueryParameters{DurationMin: 3600e6, DurationMax: 60e6}
// after
if params.DurationMin > params.DurationMax {
params.DurationMin, params.DurationMax = params.DurationMax, params.DurationMin
} Defensive patterns
Strategy: validation
Validate before calling
func validateDurationRange(p *api.TraceQueryParameters) error {
if p.DurationMin > 0 && p.DurationMax > 0 && p.DurationMin > p.DurationMax {
p.DurationMin, p.DurationMax = p.DurationMax, p.DurationMin
}
return nil
} Try / catch
ids, err := reader.FindTraceIDs(ctx, query)
if errors.Is(err, core.ErrDurationMinGreaterThanMax) {
return http.StatusBadRequest // inverted duration bounds
} Prevention
- Clamp or swap duration bounds at the boundary where user input enters your code.
- Keep durations in one unit (e.g. time.Duration) until serialization to avoid unit mix-ups.
- Set only the bound you need; leave the other zero instead of duplicating.
When it happens
Trigger: Calling reader.FindTraceIDs/FindTraces with TraceQueryParameters where DurationMin > DurationMax (e.g. DurationMin=1h, DurationMax=1m). validateQuery performs this comparison after the start-time checks and returns this error.
Common situations: UIs letting users set 'slower than X' and 'faster than Y' bounds without checking ordering; unit mix-ups (milliseconds vs microseconds) producing inverted bounds; copy-paste errors when filling query structs.
Understand the failure class
Background: "Invalid query parameter" / "Failed to parse value of ...": fixing bad query string parameters across APIs — this error's family across 36 libraries.
Related errors
- start Time Minimum is above Maximum
- malformed request object
- start and End Time must be set
- file must begin with '['
- max spans count reached
AI-assisted analysis of jaegertracing/jaeger@806f444784 (2026-09-01).
Data as JSON: /api/errors/d3383508ef78e119.
Report an issue: GitHub.