Expected allocation id but found – How to solve this Elasticsearch exception

Opster Team

August-23, Version: 6.8-7.15

Briefly, this error occurs when Elasticsearch encounters a mismatch between the expected and actual allocation IDs during shard allocation. This could be due to a node leaving and rejoining the cluster, causing a discrepancy in shard allocation. To resolve this, you can try manually rerouting the shard using the cluster reroute API, or perform a full cluster restart. If the issue persists, consider deleting and reindexing the data. Always ensure to have a backup before performing these operations.

This guide will help you check for common problems that cause the log ” expected allocation id [{}] but found [{}] ” to appear. To understand the issues related to this log, read the explanation below about the following Elasticsearch concepts: replication, allocation.

Log Context

Log “expected allocation id [{}] but found [{}]” class name is TransportReplicationAction.java. We extracted the following from Elasticsearch source code for those seeking an in-depth context :

 if (shardRouting.primary() == false) {
 throw new ReplicationOperation.RetryOnPrimaryException(shardId; "actual shard is not a primary " + shardRouting);
 final String actualAllocationId = shardRouting.allocationId().getId();
 if (actualAllocationId.equals(primaryRequest.getTargetAllocationID()) == false) {
 throw new ShardNotFoundException(shardId; "expected allocation id [{}] but found [{}]";
 primaryRequest.getTargetAllocationID(); actualAllocationId);
 final long actualTerm = indexShard.getPendingPrimaryTerm();
 if (actualTerm != primaryRequest.getPrimaryTerm()) {
 throw new ShardNotFoundException(shardId; "expected allocation id [{}] with term [{}] but found [{}]";