Move IndicesService.canDeleteShardContent to use IndexSettings
Just a minor cleanup/simplification Closes #15059 Closes #15150
This commit is contained in:
parent
6ff82260a7
commit
9930e6883d
|
@ -461,7 +461,7 @@ public class IndicesService extends AbstractLifecycleComponent<IndicesService> i
|
|||
|
||||
/**
|
||||
* This method deletes the shard contents on disk for the given shard ID. This method will fail if the shard deleting
|
||||
* is prevented by {@link #canDeleteShardContent(org.elasticsearch.index.shard.ShardId, org.elasticsearch.cluster.metadata.IndexMetaData)}
|
||||
* is prevented by {@link #canDeleteShardContent(ShardId, IndexSettings)}
|
||||
* of if the shards lock can not be acquired.
|
||||
*
|
||||
* On data nodes, if the deleted shard is the last shard folder in its index, the method will attempt to remove the index folder as well.
|
||||
|
@ -529,18 +529,10 @@ public class IndicesService extends AbstractLifecycleComponent<IndicesService> i
|
|||
* </ul>
|
||||
*
|
||||
* @param shardId the shard to delete.
|
||||
* @param metaData the shards index metadata. This is required to access the indexes settings etc.
|
||||
* @param indexSettings the shards's relevant {@link IndexSettings}. This is required to access the indexes settings etc.
|
||||
*/
|
||||
public boolean canDeleteShardContent(ShardId shardId, IndexMetaData metaData) {
|
||||
// we need the metadata here since we have to build the complete settings
|
||||
// to decide where the shard content lives. In the future we might even need more info here ie. for shadow replicas
|
||||
// The plan was to make it harder to miss-use and ask for metadata instead of simple settings
|
||||
assert shardId.getIndex().equals(metaData.getIndex());
|
||||
final IndexSettings indexSettings = buildIndexSettings(metaData);
|
||||
return canDeleteShardContent(shardId, indexSettings);
|
||||
}
|
||||
|
||||
private boolean canDeleteShardContent(ShardId shardId, IndexSettings indexSettings) {
|
||||
public boolean canDeleteShardContent(ShardId shardId, IndexSettings indexSettings) {
|
||||
assert shardId.getIndex().equals(indexSettings.getIndex().name());
|
||||
final IndexService indexService = this.indices.get(shardId.getIndex());
|
||||
if (indexSettings.isOnSharedFilesystem() == false) {
|
||||
if (indexService != null && nodeEnv.hasNodeFile()) {
|
||||
|
|
|
@ -33,6 +33,7 @@ import org.elasticsearch.common.settings.Settings;
|
|||
import org.elasticsearch.common.unit.TimeValue;
|
||||
import org.elasticsearch.common.util.concurrent.EsRejectedExecutionException;
|
||||
import org.elasticsearch.index.IndexService;
|
||||
import org.elasticsearch.index.IndexSettings;
|
||||
import org.elasticsearch.index.shard.IndexShard;
|
||||
import org.elasticsearch.index.shard.IndexShardState;
|
||||
import org.elasticsearch.index.shard.ShardId;
|
||||
|
@ -43,6 +44,7 @@ import org.elasticsearch.transport.*;
|
|||
import java.io.Closeable;
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.EnumSet;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
@ -97,11 +99,12 @@ public class IndicesStore extends AbstractComponent implements ClusterStateListe
|
|||
}
|
||||
|
||||
for (IndexRoutingTable indexRoutingTable : event.state().routingTable()) {
|
||||
IndexSettings indexSettings = new IndexSettings(event.state().getMetaData().index(indexRoutingTable.index()), settings, Collections.emptyList());
|
||||
// Note, closed indices will not have any routing information, so won't be deleted
|
||||
for (IndexShardRoutingTable indexShardRoutingTable : indexRoutingTable) {
|
||||
if (shardCanBeDeleted(event.state(), indexShardRoutingTable)) {
|
||||
ShardId shardId = indexShardRoutingTable.shardId();
|
||||
if (indicesService.canDeleteShardContent(shardId, event.state().getMetaData().index(shardId.getIndex()))) {
|
||||
if (indicesService.canDeleteShardContent(shardId, indexSettings)) {
|
||||
deleteShardIfExistElseWhere(event.state(), indexShardRoutingTable);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -72,12 +72,13 @@ public class IndicesServiceTests extends ESSingleNodeTestCase {
|
|||
IndicesService indicesService = getIndicesService();
|
||||
IndexMetaData meta = IndexMetaData.builder("test").settings(settings(Version.CURRENT)).numberOfShards(1).numberOfReplicas(
|
||||
1).build();
|
||||
assertFalse("no shard location", indicesService.canDeleteShardContent(new ShardId("test", 0), meta));
|
||||
IndexSettings indexSettings = IndexSettingsModule.newIndexSettings("test", meta.getSettings());
|
||||
assertFalse("no shard location", indicesService.canDeleteShardContent(new ShardId("test", 0), indexSettings));
|
||||
IndexService test = createIndex("test");
|
||||
assertTrue(test.hasShard(0));
|
||||
assertFalse("shard is allocated", indicesService.canDeleteShardContent(new ShardId("test", 0), meta));
|
||||
assertFalse("shard is allocated", indicesService.canDeleteShardContent(new ShardId("test", 0), indexSettings));
|
||||
test.removeShard(0, "boom");
|
||||
assertTrue("shard is removed", indicesService.canDeleteShardContent(new ShardId("test", 0), meta));
|
||||
assertTrue("shard is removed", indicesService.canDeleteShardContent(new ShardId("test", 0), indexSettings));
|
||||
}
|
||||
|
||||
public void testDeleteIndexStore() throws Exception {
|
||||
|
|
Loading…
Reference in New Issue