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

  1. Use full (non-incremental) snapshots: issue a normal checkpoint without delta log parameters
  2. Switch the store's allocator to a fixed-size one (e.g. FastMemoryAllocator/FixedPageSize allocator for blittable value types) if incremental snapshots are required
  3. Guard configuration so delta-log checkpoints are only requested for stores whose allocator supports them
  4. 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

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


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)