Core: remove index.fail_on_merge_failure
Always fail the engine if an unexpected exception is hit during merge. Closes #10088
This commit is contained in:
parent
ebe1a4663d
commit
0683a66277
|
@ -64,9 +64,6 @@ settings API:
|
||||||
`index.index_concurrency`::
|
`index.index_concurrency`::
|
||||||
experimental[] Defaults to `8`.
|
experimental[] Defaults to `8`.
|
||||||
|
|
||||||
`index.fail_on_merge_failure`::
|
|
||||||
experimental[] Default to `true`.
|
|
||||||
|
|
||||||
`index.translog.flush_threshold_ops`::
|
`index.translog.flush_threshold_ops`::
|
||||||
When to flush based on operations.
|
When to flush based on operations.
|
||||||
|
|
||||||
|
|
|
@ -50,7 +50,6 @@ import java.util.concurrent.TimeUnit;
|
||||||
*/
|
*/
|
||||||
public final class EngineConfig {
|
public final class EngineConfig {
|
||||||
private final ShardId shardId;
|
private final ShardId shardId;
|
||||||
private volatile boolean failOnMergeFailure = true;
|
|
||||||
private volatile boolean failEngineOnCorruption = true;
|
private volatile boolean failEngineOnCorruption = true;
|
||||||
private volatile ByteSizeValue indexingBufferSize;
|
private volatile ByteSizeValue indexingBufferSize;
|
||||||
private final int indexConcurrency;
|
private final int indexConcurrency;
|
||||||
|
@ -99,12 +98,6 @@ public final class EngineConfig {
|
||||||
*/
|
*/
|
||||||
public static final String INDEX_GC_DELETES_SETTING = "index.gc_deletes";
|
public static final String INDEX_GC_DELETES_SETTING = "index.gc_deletes";
|
||||||
|
|
||||||
/**
|
|
||||||
* Index setting to enable / disable engine failures on merge exceptions. Default is <code>true</code> / <tt>enabled</tt>.
|
|
||||||
* This setting is realtime updateable.
|
|
||||||
*/
|
|
||||||
public static final String INDEX_FAIL_ON_MERGE_FAILURE_SETTING = "index.fail_on_merge_failure";
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Index setting to enable / disable engine failures on detected index corruptions. Default is <code>true</code> / <tt>enabled</tt>.
|
* Index setting to enable / disable engine failures on detected index corruptions. Default is <code>true</code> / <tt>enabled</tt>.
|
||||||
* This setting is realtime updateable.
|
* This setting is realtime updateable.
|
||||||
|
@ -156,7 +149,6 @@ public final class EngineConfig {
|
||||||
codecName = indexSettings.get(EngineConfig.INDEX_CODEC_SETTING, EngineConfig.DEFAULT_CODEC_NAME);
|
codecName = indexSettings.get(EngineConfig.INDEX_CODEC_SETTING, EngineConfig.DEFAULT_CODEC_NAME);
|
||||||
indexingBufferSize = indexSettings.getAsBytesSize(INDEX_BUFFER_SIZE_SETTING, DEFAUTL_INDEX_BUFFER_SIZE);
|
indexingBufferSize = indexSettings.getAsBytesSize(INDEX_BUFFER_SIZE_SETTING, DEFAUTL_INDEX_BUFFER_SIZE);
|
||||||
failEngineOnCorruption = indexSettings.getAsBoolean(INDEX_FAIL_ON_CORRUPTION_SETTING, true);
|
failEngineOnCorruption = indexSettings.getAsBoolean(INDEX_FAIL_ON_CORRUPTION_SETTING, true);
|
||||||
failOnMergeFailure = indexSettings.getAsBoolean(INDEX_FAIL_ON_MERGE_FAILURE_SETTING, true);
|
|
||||||
gcDeletesInMillis = indexSettings.getAsTime(INDEX_GC_DELETES_SETTING, EngineConfig.DEFAULT_GC_DELETES).millis();
|
gcDeletesInMillis = indexSettings.getAsTime(INDEX_GC_DELETES_SETTING, EngineConfig.DEFAULT_GC_DELETES).millis();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -176,13 +168,6 @@ public final class EngineConfig {
|
||||||
this.enableGcDeletes = enableGcDeletes;
|
this.enableGcDeletes = enableGcDeletes;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns <code>true</code> iff the engine should be failed if a merge error is hit. Defaults to <code>true</code>
|
|
||||||
*/
|
|
||||||
public boolean isFailOnMergeFailure() {
|
|
||||||
return failOnMergeFailure;
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Returns <code>true</code> if the engine should be failed in the case of a corrupted index. Defaults to <code>true</code>
|
* Returns <code>true</code> if the engine should be failed in the case of a corrupted index. Defaults to <code>true</code>
|
||||||
*/
|
*/
|
||||||
|
@ -377,11 +362,4 @@ public final class EngineConfig {
|
||||||
public void setFailEngineOnCorruption(boolean failEngineOnCorruption) {
|
public void setFailEngineOnCorruption(boolean failEngineOnCorruption) {
|
||||||
this.failEngineOnCorruption = failEngineOnCorruption;
|
this.failEngineOnCorruption = failEngineOnCorruption;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
|
||||||
* Sets if the engine should be failed if a merge error is hit. Defaults to <code>true</code>
|
|
||||||
*/
|
|
||||||
public void setFailOnMergeFailure(boolean failOnMergeFailure) {
|
|
||||||
this.failOnMergeFailure = failOnMergeFailure;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1098,7 +1098,7 @@ public class InternalEngine extends Engine {
|
||||||
} else {
|
} else {
|
||||||
logger.warn("corrupt file detected source: [merge] but [{}] is set to [{}]", e, EngineConfig.INDEX_FAIL_ON_CORRUPTION_SETTING, engineConfig.isFailEngineOnCorruption());
|
logger.warn("corrupt file detected source: [merge] but [{}] is set to [{}]", e, EngineConfig.INDEX_FAIL_ON_CORRUPTION_SETTING, engineConfig.isFailEngineOnCorruption());
|
||||||
}
|
}
|
||||||
} else if (engineConfig.isFailOnMergeFailure()) {
|
} else {
|
||||||
failEngine("merge exception", e);
|
failEngine("merge exception", e);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -85,7 +85,6 @@ public class IndexDynamicSettingsModule extends AbstractModule {
|
||||||
indexDynamicSettings.addDynamicSetting(LogDocMergePolicyProvider.INDEX_COMPOUND_FORMAT);
|
indexDynamicSettings.addDynamicSetting(LogDocMergePolicyProvider.INDEX_COMPOUND_FORMAT);
|
||||||
indexDynamicSettings.addDynamicSetting(EngineConfig.INDEX_COMPOUND_ON_FLUSH, Validator.BOOLEAN);
|
indexDynamicSettings.addDynamicSetting(EngineConfig.INDEX_COMPOUND_ON_FLUSH, Validator.BOOLEAN);
|
||||||
indexDynamicSettings.addDynamicSetting(EngineConfig.INDEX_GC_DELETES_SETTING, Validator.TIME);
|
indexDynamicSettings.addDynamicSetting(EngineConfig.INDEX_GC_DELETES_SETTING, Validator.TIME);
|
||||||
indexDynamicSettings.addDynamicSetting(EngineConfig.INDEX_FAIL_ON_MERGE_FAILURE_SETTING, Validator.BOOLEAN);
|
|
||||||
indexDynamicSettings.addDynamicSetting(EngineConfig.INDEX_FAIL_ON_CORRUPTION_SETTING, Validator.BOOLEAN);
|
indexDynamicSettings.addDynamicSetting(EngineConfig.INDEX_FAIL_ON_CORRUPTION_SETTING, Validator.BOOLEAN);
|
||||||
indexDynamicSettings.addDynamicSetting(IndexShard.INDEX_FLUSH_ON_CLOSE, Validator.BOOLEAN);
|
indexDynamicSettings.addDynamicSetting(IndexShard.INDEX_FLUSH_ON_CLOSE, Validator.BOOLEAN);
|
||||||
indexDynamicSettings.addDynamicSetting(ShardSlowLogIndexingService.INDEX_INDEXING_SLOWLOG_THRESHOLD_INDEX_WARN, Validator.TIME);
|
indexDynamicSettings.addDynamicSetting(ShardSlowLogIndexingService.INDEX_INDEXING_SLOWLOG_THRESHOLD_INDEX_WARN, Validator.TIME);
|
||||||
|
|
|
@ -1036,12 +1036,6 @@ public class IndexShard extends AbstractIndexShardComponent {
|
||||||
config.setFailEngineOnCorruption(failEngineOnCorruption);
|
config.setFailEngineOnCorruption(failEngineOnCorruption);
|
||||||
change = true;
|
change = true;
|
||||||
}
|
}
|
||||||
final boolean failOnMergeFailure = settings.getAsBoolean(EngineConfig.INDEX_FAIL_ON_MERGE_FAILURE_SETTING, config.isFailOnMergeFailure());
|
|
||||||
if (failOnMergeFailure != config.isFailOnMergeFailure()) {
|
|
||||||
logger.info("updating {} from [{}] to [{}]", EngineConfig.INDEX_FAIL_ON_MERGE_FAILURE_SETTING, config.isFailOnMergeFailure(), failOnMergeFailure);
|
|
||||||
config.setFailOnMergeFailure(failOnMergeFailure);
|
|
||||||
change = true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
if (change) {
|
if (change) {
|
||||||
refresh("apply settings");
|
refresh("apply settings");
|
||||||
|
|
|
@ -45,14 +45,12 @@ public class InternalEngineSettingsTest extends ElasticsearchSingleNodeTest {
|
||||||
for (int i = 0; i < iters; i++) {
|
for (int i = 0; i < iters; i++) {
|
||||||
boolean compoundOnFlush = randomBoolean();
|
boolean compoundOnFlush = randomBoolean();
|
||||||
boolean failOnCorruption = randomBoolean();
|
boolean failOnCorruption = randomBoolean();
|
||||||
boolean failOnMerge = randomBoolean();
|
|
||||||
long gcDeletes = Math.max(0, randomLong());
|
long gcDeletes = Math.max(0, randomLong());
|
||||||
|
|
||||||
Settings build = ImmutableSettings.builder()
|
Settings build = ImmutableSettings.builder()
|
||||||
.put(EngineConfig.INDEX_FAIL_ON_CORRUPTION_SETTING, failOnCorruption)
|
.put(EngineConfig.INDEX_FAIL_ON_CORRUPTION_SETTING, failOnCorruption)
|
||||||
.put(EngineConfig.INDEX_COMPOUND_ON_FLUSH, compoundOnFlush)
|
.put(EngineConfig.INDEX_COMPOUND_ON_FLUSH, compoundOnFlush)
|
||||||
.put(EngineConfig.INDEX_GC_DELETES_SETTING, gcDeletes)
|
.put(EngineConfig.INDEX_GC_DELETES_SETTING, gcDeletes)
|
||||||
.put(EngineConfig.INDEX_FAIL_ON_MERGE_FAILURE_SETTING, failOnMerge)
|
|
||||||
.build();
|
.build();
|
||||||
|
|
||||||
client().admin().indices().prepareUpdateSettings("foo").setSettings(build).get();
|
client().admin().indices().prepareUpdateSettings("foo").setSettings(build).get();
|
||||||
|
@ -64,8 +62,6 @@ public class InternalEngineSettingsTest extends ElasticsearchSingleNodeTest {
|
||||||
assertEquals(engine.config().getGcDeletesInMillis(), gcDeletes);
|
assertEquals(engine.config().getGcDeletesInMillis(), gcDeletes);
|
||||||
assertEquals(engine.getGcDeletesInMillis(), gcDeletes);
|
assertEquals(engine.getGcDeletesInMillis(), gcDeletes);
|
||||||
assertEquals(engine.config().isFailEngineOnCorruption(), failOnCorruption);
|
assertEquals(engine.config().isFailEngineOnCorruption(), failOnCorruption);
|
||||||
assertEquals(engine.config().isFailOnMergeFailure(), failOnMerge); // only on the holder
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
Settings settings = ImmutableSettings.builder()
|
Settings settings = ImmutableSettings.builder()
|
||||||
|
|
|
@ -1505,7 +1505,6 @@ public class InternalEngineTests extends ElasticsearchLuceneTestCase {
|
||||||
assertTrue(settings.containsSetting(EngineConfig.INDEX_FAIL_ON_CORRUPTION_SETTING));
|
assertTrue(settings.containsSetting(EngineConfig.INDEX_FAIL_ON_CORRUPTION_SETTING));
|
||||||
assertTrue(settings.containsSetting(EngineConfig.INDEX_COMPOUND_ON_FLUSH));
|
assertTrue(settings.containsSetting(EngineConfig.INDEX_COMPOUND_ON_FLUSH));
|
||||||
assertTrue(settings.containsSetting(EngineConfig.INDEX_GC_DELETES_SETTING));
|
assertTrue(settings.containsSetting(EngineConfig.INDEX_GC_DELETES_SETTING));
|
||||||
assertTrue(settings.containsSetting(EngineConfig.INDEX_FAIL_ON_MERGE_FAILURE_SETTING));
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
Loading…
Reference in New Issue