microsoft/FASTER · error · FasterException
Overflow in AddressInfo - consider running the program in…
Error message
Overflow in AddressInfo - consider running the program in x64 mode for larger address space support
What it means
AddressInfo stores its address in a bit field of kAddressBits width. When a value larger than the address mask is written, the high bits are silently truncated; the setter detects this (value != Address) and throws FasterException("Overflow in AddressInfo" + ...) advising x64 mode on narrower builds. The address could not be represented, so proceeding would corrupt the record.
Solutions
- Build/run the application as x64 so kAddressBits is 64 and full offsets are encodable.
- Reduce device/log size below the 32-bit address ceiling, or use multiple smaller devices.
- Switch to a storage layout / epoch mode that does not use compact AddressInfo encoding for huge offsets.
- Monitor log tail address and checkpoint/compact before approaching the address-space limit.
Example fix
// before (project -> Platform target: x86)
new FasterLog(new FasterLogSettings { LogDevice = device, LogFileSize = 1L << 40 }); // overflow at large offsets
// after (project -> Platform target: x64)
new FasterLog(new FasterLogSettings { LogDevice = device, LogFileSize = 1L << 40 }); // 64-bit AddressInfo, no overflow Defensive patterns
Strategy: validation
Validate before calling
// ensure the address fits in AddressInfo before use bool AddressFits(long addr, int kAddressBits) => addr <= ((1L << kAddressBits) - 1);
Prevention
- Build and deploy as x64 (Platform target x64 / AnyCPU without prefer-32bit).
- Keep log device size under the 32-bit ceiling on x86 builds.
- Monitor tail address growth and rotate/compact before overflow.
When it happens
Trigger: Setting AddressInfo.Address (or a property that routes through it) to a value > (1 << kAddressBits) - 1, e.g. a device/log offset beyond the encodable range on a 32-bit (kAddressBits < 64) build.
Common situations: Logs growing past the 32-bit address ceiling (~4GB) when running x86; huge log devices addressed with narrow AddressInfo; long-running services whose offsets accumulate past the limit.
Understand the failure class
Background: "value must be between 0 and 1" / "out of range" / "must not be negative" errors: fixing range-validation failures across open-source libraries — this error's family across 42 libraries.
Related errors
- Unsupported object size:
- Already recovered until address
- Attempting to enqueue into a completed log
- Cannot use named iterators with read-only FasterLog
- Cannot use scanUncommitted with read-only FasterLog
AI-assisted analysis of microsoft/FASTER@321d872eab (2026-09-15).
Data as JSON: /api/errors/fc8245d187471a74.
Report an issue: GitHub.
Appendix: source
Thrown at cs/src/core/Index/Common/AddressInfo.cs:89
word = (IntPtr)_word;
}
}
public long Address
{
readonly get
{
return (long)word & kAddressMask;
}
set
{
var _word = (long)word;
_word &= ~kAddressMask;
_word |= (value & kAddressMask);
word = (IntPtr)_word;
if (value != Address)
{
throw new FasterException("Overflow in AddressInfo" + ((kAddressBits < 64) ? " - consider running the program in x64 mode for larger address space support" : ""));
}
}
}
}
}
View on GitHub (pinned to 321d872eab)