Skip to content

MINOR: Fix JDK version and architecture parameters in system test worker provisioning#21466

Closed
tirthooo7 wants to merge 1 commit intoapache:4.2from
confluentinc:jdk-25-upgrade-4.2-ak
Closed

MINOR: Fix JDK version and architecture parameters in system test worker provisioning#21466
tirthooo7 wants to merge 1 commit intoapache:4.2from
confluentinc:jdk-25-upgrade-4.2-ak

Conversation

@tirthooo7
Copy link
Contributor

Cherry pick from trunk : #21394

Summary

Fixes bugs where --jdk-version and --jdk-arch parameters were ignored during system test worker provisioning, and refactors vagrant/base.sh to support flexible JDK versions without code changes.


Problem

The Vagrant provisioning script (vagrant/base.sh) had two bugs that caused JDK version parameters to be ignored:

Bug Problem
#1: --jdk-version ignored JDK_FULL was hardcoded to 17-linux-x64, so passing --jdk-version 25 still downloaded JDK 17

Solution

  • Validate JDK_MAJOR and JDK_ARCH input parameters with regex
  • Dynamically construct JDK_FULL from JDK_MAJOR and JDK_ARCH
  • Update S3 path to use /jdk/ subdirectory
  • Add logging for debugging

Changes

vagrant/base.sh

Change Description
Input validation Added regex validation for JDK_MAJOR and JDK_ARCH with sensible defaults
Dynamic construction JDK_FULL is now constructed from JDK_MAJOR and JDK_ARCH if not explicitly provided
/kafka-packages/jdk-{version}.tar.gz to
/kafka-packages/jdk/jdk-{version}.tar.gz
Logging Added debug output for JDK configuration

S3 Path Change

Old Path

s3://kafka-packages/jdk-{version}.tar.gz

New Path

s3://kafka-packages/jdk/jdk-{version}.tar.gz

Available JDKs in s3://kafka-packages/jdk/

File Version Architecture
jdk-7u80-linux-x64.tar.gz 7u80 x64
jdk-8u144-linux-x64.tar.gz 8u144 x64
jdk-8u161-linux-x64.tar.gz 8u161 x64
jdk-8u171-linux-x64.tar.gz 8u171 x64
jdk-8u191-linux-x64.tar.gz 8u191 x64
jdk-8u202-linux-x64.tar.gz 8u202 x64
jdk-11.0.2-linux-x64.tar.gz 11.0.2 x64
jdk-17-linux-x64.tar.gz 17 x64
jdk-18.0.2-linux-x64.tar.gz 18.0.2 x64
jdk-21.0.1-linux-x64.tar.gz 21.0.1 x64
jdk-21.0.1-linux-aarch64.tar.gz 21.0.1 aarch64
jdk-25-linux-aarch64.tar.gz 25 aarch64
jdk-25.0.1-linux-x64.tar.gz 25.0.1 x64
jdk-25.0.1-linux-aarch64.tar.gz 25.0.1 aarch64
jdk-25.0.2-linux-aarch64.tar.gz 25.0.2 aarch64

Future JDK Releases

IMPORTANT: No code changes required for future Java major/minor
releases!

The validation regex supports all version formats:

  • Major versions: 17, 25, 26
  • Minor versions: 25.0.1, 25.0.2, 26.0.1
  • Legacy format: 8u144, 8u202

Adding New JDK Versions

To add support for a new JDK version (e.g., JDK 26, 25.0.3):

  1. Download the JDK tarball from Oracle/Adoptium
  2. Rename to follow naming convention: jdk-{VERSION}-linux-{ARCH}.tar.gz
  3. Upload to S3: aws s3 cp jdk-{VERSION}-linux-{ARCH}.tar.gz s3://kafka-packages/jdk/
  4. Use in tests: --jdk-version {VERSION} --jdk-arch {ARCH}

No modifications to base.sh or any other scripts are needed.


Benefits

Before After
--jdk-version ignored ✅ Correctly uses specified version

Testing

Tested with different JDK versions to confirm the fix works correctly:

| Test | JDK_MAJOR | Expected | Actual | Result | Test Report | |------|-----------|----------|--------|--------|-------------| | JDK 17 | 17 | javac 17.0.4 | javac 17.0.4 | ✅ | | JDK 25 | 25 | javac 25.0.2 | javac 25.0.2 | ✅ |


Backward Compatibility

  • Vagrantfile: Continues to work as before
  • Existing workflows: Default behavior unchanged (JDK 17 on x64 architecture)
  • No breaking changes: All existing configurations continue to work

Reviewers: Manikumar Reddy manikumar.reddy@gmail.com, Chia-Ping Tsai chia7712@gmail.com

