elastic/elasticsearch · error · RuntimeException
Missing upper bound {} for stack version {}
Error message
Missing upper bound {} for stack version {} What it means
RuntimeException from UpdateTransportVersionsCSVTask.run() when getUpperBoundFromGitBase(upperBoundName) returns null for the given stack version. Before appending a row to TransportVersions.csv the task needs the upper bound (max transport-version id) for the release branch derived from the stack version.
Source
Thrown at build-tools-internal/src/main/java/org/elasticsearch/gradle/internal/transport/UpdateTransportVersionsCSVTask.java:46
@ServiceReference("transportVersionResources")
abstract Property<TransportVersionResourcesService> getResourceService();
@InputFile
public abstract RegularFileProperty getTransportVersionsFile();
@Input
@Option(option = "stack-version", description = "The Elasticsearch version to record in TransportVersions.csv")
public abstract Property<String> getStackVersion();
@TaskAction
public void run() throws IOException {
Version stackVersion = Version.fromString(getStackVersion().get());
String upperBoundName = getUpperBoundName(stackVersion);
TransportVersionResourcesService resources = getResourceService().get();
TransportVersionUpperBound upperBound = resources.getUpperBoundFromGitBase(upperBoundName);
if (upperBound == null) {
throw new RuntimeException("Missing upper bound " + upperBoundName + " for stack version " + stackVersion);
}
int expectedTransportVersionId = upperBound.definitionId().complete();
// Check if this version is already in the CSV file (idempotency check)
Integer existingTransportVersionId = getExistingTransportVersionId(stackVersion);
if (existingTransportVersionId != null) {
if (existingTransportVersionId != expectedTransportVersionId) {
throw new RuntimeException(
"Version "
+ stackVersion
+ " already exists in TransportVersions.csv with transport version ID "
+ existingTransportVersionId
+ ", but expected "
+ expectedTransportVersionId
);
}
getLogger().lifecycle(View on GitHub (pinned to db6a809a66)
Solutions
- Run GenerateInitialTransportVersionTask for the stack version first to create the upper bound.
- Confirm the upper-bound file for the derived branch name exists on the base branch.
- Sync the transport-resources directory from the base/upstream before re-running the update task.
Defensive patterns
Strategy: validation
Validate before calling
String upperBoundName = getUpperBoundName(stackVersion);
TransportVersionUpperBound upperBound = resources.getUpperBoundFromGitBase(upperBoundName);
if (upperBound == null) {
throw new IllegalStateException("No upper bound '" + upperBoundName + "' for " + stackVersion + "; run GenerateInitialTransportVersionTask first");
} Prevention
- Run the initial-version task before the update task for a new release.
- Sync the resources directory from the base branch first.
- Confirm the branch upper-bound file exists upstream before updating the CSV.
When it happens
Trigger: The upper-bound CSV named by getUpperBoundName(stackVersion) does not exist in the git base of the transport-resources directory when updating the canonical TransportVersions.csv.
Common situations: Running the update task for a stack version whose branch upper bound was never created; pointing at the wrong base; the resources directory not synced with upstream; running before GenerateInitialTransportVersionTask has seeded the upper bound.
Related errors
- Missing upper bound {} for release version {}
- Transport version generation cannot run on release branches
- git command failed with exit code {} command: {} output: {}
- Invalid increment {}, must be a positive integer
- Invalid increment {}, must be no larger than 1000
AI-assisted analysis of elastic/elasticsearch@db6a809a66 (2026-08-12).
Data as JSON: /api/errors/d6e3e0842ed1eae1.
Report an issue: GitHub.