Skip to content
Merged
Show file tree
Hide file tree
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
Original file line number Diff line number Diff line change
Expand Up @@ -125,9 +125,13 @@ class AbstractTransportVersionFuncTest extends AbstractGradleFuncTest {
tasks.named('generateTransportVersion') {
currentUpperBoundName = '9.2'
}
tasks.named('validateTransportVersionResources') {
currentUpperBoundName = '9.2'
}
"""
referableTransportVersion("existing_91", "8012000")
referableTransportVersion("existing_92", "8123000,8012001")
referableAndReferencedTransportVersion("existing_91", "8012000")
referableAndReferencedTransportVersion("older_92", "8122000")
referableAndReferencedTransportVersion("existing_92", "8123000,8012001")
unreferableTransportVersion("initial_9.0.0", "8000000")
unreferableTransportVersion("initial_8.19.7", "7123001")
transportVersionUpperBound("9.2", "existing_92", "8123000")
Expand All @@ -140,10 +144,6 @@ class AbstractTransportVersionFuncTest extends AbstractGradleFuncTest {
return null;
}
""")
javaSource("myserver", "org.elasticsearch", "Dummy", "", """
static final TransportVersion existing91 = TransportVersion.fromName("existing_91");
static final TransportVersion existing92 = TransportVersion.fromName("existing_92");
""")

