Skip to content

Commit e84fcd5

Browse files
committed
Merge branch 'main' into carlosdelest/esql-match-operator-colon
# Conflicts: # server/src/main/java/org/elasticsearch/TransportVersions.java
2 parents a414438 + 6182921 commit e84fcd5

File tree

391 files changed

+9742
-3282
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

391 files changed

+9742
-3282
lines changed

.buildkite/packer_cache.sh

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,6 @@ for branch in "${branches[@]}"; do
2929
fi
3030

3131
export JAVA_HOME="$HOME/.java/$ES_BUILD_JAVA"
32-
"checkout/${branch}/gradlew" --project-dir "$CHECKOUT_DIR" --parallel -s resolveAllDependencies -Dorg.gradle.warning.mode=none -DisCI
32+
"checkout/${branch}/gradlew" --project-dir "$CHECKOUT_DIR" --parallel -s resolveAllDependencies -Dorg.gradle.warning.mode=none -DisCI --max-workers=4
3333
rm -rf "checkout/${branch}"
3434
done

build-tools-internal/src/main/groovy/elasticsearch.ide.gradle

Lines changed: 34 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,36 @@ if (providers.systemProperty('idea.active').getOrNull() == 'true') {
122122
.findAll { it != null }
123123
}
124124

125+
// force IntelliJ to generate *.iml files for each imported module
126+
tasks.register("enableExternalConfiguration") {
127+
group = 'ide'
128+
description = 'Enable per-module *.iml files'
129+
130+
doLast {
131+
modifyXml('.idea/misc.xml') {xml ->
132+
def externalStorageConfig = xml.component.find { it.'@name' == 'ExternalStorageConfigurationManager' }
133+
if (externalStorageConfig) {
134+
xml.remove(externalStorageConfig)
135+
}
136+
}
137+
}
138+
}
139+
140+
// modifies the idea module config to enable preview features on 'elasticsearch-native' module
141+
tasks.register("enablePreviewFeatures") {
142+
group = 'ide'
143+
description = 'Enables preview features on native library module'
144+
dependsOn tasks.named("enableExternalConfiguration")
145+
146+
doLast {
147+
['main', 'test'].each { sourceSet ->
148+
modifyXml(".idea/modules/libs/native/elasticsearch.libs.elasticsearch-native.${sourceSet}.iml") { xml ->
149+
xml.component.find { it.'@name' == 'NewModuleRootManager' }?.'@LANGUAGE_LEVEL' = 'JDK_21_PREVIEW'
150+
}
151+
}
152+
}
153+
}
154+
125155
tasks.register('buildDependencyArtifacts') {
126156
group = 'ide'
127157
description = 'Builds artifacts needed as dependency for IDE modules'
@@ -149,7 +179,10 @@ if (providers.systemProperty('idea.active').getOrNull() == 'true') {
149179
testRunner = 'choose_per_test'
150180
}
151181
taskTriggers {
152-
afterSync tasks.named('configureIdeCheckstyle'), tasks.named('configureIdeaGradleJvm'), tasks.named('buildDependencyArtifacts')
182+
afterSync tasks.named('configureIdeCheckstyle'),
183+
tasks.named('configureIdeaGradleJvm'),
184+
tasks.named('buildDependencyArtifacts'),
185+
tasks.named('enablePreviewFeatures')
153186
}
154187
encodings {
155188
encoding = 'UTF-8'

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/InternalDistributionDownloadPlugin.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -172,9 +172,6 @@ private static String distributionProjectName(ElasticsearchDistribution distribu
172172
if (distribution.getType() == InternalElasticsearchDistributionTypes.DOCKER_IRONBANK) {
173173
return projectName + "ironbank-docker" + archString + "-export";
174174
}
175-
if (distribution.getType() == InternalElasticsearchDistributionTypes.DOCKER_CLOUD) {
176-
return projectName + "cloud-docker" + archString + "-export";
177-
}
178175
if (distribution.getType() == InternalElasticsearchDistributionTypes.DOCKER_CLOUD_ESS) {
179176
return projectName + "cloud-ess-docker" + archString + "-export";
180177
}

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/distribution/DockerCloudElasticsearchDistributionType.java

Lines changed: 0 additions & 27 deletions
This file was deleted.

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/distribution/InternalElasticsearchDistributionTypes.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@ public class InternalElasticsearchDistributionTypes {
1919
public static ElasticsearchDistributionType DOCKER = new DockerElasticsearchDistributionType();
2020
public static ElasticsearchDistributionType DOCKER_UBI = new DockerUbiElasticsearchDistributionType();
2121
public static ElasticsearchDistributionType DOCKER_IRONBANK = new DockerIronBankElasticsearchDistributionType();
22-
public static ElasticsearchDistributionType DOCKER_CLOUD = new DockerCloudElasticsearchDistributionType();
2322
public static ElasticsearchDistributionType DOCKER_CLOUD_ESS = new DockerCloudEssElasticsearchDistributionType();
2423
public static ElasticsearchDistributionType DOCKER_WOLFI = new DockerWolfiElasticsearchDistributionType();
2524

@@ -29,7 +28,6 @@ public class InternalElasticsearchDistributionTypes {
2928
DOCKER,
3029
DOCKER_UBI,
3130
DOCKER_IRONBANK,
32-
DOCKER_CLOUD,
3331
DOCKER_CLOUD_ESS,
3432
DOCKER_WOLFI
3533
);

build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/test/DistroTestPlugin.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -49,7 +49,6 @@
4949
import static org.elasticsearch.gradle.internal.distribution.InternalElasticsearchDistributionTypes.ALL_INTERNAL;
5050
import static org.elasticsearch.gradle.internal.distribution.InternalElasticsearchDistributionTypes.DEB;
5151
import static org.elasticsearch.gradle.internal.distribution.InternalElasticsearchDistributionTypes.DOCKER;
52-
import static org.elasticsearch.gradle.internal.distribution.InternalElasticsearchDistributionTypes.DOCKER_CLOUD;
5352
import static org.elasticsearch.gradle.internal.distribution.InternalElasticsearchDistributionTypes.DOCKER_CLOUD_ESS;
5453
import static org.elasticsearch.gradle.internal.distribution.InternalElasticsearchDistributionTypes.DOCKER_IRONBANK;
5554
import static org.elasticsearch.gradle.internal.distribution.InternalElasticsearchDistributionTypes.DOCKER_UBI;
@@ -149,7 +148,6 @@ private static Map<ElasticsearchDistributionType, TaskProvider<?>> lifecycleTask
149148
lifecyleTasks.put(DOCKER, project.getTasks().register(taskPrefix + ".docker"));
150149
lifecyleTasks.put(DOCKER_UBI, project.getTasks().register(taskPrefix + ".docker-ubi"));
151150
lifecyleTasks.put(DOCKER_IRONBANK, project.getTasks().register(taskPrefix + ".docker-ironbank"));
152-
lifecyleTasks.put(DOCKER_CLOUD, project.getTasks().register(taskPrefix + ".docker-cloud"));
153151
lifecyleTasks.put(DOCKER_CLOUD_ESS, project.getTasks().register(taskPrefix + ".docker-cloud-ess"));
154152
lifecyleTasks.put(DOCKER_WOLFI, project.getTasks().register(taskPrefix + ".docker-wolfi"));
155153
lifecyleTasks.put(ARCHIVE, project.getTasks().register(taskPrefix + ".archives"));

build-tools-internal/src/main/resources/checkstyle_suppressions.xml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,8 @@
3535
<!-- Intentionally have multi line string for a bulk request, otherwise this needs to fallback to string concatenation -->
3636
<suppress files="modules[/\\]data-streams[/\\]src[/\\]javaRestTest[/\\]java[/\\]org[/\\]elasticsearch[/\\]datastreams[/\\]TsdbDataStreamRestIT.java" checks="LineLength" />
3737
<suppress files="qa[/\\]rolling-upgrade[/\\]src[/\\]javaRestTest[/\\]java[/\\]org[/\\]elasticsearch[/\\]upgrades[/\\]TsdbIT.java" checks="LineLength" />
38+
<suppress files="qa[/\\]rolling-upgrade[/\\]src[/\\]javaRestTest[/\\]java[/\\]org[/\\]elasticsearch[/\\]upgrades[/\\]TsdbIndexingRollingUpgradeIT.java" checks="LineLength" />
39+
<suppress files="qa[/\\]rolling-upgrade[/\\]src[/\\]javaRestTest[/\\]java[/\\]org[/\\]elasticsearch[/\\]upgrades[/\\]LogsdbIndexingRollingUpgradeIT.java" checks="LineLength" />
3840

3941
<!-- Gradle requires inputs to be seriablizable -->
4042
<suppress files="build-tools-internal[/\\]src[/\\]main[/\\]java[/\\]org[/\\]elasticsearch[/\\]gradle[/\\]internal[/\\]precommit[/\\]TestingConventionRule.java" checks="RegexpSinglelineJava" />

distribution/tools/entitlement-agent/impl/src/main/java/org/elasticsearch/entitlement/instrumentation/impl/InstrumenterImpl.java

Lines changed: 82 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,10 @@
1515
import org.objectweb.asm.ClassReader;
1616
import org.objectweb.asm.ClassVisitor;
1717
import org.objectweb.asm.ClassWriter;
18+
import org.objectweb.asm.FieldVisitor;
1819
import org.objectweb.asm.MethodVisitor;
1920
import org.objectweb.asm.Opcodes;
21+
import org.objectweb.asm.RecordComponentVisitor;
2022
import org.objectweb.asm.Type;
2123

2224
import java.io.IOException;
@@ -73,7 +75,13 @@ public byte[] instrumentClass(String className, byte[] classfileBuffer) {
7375
}
7476

7577
class EntitlementClassVisitor extends ClassVisitor {
76-
final String className;
78+
79+
private static final String ENTITLEMENT_ANNOTATION = "EntitlementInstrumented";
80+
81+
private final String className;
82+
83+
private boolean isAnnotationPresent;
84+
private boolean annotationNeeded = true;
7785

7886
EntitlementClassVisitor(int api, ClassVisitor classVisitor, String className) {
7987
super(api, classVisitor);
@@ -85,25 +93,85 @@ public void visit(int version, int access, String name, String signature, String
8593
super.visit(version, access, name + classNameSuffix, signature, superName, interfaces);
8694
}
8795

96+
@Override
97+
public AnnotationVisitor visitAnnotation(String descriptor, boolean visible) {
98+
if (visible && descriptor.equals(ENTITLEMENT_ANNOTATION)) {
99+
isAnnotationPresent = true;
100+
annotationNeeded = false;
101+
}
102+
return cv.visitAnnotation(descriptor, visible);
103+
}
104+
105+
@Override
106+
public void visitNestMember(String nestMember) {
107+
addClassAnnotationIfNeeded();
108+
super.visitNestMember(nestMember);
109+
}
110+
111+
@Override
112+
public void visitPermittedSubclass(String permittedSubclass) {
113+
addClassAnnotationIfNeeded();
114+
super.visitPermittedSubclass(permittedSubclass);
115+
}
116+
117+
@Override
118+
public void visitInnerClass(String name, String outerName, String innerName, int access) {
119+
addClassAnnotationIfNeeded();
120+
super.visitInnerClass(name, outerName, innerName, access);
121+
}
122+
123+
@Override
124+
public FieldVisitor visitField(int access, String name, String descriptor, String signature, Object value) {
125+
addClassAnnotationIfNeeded();
126+
return super.visitField(access, name, descriptor, signature, value);
127+
}
128+
129+
@Override
130+
public RecordComponentVisitor visitRecordComponent(String name, String descriptor, String signature) {
131+
addClassAnnotationIfNeeded();
132+
return super.visitRecordComponent(name, descriptor, signature);
133+
}
134+
88135
@Override
89136
public MethodVisitor visitMethod(int access, String name, String descriptor, String signature, String[] exceptions) {
137+
addClassAnnotationIfNeeded();
90138
var mv = super.visitMethod(access, name, descriptor, signature, exceptions);
91-
boolean isStatic = (access & ACC_STATIC) != 0;
92-
var key = new MethodKey(
93-
className,
94-
name,
95-
Stream.of(Type.getArgumentTypes(descriptor)).map(Type::getInternalName).toList(),
96-
isStatic
97-
);
98-
var instrumentationMethod = instrumentationMethods.get(key);
99-
if (instrumentationMethod != null) {
100-
// LOGGER.debug("Will instrument method {}", key);
101-
return new EntitlementMethodVisitor(Opcodes.ASM9, mv, isStatic, descriptor, instrumentationMethod);
102-
} else {
103-
// LOGGER.trace("Will not instrument method {}", key);
139+
if (isAnnotationPresent == false) {
140+
boolean isStatic = (access & ACC_STATIC) != 0;
141+
var key = new MethodKey(
142+
className,
143+
name,
144+
Stream.of(Type.getArgumentTypes(descriptor)).map(Type::getInternalName).toList(),
145+
isStatic
146+
);
147+
var instrumentationMethod = instrumentationMethods.get(key);
148+
if (instrumentationMethod != null) {
149+
// LOGGER.debug("Will instrument method {}", key);
150+
return new EntitlementMethodVisitor(Opcodes.ASM9, mv, isStatic, descriptor, instrumentationMethod);
151+
} else {
152+
// LOGGER.trace("Will not instrument method {}", key);
153+
}
104154
}
105155
return mv;
106156
}
157+
158+
/**
159+
* A class annotation can be added via visitAnnotation; we need to call visitAnnotation after all other visitAnnotation
160+
* calls (in case one of them detects our annotation is already present), but before any other subsequent visit* method is called
161+
* (up to visitMethod -- if no visitMethod is called, there is nothing to instrument).
162+
* This includes visitNestMember, visitPermittedSubclass, visitInnerClass, visitField, visitRecordComponent and, of course,
163+
* visitMethod (see {@link ClassVisitor} javadoc).
164+
*/
165+
private void addClassAnnotationIfNeeded() {
166+
if (annotationNeeded) {
167+
// logger.debug("Adding {} annotation", ENTITLEMENT_ANNOTATION);
168+
AnnotationVisitor av = cv.visitAnnotation(ENTITLEMENT_ANNOTATION, true);
169+
if (av != null) {
170+
av.visitEnd();
171+
}
172+
annotationNeeded = false;
173+
}
174+
}
107175
}
108176

109177
static class EntitlementMethodVisitor extends MethodVisitor {

0 commit comments

Comments
 (0)