GatewayAllocator: reset rerouting flag after error

After asynchronously fetching shard information the gateway allocator issues a reroute via  a cluster state update task. #11421 introduced an optimization trying to avoid submitting unneeded reroutes when results for many shards come in together. This is done by having a rerouting flag, indicating a pending reroute is coming and thus any new incoming shard info doesn't need to issue a reroute. This flag wasn't reset upon an error in the reroute update task. Most notably - if a master node had to step during to a min_master_node violation, it could reject an ongoing reroute. Lacking to reset the flag causing it to skip any future reroute, when the node became master again.

Closes #11519
This commit is contained in:
Boaz Leskes 2015-06-05 21:21:09 +02:00
parent 1d02212b1c
commit 6aa27a16c6
2 changed files with 1 additions and 2 deletions

View File

@ -544,6 +544,7 @@ public class GatewayAllocator extends AbstractComponent {
@Override @Override
public void onFailure(String source, Throwable t) { public void onFailure(String source, Throwable t) {
rerouting.set(false);
logger.warn("failed to perform reroute post async fetch for {}", t, source); logger.warn("failed to perform reroute post async fetch for {}", t, source);
} }
}); });

View File

@ -31,7 +31,6 @@ import org.elasticsearch.discovery.zen.elect.ElectMasterService;
import org.elasticsearch.index.query.QueryBuilders; import org.elasticsearch.index.query.QueryBuilders;
import org.elasticsearch.test.ElasticsearchIntegrationTest; import org.elasticsearch.test.ElasticsearchIntegrationTest;
import org.elasticsearch.test.ElasticsearchIntegrationTest.ClusterScope; import org.elasticsearch.test.ElasticsearchIntegrationTest.ClusterScope;
import org.elasticsearch.test.junit.annotations.TestLogging;
import org.junit.Test; import org.junit.Test;
import java.util.concurrent.ExecutionException; import java.util.concurrent.ExecutionException;
@ -164,7 +163,6 @@ public class MinimumMasterNodesTests extends ElasticsearchIntegrationTest {
} }
@Test @Slow @Test @Slow
@TestLogging("cluster.routing.allocation.allocator:TRACE")
public void multipleNodesShutdownNonMasterNodes() throws Exception { public void multipleNodesShutdownNonMasterNodes() throws Exception {
Settings settings = settingsBuilder() Settings settings = settingsBuilder()
.put("discovery.type", "zen") .put("discovery.type", "zen")