Skip to content

Commit 8765efa

Browse files
authored
Merge branch 'main' into resharding_search_filters_2
2 parents f8a376b + b78acc2 commit 8765efa

File tree

733 files changed

+30706
-11476
lines changed

Some content is hidden

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

733 files changed

+30706
-11476
lines changed
Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,7 @@
1+
steps:
2+
- command: .buildkite/scripts/trigger-if-java-ea-new-build.sh
3+
env:
4+
RECENT_TIME_WINDOW: "24" # time window to consider a build as new in hours
5+
agents:
6+
image: "docker.elastic.co/ci-agent-images/eck-region/buildkite-agent:1.15"
7+
memory: "4G"
Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
steps: []

.buildkite/pipelines/pull-request/pr-upgrade.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,5 +2,5 @@ steps:
22
- label: pr-upgrade
33
command: ".buildkite/scripts/run-pr-upgrade-tests.sh"
44
agents:
5-
image: "docker.elastic.co/ci-agent-images/eck-region/buildkite-agent:1.5"
5+
image: "docker.elastic.co/ci-agent-images/eck-region/buildkite-agent:1.15"
66
memory: "4G"

.buildkite/pull-requests.json

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,25 @@
1616
"cancel_intermediate_builds": true,
1717
"cancel_intermediate_builds_on_comment": false
1818
},
19+
{
20+
"enabled": true,
21+
"target_branch": "main",
22+
"pipeline_slug": "elasticsearch-pull-request-transport-versions",
23+
"allow_org_users": true,
24+
"allowed_repo_permissions": [
25+
"admin",
26+
"write"
27+
],
28+
"allowed_list": ["elastic-renovate-prod[bot]"],
29+
"set_commit_status": false,
30+
"build_on_commit": true,
31+
"build_on_comment": true,
32+
"trigger_comment_regex": "(run\\W+elasticsearch-ci.+)|(^\\s*((buildkite|@elastic(search)?machine)\\s*)?test\\s+this(\\s+please)?)",
33+
"retrigger_label_regex": "v[0-9]+\\.[0-9]+\\.[0-9]+",
34+
"cancel_intermediate_builds": true,
35+
"cancel_intermediate_builds_on_comment": false,
36+
"skip_duplicate_builds": true
37+
},
1938
{
2039
"enabled": true,
2140
"pipeline_slug": "elasticsearch-pull-request-performance-benchmark",
Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
#
2+
# Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
# or more contributor license agreements. Licensed under the "Elastic License
4+
# 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
# Public License v 1"; you may not use this file except in compliance with, at
6+
# your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
# License v3.0 only", or the "Server Side Public License, v 1".
8+
#
9+
10+
#!/bin/bash
11+
12+
# Allow overriding the time window (in hours) to check for new builds, defaults to 24
13+
RECENT_TIME_WINDOW=${RECENT_TIME_WINDOW:-24}
14+
15+
# Extract current JDK major version from bundled_jdk in version.properties
16+
CURRENT_JDK=$(grep "^bundled_jdk =" build-tools-internal/version.properties | cut -d'=' -f2 | tr -d ' ' | cut -d'.' -f1)
17+
TARGET_JDK=$((CURRENT_JDK + 1))
18+
19+
echo "Current JDK major version: $CURRENT_JDK"
20+
echo "Target JDK major version: $TARGET_JDK"
21+
22+
# Query Elasticsearch JDK archive for available JDKs
23+
JDK_ARCHIVE_URL="https://builds.es-jdk-archive.com/jdks/openjdk/recent.json"
24+
echo "Querying JDK archive: $JDK_ARCHIVE_URL"
25+
26+
# Fetch JDK info and filter for target major version
27+
JDK_DATA=$(curl -s "$JDK_ARCHIVE_URL")
28+
29+
if [[ -z "$JDK_DATA" ]]; then
30+
echo "Failed to fetch JDK data from archive"
31+
exit 1
32+
fi
33+
34+
# Find the latest build for the target JDK version
35+
LATEST_BUILD=$(echo "$JDK_DATA" | jq -r --arg target "$TARGET_JDK" '
36+
.majors[$target].builds |
37+
sort_by(.archived_at) |
38+
last'
39+
)
40+
41+
if [[ "$LATEST_BUILD" == "null" || -z "$LATEST_BUILD" ]]; then
42+
echo "No builds found for JDK $TARGET_JDK"
43+
exit 1
44+
fi
45+
46+
# Extract timestamp and JDK identifier
47+
TIMESTAMP=$(echo "$LATEST_BUILD" | jq -r '.archived_at')
48+
JDK_IDENTIFIER=$(echo "$LATEST_BUILD" | jq -r '.id')
49+
50+
echo "Latest JDK ${TARGET_JDK} build from ES archive:"
51+
echo " Timestamp: $TIMESTAMP"
52+
echo " JDK Identifier: $JDK_IDENTIFIER"
53+
54+
# Set variables for use in the pipeline trigger
55+
jdkbuild="$JDK_IDENTIFIER"
56+
jdk_timestamp="$TIMESTAMP"
57+
58+
# Check if timestamp is within last 24 hours
59+
CURRENT_TIME=$(date +%s)
60+
BUILD_TIME=$(date -d "$TIMESTAMP" +%s 2>/dev/null || date -j -f "%Y-%m-%dT%H:%M:%S" "${TIMESTAMP%Z}" +%s 2>/dev/null || echo "0")
61+
62+
if [[ "$BUILD_TIME" == "0" ]]; then
63+
echo "Failed to parse timestamp: $TIMESTAMP"
64+
SHOULD_TRIGGER="false"
65+
else
66+
TIME_DIFF=$((CURRENT_TIME - BUILD_TIME))
67+
TIME_WINDOW=$((RECENT_TIME_WINDOW * 60 * 60))
68+
69+
if [[ $TIME_DIFF -lt $TIME_WINDOW ]]; then
70+
echo "Build is recent (less than ${RECENT_TIME_WINDOW}h old)"
71+
SHOULD_TRIGGER="true"
72+
else
73+
echo "Build is older than ${RECENT_TIME_WINDOW} hours"
74+
SHOULD_TRIGGER="false"
75+
fi
76+
fi
77+
78+
echo "SHOULD_TRIGGER: $SHOULD_TRIGGER"
79+
80+
81+
if [[ "$SHOULD_TRIGGER" == "true" ]]; then
82+
EFFECTIVE_START_DATE=$(date -u -d "@$BUILD_TIME" +"%Y-%m-%dT%H:%M:%SZ" 2>/dev/null || date -u -r "$BUILD_TIME" +"%Y-%m-%dT%H:%M:%SZ" 2>/dev/null || echo "")
83+
echo "Triggering performance-esbench-jdk for new jdk build $JDK_IDENTIFIER"
84+
cat << EOF | buildkite-agent pipeline upload
85+
steps:
86+
- trigger: elasticsearch-performance-esbench-jdk
87+
label: Triggering performance-esbench-jdk for new jdk build $JDK_IDENTIFIER
88+
async: true
89+
build:
90+
branch: "$BUILDKITE_BRANCH"
91+
env:
92+
EFFECTIVE_START_DATE: "$EFFECTIVE_START_DATE"
93+
EXECUTION_MODE: "start-run"
94+
EOF
95+
fi

build-tools-internal/src/integTest/groovy/org/elasticsearch/gradle/internal/transport/AbstractTransportVersionFuncTest.groovy

Lines changed: 44 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import org.gradle.testkit.runner.BuildResult
1414
import org.gradle.testkit.runner.TaskOutcome
1515

1616
class AbstractTransportVersionFuncTest extends AbstractGradleFuncTest {
17+
1718
def javaResource(String project, String path, String content) {
1819
file("${project}/src/main/resources/${path}").withWriter { writer ->
1920
writer << content
@@ -45,10 +46,18 @@ class AbstractTransportVersionFuncTest extends AbstractGradleFuncTest {
4546
return referableAndReferencedTransportVersion(name, ids, "Test${name.capitalize()}")
4647
}
4748

48-
def referableAndReferencedTransportVersion(String name, String ids, String classname) {
49+
def referencedTransportVersion(String name) {
50+
referencedTransportVersion(name, "Test${name.capitalize()}")
51+
}
52+
53+
def referencedTransportVersion(String name, String classname) {
4954
javaSource("myserver", "org.elasticsearch", classname, "", """
5055
static final TransportVersion usage = TransportVersion.fromName("${name}");
5156
""")
57+
}
58+
59+
def referableAndReferencedTransportVersion(String name, String ids, String classname) {
60+
referencedTransportVersion(name, classname)
5261
referableTransportVersion(name, ids)
5362
}
5463

@@ -74,24 +83,57 @@ class AbstractTransportVersionFuncTest extends AbstractGradleFuncTest {
7483
assertOutputContains(result.output, expectedOutput)
7584
}
7685

86+
void assertReferableDefinition(String name, String content) {
87+
File definitionFile = file("myserver/src/main/resources/transport/definitions/referable/${name}.csv")
88+
assert definitionFile.exists()
89+
assert definitionFile.text.strip() == content
90+
}
91+
92+
void assertReferableDefinitionDoesNotExist(String name) {
93+
assert file("myserver/src/main/resources/transport/definitions/referable/${name}.csv").exists() == false
94+
}
95+
96+
void assertUnreferableDefinition(String name, String content) {
97+
File definitionFile = file("myserver/src/main/resources/transport/definitions/unreferable/${name}.csv")
98+
assert definitionFile.exists()
99+
assert definitionFile.text.strip() == content
100+
}
101+
102+
void assertUpperBound(String name, String content) {
103+
assert file("myserver/src/main/resources/transport/upper_bounds/${name}.csv").text.strip() == content
104+
}
105+
106+
void assertNoChanges() {
107+
String output = execute("git diff")
108+
assert output.strip().isEmpty() : "Expected no local git changes, but found:${System.lineSeparator()}${output}"
109+
}
110+
77111
def setup() {
78112
configurationCacheCompatible = false
79113
internalBuild()
80114
settingsFile << """
81115
include ':myserver'
82116
include ':myplugin'
83117
"""
118+
versionPropertiesFile.text = versionPropertiesFile.text.replace("9.1.0", "9.2.0")
84119

85120
file("myserver/build.gradle") << """
86121
apply plugin: 'java-library'
87122
apply plugin: 'elasticsearch.transport-version-references'
88123
apply plugin: 'elasticsearch.transport-version-resources'
124+
125+
tasks.named('generateTransportVersionDefinition') {
126+
currentUpperBoundName = '9.2'
127+
}
89128
"""
90129
referableTransportVersion("existing_91", "8012000")
91130
referableTransportVersion("existing_92", "8123000,8012001")
92-
unreferableTransportVersion("initial_9_0_0", "8000000")
131+
unreferableTransportVersion("initial_9.0.0", "8000000")
132+
unreferableTransportVersion("initial_8.19.7", "7123001")
93133
transportVersionUpperBound("9.2", "existing_92", "8123000")
94134
transportVersionUpperBound("9.1", "existing_92", "8012001")
135+
transportVersionUpperBound("9.0", "initial_9.0.0", "8000000")
136+
transportVersionUpperBound("8.19", "initial_8.19.7", "7123001")
95137
// a mock version of TransportVersion, just here so we can compile Dummy.java et al
96138
javaSource("myserver", "org.elasticsearch", "TransportVersion", "", """
97139
public static TransportVersion fromName(String name) {
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,93 @@
1+
/*
2+
* Copyright Elasticsearch B.V. and/or licensed to Elasticsearch B.V. under one
3+
* or more contributor license agreements. Licensed under the "Elastic License
4+
* 2.0", the "GNU Affero General Public License v3.0 only", and the "Server Side
5+
* Public License v 1"; you may not use this file except in compliance with, at
6+
* your election, the "Elastic License 2.0", the "GNU Affero General Public
7+
* License v3.0 only", or the "Server Side Public License, v 1".
8+
*/
9+
10+
package org.elasticsearch.gradle.internal.transport
11+
12+
import org.gradle.testkit.runner.BuildResult
13+
import org.gradle.testkit.runner.TaskOutcome
14+
15+
class GenerateInitialTransportVersionFuncTest extends AbstractTransportVersionFuncTest {
16+
def runGenerateAndValidateTask(String... additionalArgs) {
17+
List<String> args = new ArrayList<>()
18+
args.add(":myserver:validateTransportVersionResources")
19+
args.add(":myserver:generateInitialTransportVersion")
20+
args.addAll(additionalArgs);
21+
return gradleRunner(args.toArray())
22+
}
23+
24+
def runGenerateTask(String... additionalArgs) {
25+
List<String> args = new ArrayList<>()
26+
args.add(":myserver:generateInitialTransportVersion")
27+
args.addAll(additionalArgs);
28+
return gradleRunner(args.toArray())
29+
}
30+
31+
void assertGenerateSuccess(BuildResult result) {
32+
assert result.task(":myserver:generateInitialTransportVersion").outcome == TaskOutcome.SUCCESS
33+
}
34+
35+
void assertGenerateFailure(BuildResult result, String expectedOutput) {
36+
assert result.task(":myserver:generateInitialTransportVersion").outcome == TaskOutcome.FAILED
37+
assertOutputContains(result.output, expectedOutput)
38+
}
39+
40+
void assertValidateSuccess(BuildResult result) {
41+
assert result.task(":myserver:validateTransportVersionResources").outcome == TaskOutcome.SUCCESS
42+
}
43+
44+
void assertGenerateAndValidateSuccess(BuildResult result) {
45+
assertGenerateSuccess(result)
46+
assertValidateSuccess(result)
47+
}
48+
49+
def "setup is valid"() {
50+
when:
51+
def result = runGenerateAndValidateTask("--release-version", "9.0.0").build()
52+
53+
then:
54+
assertGenerateAndValidateSuccess(result)
55+
// should have been idempotent, nothing actually changed
56+
assertNoChanges();
57+
}
58+
59+
def "new minor also creates next upper bound"() {
60+
given:
61+
// version properties will be updated by release automation before running initial version generation
62+
versionPropertiesFile.text = versionPropertiesFile.text.replace("9.2.0", "9.3.0")
63+
64+
when:
65+
System.out.println("Running generation initial task")
66+
def result = runGenerateAndValidateTask("--release-version", "9.2.0").build()
67+
System.out.println("Done running generation task")
68+
69+
then:
70+
assertGenerateAndValidateSuccess(result)
71+
assertUnreferableDefinition("initial_9.2.0", "8124000")
72+
assertUpperBound("9.2", "initial_9.2.0,8124000")
73+
assertUpperBound("9.3", "initial_9.2.0,8124000")
74+
}
75+
76+
def "patch updates existing upper bound"() {
77+
when:
78+
def result = runGenerateAndValidateTask("--release-version", "9.1.2").build()
79+
80+
then:
81+
assertGenerateAndValidateSuccess(result)
82+
assertUnreferableDefinition("initial_9.1.2", "8012002")
83+
assertUpperBound("9.1", "initial_9.1.2,8012002")
84+
}
85+
86+
def "cannot create upper bound file for patch"() {
87+
when:
88+
def result = runGenerateTask("--release-version", "9.3.7").buildAndFail()
89+
90+
then:
91+
assertGenerateFailure(result, "Missing upper bound 9.3 for release version 9.3.7")
92+
}
93+
}

0 commit comments

Comments
 (0)