file("myplugin/build.gradle") << """
apply plugin: 'java-library'
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -428,7 +428,7 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
assertUpperBound("9.2", "new_tv,8123100")
}

def "an invalid increment should fail"() {
def "a non-positive increment should fail"() {
given:
referencedTransportVersion("new_tv")

Expand All @@ -439,6 +439,17 @@ class TransportVersionGenerationFuncTest extends AbstractTransportVersionFuncTes
assertOutputContains(result.output, "Invalid increment 0, must be a positive integer")
}

def "an increment larger than 1000 should fail"() {
given:
referencedTransportVersion("new_tv")

when:
def result = runGenerateTask("--increment=1001").buildAndFail()

then:
assertOutputContains(result.output, "Invalid increment 1001, must be no larger than 1000")
}

def "a new definition exists and is in the latest file, but the version id is wrong and needs to be updated"(){
given:
referableAndReferencedTransportVersion("new_tv", "1000000")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -118,7 +118,17 @@ class TransportVersionValidationFuncTest extends AbstractTransportVersionFuncTes
def result = validateResourcesFails()
then:
assertValidateResourcesFailure(result, "Transport version definition file " +
"[myserver/src/main/resources/transport/definitions/referable/existing_92.csv] modifies existing patch id from 8012001 to 8012002")
"[myserver/src/main/resources/transport/definitions/referable/existing_92.csv] has modified patch id from 8012001 to 8012002")
}

def "cannot change committed ids"() {
given:
referableTransportVersion("existing_92", "8123000")
when:
def result = validateResourcesFails()
then:
assertValidateResourcesFailure(result, "Transport version definition file " +
"[myserver/src/main/resources/transport/definitions/referable/existing_92.csv] has removed id 8012001")
}

def "upper bounds files must reference defined name"() {
Expand Down Expand Up @@ -201,8 +211,8 @@ class TransportVersionValidationFuncTest extends AbstractTransportVersionFuncTes

def "upper bound can refer to an unreferable definition"() {
given:
unreferableTransportVersion("initial_10.0.0", "10000000")
transportVersionUpperBound("10.0", "initial_10.0.0", "10000000")
unreferableTransportVersion("initial_9.3.0", "8124000")
transportVersionUpperBound("9.3", "initial_9.3.0", "8124000")
when:
def result = gradleRunner(":myserver:validateTransportVersionResources").build()
then:
Expand Down Expand Up @@ -232,24 +242,56 @@ class TransportVersionValidationFuncTest extends AbstractTransportVersionFuncTes

def "highest id in an referable definition should exist in an upper bounds file"() {
given:
referableAndReferencedTransportVersion("some_tv", "10000000")
referableAndReferencedTransportVersion("some_tv", "8124000")
when:
def result = validateResourcesFails()
then:
assertValidateResourcesFailure(result, "Transport version definition file " +
"[myserver/src/main/resources/transport/definitions/referable/some_tv.csv] " +
"has the highest transport version id [10000000] but is not present in any upper bounds files")
"has the highest transport version id [8124000] but is not present in any upper bounds files")
}

def "highest id in an unreferable definition should exist in an upper bounds file"() {
given:
unreferableTransportVersion("initial_10.0.0", "10000000")
unreferableTransportVersion("initial_9.3.0", "8124000")
when:
def result = validateResourcesFails()
then:
// TODO: this should be _unreferable_ in the error message, but will require some rework
assertValidateResourcesFailure(result, "Transport version definition file " +
"[myserver/src/main/resources/transport/definitions/referable/initial_10.0.0.csv] " +
"has the highest transport version id [10000000] but is not present in any upper bounds files")
"[myserver/src/main/resources/transport/definitions/unreferable/initial_9.3.0.csv] " +
"has the highest transport version id [8124000] but is not present in any upper bounds files")
}

def "primary ids cannot jump ahead too fast"() {
given:
referableAndReferencedTransportVersion("some_tv", "8125000")
transportVersionUpperBound("9.2", "some_tv", "8125000")

when:
def result = validateResourcesFails()

then:
assertValidateResourcesFailure(result, "Transport version definition file " +
"[myserver/src/main/resources/transport/definitions/referable/some_tv.csv] " +
"has primary id 8125000 which is more than maximum increment 1000 from id 8123000 in definition " +
"[myserver/src/main/resources/transport/definitions/referable/existing_92.csv]"
)
}

def "primary id checks skipped on release branch"() {
given:
file("myserver/build.gradle") << """
tasks.named('validateTransportVersionResources') {
currentUpperBoundName = '9.1'
}
"""
referableAndReferencedTransportVersion("some_tv", "8125000")
transportVersionUpperBound("9.2", "some_tv", "8125000")

when:
def result = gradleRunner("validateTransportVersionResources").build()

then:
result.task(":myserver:validateTransportVersionResources").outcome == TaskOutcome.SUCCESS
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -52,8 +52,8 @@ public void run() throws IOException {
// minors increment by 1000 to create a unique base, patches increment by 1 as other patches do
int increment = releaseVersion.getRevision() == 0 ? 1000 : 1;
var id = TransportVersionId.fromInt(upstreamUpperBound.definitionId().complete() + increment);
var definition = new TransportVersionDefinition(initialDefinitionName, List.of(id));
resources.writeUnreferableDefinition(definition);
var definition = new TransportVersionDefinition(initialDefinitionName, List.of(id), false);
resources.writeDefinition(definition);
var newUpperBound = new TransportVersionUpperBound(upperBoundName, initialDefinitionName, id);
resources.writeUpperBound(newUpperBound, false);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ public void run() throws IOException {
} else {
List<TransportVersionId> ids = updateUpperBounds(resources, upstreamUpperBounds, targetUpperBoundNames, targetDefinitionName);
// (Re)write the definition file.
resources.writeReferableDefinition(new TransportVersionDefinition(targetDefinitionName, ids));
resources.writeDefinition(new TransportVersionDefinition(targetDefinitionName, ids, true));
}

removeUnusedNamedDefinitions(resources, referencedNames, changedDefinitionNames);
Expand All @@ -128,6 +128,9 @@ private List<TransportVersionId> updateUpperBounds(
if (increment <= 0) {
throw new IllegalArgumentException("Invalid increment " + increment + ", must be a positive integer");
}
if (increment > 1000) {
throw new IllegalArgumentException("Invalid increment " + increment + ", must be no larger than 1000");
}
List<TransportVersionId> ids = new ArrayList<>();
boolean stageInGit = getResolveConflict().getOrElse(false);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,8 @@
import java.util.ArrayList;
import java.util.List;

record TransportVersionDefinition(String name, List<TransportVersionId> ids) {
public static TransportVersionDefinition fromString(Path file, String contents) {
record TransportVersionDefinition(String name, List<TransportVersionId> ids, boolean isReferable) {
public static TransportVersionDefinition fromString(Path file, String contents, boolean isReferable) {
String filename = file.getFileName().toString();
assert filename.endsWith(".csv");
String name = filename.substring(0, filename.length() - 4);
Expand All @@ -41,6 +41,6 @@ public static TransportVersionDefinition fromString(Path file, String contents)
}
}

return new TransportVersionDefinition(name, ids);
return new TransportVersionDefinition(name, ids, isReferable);
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,9 @@
import org.elasticsearch.gradle.Version;
import org.elasticsearch.gradle.internal.ProjectSubscribeServicePlugin;
import org.elasticsearch.gradle.internal.conventions.VersionPropertiesPlugin;
import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitPlugin;
import org.elasticsearch.gradle.internal.conventions.precommit.PrecommitTaskPlugin;
import org.gradle.api.Action;
import org.gradle.api.Plugin;
import org.gradle.api.Project;
import org.gradle.api.file.Directory;
Expand All @@ -30,6 +33,7 @@ public class TransportVersionResourcesPlugin implements Plugin<Project> {
public void apply(Project project) {
project.getPluginManager().apply(LifecycleBasePlugin.class);
project.getPluginManager().apply(VersionPropertiesPlugin.class);
project.getPluginManager().apply(PrecommitTaskPlugin.class);
var psService = project.getPlugins().apply(ProjectSubscribeServicePlugin.class).getService();

Properties versions = (Properties) project.getExtensions().getByName(VersionPropertiesPlugin.VERSIONS_EXT);
Expand Down Expand Up @@ -66,8 +70,9 @@ public void apply(Project project) {
t.getReferencesFiles().setFrom(tvReferencesConfig);
t.getShouldValidateDensity().convention(true);
t.getShouldValidatePrimaryIdNotPatch().convention(true);
t.getCurrentUpperBoundName().convention(currentVersion.getMajor() + "." + currentVersion.getMinor());
});
project.getTasks().named(LifecycleBasePlugin.CHECK_TASK_NAME).configure(t -> t.dependsOn(validateTask));
project.getTasks().named(PrecommitPlugin.PRECOMMIT_TASK_NAME).configure(t -> t.dependsOn(validateTask));

var generateManifestTask = project.getTasks()
.register("generateTransportVersionManifest", GenerateTransportVersionManifestTask.class, t -> {
Expand All @@ -76,19 +81,31 @@ public void apply(Project project) {
t.getManifestFile().set(project.getLayout().getBuildDirectory().file("generated-resources/manifest.txt"));
});
project.getTasks().named(JavaPlugin.PROCESS_RESOURCES_TASK_NAME, Copy.class).configure(t -> {
t.into("transport/definitions", c -> c.from(generateManifestTask));
t.into(resourceRoot + "/definitions", c -> c.from(generateManifestTask));
});

Action<GenerateTransportVersionDefinitionTask> generationConfiguration = t -> {
t.setGroup(taskGroup);
t.getReferencesFiles().setFrom(tvReferencesConfig);
t.getIncrement().convention(1000);
t.getCurrentUpperBoundName().convention(currentVersion.getMajor() + "." + currentVersion.getMinor());
};

var generateDefinitionsTask = project.getTasks()
.register("generateTransportVersion", GenerateTransportVersionDefinitionTask.class, t -> {
t.setGroup(taskGroup);
t.setDescription("(Re)generates a transport version definition file");
t.getReferencesFiles().setFrom(tvReferencesConfig);
t.getIncrement().convention(1000);
t.getCurrentUpperBoundName().convention(currentVersion.getMajor() + "." + currentVersion.getMinor());
});
generateDefinitionsTask.configure(generationConfiguration);
validateTask.configure(t -> t.mustRunAfter(generateDefinitionsTask));

var resolveConflictTask = project.getTasks()
.register("resolveTransportVersionConflict", GenerateTransportVersionDefinitionTask.class, t -> {
t.setDescription("Resolve merge conflicts in transport version internal state files");
t.getResolveConflict().set(true);
});
resolveConflictTask.configure(generationConfiguration);
validateTask.configure(t -> t.mustRunAfter(resolveConflictTask));

var generateInitialTask = project.getTasks()
.register("generateInitialTransportVersion", GenerateInitialTransportVersionTask.class, t -> {
t.setGroup(taskGroup);
Expand Down
Loading