convert compound_format
This commit is contained in:
parent
c702fbd29b
commit
a9ff6bc405
|
@ -138,7 +138,6 @@ public class ClusterModule extends AbstractModule {
|
|||
registerIndexDynamicSetting(MergePolicyConfig.INDEX_MERGE_POLICY_MAX_MERGED_SEGMENT, Validator.BYTES_SIZE);
|
||||
registerIndexDynamicSetting(MergePolicyConfig.INDEX_MERGE_POLICY_SEGMENTS_PER_TIER, Validator.DOUBLE_GTE_2);
|
||||
registerIndexDynamicSetting(MergePolicyConfig.INDEX_MERGE_POLICY_RECLAIM_DELETES_WEIGHT, Validator.NON_NEGATIVE_DOUBLE);
|
||||
registerIndexDynamicSetting(MergePolicyConfig.INDEX_COMPOUND_FORMAT, Validator.EMPTY);
|
||||
}
|
||||
|
||||
public void registerIndexDynamicSetting(String setting, Validator validator) {
|
||||
|
|
|
@ -229,7 +229,7 @@ public final class IndexSettings {
|
|||
scopedSettings.addSettingsUpdateConsumer(MAX_RESULT_WINDOW_SETTING, this::setMaxResultWindow);
|
||||
TTLPurgeDisabled = scopedSettings.get(INDEX_TTL_DISABLE_PURGE_SETTING);
|
||||
scopedSettings.addSettingsUpdateConsumer(INDEX_TTL_DISABLE_PURGE_SETTING, this::setTTLPurgeDisabled);
|
||||
this.mergePolicyConfig = new MergePolicyConfig(logger, settings);
|
||||
this.mergePolicyConfig = new MergePolicyConfig(logger, this);
|
||||
assert indexNameMatcher.test(indexMetaData.getIndex());
|
||||
|
||||
}
|
||||
|
|
|
@ -23,6 +23,7 @@ import org.apache.lucene.index.MergePolicy;
|
|||
import org.apache.lucene.index.NoMergePolicy;
|
||||
import org.apache.lucene.index.TieredMergePolicy;
|
||||
import org.elasticsearch.common.logging.ESLogger;
|
||||
import org.elasticsearch.common.settings.Setting;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.unit.ByteSizeUnit;
|
||||
import org.elasticsearch.common.unit.ByteSizeValue;
|
||||
|
@ -117,7 +118,7 @@ public final class MergePolicyConfig {
|
|||
private final TieredMergePolicy mergePolicy = new TieredMergePolicy();
|
||||
private final ESLogger logger;
|
||||
private final boolean mergesEnabled;
|
||||
private volatile double noCFSRatio;
|
||||
private volatile double noCFSRatio; // we should probably get rid of this one since we can get it from mergePolicy
|
||||
|
||||
public static final double DEFAULT_EXPUNGE_DELETES_ALLOWED = 10d;
|
||||
public static final ByteSizeValue DEFAULT_FLOOR_SEGMENT = new ByteSizeValue(2, ByteSizeUnit.MB);
|
||||
|
@ -126,7 +127,7 @@ public final class MergePolicyConfig {
|
|||
public static final ByteSizeValue DEFAULT_MAX_MERGED_SEGMENT = new ByteSizeValue(5, ByteSizeUnit.GB);
|
||||
public static final double DEFAULT_SEGMENTS_PER_TIER = 10.0d;
|
||||
public static final double DEFAULT_RECLAIM_DELETES_WEIGHT = 2.0d;
|
||||
public static final String INDEX_COMPOUND_FORMAT = "index.compound_format";
|
||||
public static final Setting<Double> INDEX_COMPOUND_FORMAT_SETTING = new Setting<>("index.compound_format", Double.toString(TieredMergePolicy.DEFAULT_NO_CFS_RATIO), MergePolicyConfig::parseNoCFSRatio, true, Setting.Scope.INDEX);
|
||||
|
||||
public static final String INDEX_MERGE_POLICY_EXPUNGE_DELETES_ALLOWED = "index.merge.policy.expunge_deletes_allowed";
|
||||
public static final String INDEX_MERGE_POLICY_FLOOR_SEGMENT = "index.merge.policy.floor_segment";
|
||||
|
@ -138,18 +139,19 @@ public final class MergePolicyConfig {
|
|||
public static final String INDEX_MERGE_ENABLED = "index.merge.enabled";
|
||||
|
||||
|
||||
MergePolicyConfig(ESLogger logger, Settings indexSettings) {
|
||||
MergePolicyConfig(ESLogger logger, IndexSettings indexSettings) {
|
||||
this.logger = logger;
|
||||
this.noCFSRatio = parseNoCFSRatio(indexSettings.get(INDEX_COMPOUND_FORMAT, Double.toString(TieredMergePolicy.DEFAULT_NO_CFS_RATIO)));
|
||||
double forceMergeDeletesPctAllowed = indexSettings.getAsDouble("index.merge.policy.expunge_deletes_allowed", DEFAULT_EXPUNGE_DELETES_ALLOWED); // percentage
|
||||
ByteSizeValue floorSegment = indexSettings.getAsBytesSize("index.merge.policy.floor_segment", DEFAULT_FLOOR_SEGMENT);
|
||||
int maxMergeAtOnce = indexSettings.getAsInt("index.merge.policy.max_merge_at_once", DEFAULT_MAX_MERGE_AT_ONCE);
|
||||
int maxMergeAtOnceExplicit = indexSettings.getAsInt("index.merge.policy.max_merge_at_once_explicit", DEFAULT_MAX_MERGE_AT_ONCE_EXPLICIT);
|
||||
indexSettings.addSettingsUpdateConsumer(INDEX_COMPOUND_FORMAT_SETTING, this::setNoCFSRatio);
|
||||
noCFSRatio = indexSettings.getValue(INDEX_COMPOUND_FORMAT_SETTING);
|
||||
double forceMergeDeletesPctAllowed = indexSettings.getSettings().getAsDouble("index.merge.policy.expunge_deletes_allowed", DEFAULT_EXPUNGE_DELETES_ALLOWED); // percentage
|
||||
ByteSizeValue floorSegment = indexSettings.getSettings().getAsBytesSize("index.merge.policy.floor_segment", DEFAULT_FLOOR_SEGMENT);
|
||||
int maxMergeAtOnce = indexSettings.getSettings().getAsInt("index.merge.policy.max_merge_at_once", DEFAULT_MAX_MERGE_AT_ONCE);
|
||||
int maxMergeAtOnceExplicit = indexSettings.getSettings().getAsInt("index.merge.policy.max_merge_at_once_explicit", DEFAULT_MAX_MERGE_AT_ONCE_EXPLICIT);
|
||||
// TODO is this really a good default number for max_merge_segment, what happens for large indices, won't they end up with many segments?
|
||||
ByteSizeValue maxMergedSegment = indexSettings.getAsBytesSize("index.merge.policy.max_merged_segment", DEFAULT_MAX_MERGED_SEGMENT);
|
||||
double segmentsPerTier = indexSettings.getAsDouble("index.merge.policy.segments_per_tier", DEFAULT_SEGMENTS_PER_TIER);
|
||||
double reclaimDeletesWeight = indexSettings.getAsDouble("index.merge.policy.reclaim_deletes_weight", DEFAULT_RECLAIM_DELETES_WEIGHT);
|
||||
this.mergesEnabled = indexSettings.getAsBoolean(INDEX_MERGE_ENABLED, true);
|
||||
ByteSizeValue maxMergedSegment = indexSettings.getSettings().getAsBytesSize("index.merge.policy.max_merged_segment", DEFAULT_MAX_MERGED_SEGMENT);
|
||||
double segmentsPerTier = indexSettings.getSettings().getAsDouble("index.merge.policy.segments_per_tier", DEFAULT_SEGMENTS_PER_TIER);
|
||||
double reclaimDeletesWeight = indexSettings.getSettings().getAsDouble("index.merge.policy.reclaim_deletes_weight", DEFAULT_RECLAIM_DELETES_WEIGHT);
|
||||
this.mergesEnabled = indexSettings.getSettings().getAsBoolean(INDEX_MERGE_ENABLED, true);
|
||||
if (mergesEnabled == false) {
|
||||
logger.warn("[{}] is set to false, this should only be used in tests and can cause serious problems in production environments", INDEX_MERGE_ENABLED);
|
||||
}
|
||||
|
@ -166,6 +168,11 @@ public final class MergePolicyConfig {
|
|||
forceMergeDeletesPctAllowed, floorSegment, maxMergeAtOnce, maxMergeAtOnceExplicit, maxMergedSegment, segmentsPerTier, reclaimDeletesWeight);
|
||||
}
|
||||
|
||||
private void setNoCFSRatio(Double noCFSRatio) {
|
||||
this.noCFSRatio = noCFSRatio.doubleValue();
|
||||
mergePolicy.setNoCFSRatio(noCFSRatio);
|
||||
}
|
||||
|
||||
private int adjustMaxMergeAtOnceIfNeeded(int maxMergeAtOnce, double segmentsPerTier) {
|
||||
// fixing maxMergeAtOnce, see TieredMergePolicy#setMaxMergeAtOnce
|
||||
if (!(segmentsPerTier >= maxMergeAtOnce)) {
|
||||
|
@ -234,13 +241,6 @@ public final class MergePolicyConfig {
|
|||
logger.info("updating [reclaim_deletes_weight] from [{}] to [{}]", oldReclaimDeletesWeight, reclaimDeletesWeight);
|
||||
mergePolicy.setReclaimDeletesWeight(reclaimDeletesWeight);
|
||||
}
|
||||
|
||||
double noCFSRatio = parseNoCFSRatio(settings.get(INDEX_COMPOUND_FORMAT, Double.toString(MergePolicyConfig.this.noCFSRatio)));
|
||||
if (noCFSRatio != MergePolicyConfig.this.noCFSRatio) {
|
||||
logger.info("updating index.compound_format from [{}] to [{}]", formatNoCFSRatio(MergePolicyConfig.this.noCFSRatio), formatNoCFSRatio(noCFSRatio));
|
||||
mergePolicy.setNoCFSRatio(noCFSRatio);
|
||||
MergePolicyConfig.this.noCFSRatio = noCFSRatio;
|
||||
}
|
||||
}
|
||||
|
||||
private static double parseNoCFSRatio(String noCFSRatio) {
|
||||
|
@ -261,14 +261,4 @@ public final class MergePolicyConfig {
|
|||
}
|
||||
}
|
||||
}
|
||||
|
||||
private static String formatNoCFSRatio(double ratio) {
|
||||
if (ratio == 1.0) {
|
||||
return Boolean.TRUE.toString();
|
||||
} else if (ratio == 0.0) {
|
||||
return Boolean.FALSE.toString();
|
||||
} else {
|
||||
return Double.toString(ratio);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -142,7 +142,7 @@ public class IndexSettingsTests extends ESTestCase {
|
|||
|
||||
}
|
||||
|
||||
private IndexMetaData newIndexMeta(String name, Settings indexSettings) {
|
||||
public static IndexMetaData newIndexMeta(String name, Settings indexSettings) {
|
||||
Settings build = Settings.settingsBuilder().put(IndexMetaData.SETTING_VERSION_CREATED, Version.CURRENT)
|
||||
.put(IndexMetaData.SETTING_NUMBER_OF_REPLICAS, 1)
|
||||
.put(IndexMetaData.SETTING_NUMBER_OF_SHARDS, 1)
|
||||
|
|
|
@ -20,6 +20,8 @@ package org.elasticsearch.index;
|
|||
|
||||
import org.apache.lucene.index.NoMergePolicy;
|
||||
import org.apache.lucene.index.TieredMergePolicy;
|
||||
import org.elasticsearch.Version;
|
||||
import org.elasticsearch.cluster.metadata.IndexMetaData;
|
||||
import org.elasticsearch.common.settings.Settings;
|
||||
import org.elasticsearch.common.unit.ByteSizeUnit;
|
||||
import org.elasticsearch.common.unit.ByteSizeValue;
|
||||
|
@ -31,51 +33,53 @@ import org.elasticsearch.test.ESTestCase;
|
|||
import java.io.IOException;
|
||||
|
||||
import static org.elasticsearch.common.settings.Settings.Builder.EMPTY_SETTINGS;
|
||||
import static org.elasticsearch.index.IndexSettingsTests.newIndexMeta;
|
||||
import static org.hamcrest.Matchers.equalTo;
|
||||
|
||||
public class MergePolicySettingsTests extends ESTestCase {
|
||||
protected final ShardId shardId = new ShardId(new Index("index"), 1);
|
||||
|
||||
public void testCompoundFileSettings() throws IOException {
|
||||
assertThat(new MergePolicyConfig(logger, EMPTY_SETTINGS).getMergePolicy().getNoCFSRatio(), equalTo(0.1));
|
||||
assertThat(new MergePolicyConfig(logger, build(true)).getMergePolicy().getNoCFSRatio(), equalTo(1.0));
|
||||
assertThat(new MergePolicyConfig(logger, build(0.5)).getMergePolicy().getNoCFSRatio(), equalTo(0.5));
|
||||
assertThat(new MergePolicyConfig(logger, build(1.0)).getMergePolicy().getNoCFSRatio(), equalTo(1.0));
|
||||
assertThat(new MergePolicyConfig(logger, build("true")).getMergePolicy().getNoCFSRatio(), equalTo(1.0));
|
||||
assertThat(new MergePolicyConfig(logger, build("True")).getMergePolicy().getNoCFSRatio(), equalTo(1.0));
|
||||
assertThat(new MergePolicyConfig(logger, build("False")).getMergePolicy().getNoCFSRatio(), equalTo(0.0));
|
||||
assertThat(new MergePolicyConfig(logger, build("false")).getMergePolicy().getNoCFSRatio(), equalTo(0.0));
|
||||
assertThat(new MergePolicyConfig(logger, build(false)).getMergePolicy().getNoCFSRatio(), equalTo(0.0));
|
||||
assertThat(new MergePolicyConfig(logger, build(0)).getMergePolicy().getNoCFSRatio(), equalTo(0.0));
|
||||
assertThat(new MergePolicyConfig(logger, build(0.0)).getMergePolicy().getNoCFSRatio(), equalTo(0.0));
|
||||
assertThat(new MergePolicyConfig(logger, indexSettings(Settings.EMPTY)).getMergePolicy().getNoCFSRatio(), equalTo(0.1));
|
||||
assertThat(new MergePolicyConfig(logger, indexSettings(build(true))).getMergePolicy().getNoCFSRatio(), equalTo(1.0));
|
||||
assertThat(new MergePolicyConfig(logger, indexSettings(build(0.5))).getMergePolicy().getNoCFSRatio(), equalTo(0.5));
|
||||
assertThat(new MergePolicyConfig(logger, indexSettings(build(1.0))).getMergePolicy().getNoCFSRatio(), equalTo(1.0));
|
||||
assertThat(new MergePolicyConfig(logger, indexSettings(build("true"))).getMergePolicy().getNoCFSRatio(), equalTo(1.0));
|
||||
assertThat(new MergePolicyConfig(logger, indexSettings(build("True"))).getMergePolicy().getNoCFSRatio(), equalTo(1.0));
|
||||
assertThat(new MergePolicyConfig(logger, indexSettings(build("False"))).getMergePolicy().getNoCFSRatio(), equalTo(0.0));
|
||||
assertThat(new MergePolicyConfig(logger, indexSettings(build("false"))).getMergePolicy().getNoCFSRatio(), equalTo(0.0));
|
||||
assertThat(new MergePolicyConfig(logger, indexSettings(build(false))).getMergePolicy().getNoCFSRatio(), equalTo(0.0));
|
||||
assertThat(new MergePolicyConfig(logger, indexSettings(build(0))).getMergePolicy().getNoCFSRatio(), equalTo(0.0));
|
||||
assertThat(new MergePolicyConfig(logger, indexSettings(build(0.0))).getMergePolicy().getNoCFSRatio(), equalTo(0.0));
|
||||
}
|
||||
|
||||
private static IndexSettings indexSettings(Settings settings) {
|
||||
return new IndexSettings(newIndexMeta("test", settings), Settings.EMPTY);
|
||||
}
|
||||
|
||||
public void testNoMerges() {
|
||||
MergePolicyConfig mp = new MergePolicyConfig(logger, Settings.builder().put(MergePolicyConfig.INDEX_MERGE_ENABLED, false).build());
|
||||
MergePolicyConfig mp = new MergePolicyConfig(logger, indexSettings(Settings.builder().put(MergePolicyConfig.INDEX_MERGE_ENABLED, false).build()));
|
||||
assertTrue(mp.getMergePolicy() instanceof NoMergePolicy);
|
||||
}
|
||||
|
||||
public void testUpdateSettings() throws IOException {
|
||||
{
|
||||
MergePolicyConfig mp = new MergePolicyConfig(logger, EMPTY_SETTINGS);
|
||||
assertThat((mp.getMergePolicy()).getNoCFSRatio(), equalTo(0.1));
|
||||
|
||||
mp.onRefreshSettings(build(1.0));
|
||||
assertThat((mp.getMergePolicy()).getNoCFSRatio(), equalTo(1.0));
|
||||
|
||||
mp.onRefreshSettings(build(0.1));
|
||||
assertThat((mp.getMergePolicy()).getNoCFSRatio(), equalTo(0.1));
|
||||
|
||||
mp.onRefreshSettings(build(0.0));
|
||||
assertThat((mp.getMergePolicy()).getNoCFSRatio(), equalTo(0.0));
|
||||
}
|
||||
|
||||
|
||||
IndexSettings indexSettings = indexSettings(EMPTY_SETTINGS);
|
||||
assertThat(indexSettings.getMergePolicy().getNoCFSRatio(), equalTo(0.1));
|
||||
indexSettings = indexSettings(build(0.9));
|
||||
assertThat((indexSettings.getMergePolicy()).getNoCFSRatio(), equalTo(0.9));
|
||||
indexSettings.updateIndexMetaData(newIndexMeta("index", build(0.1)));
|
||||
assertThat((indexSettings.getMergePolicy()).getNoCFSRatio(), equalTo(0.1));
|
||||
indexSettings.updateIndexMetaData(newIndexMeta("index", build(0.0)));
|
||||
assertThat((indexSettings.getMergePolicy()).getNoCFSRatio(), equalTo(0.0));
|
||||
indexSettings.updateIndexMetaData(newIndexMeta("index", build("true")));
|
||||
assertThat((indexSettings.getMergePolicy()).getNoCFSRatio(), equalTo(1.0));
|
||||
indexSettings.updateIndexMetaData(newIndexMeta("index", build("false")));
|
||||
assertThat((indexSettings.getMergePolicy()).getNoCFSRatio(), equalTo(0.0));
|
||||
}
|
||||
|
||||
|
||||
public void testTieredMergePolicySettingsUpdate() throws IOException {
|
||||
MergePolicyConfig mp = new MergePolicyConfig(logger, EMPTY_SETTINGS);
|
||||
MergePolicyConfig mp = new MergePolicyConfig(logger, indexSettings(EMPTY_SETTINGS));
|
||||
assertThat(mp.getMergePolicy().getNoCFSRatio(), equalTo(0.1));
|
||||
|
||||
assertEquals(((TieredMergePolicy) mp.getMergePolicy()).getForceMergeDeletesPctAllowed(), MergePolicyConfig.DEFAULT_EXPUNGE_DELETES_ALLOWED, 0.0d);
|
||||
|
@ -118,19 +122,19 @@ public class MergePolicySettingsTests extends ESTestCase {
|
|||
}
|
||||
|
||||
public Settings build(String value) {
|
||||
return Settings.builder().put(MergePolicyConfig.INDEX_COMPOUND_FORMAT, value).build();
|
||||
return Settings.builder().put(MergePolicyConfig.INDEX_COMPOUND_FORMAT_SETTING.getKey(), value).build();
|
||||
}
|
||||
|
||||
public Settings build(double value) {
|
||||
return Settings.builder().put(MergePolicyConfig.INDEX_COMPOUND_FORMAT, value).build();
|
||||
return Settings.builder().put(MergePolicyConfig.INDEX_COMPOUND_FORMAT_SETTING.getKey(), value).build();
|
||||
}
|
||||
|
||||
public Settings build(int value) {
|
||||
return Settings.builder().put(MergePolicyConfig.INDEX_COMPOUND_FORMAT, value).build();
|
||||
return Settings.builder().put(MergePolicyConfig.INDEX_COMPOUND_FORMAT_SETTING.getKey(), value).build();
|
||||
}
|
||||
|
||||
public Settings build(boolean value) {
|
||||
return Settings.builder().put(MergePolicyConfig.INDEX_COMPOUND_FORMAT, value).build();
|
||||
return Settings.builder().put(MergePolicyConfig.INDEX_COMPOUND_FORMAT_SETTING.getKey(), value).build();
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -486,7 +486,7 @@ public abstract class ESIntegTestCase extends ESTestCase {
|
|||
|
||||
private static Settings.Builder setRandomIndexMergeSettings(Random random, Settings.Builder builder) {
|
||||
if (random.nextBoolean()) {
|
||||
builder.put(MergePolicyConfig.INDEX_COMPOUND_FORMAT,
|
||||
builder.put(MergePolicyConfig.INDEX_COMPOUND_FORMAT_SETTING.getKey(),
|
||||
random.nextBoolean() ? random.nextDouble() : random.nextBoolean());
|
||||
}
|
||||
switch (random.nextInt(4)) {
|
||||
|
|
Loading…
Reference in New Issue