apache/cassandra · warning
Unable to serialize metadata snapshot triggered by…
Error message
Unable to serialize metadata snapshot triggered by TriggerSnapshot transformation
What it means
MetadataSnapshotListener.notify tries to persist a cluster metadata snapshot via ClusterMetadataService.instance().snapshotManager().storeSnapshot(next) when a TriggerSnapshot transformation is applied. Serialization/persistence failures are caught and logged as a warning; the epoch is committed anyway, so only snapshot capture is lost.
Solutions
- Check the logged Throwable stack for the root cause (IOException vs serialization class error).
- Verify disk space and write permissions on the CMS snapshot directory.
- If a new metadata type fails to serialize, ensure all nodes run compatible versions and the type has a registered serialization codec.
- Retry snapshot capture manually (or via another TriggerSnapshot) once the root cause is fixed.
Defensive patterns
Strategy: try-catch
Validate before calling
// Ensure snapshot dir is writable before triggering
File dir = DatabaseDescriptor.getSnapshotDirectory();
if (!dir.canWrite()) throw new IllegalStateException("Snapshot dir not writable: " + dir); Try / catch
try {
ClusterMetadataService.instance().snapshotManager().storeSnapshot(next);
} catch (IOException | SerializationException e) {
logger.warn("Snapshot capture failed; will retry on next trigger", e);
} Prevention
- Monitor disk space on snapshot directories.
- Keep cluster versions aligned before taking snapshots.
- Alert on this warning since the epoch commits without a snapshot.
When it happens
Trigger: A TriggerSnapshot transformation is committed on the CMS and storeSnapshot throws while serializing the ClusterMetadata (e.g. a transformation result that cannot be serialized, disk I/O failure on the snapshot directory, or internal serialization bug in a newly added metadata type).
Common situations: Upgrades introducing new metadata fields not serializable by older snapshot code; disk full or permissions on the snapshots directory; test environments (forceSnapshotTriggersSnapshot) where listeners run against partially constructed metadata.
Understand the failure class
Background: json.Marshal / "failed to marshal" errors in Go: why "unsupported type" happens and how to fix it — this error's family across 22 libraries.
Related errors
- Unable to parse creation time from
- Unsupported metadata version
- Addresses differ: !=
- Attempted to encode a response with an unset stream id:
- Bad CMS state:
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/64febc65ed3edaa2.
Report an issue: GitHub.
Appendix: source
Thrown at src/java/org/apache/cassandra/tcm/listeners/MetadataSnapshotListener.java:52
public class MetadataSnapshotListener implements LogListener
{
private static final Logger logger = LoggerFactory.getLogger(MetadataSnapshotListener.class);
private static final EnumSet<Transformation.Kind> triggers = EnumSet.of(TRIGGER_SNAPSHOT, FORCE_SNAPSHOT);
@Override
public void notify(Entry entry, Transformation.Result result)
{
ClusterMetadata next = result.success().metadata;
if (triggers.contains(entry.transform.kind()))
{
try
{
ClusterMetadataService.instance().snapshotManager().storeSnapshot(next);
}
catch (Throwable e)
{
logger.warn("Unable to serialize metadata snapshot triggered by TriggerSnapshot transformation", e);
}
}
}
}
View on GitHub (pinned to 88fd0f6a0e)