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

dsmiley pushed a commit to branch main
in repository https://gitbox.apache.org/repos/asf/solr.git


The following commit(s) were added to refs/heads/main by this push:
     new 642b0b069c7 smokeTestRelease.py: Remove --test-alt-java support (#4608)
642b0b069c7 is described below

commit 642b0b069c7871d1e8c6a517d947b0539ecc13c5
Author: David Smiley <[email protected]>
AuthorDate: Mon Jul 6 16:12:01 2026 -0400

    smokeTestRelease.py: Remove --test-alt-java support (#4608)
    
    smokeTestRelease.py: simplify Java version handling, add tmp-dir reuse
    
    Remove the --test-alt-java option: it added real complexity (parallel
    alt-JDK homes/runners/versions, a per-JDK unpacked-distribution copy)
    for a feature that was never actually exercised with a different JDK
    and had already caused real bugs.
    Re-testing with another JDK is simpler done by re-running the script
    under a different JAVA_HOME instead.
    
    Relax the JAVA_HOME check from an exact match to a floor (must be at
    least the base version) so that workflow actually works, rather than
    rejecting any JDK newer than the pinned base version outright.
    
    Add --reuse-tmp-dir so a re-run can reuse an existing --tmp-dir's
    already-downloaded artifacts, signatures, and maven tree instead of
    re-fetching everything from the network.
    Print the exact re-run command, with a JAVA_HOME=/path/to/java prefix,
    both right after the tmp dir is set up and again on success, so it is
    visible even if a later step fails.
---
 dev-tools/scripts/README.md           |   4 +-
 dev-tools/scripts/smokeTestRelease.py | 142 +++++++++++++++++-----------------
 2 files changed, 73 insertions(+), 73 deletions(-)

diff --git a/dev-tools/scripts/README.md b/dev-tools/scripts/README.md
index 0618a1aae14..b32b63c4a56 100644
--- a/dev-tools/scripts/README.md
+++ b/dev-tools/scripts/README.md
@@ -15,7 +15,7 @@ Used to validate new release candidates (RC). The script 
downloads an RC from a
 or local folder, then runs a number of sanity checks on the artifacts, and 
then runs
 the full tests.
 
-    usage: smokeTestRelease.py [-h] [--tmp-dir PATH] [--not-signed] 
[--local-keys PATH] [--revision REVISION] [--version X.Y.Z(-ALPHA|-BETA)?] 
[--test-alt-java TEST_ALT_JAVA] [--download-only] [--dev-mode] url ...
+    usage: smokeTestRelease.py [-h] [--tmp-dir PATH] [--not-signed] 
[--local-keys PATH] [--revision REVISION] [--version X.Y.Z(-ALPHA|-BETA)?] 
[--download-only] [--dev-mode] url ...
 
     Utility to test a release.
 
@@ -31,8 +31,6 @@ the full tests.
       --revision REVISION   GIT revision number that release was built with, 
defaults to that in URL
       --version X.Y.Z(-ALPHA|-BETA)?
                             Version of the release, defaults to that in URL
-      --test-alt-java TEST_ALT_JAVA
-                            Path to Java alternative home directory, to run 
tests with if specified
       --download-only       Only perform download and sha hash check steps
       --dev-mode            Enable dev mode, will not check branch 
compatibility
 
diff --git a/dev-tools/scripts/smokeTestRelease.py 
b/dev-tools/scripts/smokeTestRelease.py
index 21f7b8a2529..3c97a1fa76f 100755
--- a/dev-tools/scripts/smokeTestRelease.py
+++ b/dev-tools/scripts/smokeTestRelease.py
@@ -15,6 +15,23 @@
 # See the License for the specific language governing permissions and
 # limitations under the License.
 
+# --------------------------------------------------------------------------
+# Quick local smoke test against a release built from this checkout (no
+# download, no signing). Copy-paste from a shell at the repo root:
+#
+#   VERSION=$(sed -n "s/.*baseVersion = '\(.*\)'/\1/p" build.gradle)-SNAPSHOT
+#   ./gradlew -p solr/distribution assembleRelease -Dversion.release=$VERSION
+#   python3 -u dev-tools/scripts/smokeTestRelease.py \
+#     --tmp-dir /tmp/smoke_solr \
+#     --not-signed \
+#     --revision skip \
+#     --version $VERSION \
+#     file://$(pwd)/solr/distribution/build/release
+#
+# --revision skip bypasses the JAR-manifest git-revision check, which is
+# otherwise brittle against a Gradle build cache holding a stale commit hash.
+# --------------------------------------------------------------------------
+
 import argparse
 import codecs
 import datetime
@@ -627,19 +644,13 @@ def verifySrcUnpacked(java, artifact, unpackPath, 
version, testArgs):
   print('    run "%s"' % validateCmd)
   java.run_java(validateCmd, '%s/validate.log' % unpackPath)
 
-  def _run_for_java(run_java, java_home, java_version, clean_first=False):
-    suffix = '-java%s' % java_version
-    print("    run tests w/ Java %s and testArgs='%s'..." % (java_version, 
testArgs))
-    run_java('./gradlew --no-daemon %stest %s' % ('clean ' if clean_first else 
'', testArgs), '%s/test%s.log' % (unpackPath, suffix))
-    print("    run integration tests w/ Java %s" % java_version)
-    run_java('./gradlew --no-daemon integrationTest -Dversion.release=%s' % 
version, '%s/itest%s.log' % (unpackPath, suffix))
-    print("    build binary release w/ Java %s" % java_version)
-    run_java('./gradlew --no-daemon dev -Dversion.release=%s' % version, 
'%s/assemble%s.log' % (unpackPath, suffix))
-    testSolrExample("%s/solr/packaging/build/dev" % unpackPath, java_home, 
False)
-
-  _run_for_java(java.run_java, java.java_home, BASE_JAVA_VERSION)
-  for run_alt_java, alt_java_home, alt_java_version in zip(java.run_alt_javas, 
java.alt_java_homes, java.alt_java_versions):
-    _run_for_java(run_alt_java, alt_java_home, alt_java_version, 
clean_first=True)
+  print("    run tests w/ Java %s and testArgs='%s'..." % (java.version, 
testArgs))
+  java.run_java('./gradlew --no-daemon test %s' % testArgs, '%s/test.log' % 
unpackPath)
+  print("    run integration tests w/ Java %s" % java.version)
+  java.run_java('./gradlew --no-daemon integrationTest -Dversion.release=%s' % 
version, '%s/itest.log' % unpackPath)
+  print("    build binary release w/ Java %s" % java.version)
+  java.run_java('./gradlew --no-daemon dev -Dversion.release=%s' % version, 
'%s/assemble.log' % unpackPath)
+  testSolrExample("%s/solr/packaging/build/dev" % unpackPath, java.java_home, 
False)
 
   testChangelogMd('.', version)
 
@@ -670,27 +681,9 @@ def verifyBinaryUnpacked(java, artifact, unpackPath, 
version, gitRevision):
 
   checkAllJARs(os.getcwd(), gitRevision, version)
 
-  print('    copying unpacked distribution for Java %s ...' % 
BASE_JAVA_VERSION)
-  javaBaseVersionUnpackPath = '%s-java%s' % (unpackPath, BASE_JAVA_VERSION)
-  if os.path.exists(javaBaseVersionUnpackPath):
-    shutil.rmtree(javaBaseVersionUnpackPath)
-  shutil.copytree(unpackPath, javaBaseVersionUnpackPath)
-  os.chdir(javaBaseVersionUnpackPath)
-  print('    test solr example w/ Java %s...' % BASE_JAVA_VERSION)
-  testSolrExample(javaBaseVersionUnpackPath, java.java_home, isSlim)
-
-  if java.run_alt_javas:
-    for run_alt_java, alt_java_home, alt_java_version in 
zip(java.run_alt_javas, java.alt_java_homes, java.alt_java_versions):
-      print('    copying unpacked distribution for Java %s ...' % 
alt_java_version)
-      javaAltVersionUnpackPath = '%s-java%s' % (unpackPath, alt_java_version)
-      if os.path.exists(javaAltVersionUnpackPath):
-        shutil.rmtree(javaAltVersionUnpackPath)
-      shutil.copytree(unpackPath, javaAltVersionUnpackPath)
-      os.chdir(javaAltVersionUnpackPath)
-      print('    test solr example w/ Java %s...' % alt_java_version)
-      testSolrExample(javaAltVersionUnpackPath, alt_java_home, isSlim)
+  print('    test solr example w/ Java %s...' % java.version)
+  testSolrExample(unpackPath, java.java_home, isSlim)
 
-  os.chdir(unpackPath)
   testChangelogMd('.', version)
 
 
@@ -982,42 +975,27 @@ def crawl(downloadedFiles, urlString, targetDir, 
exclusions=set()):
         sys.stdout.write('.')
 
 
-def make_java_config(parser, alt_java_homes):
-  def _make_runner(java_home, is_base_version=False):
-    if cygwin:
-      java_home = subprocess.check_output('cygpath -u "%s"' % java_home, 
shell=True).decode('utf-8').strip()
-    cmd_prefix = 'export JAVA_HOME="%s" PATH="%s/bin:$PATH" 
JAVACMD="%s/bin/java"' % \
-                 (java_home, java_home, java_home)
-    s = subprocess.check_output('%s; java -version' % cmd_prefix,
-                                shell=True, 
stderr=subprocess.STDOUT).decode('utf-8')
-    actual_version = re.search(r'version "([1-9][0-9]*)', s).group(1)
-    print('Java %s JAVA_HOME=%s' % (actual_version, java_home))
-
-    # validate Java version
-    if is_base_version:
-      if BASE_JAVA_VERSION != actual_version:
-        parser.error('got wrong base version for java %s:\n%s' % 
(BASE_JAVA_VERSION, s))
-      else:
-        if int(actual_version) < int(BASE_JAVA_VERSION):
-          parser.error('got wrong version for java %s, less than base version 
%s:\n%s' % (actual_version, BASE_JAVA_VERSION, s))
-    def run_java(cmd, logfile):
-      run('%s; %s' % (cmd_prefix, cmd), logfile)
-    return run_java, actual_version
-
-  java_home =  os.environ.get('JAVA_HOME')
+def make_java_config(parser):
+  java_home = os.environ.get('JAVA_HOME')
   if java_home is None:
     parser.error('JAVA_HOME must be set')
-  run_java, _ = _make_runner(java_home, True)
-  run_alt_javas = []
-  alt_java_versions = []
-  if alt_java_homes:
-    for alt_java_home in alt_java_homes:
-      run_alt_java, version = _make_runner(alt_java_home)
-      run_alt_javas.append(run_alt_java)
-      alt_java_versions.append(version)
-  print("alt java ", run_alt_javas, alt_java_versions)
-  jc = namedtuple('JavaConfig', 'run_java java_home run_alt_javas 
alt_java_homes alt_java_versions')
-  return jc(run_java, java_home, run_alt_javas, alt_java_homes, 
alt_java_versions)
+  if cygwin:
+    java_home = subprocess.check_output('cygpath -u "%s"' % java_home, 
shell=True).decode('utf-8').strip()
+  cmd_prefix = 'export JAVA_HOME="%s" PATH="%s/bin:$PATH" 
JAVACMD="%s/bin/java"' % \
+               (java_home, java_home, java_home)
+  s = subprocess.check_output('%s; java -version' % cmd_prefix,
+                              shell=True, 
stderr=subprocess.STDOUT).decode('utf-8')
+  actual_version = re.search(r'version "([1-9][0-9]*)', s).group(1)
+  print('Java %s JAVA_HOME=%s' % (actual_version, java_home))
+
+  if int(actual_version) < int(BASE_JAVA_VERSION):
+    parser.error('got wrong version for java %s, must be at least base version 
%s:\n%s' % (actual_version, BASE_JAVA_VERSION, s))
+
+  def run_java(cmd, logfile):
+    run('%s; %s' % (cmd_prefix, cmd), logfile)
+
+  jc = namedtuple('JavaConfig', 'run_java java_home version')
+  return jc(run_java, java_home, actual_version)
 
 
 version_re = re.compile(r'(\d+\.\d+\.\d+(-ALPHA|-BETA)?)')
@@ -1032,6 +1010,9 @@ def parse_config():
                                    
formatter_class=argparse.RawDescriptionHelpFormatter)
   parser.add_argument('--tmp-dir', metavar='PATH',
                       help='Temporary directory to test inside, defaults to 
/tmp/smoke_solr_$version_$revision')
+  parser.add_argument('--reuse-tmp-dir', action='store_true', default=False,
+                      help='Allows --tmp-dir to already exist and reuses 
whatever it already downloaded, '
+                           'instead of re-downloading everything from scratch')
   parser.add_argument('--not-signed', dest='is_signed', action='store_false', 
default=True,
                       help='Indicates the release is not signed')
   parser.add_argument('--local-keys', metavar='PATH',
@@ -1040,8 +1021,6 @@ def parse_config():
                       help='GIT revision number that release was built with, 
defaults to that in URL')
   parser.add_argument('--version', metavar='X.Y.Z(-ALPHA|-BETA)?',
                       help='Version of the release, defaults to that in URL')
-  parser.add_argument('--test-alt-java', action='append',
-                      help='Path to Java alternative home directory, to run 
tests with if specified')
   parser.add_argument('--download-only', action='store_true', default=False,
                       help='Only perform download and sha hash check steps')
   parser.add_argument('--dev-mode', action='store_true', default=False,
@@ -1070,7 +1049,7 @@ def parse_config():
   if c.local_keys is not None and not os.path.exists(c.local_keys):
     parser.error('Local KEYS file "%s" not found' % c.local_keys)
 
-  c.java = make_java_config(parser, c.test_alt_java)
+  c.java = make_java_config(parser)
 
   if c.tmp_dir:
     c.tmp_dir = os.path.abspath(c.tmp_dir)
@@ -1096,13 +1075,32 @@ def main():
   if not c.version.startswith(scriptVersion + '.') and not c.dev_mode:
     raise RuntimeError('smokeTestRelease.py for %s.X is incompatible with a %s 
release.' % (scriptVersion, c.version))
 
+  global FORCE_CLEAN
+  FORCE_CLEAN = not c.reuse_tmp_dir
+
   print('NOTE: output encoding is %s' % sys.stdout.encoding)
   smokeTest(c.java, c.url, c.revision, c.version, c.tmp_dir, c.is_signed, 
c.local_keys, ' '.join(c.test_args),
             downloadOnly=c.download_only)
 
 
+def printReuseHint(baseURL, gitRevision, version, tmpDir, isSigned, 
local_keys, testArgs):
+  cmd = ['./smokeTestRelease.py', '--tmp-dir', tmpDir, '--reuse-tmp-dir',
+         '--revision', gitRevision, '--version', version]
+  if not isSigned:
+    cmd.append('--not-signed')
+  if local_keys is not None:
+    cmd.extend(['--local-keys', local_keys])
+  cmd.append(baseURL)
+  if testArgs:
+    cmd.append(testArgs)
+  print()
+  print('NOTE: to re-run (e.g. with a different Java version) reusing what is 
already downloaded to %s:' % tmpDir)
+  print('  JAVA_HOME=/path/to/java %s' % ' '.join(cmd))
+
+
 def smokeTest(java, baseURL, gitRevision, version, tmpDir, isSigned, 
local_keys, testArgs, downloadOnly=False):
   startTime = datetime.datetime.now()
+  origTestArgs = testArgs
 
   # Avoid @Nightly and @Badapple tests as they are slow and buggy
   # Instead verify that the recent Jenkins tests pass
@@ -1116,6 +1114,8 @@ def smokeTest(java, baseURL, gitRevision, version, 
tmpDir, isSigned, local_keys,
   if not os.path.exists(tmpDir):
     os.makedirs(tmpDir)
 
+  printReuseHint(baseURL, gitRevision, version, tmpDir, isSigned, local_keys, 
origTestArgs)
+
   solrPath = None
   print()
   print('Load release URL "%s"...' % baseURL)
@@ -1168,6 +1168,8 @@ def smokeTest(java, baseURL, gitRevision, version, 
tmpDir, isSigned, local_keys,
   else:
     print("Solr test done (--download-only specified)")
 
+  printReuseHint(baseURL, gitRevision, version, tmpDir, isSigned, local_keys, 
origTestArgs)
+
   print('\nSUCCESS! [%s]\n' % (datetime.datetime.now() - startTime))
 
 

Reply via email to