apache/cassandra · critical · RuntimeException
Stop marker is older than start marker ({stopMarker}<{startM
Error message
Stop marker is older than start marker ({stopMarker}<{startMarker}) , so cannot assume we have a complete log of our votes in any consensus groups. Exiting. What it means
Thrown by AccordService.localStartup() when the Accord journal's persisted stop marker is older than its start marker, meaning the journal of consensus-group votes appears incomplete. Because the journal cannot be trusted, the process exits (per accord.journal.stopMarkerFailurePolicy=EXIT) with a RuntimeException.
Source
Thrown at src/java/org/apache/cassandra/service/accord/AccordService.java:549
}
@Override
public synchronized void localStartup()
{
if (state != State.INIT)
return;
boolean rebootstrap = false;
{
long startMarker = ReplayMarkers.readStartMarker();
long stopMarker = ReplayMarkers.readStopMarker();
if (stopMarker < startMarker)
{
switch (getAccord().journal.stopMarkerFailurePolicy)
{
default: throw new UnhandledEnum(getAccord().journal.stopMarkerFailurePolicy);
case EXIT:
throw new RuntimeException("Stop marker is older than start marker (" + stopMarker + '<' + startMarker + ") , so cannot assume we have a complete log of our votes in any consensus groups. Exiting.");
case ALLOW_UNSAFE_STARTUP:
case UNSAFE_STARTUP:
logger.warn("Stop marker is older than start marker ({}<{}), so cannot assume we have a complete log of our votes in any consensus groups. Continuing to startup as configured.", stopMarker, startMarker);
break;
case REBOOTSTRAP:
logger.info("Stop marker is older than start marker ({}<{}). Rebootstrapping.", stopMarker, startMarker);
rebootstrap = true;
}
}
}
logger.info("Starting background compaction of system_accord");
// We control this ourselves to ensure it starts when we need it, as especially commands_for_key
// can accumulate a lot of state and degrade replay performance significantly
scheduler.recurring(() -> {
CompactionManager.instance.submitBackground(AccordColumnFamilyStores.commandsForKey);View on GitHub (pinned to 88fd0f6a0e)
Solutions
- Treat as data-integrity alarm: stop and verify the node's data/journal files; restore from a known-good backup.
- If corruption is confirmed and acceptable, follow the recovery runbook (e.g. journal replay=RESET) after capturing diagnostics.
- If explicitly accepted as an unsafe recovery, set accord.journal.stopMarkerFailurePolicy to ALLOW_UNSAFE_STARTUP/UNSAFE_STARTUP and restart, understanding vote-log completeness is not guaranteed.
- Check underlying storage (SMART, filesystem errors) before returning the node to service.
Example fix
// before -Dcassandra.accord.journal.stopMarkerFailurePolicy=EXIT // after (only when unsafe startup is accepted) -Dcassandra.accord.journal.stopMarkerFailurePolicy=ALLOW_UNSAFE_STARTUP
Defensive patterns
Strategy: fallback
Validate before calling
// before startup, if possible assertJournalMarkersConsistent(dataDir); // stopMarker >= startMarker assertFileSystemHealthy(dataDir);
Try / catch
catch (RuntimeException e) {
if (e.getMessage().startsWith("Stop marker is older than start marker")) {
captureDiagnostics(dataDir); // never delete journal blindly
followJournalRecoveryRunbook();
} else throw e;
} Prevention
- Never restore node data directories from partial/inconsistent backups.
- Ensure clean shutdowns and healthy disks (monitor SMART, filesystem errors).
- Keep journal files with backups before any manual recovery attempt.
When it happens
Trigger: Node startup where journal markers read from disk satisfy stopMarker < startMarker, and the stopMarkerFailurePolicy is EXIT (the default fail-closed behavior).
Common situations: Corrupted or partially truncated Accord journal (disk failure, incomplete flush), restoring a node from an inconsistent/incomplete backup, or manual tampering with journal data files.
Understand the failure class
Background: "This is a bug, please report it": internal invariant violations, unreachable panics, and SNH errors explained — this error's family across 47 libraries.
Related errors
- Stop marker is older than start marker ({}<{}), so cannot as
- Cannot reset state and replay from a save point; must modify
- Gave up waiting on journal index to be ready
- {} durability: refusing to report {} ({}): a failed update b
- accord.journal_directory must not be the same as the commitl
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/ec72fee49817ba47.
Report an issue: GitHub.