microsoft/garnet · error · Exception
Revivification cannot specify RevivifiableFraction without s
Error message
Revivification cannot specify RevivifiableFraction without specifying bins.
What it means
Generic Exception thrown during Options.Initialize revivification validation when RevivifiableFraction is changed from its default (DefaultRevivifiableFraction) but no bin scheme is configured (RevivBinRecordSizes is empty AND EnableRevivification is false). RevivifiableFraction controls what fraction of deleted records are eligible for revivification, which only has meaning when revivification bins exist.
Source
Thrown at libs/host/Configuration/Options.cs:819
if (hasRecordCounts)
{
if (useRevivBinsPowerOf2)
throw new Exception("Revivification cannot specify both record counts and powerof2 bins.");
if (!hasRecordSizes)
throw new Exception("Revivification bin counts require bin sizes.");
useRevivBinsPowerOf2 = false;
}
if (RevivBinBestFitScanLimit != 0)
{
if (!hasRecordSizes && !enableRevivification)
throw new Exception("Revivification cannot specify best fit scan limit without specifying bins.");
if (RevivBinBestFitScanLimit < 0)
throw new Exception("RevivBinBestFitScanLimit must be >= 0.");
}
if (RevivifiableFraction != RevivificationSettings.DefaultRevivifiableFraction)
{
if (!hasRecordSizes && !enableRevivification)
throw new Exception("Revivification cannot specify RevivifiableFraction without specifying bins.");
}
// Warn users who explicitly opt into Scan compaction about the memory-spike cost.
// Scan builds a temporary parallel KV index proportional to the keyspace; Lookup is the recommended alternative.
if (CompactionType == LogCompactionType.Scan)
{
logger?.LogWarning("Compaction type Scan builds a temporary parallel KV index proportional to the keyspace, causing significant transient memory use. Use Lookup instead unless you have a specific reason for Scan.");
}
if (SlowLogThreshold > 0)
{
if (SlowLogThreshold < 100)
throw new Exception("SlowLogThreshold must be at least 100 microseconds.");
}
if (!EnableAOF.GetValueOrDefault())
{View on GitHub (pinned to 951b0fc683)
Solutions
- If revivification is off, reset RevivifiableFraction to RevivificationSettings.DefaultRevivifiableFraction.
- If you want a custom fraction, enable revivification (EnableRevivification=true) or provide explicit RevivBinRecordSizes.
Example fix
// before options.EnableRevivification = false; options.RevivifiableFraction = 0.5; // after options.EnableRevivification = false; options.RevivifiableFraction = RevivificationSettings.DefaultRevivifiableFraction;
Defensive patterns
Strategy: validation
Validate before calling
void ValidateFractionHasBins(double fraction, int[] sizes, bool enableReviv)
{
if (fraction != RevivificationSettings.DefaultRevivifiableFraction && (sizes == null || sizes.Length == 0) && !enableReviv)
throw new InvalidOperationException("RevivifiableFraction requires a bin scheme (sizes or EnableRevivification).");
} Try / catch
try
{
options.Initialize(logger);
}
catch (Exception ex) when (ex.Message.Contains("RevivifiableFraction"))
{
logger.LogError("Revivification: RevivifiableFraction set but no bins configured.");
throw;
} Prevention
- When disabling revivification, reset RevivifiableFraction to the default value.
- Treat all revivification sub-settings as a group — enable or disable together.
When it happens
Trigger: Setting RevivifiableFraction to a non-default value while revivification is effectively off (no explicit sizes and EnableRevivification false). Happens when revivification was disabled but the fraction setting was left customized.
Common situations: Disabling revivification without resetting RevivifiableFraction to its default; config overlay that customizes the fraction but also turns revivification off.
Related errors
- Revivification cannot specify best fit scan limit without sp
- Incompatible revivification record size and count cardinalit
- Revivification cannot specify both record sizes and in-chain
- Revivification cannot specify both record counts and powerof
- Revivification bin counts require bin sizes.
AI-assisted analysis of microsoft/garnet@951b0fc683 (2026-08-13).
Data as JSON: /api/errors/452ac41294efbd05.
Report an issue: GitHub.