Updating cluster routing allocation node initial primaries recoveries from to – How to solve this Elasticsearch error

Opster Team

Aug-23, Version: 2.3-2.3

Briefly, this error occurs when Elasticsearch is trying to update the cluster routing allocation for initial primary recoveries. This usually happens when a node is added or removed, or when shards are being relocated. To resolve this issue, you can try the following: 1) Ensure that the cluster health is green and all nodes are properly connected. 2) Check the Elasticsearch logs for any underlying issues. 3) Adjust the cluster settings to allow more concurrent recoveries. 4) If the issue persists, consider increasing the timeout settings for shard recovery.

This guide will help you check for common problems that cause the log ” updating [cluster.routing.allocation.node_initial_primaries_recoveries] from [{}] to [{}] ” to appear. To understand the issues related to this log, read the explanation below about the following Elasticsearch concepts: allocation, cluster and routing.

Log Context

Log “updating [cluster.routing.allocation.node_initial_primaries_recoveries] from [{}] to [{}]” classname is ThrottlingAllocationDecider.java.
We extracted the following from Elasticsearch source code for those seeking an in-depth context :

     class ApplySettings implements NodeSettingsService.Listener {
        public void onRefreshSettings(Settings settings) {
            int primariesInitialRecoveries = settings.getAsInt(CLUSTER_ROUTING_ALLOCATION_NODE_INITIAL_PRIMARIES_RECOVERIES; ThrottlingAllocationDecider.this.primariesInitialRecoveries);
            if (primariesInitialRecoveries != ThrottlingAllocationDecider.this.primariesInitialRecoveries) {
                logger.info("updating [cluster.routing.allocation.node_initial_primaries_recoveries] from [{}] to [{}]"; ThrottlingAllocationDecider.this.primariesInitialRecoveries; primariesInitialRecoveries);
                ThrottlingAllocationDecider.this.primariesInitialRecoveries = primariesInitialRecoveries;

            int concurrentRecoveries = settings.getAsInt(CLUSTER_ROUTING_ALLOCATION_NODE_CONCURRENT_RECOVERIES; ThrottlingAllocationDecider.this.concurrentRecoveries);
            if (concurrentRecoveries != ThrottlingAllocationDecider.this.concurrentRecoveries) {


How helpful was this guide?

We are sorry that this post was not useful for you!

Let us improve this post!

Tell us how we can improve this post?