apache/cassandra · error
Unable to fetch log entries from
Error message
Unable to fetch log entries from
What it means
PeerLogFetcher.fetchLogEntriesAndWaitInternal cancels the remote fetch and local log append and returns a failed promise when any Throwable occurs while pulling log entries from a peer. The warning names the peer; the returned IllegalStateException carries the same message plus the cause.
Solutions
- Read the chained cause in the IllegalStateException for the root failure.
- Verify node version compatibility (serialization failures often mean mixed versions).
- Check whether the node was shutting down; if so retry after it is up.
- Confirm the remote peer is healthy and retry the fetch.
Defensive patterns
Strategy: try-catch
Validate before calling
if (!FailureDetector.instance.isAlive(remote)) return Futures.immediateFailedFuture(new IllegalStateException("peer down: " + remote)); Try / catch
try { return asyncFetchLog(remote, epoch).get(); } catch (ExecutionException e) { logger.error("fetch from " + remote + " failed", e.getCause()); } Prevention
- Avoid mixed-version clusters (serialization failures)
- Retry with a different peer on failure
- Handle node shutdown windows gracefully before issuing fetches
When it happens
Trigger: The internal fetch future or append-to-log future completes exceptionally — connection failure, serialization error, rejection due to shutdown, or local log append failure — during asyncFetchLog against `remote`.
Common situations: Remote peer crashing mid-response; mismatched message versions between nodes; node shutting down while a fetch is in flight; disk/local log issues during append.
Related errors
- Could not fetch log entries from peer, remote =
- Learned about epoch from , but could not fetch log.
- Addresses differ: !=
- Already released
- Attempted to reference an already released SharedByteBuffer
AI-assisted analysis of apache/cassandra@88fd0f6a0e (2026-09-10).
Data as JSON: /api/errors/9ffc5cc582943ddc.
Report an issue: GitHub.
Appendix: source
Thrown at src/java/org/apache/cassandra/tcm/PeerLogFetcher.java:123
});
logger.info("Fetching log from {}, at least {}", remote, awaitAtleast);
try (Timer.Context ctx = TCMMetrics.instance.fetchPeerLogLatency.time())
{
RemoteProcessor.sendWithRetries(Verb.TCM_FETCH_PEER_LOG_REQ,
new FetchPeerLog(before),
fetchFromRemote,
new RemoteProcessor.CandidateIterator(Collections.singletonList(remote), false),
Retry.untilElapsed(DatabaseDescriptor.getCmsAwaitTimeout().to(TimeUnit.NANOSECONDS), TCMMetrics.instance.fetchLogRetries));
return appendToLog;
}
catch (Throwable t)
{
fetchFromRemote.cancel(true);
appendToLog.cancel(true);
JVMStabilityInspector.inspectThrowable(t);
logger.warn("Unable to fetch log entries from " + remote, t);
Promise<ClusterMetadata> res = new AsyncPromise<>();
res.setFailure(new IllegalStateException("Unable to fetch log entries from " + remote, t));
return res;
}
}
}
View on GitHub (pinned to 88fd0f6a0e)