…ker provisioning (apache#21394)

## Summary

Fixes bugs where `--jdk-version` and `--jdk-arch` parameters were
ignored during system test worker provisioning, and refactors
`vagrant/base.sh` to support flexible JDK versions without code changes.

---

## Problem

The Vagrant provisioning script (`vagrant/base.sh`) had two bugs that
caused JDK version parameters to be ignored:

| Bug | Problem |
|-----|---------|
| **#1: `--jdk-version` ignored** | `JDK_FULL` was hardcoded to
`17-linux-x64`, so passing `--jdk-version 25` still downloaded JDK 17 |
| **#2: `--jdk-arch` ignored** | Architecture parameter was passed but
never used in the S3 download URL |

---

## Solution

- Validate `JDK_MAJOR` and `JDK_ARCH` input parameters with regex
- Dynamically construct `JDK_FULL` from `JDK_MAJOR` and `JDK_ARCH`
- Update S3 path to use `/jdk/` subdirectory
- Add logging for debugging

---

## Changes

### `vagrant/base.sh`

| Change | Description |
|--------|-------------|
| **Input validation** | Added regex validation for `JDK_MAJOR` and
`JDK_ARCH` with sensible defaults |
| **Dynamic construction** | `JDK_FULL` is now constructed from
`JDK_MAJOR` and `JDK_ARCH` if not explicitly provided |
| **Updated S3 path** | Changed URL from
`/kafka-packages/jdk-{version}.tar.gz` to
`/kafka-packages/jdk/jdk-{version}.tar.gz` |
| **Logging** | Added debug output for JDK configuration |
| **Backward compatibility** | Vagrantfile can still pass `JDK_FULL`
directly; the script validates and uses it if valid |

---

## S3 Path Change

### Old Path
```
s3://kafka-packages/jdk-{version}.tar.gz
```

### New Path
```
s3://kafka-packages/jdk/jdk-{version}.tar.gz
```

### Available JDKs in `s3://kafka-packages/jdk/`

| File | Version | Architecture |
|------|---------|--------------|
| `jdk-7u80-linux-x64.tar.gz` | 7u80 | x64 |
| `jdk-8u144-linux-x64.tar.gz` | 8u144 | x64 |
| `jdk-8u161-linux-x64.tar.gz` | 8u161 | x64 |
| `jdk-8u171-linux-x64.tar.gz` | 8u171 | x64 |
| `jdk-8u191-linux-x64.tar.gz` | 8u191 | x64 |
| `jdk-8u202-linux-x64.tar.gz` | 8u202 | x64 |
| `jdk-11.0.2-linux-x64.tar.gz` | 11.0.2 | x64 |
| `jdk-17-linux-x64.tar.gz` | 17 | x64 |
| `jdk-18.0.2-linux-x64.tar.gz` | 18.0.2 | x64 |
| `jdk-21.0.1-linux-x64.tar.gz` | 21.0.1 | x64 |
| `jdk-21.0.1-linux-aarch64.tar.gz` | 21.0.1 | aarch64 |
| `jdk-25-linux-x64.tar.gz` | 25 | x64 |
| `jdk-25-linux-aarch64.tar.gz` | 25 | aarch64 |
| `jdk-25.0.1-linux-x64.tar.gz` | 25.0.1 | x64 |
| `jdk-25.0.1-linux-aarch64.tar.gz` | 25.0.1 | aarch64 |
| `jdk-25.0.2-linux-x64.tar.gz` | 25.0.2 | x64 |
| `jdk-25.0.2-linux-aarch64.tar.gz` | 25.0.2 | aarch64 |

---

## Future JDK Releases

> **IMPORTANT: No code changes required for future Java major/minor
releases!**

The validation regex supports all version formats:
- **Major versions**: `17`, `25`, `26`
- **Minor versions**: `25.0.1`, `25.0.2`, `26.0.1`
- **Legacy format**: `8u144`, `8u202`

### Adding New JDK Versions

To add support for a new JDK version (e.g., JDK 26, 25.0.3):

1. Download the JDK tarball from Oracle/Adoptium
2. Rename to follow naming convention:
`jdk-{VERSION}-linux-{ARCH}.tar.gz`
3. Upload to S3: `aws s3 cp jdk-{VERSION}-linux-{ARCH}.tar.gz
s3://kafka-packages/jdk/`
4. Use in tests: `--jdk-version {VERSION} --jdk-arch {ARCH}`

No modifications to `base.sh` or any other scripts are needed.

---

## Benefits

| Before | After |
|--------|-------|
| `--jdk-version` ignored | ✅ Correctly uses specified version |
| `--jdk-arch` ignored | ✅ Correctly uses specified architecture |
| Only major version support | ✅ Full version support (e.g., `25.0.2`) |
| Code change needed for new JDK | ✅ Just upload to S3 and pass version
|

---

## Testing

Tested with different JDK versions to confirm the fix works correctly:

| Test | JDK_MAJOR | Expected | Actual | Result | Test Report |
|------|-----------|----------|--------|--------|-------------|
| JDK 17 | `17` | javac 17.0.4 | javac 17.0.4 | ✅ |
| JDK 25 | `25` | javac 25.0.2 | javac 25.0.2 | ✅ |


---

## Backward Compatibility

- **Vagrantfile**: Continues to work as before
- **Existing workflows**: Default behavior unchanged (JDK 17 on x64
architecture)
- **No breaking changes**: All existing configurations continue to work

---

 Reviewers: Manikumar Reddy <manikumar.reddy@gmail.com>, Chia-Ping Tsai <chia7712@gmail.com>
@tirthooo7 tirthooo7 marked this pull request as ready for review February 12, 2026 19:11
@chia7712
Copy link
Member

@tirthooo7 Thanks for the backport. It looks like I can cherry-pick it directly instead of opening a PR. I'll do that once 4.2 is officially released

@tirthooo7 tirthooo7 closed this Feb 13, 2026
@chia7712
Copy link
Member

cherry-pick c1a930a

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants