Skip to content

Commit dd4504b

Browse files
authored
Merge branch '9.0' into 2025/02/28/transport-handshake-patch-90
2 parents 3520894 + d55ae71 commit dd4504b

File tree

20 files changed

+301
-121
lines changed

20 files changed

+301
-121
lines changed

docs/changelog/123296.yaml

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
pr: 123296
2+
summary: Avoid over collecting in Limit or Lucene Operator
3+
area: ES|QL
4+
type: bug
5+
issues: []

libs/entitlement/src/main/java/org/elasticsearch/entitlement/bootstrap/EntitlementBootstrap.java

Lines changed: 3 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,7 @@ public class EntitlementBootstrap {
3535
public record BootstrapArgs(
3636
Map<String, Policy> pluginPolicies,
3737
Function<Class<?>, String> pluginResolver,
38-
Function<String, String> settingResolver,
39-
Function<String, Stream<String>> settingGlobResolver,
38+
Function<String, Stream<String>> settingResolver,
4039
Path[] dataDirs,
4140
Path[] sharedRepoDirs,
4241
Path configDir,
@@ -51,7 +50,6 @@ public record BootstrapArgs(
5150
requireNonNull(pluginPolicies);
5251
requireNonNull(pluginResolver);
5352
requireNonNull(settingResolver);
54-
requireNonNull(settingGlobResolver);
5553
requireNonNull(dataDirs);
5654
if (dataDirs.length == 0) {
5755
throw new IllegalArgumentException("must provide at least one data directory");
@@ -78,8 +76,7 @@ public static BootstrapArgs bootstrapArgs() {
7876
*
7977
* @param pluginPolicies a map holding policies for plugins (and modules), by plugin (or module) name.
8078
* @param pluginResolver a functor to map a Java Class to the plugin it belongs to (the plugin name).
81-
* @param settingResolver a functor to resolve the value of an Elasticsearch setting.
82-
* @param settingGlobResolver a functor to resolve a glob expression for one or more Elasticsearch settings.
79+
* @param settingResolver a functor to resolve a setting name pattern for one or more Elasticsearch settings.
8380
* @param dataDirs data directories for Elasticsearch
8481
* @param sharedRepoDirs shared repository directories for Elasticsearch
8582
* @param configDir the config directory for Elasticsearch
@@ -93,8 +90,7 @@ public static BootstrapArgs bootstrapArgs() {
9390
public static void bootstrap(
9491
Map<String, Policy> pluginPolicies,
9592
Function<Class<?>, String> pluginResolver,
96-
Function<String, String> settingResolver,
97-
Function<String, Stream<String>> settingGlobResolver,
93+
Function<String, Stream<String>> settingResolver,
9894
Path[] dataDirs,
9995
Path[] sharedRepoDirs,
10096
Path configDir,
@@ -113,7 +109,6 @@ public static void bootstrap(
113109
pluginPolicies,
114110
pluginResolver,
115111
settingResolver,
116-
settingGlobResolver,
117112
dataDirs,
118113
sharedRepoDirs,
119114
configDir,

libs/entitlement/src/main/java/org/elasticsearch/entitlement/initialization/EntitlementInitialization.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -144,8 +144,7 @@ private static PolicyManager createPolicyManager() {
144144
bootstrapArgs.dataDirs(),
145145
bootstrapArgs.sharedRepoDirs(),
146146
bootstrapArgs.tempDir(),
147-
bootstrapArgs.settingResolver(),
148-
bootstrapArgs.settingGlobResolver()
147+
bootstrapArgs.settingResolver()
149148
);
150149

151150
List<Scope> serverScopes = new ArrayList<>();

libs/entitlement/src/main/java/org/elasticsearch/entitlement/runtime/policy/PathLookup.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,5 @@ public record PathLookup(
1919
Path[] dataDirs,
2020
Path[] sharedRepoDirs,
2121
Path tempDir,
22-
Function<String, String> settingResolver,
23-
Function<String, Stream<String>> settingGlobResolver
22+
Function<String, Stream<String>> settingResolver
2423
) {}

libs/entitlement/src/main/java/org/elasticsearch/entitlement/runtime/policy/entitlements/FilesEntitlement.java

Lines changed: 1 addition & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -232,13 +232,7 @@ public PathSettingFileData withExclusive(boolean exclusive) {
232232

233233
@Override
234234
public Stream<Path> resolveRelativePaths(PathLookup pathLookup) {
235-
Stream<String> result;
236-
if (setting.contains("*")) {
237-
result = pathLookup.settingGlobResolver().apply(setting);
238-
} else {
239-
String path = pathLookup.settingResolver().apply(setting);
240-
result = path == null ? Stream.of() : Stream.of(path);
241-
}
235+
Stream<String> result = pathLookup.settingResolver().apply(setting);
242236
if (ignoreUrl) {
243237
result = result.filter(s -> s.toLowerCase(Locale.ROOT).startsWith("https://") == false);
244238
}

libs/entitlement/src/test/java/org/elasticsearch/entitlement/runtime/policy/FileAccessTreeTests.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,7 @@ private static Path path(String s) {
5050
new Path[] { Path.of("/data1"), Path.of("/data2") },
5151
new Path[] { Path.of("/shared1"), Path.of("/shared2") },
5252
Path.of("/tmp"),
53-
setting -> settings.get(setting),
54-
glob -> settings.getGlobValues(glob)
53+
pattern -> settings.getValues(pattern)
5554
);
5655

5756
public void testEmpty() {

libs/entitlement/src/test/java/org/elasticsearch/entitlement/runtime/policy/PolicyManagerTests.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,8 +71,7 @@ public static void beforeClass() {
7171
new Path[] { TEST_BASE_DIR.resolve("/data1/"), TEST_BASE_DIR.resolve("/data2") },
7272
new Path[] { TEST_BASE_DIR.resolve("/shared1"), TEST_BASE_DIR.resolve("/shared2") },
7373
TEST_BASE_DIR.resolve("/temp"),
74-
Settings.EMPTY::get,
75-
Settings.EMPTY::getGlobValues
74+
Settings.EMPTY::getValues
7675
);
7776
} catch (Exception e) {
7877
throw new IllegalStateException(e);

libs/entitlement/src/test/java/org/elasticsearch/entitlement/runtime/policy/entitlements/FilesEntitlementTests.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -48,8 +48,7 @@ public static void setupRoot() {
4848
new Path[] { Path.of("/data1"), Path.of("/data2") },
4949
new Path[] { Path.of("/shared1"), Path.of("/shared2") },
5050
Path.of("/tmp"),
51-
setting -> settings.get(setting),
52-
glob -> settings.getGlobValues(glob)
51+
pattern -> settings.getValues(pattern)
5352
);
5453

5554
public void testEmptyBuild() {

server/src/main/java/org/elasticsearch/bootstrap/Elasticsearch.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -248,8 +248,7 @@ private static void initPhase2(Bootstrap bootstrap) throws IOException {
248248
EntitlementBootstrap.bootstrap(
249249
pluginPolicies,
250250
pluginsResolver::resolveClassToPluginName,
251-
nodeEnv.settings()::get,
252-
nodeEnv.settings()::getGlobValues,
251+
nodeEnv.settings()::getValues,
253252
nodeEnv.dataDirs(),
254253
nodeEnv.repoDirs(),
255254
nodeEnv.configDir(),

server/src/main/java/org/elasticsearch/common/settings/Settings.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -291,21 +291,25 @@ public String get(String setting, String defaultValue) {
291291
}
292292

293293
/**
294-
* Returns the values for settings that match the given glob pattern.
295-
* A single glob is supported.
294+
* Returns the values for the given settings pattern.
296295
*
297-
* @param settingGlob setting name containing a glob
298-
* @return zero or more values for any settings in this settings object that match the glob pattern
296+
* Either a concrete setting name, or a pattern containing a single glob is supported.
297+
*
298+
* @param settingPattern name of a setting or a setting name pattern containing a glob
299+
* @return zero or more values for any settings in this settings object that match the given pattern
299300
*/
300-
public Stream<String> getGlobValues(String settingGlob) {
301-
int globIndex = settingGlob.indexOf(".*.");
301+
public Stream<String> getValues(String settingPattern) {
302+
int globIndex = settingPattern.indexOf(".*.");
303+
Stream<String> settingNames;
302304
if (globIndex == -1) {
303-
throw new IllegalArgumentException("Pattern [" + settingGlob + "] does not contain a glob [*]");
305+
settingNames = Stream.of(settingPattern);
306+
} else {
307+
String prefix = settingPattern.substring(0, globIndex + 1);
308+
String suffix = settingPattern.substring(globIndex + 2);
309+
Settings subSettings = getByPrefix(prefix);
310+
settingNames = subSettings.names().stream().map(k -> prefix + k + suffix);
304311
}
305-
String prefix = settingGlob.substring(0, globIndex + 1);
306-
String suffix = settingGlob.substring(globIndex + 2);
307-
Settings subSettings = getByPrefix(prefix);
308-
return subSettings.names().stream().map(k -> k + suffix).map(subSettings::get).filter(Objects::nonNull);
312+
return settingNames.map(this::getAsList).flatMap(List::stream).filter(Objects::nonNull);
309313
}
310314

311315
/**

0 commit comments

Comments
 (0)