apache/druid · error · IAE
index[%d] >= size[%d] or < 0
Error message
index[%d] >= size[%d] or < 0
What it means
ArrayBasedIndexedInts.get(int) bounds-checks the index against the current active size, throwing IAE when the index is negative or >= size. The expansion array may be larger than the active size, so checking against size (not array length) preserves semantics.
Source
Thrown at processing/src/main/java/org/apache/druid/segment/data/ArrayBasedIndexedInts.java:91
this.size = size;
}
public void setValue(int index, int value)
{
expansion[index] = value;
}
@Override
public int size()
{
return size;
}
@Override
public int get(int index)
{
if (index < 0 || index >= size) {
throw new IAE("index[%d] >= size[%d] or < 0", index, size);
}
return expansion[index];
}
@Override
public void inspectRuntimeShape(RuntimeShapeInspector inspector)
{
// nothing to inspect
}
}
View on GitHub (pinned to 9b90983fd2)
Solutions
- Iterate using size() as the exclusive upper bound
- Re-read size() after any resize/setValues call
- Ensure index >= 0 before calling get
Example fix
// before
for (int i = 0; i < arr.length; i++) { int v = indexed.get(i); }
// after
for (int i = 0; i < indexed.size(); i++) { int v = indexed.get(i); } Defensive patterns
Strategy: validation
Validate before calling
if (index >= 0 && index < indexed.size()) { int v = indexed.get(index); } Type guard
boolean inRange(IndexedInts v, int i) { return i >= 0 && i < v.size(); } Try / catch
try { return indexed.get(index); } catch (IAE e) { return Indexable.NOT_FOUND; } Prevention
- Always bound loops by size(), never by array length
- Re-fetch size() after any mutation
- Use indexed iteration (iterator()) instead of manual index math where possible
When it happens
Trigger: Calling get(index) with index < 0 or index >= size on an IndexedInts, typically from row-iteration code using a stale size or wrong loop bound.
Common situations: Iterating with the backing array length instead of size(); reusing a resized ArrayBasedIndexedInts with old indexes; concurrent modification during iteration.
Related errors
- Column is not multi-valued
- Not a numeric value type:
- Size[%d] > expansion.length[%d] or < 0
- Size[%d] should be between 0 and %d
- written out already
AI-assisted analysis of apache/druid@9b90983fd2 (2026-09-07).
Data as JSON: /api/errors/87e834c86ff984ac.
Report an issue: GitHub.