microsoft/FASTER · error · FasterException

Invalid log commit metadata for ID

Error message

Invalid log commit metadata for ID 

What it means

LogCheckpointInfo.Recover fetches the log checkpoint metadata for the given token via checkpointManager.GetLogCheckpointMetadata and throws FasterException("Invalid log commit metadata for ID " + token) when the manager returns null. No metadata exists for that token, so recovery cannot proceed.

Solutions

  1. Verify the token exists: list available checkpoints on the ICheckpointManager and recover with one of those tokens.
  2. Point recovery at the same checkpoint manager backend (path/container) used at checkpoint time.
  3. Check that the checkpoint actually completed (WaitForCommitComplete) before trying to recover from it.
  4. If the delta-scan path returns null, recover from the latest full checkpoint metadata instead (scanDelta=false).

Example fix

// before
fasterLog.Recover(unknownToken); // FasterException: Invalid log commit metadata for ID ...

// after
var tokens = manager.GetCheckpointTokens(); // e.g. available committed checkpoints
var valid = tokens.Contains(token) ? token : tokens.Max();
fasterLog.Recover(valid);
Defensive patterns

Strategy: validation

Validate before calling

// confirm the token exists on the manager before recovering
var tokens = checkpointManager.GetCheckpointTokens();
if (!tokens.Contains(token)) throw new InvalidOperationException($"Unknown checkpoint token {token}; available: {string.Join(",", tokens)}");

Try / catch

try { fasterLog.Recover(token); } catch (FasterException ex) when (ex.Message.StartsWith("Invalid log commit metadata for ID")) { fasterLog.Recover(latestCommittedToken); }

Prevention

When it happens

Trigger: Calling fasterLog.Recover(token) (or Recover with a checkpoint manager) where GetLogCheckpointMetadata(token, deltaLog, scanDelta, recoverTo) returns null — the token has no committed metadata on the checkpoint manager.

Common situations: Recovering with a token from a checkpoint that never fully committed; using the wrong ICheckpointManager/storage backend than the one that wrote the checkpoint; token typo or checkpoint garbage-collected (CheckpointManager pruning old checkpoints); scanning deltas that were never flushed.

Understand the failure class

Background: Record Not Found Errors: "not found", RecordNotFound, and "was not found" — what they mean and how to fix them — this error's family across 28 libraries.

Related errors


AI-assisted analysis of microsoft/FASTER@321d872eab (2026-09-15). Data as JSON: /api/errors/712bb418da8874b3. Report an issue: GitHub.

Appendix: source

Thrown at cs/src/core/Index/Common/Contexts.cs:560

                throw new FasterException("Invalid checksum for checkpoint");
        }

        /// <summary>
        ///  Recover info from token
        /// </summary>
        /// <param name="token"></param>
        /// <param name="checkpointManager"></param>
        /// <param name="deltaLog"></param>
        /// <param name = "scanDelta">
        /// whether to scan the delta log to obtain the latest info contained in an incremental snapshot checkpoint.
        /// If false, this will recover the base snapshot info but avoid potentially expensive scans.
        /// </param>
        /// <param name="recoverTo"> specific version to recover to, if using delta log</param>
        internal void Recover(Guid token, ICheckpointManager checkpointManager, DeltaLog deltaLog = null, bool scanDelta = false, long recoverTo = -1)
        {
            var metadata = checkpointManager.GetLogCheckpointMetadata(token, deltaLog, scanDelta, recoverTo);
            if (metadata == null)
                throw new FasterException("Invalid log commit metadata for ID " + token.ToString());
            using StreamReader s = new(new MemoryStream(metadata));
            Initialize(s);
        }

        /// <summary>
        ///  Recover info from token
        /// </summary>
        /// <param name="token"></param>
        /// <param name="checkpointManager"></param>
        /// <param name="deltaLog"></param>
        /// <param name="commitCookie"> Any user-specified commit cookie written as part of the checkpoint </param>
        /// <param name = "scanDelta">
        /// whether to scan the delta log to obtain the latest info contained in an incremental snapshot checkpoint.
        /// If false, this will recover the base snapshot info but avoid potentially expensive scans.
        /// </param>
        /// <param name="recoverTo"> specific version to recover to, if using delta log</param>

        internal void Recover(Guid token, ICheckpointManager checkpointManager, out byte[] commitCookie, DeltaLog deltaLog = null, bool scanDelta = false, long recoverTo = -1)

View on GitHub (pinned to 321d872eab)