Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

[8.16] Fix enrich cache size setting name (#117575) #118286

Merged
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions docs/changelog/117575.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
pr: 117575
summary: Fix enrich cache size setting name
area: Ingest Node
type: bug
issues: []
Original file line number Diff line number Diff line change
@@ -14,6 +14,8 @@
import org.elasticsearch.cluster.node.DiscoveryNodes;
import org.elasticsearch.common.Strings;
import org.elasticsearch.common.io.stream.NamedWriteableRegistry;
import org.elasticsearch.common.logging.DeprecationCategory;
import org.elasticsearch.common.logging.DeprecationLogger;
import org.elasticsearch.common.settings.ClusterSettings;
import org.elasticsearch.common.settings.IndexScopedSettings;
import org.elasticsearch.common.settings.Setting;
@@ -74,6 +76,8 @@

public class EnrichPlugin extends Plugin implements SystemIndexPlugin, IngestPlugin {

private static final DeprecationLogger deprecationLogger = DeprecationLogger.getLogger(EnrichPlugin.class);

static final Setting<Integer> ENRICH_FETCH_SIZE_SETTING = Setting.intSetting(
"enrich.fetch_size",
10000,
@@ -126,9 +130,9 @@ public class EnrichPlugin extends Plugin implements SystemIndexPlugin, IngestPlu
return String.valueOf(maxConcurrentRequests * maxLookupsPerRequest);
}, val -> Setting.parseInt(val, 1, Integer.MAX_VALUE, QUEUE_CAPACITY_SETTING_NAME), Setting.Property.NodeScope);

public static final String CACHE_SIZE_SETTING_NAME = "enrich.cache.size";
public static final String CACHE_SIZE_SETTING_NAME = "enrich.cache_size";
public static final Setting<FlatNumberOrByteSizeValue> CACHE_SIZE = new Setting<>(
"enrich.cache.size",
CACHE_SIZE_SETTING_NAME,
(String) null,
(String s) -> FlatNumberOrByteSizeValue.parse(
s,
@@ -138,16 +142,58 @@ public class EnrichPlugin extends Plugin implements SystemIndexPlugin, IngestPlu
Setting.Property.NodeScope
);

/**
* This setting solely exists because the original setting was accidentally renamed in
* https://github.com/elastic/elasticsearch/pull/111412.
*/
public static final String CACHE_SIZE_SETTING_BWC_NAME = "enrich.cache.size";
public static final Setting<FlatNumberOrByteSizeValue> CACHE_SIZE_BWC = new Setting<>(
CACHE_SIZE_SETTING_BWC_NAME,
(String) null,
(String s) -> FlatNumberOrByteSizeValue.parse(
s,
CACHE_SIZE_SETTING_BWC_NAME,
new FlatNumberOrByteSizeValue(ByteSizeValue.ofBytes((long) (0.01 * JvmInfo.jvmInfo().getConfiguredMaxHeapSize())))
),
Setting.Property.NodeScope,
Setting.Property.Deprecated
);

private final Settings settings;
private final EnrichCache enrichCache;
private final long maxCacheSize;

public EnrichPlugin(final Settings settings) {
this.settings = settings;
FlatNumberOrByteSizeValue maxSize = CACHE_SIZE.get(settings);
FlatNumberOrByteSizeValue maxSize;
if (settings.hasValue(CACHE_SIZE_SETTING_BWC_NAME)) {
if (settings.hasValue(CACHE_SIZE_SETTING_NAME)) {
throw new IllegalArgumentException(
Strings.format(
"Both [{}] and [{}] are set, please use [{}]",
CACHE_SIZE_SETTING_NAME,
CACHE_SIZE_SETTING_BWC_NAME,
CACHE_SIZE_SETTING_NAME
)
);
}
deprecationLogger.warn(
DeprecationCategory.SETTINGS,
"enrich_cache_size_name",
"The [{}] setting is deprecated and will be removed in a future version. Please use [{}] instead.",
CACHE_SIZE_SETTING_BWC_NAME,
CACHE_SIZE_SETTING_NAME
);
maxSize = CACHE_SIZE_BWC.get(settings);
} else {
maxSize = CACHE_SIZE.get(settings);
}
if (maxSize.byteSizeValue() != null) {
this.enrichCache = new EnrichCache(maxSize.byteSizeValue());
this.maxCacheSize = maxSize.byteSizeValue().getBytes();
} else {
this.enrichCache = new EnrichCache(maxSize.flatNumber());
this.maxCacheSize = maxSize.flatNumber();
}
}

@@ -286,6 +332,11 @@ public String getFeatureDescription() {
return "Manages data related to Enrich policies";
}

// Visible for testing
long getMaxCacheSize() {
return maxCacheSize;
}

/**
* A class that specifies either a flat (unit-less) number or a byte size value.
*/
Original file line number Diff line number Diff line change
@@ -0,0 +1,62 @@
/*
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
* or more contributor license agreements. Licensed under the Elastic License
* 2.0; you may not use this file except in compliance with the Elastic License
* 2.0.
*/

package org.elasticsearch.xpack.enrich;

import org.elasticsearch.common.settings.Settings;
import org.elasticsearch.test.ESTestCase;

import java.util.List;

public class EnrichPluginTests extends ESTestCase {

public void testConstructWithByteSize() {
final var size = randomNonNegativeInt();
Settings settings = Settings.builder().put(EnrichPlugin.CACHE_SIZE_SETTING_NAME, size + "b").build();
EnrichPlugin plugin = new EnrichPlugin(settings);
assertEquals(size, plugin.getMaxCacheSize());
}

public void testConstructWithFlatNumber() {
final var size = randomNonNegativeInt();
Settings settings = Settings.builder().put(EnrichPlugin.CACHE_SIZE_SETTING_NAME, size).build();
EnrichPlugin plugin = new EnrichPlugin(settings);
assertEquals(size, plugin.getMaxCacheSize());
}

public void testConstructWithByteSizeBwc() {
final var size = randomNonNegativeInt();
Settings settings = Settings.builder().put(EnrichPlugin.CACHE_SIZE_SETTING_BWC_NAME, size + "b").build();
EnrichPlugin plugin = new EnrichPlugin(settings);
assertEquals(size, plugin.getMaxCacheSize());
}

public void testConstructWithFlatNumberBwc() {
final var size = randomNonNegativeInt();
Settings settings = Settings.builder().put(EnrichPlugin.CACHE_SIZE_SETTING_BWC_NAME, size).build();
EnrichPlugin plugin = new EnrichPlugin(settings);
assertEquals(size, plugin.getMaxCacheSize());
}

public void testConstructWithBothSettings() {
Settings settings = Settings.builder()
.put(EnrichPlugin.CACHE_SIZE_SETTING_NAME, randomNonNegativeInt())
.put(EnrichPlugin.CACHE_SIZE_SETTING_BWC_NAME, randomNonNegativeInt())
.build();
assertThrows(IllegalArgumentException.class, () -> new EnrichPlugin(settings));
}

@Override
protected List<String> filteredWarnings() {
final var warnings = super.filteredWarnings();
warnings.add("[enrich.cache.size] setting was deprecated in Elasticsearch and will be removed in a future release.");
warnings.add(
"The [enrich.cache.size] setting is deprecated and will be removed in a future version. Please use [enrich.cache_size] instead."
);
return warnings;
}
}