mirror of
https://github.com/elastic/elasticsearch.git
synced 2025-04-25 07:37:19 -04:00
Cache index.hidden setting (#78612)
We look up the value for `index.hidden` for every index every time we build a new `Metadata`, which involves map lookups and string parsing and so on and takes nontrivial time. This commit moves the value to a field so the lookups are only needed if the index metadata changes. Closes #77974
This commit is contained in:
parent
abdffdaf40
commit
9aef3315b2
4 changed files with 33 additions and 2 deletions
|
@ -389,6 +389,7 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
||||||
private final ActiveShardCount waitForActiveShards;
|
private final ActiveShardCount waitForActiveShards;
|
||||||
private final ImmutableOpenMap<String, RolloverInfo> rolloverInfos;
|
private final ImmutableOpenMap<String, RolloverInfo> rolloverInfos;
|
||||||
private final boolean isSystem;
|
private final boolean isSystem;
|
||||||
|
private final boolean isHidden;
|
||||||
|
|
||||||
private final IndexLongFieldRange timestampRange;
|
private final IndexLongFieldRange timestampRange;
|
||||||
|
|
||||||
|
@ -421,6 +422,7 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
||||||
final ActiveShardCount waitForActiveShards,
|
final ActiveShardCount waitForActiveShards,
|
||||||
final ImmutableOpenMap<String, RolloverInfo> rolloverInfos,
|
final ImmutableOpenMap<String, RolloverInfo> rolloverInfos,
|
||||||
final boolean isSystem,
|
final boolean isSystem,
|
||||||
|
final boolean isHidden,
|
||||||
final IndexLongFieldRange timestampRange,
|
final IndexLongFieldRange timestampRange,
|
||||||
final int priority,
|
final int priority,
|
||||||
final long creationDate) {
|
final long creationDate) {
|
||||||
|
@ -455,6 +457,8 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
||||||
this.waitForActiveShards = waitForActiveShards;
|
this.waitForActiveShards = waitForActiveShards;
|
||||||
this.rolloverInfos = rolloverInfos;
|
this.rolloverInfos = rolloverInfos;
|
||||||
this.isSystem = isSystem;
|
this.isSystem = isSystem;
|
||||||
|
assert isHidden == INDEX_HIDDEN_SETTING.get(settings);
|
||||||
|
this.isHidden = isHidden;
|
||||||
this.timestampRange = timestampRange;
|
this.timestampRange = timestampRange;
|
||||||
this.priority = priority;
|
this.priority = priority;
|
||||||
this.creationDate = creationDate;
|
this.creationDate = creationDate;
|
||||||
|
@ -938,6 +942,10 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
||||||
return isSystem;
|
return isSystem;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isHidden() {
|
||||||
|
return isHidden;
|
||||||
|
}
|
||||||
|
|
||||||
public int priority() {
|
public int priority() {
|
||||||
return priority;
|
return priority;
|
||||||
}
|
}
|
||||||
|
@ -1318,6 +1326,7 @@ public class IndexMetadata implements Diffable<IndexMetadata>, ToXContentFragmen
|
||||||
waitForActiveShards,
|
waitForActiveShards,
|
||||||
rolloverInfos.build(),
|
rolloverInfos.build(),
|
||||||
isSystem,
|
isSystem,
|
||||||
|
INDEX_HIDDEN_SETTING.get(settings),
|
||||||
timestampRange,
|
timestampRange,
|
||||||
IndexMetadata.INDEX_PRIORITY_SETTING.get(settings),
|
IndexMetadata.INDEX_PRIORITY_SETTING.get(settings),
|
||||||
settings.getAsLong(SETTING_CREATION_DATE, -1L)
|
settings.getAsLong(SETTING_CREATION_DATE, -1L)
|
||||||
|
|
|
@ -1450,7 +1450,7 @@ public class Metadata implements Iterable<IndexMetadata>, Diffable<Metadata>, To
|
||||||
final String name = indexMetadata.getIndex().getName();
|
final String name = indexMetadata.getIndex().getName();
|
||||||
boolean added = allIndices.add(name);
|
boolean added = allIndices.add(name);
|
||||||
assert added : "double index named [" + name + "]";
|
assert added : "double index named [" + name + "]";
|
||||||
final boolean visible = IndexMetadata.INDEX_HIDDEN_SETTING.get(indexMetadata.getSettings()) == false;
|
final boolean visible = indexMetadata.isHidden() == false;
|
||||||
if (visible) {
|
if (visible) {
|
||||||
visibleIndices.add(name);
|
visibleIndices.add(name);
|
||||||
}
|
}
|
||||||
|
|
|
@ -1545,7 +1545,7 @@ public class RestoreService implements ClusterStateApplier {
|
||||||
}
|
}
|
||||||
|
|
||||||
private void ensureValidIndexName(ClusterState currentState, IndexMetadata snapshotIndexMetadata, String renamedIndexName) {
|
private void ensureValidIndexName(ClusterState currentState, IndexMetadata snapshotIndexMetadata, String renamedIndexName) {
|
||||||
final boolean isHidden = IndexMetadata.INDEX_HIDDEN_SETTING.get(snapshotIndexMetadata.getSettings());
|
final boolean isHidden = snapshotIndexMetadata.isHidden();
|
||||||
createIndexService.validateIndexName(renamedIndexName, currentState);
|
createIndexService.validateIndexName(renamedIndexName, currentState);
|
||||||
createIndexService.validateDotIndex(renamedIndexName, isHidden);
|
createIndexService.validateDotIndex(renamedIndexName, isHidden);
|
||||||
createIndexService.validateIndexSettings(renamedIndexName, snapshotIndexMetadata.getSettings(), false);
|
createIndexService.validateIndexSettings(renamedIndexName, snapshotIndexMetadata.getSettings(), false);
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
package org.elasticsearch.cluster.metadata;
|
package org.elasticsearch.cluster.metadata;
|
||||||
|
|
||||||
|
import org.elasticsearch.Version;
|
||||||
import org.elasticsearch.action.admin.indices.rollover.MaxAgeCondition;
|
import org.elasticsearch.action.admin.indices.rollover.MaxAgeCondition;
|
||||||
import org.elasticsearch.action.admin.indices.rollover.MaxDocsCondition;
|
import org.elasticsearch.action.admin.indices.rollover.MaxDocsCondition;
|
||||||
import org.elasticsearch.action.admin.indices.rollover.MaxPrimaryShardSizeCondition;
|
import org.elasticsearch.action.admin.indices.rollover.MaxPrimaryShardSizeCondition;
|
||||||
|
@ -40,6 +41,7 @@ import java.util.List;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static org.elasticsearch.cluster.metadata.IndexMetadata.INDEX_HIDDEN_SETTING;
|
||||||
import static org.elasticsearch.cluster.metadata.IndexMetadata.parseIndexNameCounter;
|
import static org.elasticsearch.cluster.metadata.IndexMetadata.parseIndexNameCounter;
|
||||||
import static org.hamcrest.Matchers.containsString;
|
import static org.hamcrest.Matchers.containsString;
|
||||||
import static org.hamcrest.Matchers.equalTo;
|
import static org.hamcrest.Matchers.equalTo;
|
||||||
|
@ -366,4 +368,24 @@ public class IndexMetadataTests extends ESTestCase {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public void testIsHidden() {
|
||||||
|
Settings.Builder settings = Settings.builder()
|
||||||
|
.put(IndexMetadata.SETTING_NUMBER_OF_SHARDS, randomIntBetween(1, 8))
|
||||||
|
.put(IndexMetadata.SETTING_NUMBER_OF_REPLICAS, 0)
|
||||||
|
.put(IndexMetadata.SETTING_VERSION_CREATED, Version.CURRENT);
|
||||||
|
IndexMetadata indexMetadata = IndexMetadata.builder("test").settings(settings).build();
|
||||||
|
assertFalse(indexMetadata.isHidden());
|
||||||
|
|
||||||
|
settings.put(INDEX_HIDDEN_SETTING.getKey(), "false");
|
||||||
|
indexMetadata = IndexMetadata.builder(indexMetadata).settings(settings).build();
|
||||||
|
assertFalse(indexMetadata.isHidden());
|
||||||
|
|
||||||
|
settings.put(INDEX_HIDDEN_SETTING.getKey(), "true");
|
||||||
|
indexMetadata = IndexMetadata.builder(indexMetadata).settings(settings).build();
|
||||||
|
assertTrue(indexMetadata.isHidden());
|
||||||
|
|
||||||
|
indexMetadata = IndexMetadata.builder(indexMetadata).build();
|
||||||
|
assertTrue(indexMetadata.isHidden()); // preserved if settings unchanged
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue