apache/cassandra · error · IOException

Cannot deserialize index summary from %s

Error message

Cannot deserialize index summary from %s

What it means

Thrown when the index summary (Summary.db) exists but cannot be deserialized — an IOException occurred while reading its header or contents. The wrapping preserves the underlying cause; the summary component is corrupt.

Source

Thrown at src/java/org/apache/cassandra/io/sstable/format/big/IndexSummaryComponent.java:98

        IndexSummary summary = null;
        try (FileInputStreamPlus iStream = summaryFile.newInputStream())
        {
            summary = IndexSummary.serializer.deserialize(iStream,
                                                          metadata.partitioner,
                                                          metadata.params.minIndexInterval,
                                                          metadata.params.maxIndexInterval);
            DecoratedKey first = metadata.partitioner.decorateKey(ByteBufferUtil.readWithLength(iStream));
            DecoratedKey last = metadata.partitioner.decorateKey(ByteBufferUtil.readWithLength(iStream));

            return new IndexSummaryComponent(summary, first, last);
        }
        catch (IOException ex)
        {
            if (summary != null)
                summary.close();

            throw new IOException(String.format("Cannot deserialize index summary from %s", summaryFile), ex);
        }
    }

    public static IndexSummaryComponent loadOrDeleteCorrupted(File summaryFile, TableMetadata metadata) throws IOException
    {
        try
        {
            return load(summaryFile, metadata);
        }
        catch (IOException ex)
        {
            summaryFile.deleteIfExists();
            throw ex;
        }
    }

    /**
     * Save index summary to Summary.db file.

View on GitHub (pinned to 88fd0f6a0e)

Solutions

  1. Regenerate the summary via `nodetool scrub` / sstablescrub or delete the SSTable and repair from replicas
  2. Check the underlying cause in the exception chain (truncation vs format mismatch) and the SSTable format version compatibility
  3. Restore Summary.db from backup
Defensive patterns

Strategy: try-catch

Try / catch

try { component = IndexSummaryComponent.load(file, metadata); }
catch (IOException e) {
    logger.warn("Corrupt summary for {}: {}", file, e.getCause());
    rebuildOrRepair(descriptor);
}

Prevention

When it happens

Trigger: Loading an SSTable whose Summary.db has invalid magic/version/header or truncated content, via IndexSummaryComponent.load (e.g. during verify or loadOrDeleteCorrupted paths).

Common situations: Bit rot or partial write of Summary.db; version mismatch (SSTable from a different Cassandra version); manual edits; crash during summary save.

Understand the failure class

Background: "failed to unmarshal" / json.Unmarshal errors: why parsing a response into a Go struct fails and how to fix it — this error's family across 23 libraries.

Related errors


AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10). Data as JSON: /api/errors/3a74e2b0c312fa91. Report an issue: GitHub.