This is an automated email from the ASF dual-hosted git repository.

manikumar pushed a commit to branch trunk
in repository https://gitbox.apache.org/repos/asf/kafka.git


The following commit(s) were added to refs/heads/trunk by this push:
     new dc5fd6c41a8 MINOR: Fix JDK version and architecture parameters in 
system test worker provisioning (#21394)
dc5fd6c41a8 is described below

commit dc5fd6c41a884606951279ba72d3461ed6b657aa
Author: Tirth <[email protected]>
AuthorDate: Thu Feb 12 08:57:45 2026 +0530

    MINOR: Fix JDK version and architecture parameters in system test worker 
provisioning (#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 <[email protected]>, Chia-Ping Tsai 
<[email protected]>
---
 vagrant/base.sh | 29 ++++++++++++++++++++++++++---
 1 file changed, 26 insertions(+), 3 deletions(-)

diff --git a/vagrant/base.sh b/vagrant/base.sh
index 9c990a083f5..60323caa616 100755
--- a/vagrant/base.sh
+++ b/vagrant/base.sh
@@ -32,12 +32,35 @@ fetch_jdk_tgz() {
 
   if [ ! -e $path ]; then
     mkdir -p $(dirname $path)
-    curl --retry 5 -s -L 
"https://s3-us-west-2.amazonaws.com/kafka-packages/jdk-${jdk_version}.tar.gz"; 
-o $path
+    curl --retry 5 -s -L 
"https://s3-us-west-2.amazonaws.com/kafka-packages/jdk/jdk-${jdk_version}.tar.gz";
 -o $path
   fi
 }
 
-JDK_MAJOR="${JDK_MAJOR:-17}"
-JDK_FULL="${JDK_FULL:-17-linux-x64}"
+# Validate JDK_MAJOR - must be a version number (e.g., 17, 25.0.1), default to 
17 if empty or invalid
+if [[ -z "$JDK_MAJOR" ]]; then
+    JDK_MAJOR="17"
+elif [[ ! "$JDK_MAJOR" =~ ^[0-9]+(u[0-9]+|(\.[0-9]+)+)?$ ]]; then
+    echo "WARNING: Invalid JDK_MAJOR format '$JDK_MAJOR'. Expected format: 17, 
21.0.1, 25.0.2. Defaulting to 17."
+    JDK_MAJOR="17"
+fi
+
+# Validate JDK_ARCH - default to x64 if empty or invalid
+if [[ -z "$JDK_ARCH" ]]; then
+    JDK_ARCH="x64"
+elif [[ ! "$JDK_ARCH" =~ ^(x64|aarch64)$ ]]; then
+    echo "WARNING: Invalid JDK_ARCH format '$JDK_ARCH'. Expected: x64 or 
aarch64. Defaulting to x64."
+    JDK_ARCH="x64"
+fi
+
+# Use JDK_FULL if provided and valid, otherwise construct from JDK_MAJOR and 
JDK_ARCH
+if [[ -z "$JDK_FULL" ]]; then
+    JDK_FULL="${JDK_MAJOR}-linux-${JDK_ARCH}"
+elif [[ ! "$JDK_FULL" =~ ^[0-9]+(u[0-9]+|(\.[0-9]+)+)?-linux-(x64|aarch64)$ 
]]; then
+    echo "WARNING: Invalid JDK_FULL format '$JDK_FULL'. Constructing from 
JDK_MAJOR and JDK_ARCH."
+    JDK_FULL="${JDK_MAJOR}-linux-${JDK_ARCH}"
+fi
+
+echo "JDK_MAJOR=$JDK_MAJOR JDK_ARCH=$JDK_ARCH JDK_FULL=$JDK_FULL"
 
 if [ -z `which javac` ]; then
     apt-get -y update

Reply via email to