aeron-io/aeron · error · ClusterException
not found in
Error message
${memberId} not found in ${Arrays.toString(clusterMembers)} What it means
After a BackupResponse, the agent parses the cluster member list and looks up its own memberId to identify the log supplier. If the memberId is not present in the returned member list, the configuration is inconsistent with the cluster and a ClusterException is thrown naming the id and members.
Solutions
- Correct the memberId in the ClusterBackup.Context to one present in the cluster's member list.
- Point the backup at the correct cluster endpoints for the intended cluster.
- Update the cluster's member configuration if the backup is a legitimate new member that the leader must advertise.
Example fix
// before ctx.memberId(7); // cluster only has members 0-2 // after ctx.memberId(2); // must exist in the leader-reported clusterMembers
Defensive patterns
Strategy: validation
Validate before calling
// verify memberId appears in the configured cluster members before launching
boolean known = ClusterMember.parse(Backup.Configuration.clusterMembers())
.stream().anyMatch(m -> m.id() == memberId); Prevention
- Keep backup memberId config in sync with cluster membership
- Validate configs after any cluster membership change
When it happens
Trigger: The configured memberId for the backup does not correspond to any member advertised by the leader in the BackupResponse clusterMembers string — e.g. backup pointed at the wrong cluster, or memberId set manually to a value the cluster does not know.
Common situations: Reusing a backup configuration copied from another cluster; stale cluster member configuration after membership changes; typo in memberId property.
Understand the failure class
Background: 'Could not be found', 'does not exist', 'not found in database': the resource-not-found family when an ID, slug, key, or URI lookup comes back empty — this error's family across 20 libraries.
Related errors
- clusterMembers and endpoints differ
- either a instance or class name for the service must be…
- service id outside allowed range
- Aeron client must use a RethrowingErrorHandler
- Aeron client instance must set…
AI-assisted analysis of aeron-io/aeron@6d60124e15 (2026-09-12).
Data as JSON: /api/errors/e5a881e36900b3ac.
Report an issue: GitHub.
Appendix: source
Thrown at aeron-cluster/src/main/java/io/aeron/cluster/ClusterBackupAgent.java:564
NULL_TIMESTAMP,
NULL_VALUE,
RecordingLog.ENTRY_TYPE_TERM,
null,
true,
-1);
}
timeOfLastBackupQueryMs = 0;
this.correlationId = NULL_VALUE;
leaderCommitPositionCounterId = commitPositionCounterId;
clusterMembers = ClusterMember.parse(backupResponseDecoder.clusterMembers());
ClusterMember.setIsLeader(clusterMembers, leaderMemberId);
logSupplierMember = ClusterMember.findMember(clusterMembers, memberId);
if (null == logSupplierMember)
{
throw new ClusterException(memberId + " not found in " + Arrays.toString(clusterMembers));
}
logSupplierMember.leadershipTermId(logLeadershipTermId);
if (null != eventsListener)
{
eventsListener.onBackupResponse(clusterMembers, logSupplierMember, snapshotsToRetrieve);
}
if (null == clusterArchive)
{
CloseHelper.close(clusterArchiveAsyncConnect);
final AeronArchive.Context context = ctx.clusterArchiveContext().clone();
final ChannelUri logSupplierArchiveUri = ChannelUri.parse(context.controlRequestChannel());
logSupplierArchiveUri.put(ENDPOINT_PARAM_NAME, logSupplierMember.archiveEndpoint());
context.controlRequestChannel(logSupplierArchiveUri.toString());
View on GitHub (pinned to 6d60124e15)