microsoft/FASTER · error · FasterException
Incremental snapshots not supported with generic allocator
Error message
Incremental snapshots not supported with generic allocator
What it means
FASTER's delta (incremental) checkpointing flushes only changed pages via AsyncFlushDeltaToDevice, but GenericAllocator does not implement incremental snapshot support because its records are variable-size and not page-partitioned like other allocators. The override unconditionally throws FasterException, so any checkpoint with CheckpointType.FoldOver or delta log usage against a generic-allocator store fails immediately.
Solutions
- Use full (non-incremental) snapshots: issue a normal checkpoint without delta log parameters
- Switch the store's allocator to a fixed-size one (e.g. FastMemoryAllocator/FixedPageSize allocator for blittable value types) if incremental snapshots are required
- Guard configuration so delta-log checkpoints are only requested for stores whose allocator supports them
- Upgrade FASTER: check release notes in case a newer version adds generic-allocator incremental snapshot support
Example fix
// before checkpointManager.TakeCheckpoint(token, CheckpointType.FoldOver, deltaLog: deltaLog); // after (generic allocator) checkpointManager.TakeCheckpoint(token, CheckpointType.FoldOver); // full snapshot only
Defensive patterns
Strategy: try-catch
Validate before calling
// Only request delta checkpoints for allocators that support them bool supportsDelta = !(store is GenericAllocator<...>); // or track a config flag if (supportsDelta) takeDeltaCheckpoint(); else takeFullSnapshot();
Type guard
bool SupportsIncrementalSnapshots(object allocator) => allocator is not Microsoft.FASTER.Core.GenericAllocator<,>;
Try / catch
try
{
checkpointManager.TakeCheckpoint(token, CheckpointType.FoldOver, deltaLog);
}
catch (FasterException ex) when (ex.Message.Contains("Incremental snapshots not supported"))
{
checkpointManager.TakeCheckpoint(token, CheckpointType.FoldOver); // fall back to full snapshot
} Prevention
- Never pass delta logs to checkpoints on generic-allocator stores
- Centralize checkpoint configuration and assert allocator support once at startup
- Prefer full snapshots with variable-length (generic allocator) workloads
- Pin the FASTER version and check release notes before enabling incremental snapshots
When it happens
Trigger: Calling TakeCheckpoint / checkpoint APIs with delta log parameters (AsyncFlushDeltaToDevice path) on a store backed by GenericAllocator (variable-length key-values); passing a non-null DeltaLog to a checkpoint on a generic-allocator instance.
Common situations: Users enabling incremental checkpoints (to speed up checkpointing of large stores) without realizing the setting only applies to FASTER's fixed-size allocators; shared checkpoint configuration code applied across stores with different allocators.
Understand the failure class
Background: UnsupportedOperationException and "is not supported" errors: when a library deliberately refuses a call — this error's family across 30 libraries.
Related errors
- Pending reads not supported with pub/sub
- Pending reads not supported with pub/sub
- AsyncReadRecordObjectsToMemory invalid for…
- BlittableAllocator memory pages are sector aligned - use…
- Size of key-value exceeds max of 2GB:
AI-assisted analysis of microsoft/FASTER@321d872eab (2026-09-15).
Data as JSON: /api/errors/955464ea96335872.
Report an issue: GitHub.
Appendix: source
Thrown at cs/src/core/Allocator/GenericAllocator.cs:1143
int start = (int)(beginAddress & PageSizeMask) / recordSize;
int count = (int)(endAddress - beginAddress) / recordSize;
int end = start + count;
using var iter = new MemoryPageScanIterator<Key, Value>(values[page], start, end, pageStartAddress, recordSize);
Debug.Assert(epoch.ThisInstanceProtected());
try
{
epoch.Suspend();
observer?.OnNext(iter);
}
finally
{
epoch.Resume();
}
}
internal override void AsyncFlushDeltaToDevice(long startAddress, long endAddress, long prevEndAddress, long version, DeltaLog deltaLog, out SemaphoreSlim completedSemaphore, int throttleCheckpointFlushDelayMs)
{
throw new FasterException("Incremental snapshots not supported with generic allocator");
}
}
}
View on GitHub (pinned to 321d872eab)