Skip to content

Commit a6cc96c

Browse files
committed
Merge remote-tracking branch 'upstream/main' into entitlements/filesystem-mismatch-check
2 parents c37af7b + 6bdb9fe commit a6cc96c

File tree

20 files changed

+280
-109
lines changed

20 files changed

+280
-109
lines changed

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/TransportVersion.java

Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -126,6 +126,23 @@ public boolean isKnown() {
126126
return VersionsHolder.ALL_VERSIONS_MAP.containsKey(id);
127127
}
128128

129+
/**
130+
* @return the newest known {@link TransportVersion} which is no older than this instance. Returns {@link TransportVersions#ZERO} if
131+
* there are no such versions.
132+
*/
133+
public TransportVersion bestKnownVersion() {
134+
if (VersionsHolder.ALL_VERSIONS_MAP.containsKey(id)) {
135+
return this;
136+
}
137+
TransportVersion bestSoFar = TransportVersions.ZERO;
138+
for (final var knownVersion : VersionsHolder.ALL_VERSIONS_MAP.values()) {
139+
if (knownVersion.after(bestSoFar) && knownVersion.before(this)) {
140+
bestSoFar = knownVersion;
141+
}
142+
}
143+
return bestSoFar;
144+
}
145+
129146
public static TransportVersion fromString(String str) {
130147
return TransportVersion.fromId(Integer.parseInt(str));
131148
}

server/src/main/java/org/elasticsearch/action/ActionListener.java

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@
2828
import java.util.function.Consumer;
2929
import java.util.function.Function;
3030

31+
import static org.elasticsearch.action.ActionListenerImplementations.checkedRunnableFromReleasable;
3132
import static org.elasticsearch.action.ActionListenerImplementations.runnableFromReleasable;
3233
import static org.elasticsearch.action.ActionListenerImplementations.safeAcceptException;
3334
import static org.elasticsearch.action.ActionListenerImplementations.safeOnFailure;
@@ -335,6 +336,16 @@ static <Response> ActionListener<Response> runBefore(ActionListener<Response> de
335336
return assertOnce(new ActionListenerImplementations.RunBeforeActionListener<>(delegate, runBefore));
336337
}
337338

339+
/**
340+
* Wraps a given listener and returns a new listener which releases the provided {@code releaseBefore}
341+
* resource before the listener is notified via either {@code #onResponse} or {@code #onFailure}.
342+
*/
343+
static <Response> ActionListener<Response> releaseBefore(Releasable releaseBefore, ActionListener<Response> delegate) {
344+
return assertOnce(
345+
new ActionListenerImplementations.RunBeforeActionListener<>(delegate, checkedRunnableFromReleasable(releaseBefore))
346+
);
347+
}
348+
338349
/**
339350
* Wraps a given listener and returns a new listener which makes sure {@link #onResponse(Object)}
340351
* and {@link #onFailure(Exception)} of the provided listener will be called at most once.

server/src/main/java/org/elasticsearch/action/ActionListenerImplementations.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -58,6 +58,20 @@ public String toString() {
5858
};
5959
}
6060

61+
static CheckedRunnable<Exception> checkedRunnableFromReleasable(Releasable releasable) {
62+
return new CheckedRunnable<>() {
63+
@Override
64+
public void run() {
65+
Releasables.closeExpectNoException(releasable);
66+
}
67+
68+
@Override
69+
public String toString() {
70+
return "release[" + releasable + "]";
71+
}
72+
};
73+
}
74+
6175
static void safeAcceptException(Consumer<Exception> consumer, Exception e) {
6276
assert e != null;
6377
try {

0 commit comments

Comments
 (0)