This is an automated email from the ASF dual-hosted git repository.
sanjaydutt 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 d840a3bef65 Bump up Java version to 21 (#2682)
d840a3bef65 is described below
commit d840a3bef651214e6b8d937fe549a0f4d536aa9a
Author: Sanjay Dutt <[email protected]>
AuthorDate: Thu Oct 24 08:03:29 2024 +0530
Bump up Java version to 21 (#2682)
* The minimum Java version for the main branch is 21, except for the SolrJ
main package, which requires version 17.
---------
Co-authored-by: David Smiley <[email protected]>
---
.github/workflows/bin-solr-test.yml | 4 +-
.github/workflows/docker-test.yml | 4 +-
.github/workflows/gradle-precommit.yml | 6 +--
.github/workflows/solrj-test.yml | 4 +-
build-tools/scriptDepVersions.gradle | 5 ++-
build.gradle | 2 +-
crave.yaml | 2 +
dev-docs/solr-source-code.adoc | 4 +-
gradle/globals.gradle | 1 +
gradle/java/javac.gradle | 37 ++++++++----------
gradle/testing/defaults-tests.gradle | 6 ---
solr/CHANGES.txt | 2 +
solr/benchmark/jmh.sh | 4 +-
solr/bin/solr | 13 +------
solr/bin/solr.in.cmd | 7 ----
solr/bin/solr.in.sh | 10 +----
.../org/apache/solr/search/ValueSourceParser.java | 2 +-
.../test/org/apache/solr/cli/AssertToolTest.java | 3 ++
.../handler/component/TestPivotHelperCode.java | 2 +-
.../apache/solr/legacy/TestLegacyNumericUtils.java | 4 +-
solr/docker/build.gradle | 4 +-
.../update/ScriptUpdateProcessorFactory.java | 44 +++++++++++++---------
.../update/ScriptUpdateProcessorFactoryTest.java | 3 ++
.../pages/system-requirements.adoc | 5 +--
.../getting-started/pages/tutorial-aws.adoc | 12 +++---
.../pages/major-changes-in-solr-10.adoc | 6 +++
.../solrj/io/stream/eval/AddEvaluatorTest.java | 6 +--
.../client/solrj/beans/DocumentObjectBinder.java | 1 +
.../solr/common/util/SolrNamedThreadFactory.java | 10 ++++-
29 files changed, 105 insertions(+), 108 deletions(-)
diff --git a/.github/workflows/bin-solr-test.yml
b/.github/workflows/bin-solr-test.yml
index a0a33ccc51a..126e8d62293 100644
--- a/.github/workflows/bin-solr-test.yml
+++ b/.github/workflows/bin-solr-test.yml
@@ -24,11 +24,11 @@ jobs:
steps:
# Setup
- uses: actions/checkout@v4
- - name: Set up JDK 11
+ - name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
- java-version: 11
+ java-version: 21
java-package: jdk
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
diff --git a/.github/workflows/docker-test.yml
b/.github/workflows/docker-test.yml
index 0b00a6ab308..d8593613ca6 100644
--- a/.github/workflows/docker-test.yml
+++ b/.github/workflows/docker-test.yml
@@ -26,11 +26,11 @@ jobs:
steps:
# Setup
- uses: actions/checkout@v4
- - name: Set up JDK 11
+ - name: Set up JDK 21
uses: actions/setup-java@v4
with:
distribution: 'temurin'
- java-version: 11
+ java-version: 21
java-package: jdk
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
diff --git a/.github/workflows/gradle-precommit.yml
b/.github/workflows/gradle-precommit.yml
index dcc55ead323..67c1506ad0a 100644
--- a/.github/workflows/gradle-precommit.yml
+++ b/.github/workflows/gradle-precommit.yml
@@ -8,7 +8,7 @@ on:
jobs:
test:
- name: gradle check w/ Java 11
+ name: gradle check
runs-on: ubuntu-latest
@@ -19,11 +19,11 @@ jobs:
# Setup
- uses: actions/checkout@v4
- - name: Set up JDK 11
+ - name: Set up JDK
uses: actions/setup-java@v4
with:
distribution: 'temurin'
- java-version: 11
+ java-version: 21
java-package: jdk
- name: Setup Gradle
diff --git a/.github/workflows/solrj-test.yml b/.github/workflows/solrj-test.yml
index 1a0f6bfebde..3eb9bb4f5f6 100644
--- a/.github/workflows/solrj-test.yml
+++ b/.github/workflows/solrj-test.yml
@@ -21,11 +21,11 @@ jobs:
steps:
# Setup
- uses: actions/checkout@v4
- - name: Set up JDK 11
+ - name: Set up JDK 21
uses: actions/setup-java@v4
with:
distribution: 'temurin'
- java-version: 11
+ java-version: 21
java-package: jdk
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v4
diff --git a/build-tools/scriptDepVersions.gradle
b/build-tools/scriptDepVersions.gradle
index 2a83896148e..25413b6791a 100644
--- a/build-tools/scriptDepVersions.gradle
+++ b/build-tools/scriptDepVersions.gradle
@@ -21,10 +21,11 @@
ext {
scriptDepVersions = [
- "min-java-version": "11",
+ "min-java-version": "21",
+ "min-solrj-java-version" : "17",
"apache-rat": "0.15",
"commons-codec": "1.16.0",
- "ecj": "3.33.0",
+ "ecj": "3.36.0",
"javacc": "7.0.12",
"jgit": "6.7.0.202309050840-r",
"flexmark": "0.64.8",
diff --git a/build.gradle b/build.gradle
index 3cecb1aa0cd..13065fcfc8f 100644
--- a/build.gradle
+++ b/build.gradle
@@ -35,7 +35,7 @@ apply from: file('build-tools/scriptDepVersions.gradle')
// Declare default Java versions for the entire project and for SolrJ
separately
rootProject.ext.minJavaVersionDefault =
JavaVersion.toVersion(scriptDepVersions['min-java-version'])
-rootProject.ext.minJavaVersionSolrJ =
JavaVersion.toVersion(scriptDepVersions['min-java-version'])
+rootProject.ext.minJavaVersionSolrJ =
JavaVersion.toVersion(scriptDepVersions['min-solrj-java-version'])
apply from: file('gradle/globals.gradle')
diff --git a/crave.yaml b/crave.yaml
new file mode 100644
index 00000000000..91a7980e70f
--- /dev/null
+++ b/crave.yaml
@@ -0,0 +1,2 @@
+Solr:
+ image: "accupara/openjdk:21"
\ No newline at end of file
diff --git a/dev-docs/solr-source-code.adoc b/dev-docs/solr-source-code.adoc
index ad73858a478..5874a2e06ec 100644
--- a/dev-docs/solr-source-code.adoc
+++ b/dev-docs/solr-source-code.adoc
@@ -2,10 +2,10 @@
## Building Solr from Source
-Download the Java 11 JDK (Java Development Kit) or later.
+Download the Java 21 JDK (Java Development Kit) or later.
We recommend the OpenJDK distribution Eclipse Temurin available from
https://adoptium.net/.
You will need the JDK installed, and the $JAVA_HOME/bin (Windows:
%JAVA_HOME%\bin) folder included on your command path.
-To test this, issue a "java -version" command from your shell (command prompt)
and verify that the Java version is 11 or later.
+To test this, issue a "java -version" command from your shell (command prompt)
and verify that the Java version is 21 or later.
See the xref:jvms.adoc[JVM developer doc] for more information on Gradle and
JVMs.
Clone the latest Apache Solr source code directly from the Git repository:
<https://solr.apache.org/community.html#version-control>.
diff --git a/gradle/globals.gradle b/gradle/globals.gradle
index 30eaa0857ab..4f782ae38c5 100644
--- a/gradle/globals.gradle
+++ b/gradle/globals.gradle
@@ -173,5 +173,6 @@ allprojects {
// Assign different java version for client-side modules 'api' and 'solrj*'
var isSolrJ = project.name.matches("^(solrj.*|api)\$")
minJavaVersion = isSolrJ ? rootProject.minJavaVersionSolrJ :
rootProject.minJavaVersionDefault
+ minJavaTestVersion = rootProject.minJavaVersionDefault
}
}
diff --git a/gradle/java/javac.gradle b/gradle/java/javac.gradle
index 53320cc01c0..ec33f977c64 100644
--- a/gradle/java/javac.gradle
+++ b/gradle/java/javac.gradle
@@ -19,14 +19,19 @@
allprojects {
plugins.withType(JavaPlugin) {
- sourceCompatibility = project.minJavaVersion
- targetCompatibility = project.minJavaVersion
-
- // Use 'release' flag instead of 'source' and 'target'
- tasks.withType(JavaCompile) {
- options.compilerArgs += ["--release", project.minJavaVersion.toString()]
- }
-
+ // Use 'release' flag instead of 'source' and 'target'
+ tasks.withType(JavaCompile) {
+ compileTestJava {
+ sourceCompatibility = project.minJavaTestVersion
+ targetCompatibility = project.minJavaTestVersion
+ options.compilerArgs += ["--release",
project.minJavaTestVersion.toString()]
+ }
+ compileJava {
+ sourceCompatibility = project.minJavaVersion
+ targetCompatibility = project.minJavaVersion
+ options.compilerArgs += ["--release",
project.minJavaVersion.toString()]
+ }
+ }
// Configure warnings.
tasks.withType(JavaCompile) {
options.encoding = "UTF-8"
@@ -51,22 +56,12 @@ allprojects {
"-Xdoclint:all/protected",
"-Xdoclint:-missing",
"-Xdoclint:-accessibility",
+ "-Xlint:synchronization",
+ "-Xlint:text-blocks",
"-proc:none", // proc:none was added because of LOG4J2-1925 /
JDK-8186647
+ "-Xlint:removal"
]
- // enable some warnings only relevant to newer language features
- if (rootProject.runtimeJavaVersion >= JavaVersion.VERSION_15) {
- options.compilerArgs += [
- "-Xlint:text-blocks",
- ]
- }
-
- if (rootProject.runtimeJavaVersion >= JavaVersion.VERSION_16) {
- options.compilerArgs += [
- "-Xlint:synchronization",
- ]
- }
-
if (propertyOrDefault("javac.failOnWarnings", true).toBoolean()) {
options.compilerArgs += "-Werror"
}
diff --git a/gradle/testing/defaults-tests.gradle
b/gradle/testing/defaults-tests.gradle
index 6c551df103a..9241720e8c3 100644
--- a/gradle/testing/defaults-tests.gradle
+++ b/gradle/testing/defaults-tests.gradle
@@ -111,12 +111,6 @@ allprojects {
ignoreFailures = resolvedTestOption("tests.haltonfailure").toBoolean()
== false
jvmArgs
Commandline.translateCommandline(resolvedTestOption("tests.jvmargs"))
-
- // Up to JDK-15 we have to enforce --illegal-access=deny, because we
want no code to access
- // JDK internals; JDK-16 and later will default to deny, see
https://openjdk.java.net/jeps/396:
- if (rootProject.runtimeJavaVersion < JavaVersion.VERSION_16) {
- jvmArgs '--illegal-access=deny'
- }
def loggingConfigFile =
layout.projectDirectory.file("${resources}/logging.properties")
def tempDir = layout.projectDirectory.dir(testsTmpDir.toString())
diff --git a/solr/CHANGES.txt b/solr/CHANGES.txt
index 1eff932d698..36923970e5e 100644
--- a/solr/CHANGES.txt
+++ b/solr/CHANGES.txt
@@ -108,6 +108,8 @@ Other Changes
* SOLR-17285: SolrJ RemoteSolrException moved to SolrClient.
(@samuelrivascoding)
+* SOLR-17321: Minimum Java version for Apache Solr is now 21, and for SolrJ,
it is 17. (Sanjay Dutt, David Smiley)
+
================== 9.8.0 ==================
New Features
---------------------
diff --git a/solr/benchmark/jmh.sh b/solr/benchmark/jmh.sh
index 30c72b7a2e7..18f9875da19 100755
--- a/solr/benchmark/jmh.sh
+++ b/solr/benchmark/jmh.sh
@@ -51,9 +51,7 @@ echo "running JMH with args: $@"
# -XX:+UnlockExperimentalVMOptions -XX:G1NewSizePercent=20 # and this note:
Prevents G1 undermining young gen, which otherwise causes a cascade of issues
# MRM: I've also
seen 15 claimed as a sweet spot.
-# -XX:-UseBiasedLocking - should be unreflective in recent JVMs and removed in
the latest.
-
-jvmArgs="-jvmArgs -Djmh.shutdownTimeout=5 -jvmArgs
-Djmh.shutdownTimeout.step=3 -jvmArgs -Djava.security.egd=file:/dev/./urandom
-jvmArgs -XX:-UseBiasedLocking -jvmArgs -XX:+UnlockDiagnosticVMOptions -jvmArgs
-XX:+DebugNonSafepoints -jvmArgs
--add-opens=java.base/java.lang.reflect=ALL-UNNAMED"
+jvmArgs="-jvmArgs -Djmh.shutdownTimeout=5 -jvmArgs
-Djmh.shutdownTimeout.step=3 -jvmArgs -Djava.security.egd=file:/dev/./urandom
-jvmArgs -XX:+UnlockDiagnosticVMOptions -jvmArgs -XX:+DebugNonSafepoints
-jvmArgs --add-opens=java.base/java.lang.reflect=ALL-UNNAMED"
gcArgs="-jvmArgs -XX:+UseG1GC -jvmArgs -XX:+ParallelRefProcEnabled"
# -jvmArgs -Dlog4j2.debug
diff --git a/solr/bin/solr b/solr/bin/solr
index c4dccba4ef4..61f61f8692b 100755
--- a/solr/bin/solr
+++ b/solr/bin/solr
@@ -51,7 +51,7 @@ verbose=false
THIS_OS=$(uname -s)
# What version of Java is required to run this version of Solr.
-JAVA_VER_REQ=11
+JAVA_VER_REQ=21
stop_all=false
@@ -1322,18 +1322,9 @@ function start_solr() {
exit 1
fi
- # Workaround for JIT crash, see
https://issues.apache.org/jira/browse/SOLR-16463
- if [[ "$JAVA_VER_NUM" -ge "17" ]] ; then
-
SCRIPT_SOLR_OPTS+=("-XX:CompileCommand=exclude,com.github.benmanes.caffeine.cache.BoundedLocalCache::put")
- echo "Java $JAVA_VER_NUM detected. Enabled workaround for SOLR-16463"
- fi
-
# Vector optimizations are only supported for Java 20 and 21 for now.
# This will need to change as Lucene is upgraded and newer Java versions are
released
- if [[ "$JAVA_VER_NUM" -ge "20" ]] && [[ "$JAVA_VER_NUM" -le "21" ]] ; then
- SCRIPT_SOLR_OPTS+=("--add-modules" "jdk.incubator.vector")
- echo "Java $JAVA_VER_NUM detected. Incubating Panama Vector APIs have been
enabled"
- fi
+ SCRIPT_SOLR_OPTS+=("--add-modules" "jdk.incubator.vector")
SOLR_START_OPTS=('-server' "${JAVA_MEM_OPTS[@]}" "${GC_TUNE_ARR[@]}"
"${GC_LOG_OPTS[@]}" "${IP_ACL_OPTS[@]}" \
"${REMOTE_JMX_OPTS[@]}" "${CLOUD_MODE_OPTS[@]}"
-Dsolr.log.dir="$SOLR_LOGS_DIR" \
diff --git a/solr/bin/solr.in.cmd b/solr/bin/solr.in.cmd
index 77b1117208a..9c2d9822eb2 100755
--- a/solr/bin/solr.in.cmd
+++ b/solr/bin/solr.in.cmd
@@ -49,15 +49,8 @@ REM set GC_TUNE=-XX:+ExplicitGCInvokesConcurrent
REM set GC_TUNE=-XX:SurvivorRatio=4
REM set GC_TUNE=%GC_TUNE% -XX:TargetSurvivorRatio=90
REM set GC_TUNE=%GC_TUNE% -XX:MaxTenuringThreshold=8
-REM set GC_TUNE=%GC_TUNE% -XX:+UseConcMarkSweepGC
-REM set GC_TUNE=%GC_TUNE% -XX:ConcGCThreads=4
REM set GC_TUNE=%GC_TUNE% -XX:ParallelGCThreads=4
-REM set GC_TUNE=%GC_TUNE% -XX:+CMSScavengeBeforeRemark
REM set GC_TUNE=%GC_TUNE% -XX:PretenureSizeThreshold=64m
-REM set GC_TUNE=%GC_TUNE% -XX:+UseCMSInitiatingOccupancyOnly
-REM set GC_TUNE=%GC_TUNE% -XX:CMSInitiatingOccupancyFraction=50
-REM set GC_TUNE=%GC_TUNE% -XX:CMSMaxAbortablePrecleanTime=6000
-REM set GC_TUNE=%GC_TUNE% -XX:+CMSParallelRemarkEnabled
REM set GC_TUNE=%GC_TUNE% -XX:+ParallelRefProcEnabled etc.
REM Set the ZooKeeper connection string if using an external ZooKeeper ensemble
diff --git a/solr/bin/solr.in.sh b/solr/bin/solr.in.sh
index 4202b98cd68..9d83a48c1c2 100644
--- a/solr/bin/solr.in.sh
+++ b/solr/bin/solr.in.sh
@@ -55,14 +55,8 @@
#-XX:SurvivorRatio=4 \
#-XX:TargetSurvivorRatio=90 \
#-XX:MaxTenuringThreshold=8 \
-#-XX:+UseConcMarkSweepGC \
-#-XX:ConcGCThreads=4 -XX:ParallelGCThreads=4 \
-#-XX:+CMSScavengeBeforeRemark \
+#-XX:ParallelGCThreads=4 \
#-XX:PretenureSizeThreshold=64m \
-#-XX:+UseCMSInitiatingOccupancyOnly \
-#-XX:CMSInitiatingOccupancyFraction=50 \
-#-XX:CMSMaxAbortablePrecleanTime=6000 \
-#-XX:+CMSParallelRemarkEnabled \
#-XX:+ParallelRefProcEnabled etc.
# Set the ZooKeeper connection string if using an external ZooKeeper ensemble
@@ -279,7 +273,7 @@
# other directory, which will implicitly enable heap dumping. Dump name
pattern will be solr-[timestamp]-pid[###].hprof
# When using this feature, it is recommended to have an external service
monitoring the given dir.
# If more fine grained control is required, you can manually add the
appropriate flags to SOLR_OPTS
-# See
https://docs.oracle.com/en/java/javase/11/troubleshoot/command-line-options1.html
+# See
https://docs.oracle.com/en/java/javase/21/troubleshoot/command-line-options1.html
# You can test this behavior by setting SOLR_HEAP=25m
#SOLR_HEAP_DUMP=true
#SOLR_HEAP_DUMP_DIR=/var/log/dumps
diff --git a/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
b/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
index a6bd40f8f49..3e4a720e5ce 100644
--- a/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
+++ b/solr/core/src/java/org/apache/solr/search/ValueSourceParser.java
@@ -187,7 +187,7 @@ public abstract class ValueSourceParser implements
NamedListInitializedPlugin {
new ValueSourceParser() {
@Override
public ValueSource parse(FunctionQParser fp) throws SyntaxError {
- return new LongConstValueSource(Thread.currentThread().getId());
+ return new LongConstValueSource(Thread.currentThread().threadId());
}
});
addParser(
diff --git a/solr/core/src/test/org/apache/solr/cli/AssertToolTest.java
b/solr/core/src/test/org/apache/solr/cli/AssertToolTest.java
index d0757f5acc4..f1aeb55d1c6 100644
--- a/solr/core/src/test/org/apache/solr/cli/AssertToolTest.java
+++ b/solr/core/src/test/org/apache/solr/cli/AssertToolTest.java
@@ -26,6 +26,7 @@ import org.apache.commons.cli.CommandLine;
import org.apache.solr.client.solrj.impl.CloudSolrClient;
import org.apache.solr.cloud.SolrCloudTestCase;
import org.apache.solr.common.cloud.ZkStateReader;
+import org.apache.solr.common.util.SuppressForbidden;
import org.junit.BeforeClass;
import org.junit.Test;
@@ -37,6 +38,8 @@ public class AssertToolTest extends SolrCloudTestCase {
}
@Test
+ @SuppressWarnings("removal")
+ @SuppressForbidden(reason = "Deprecated, for removal in future Java version")
public void raisesExitCode100OnError() throws Exception {
assumeTrue(
"This test only works with security manager, as it raises an error
accessing /tmp",
diff --git
a/solr/core/src/test/org/apache/solr/handler/component/TestPivotHelperCode.java
b/solr/core/src/test/org/apache/solr/handler/component/TestPivotHelperCode.java
index 0d39d2bd67e..326d276ef84 100644
---
a/solr/core/src/test/org/apache/solr/handler/component/TestPivotHelperCode.java
+++
b/solr/core/src/test/org/apache/solr/handler/component/TestPivotHelperCode.java
@@ -89,7 +89,7 @@ public class TestPivotHelperCode extends SolrTestCaseJ4 {
assertEquals(a.compareTo(b),
PivotFacetFieldValueCollection.compareWithNullLast(a, b));
assertEquals(b.compareTo(a),
PivotFacetFieldValueCollection.compareWithNullLast(b, a));
- Long bb = new Long(b.longValue());
+ Long bb = Long.valueOf(b.longValue());
assertEquals(0, PivotFacetFieldValueCollection.compareWithNullLast(b, bb));
assertEquals(0, PivotFacetFieldValueCollection.compareWithNullLast(null,
null));
diff --git
a/solr/core/src/test/org/apache/solr/legacy/TestLegacyNumericUtils.java
b/solr/core/src/test/org/apache/solr/legacy/TestLegacyNumericUtils.java
index 5a4ff489d12..7b7cfd74dc3 100644
--- a/solr/core/src/test/org/apache/solr/legacy/TestLegacyNumericUtils.java
+++ b/solr/core/src/test/org/apache/solr/legacy/TestLegacyNumericUtils.java
@@ -266,7 +266,7 @@ public class TestLegacyNumericUtils extends SolrTestCase {
new float[] {
Float.NEGATIVE_INFINITY,
-2.3E25f,
- -9.9999999E+14f,
+ -1.0E+15f,
-1.0f,
-1.0E-1f,
-1.0E-2f,
@@ -275,7 +275,7 @@ public class TestLegacyNumericUtils extends SolrTestCase {
1.0E-2f,
1.0E-1f,
1.0f,
- 9.9999999E+14f,
+ 1.0E+15f,
2.3E25f,
Float.POSITIVE_INFINITY,
Float.NaN
diff --git a/solr/docker/build.gradle b/solr/docker/build.gradle
index 34a51603bc9..cf360908bb2 100644
--- a/solr/docker/build.gradle
+++ b/solr/docker/build.gradle
@@ -22,7 +22,7 @@ import org.apache.commons.codec.digest.DigestUtils
description = 'Solr Docker image'
apply plugin: 'base'
-
+def javaVersion = scriptDepVersions['min-java-version']
// Solr Docker inputs
def dockerImageSolrDist = "${ -> propertyOrEnvOrDefault("solr.docker.dist",
"SOLR_DOCKER_DIST", 'full') }"
def isDistSlim = {String dist -> dist.toLowerCase(Locale.ROOT) == "slim"}
@@ -33,7 +33,7 @@ def dockerImageTagSuffix = "${ ->
propertyOrEnvOrDefault("solr.docker.imageTagSu
def dockerImageRepo = "${ -> propertyOrEnvOrDefault("solr.docker.imageRepo",
"SOLR_DOCKER_IMAGE_REPO", "apache/solr") }"
def dockerImageTag = "${ -> propertyOrEnvOrDefault("solr.docker.imageTag",
"SOLR_DOCKER_IMAGE_TAG", project.version + dockerImageDistSuffix) }"
def dockerImageName = "${ -> propertyOrEnvOrDefault("solr.docker.imageName",
"SOLR_DOCKER_IMAGE_NAME",
"${dockerImageRepo}:${dockerImageTag}${dockerImageTagSuffix}") }"
-def baseDockerImage = "${ -> propertyOrEnvOrDefault("solr.docker.baseImage",
"SOLR_DOCKER_BASE_IMAGE", 'eclipse-temurin:17-jre-jammy') }"
+def baseDockerImage = "${ -> propertyOrEnvOrDefault("solr.docker.baseImage",
"SOLR_DOCKER_BASE_IMAGE", 'eclipse-temurin:' + javaVersion + '-jre-jammy') }"
def officialDockerImageName = {String dist -> "${ ->
propertyOrEnvOrDefault("solr.docker.imageName", "SOLR_DOCKER_IMAGE_NAME",
"${dockerImageRepo}-official:${dockerImageTag}${distToSuffix(dist)}${dockerImageTagSuffix}")
}" }
def releaseGpgFingerprint = "${ ->
propertyOrDefault('signing.gnupg.keyName',propertyOrDefault('signing.keyId',''))
}"
diff --git
a/solr/modules/scripting/src/java/org/apache/solr/scripting/update/ScriptUpdateProcessorFactory.java
b/solr/modules/scripting/src/java/org/apache/solr/scripting/update/ScriptUpdateProcessorFactory.java
index 6494e48a2ab..3385532ba65 100644
---
a/solr/modules/scripting/src/java/org/apache/solr/scripting/update/ScriptUpdateProcessorFactory.java
+++
b/solr/modules/scripting/src/java/org/apache/solr/scripting/update/ScriptUpdateProcessorFactory.java
@@ -43,6 +43,7 @@ import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrException.ErrorCode;
import org.apache.solr.common.params.ModifiableSolrParams;
import org.apache.solr.common.util.NamedList;
+import org.apache.solr.common.util.SuppressForbidden;
import org.apache.solr.core.SolrCore;
import org.apache.solr.core.SolrResourceLoader;
import org.apache.solr.request.LocalSolrQueryRequest;
@@ -309,15 +310,12 @@ public class ScriptUpdateProcessorFactory extends
UpdateRequestProcessorFactory
try (Reader scriptSrc = scriptFile.openReader(resourceLoader)) {
try {
try {
- AccessController.doPrivileged(
- new PrivilegedExceptionAction<Void>() {
- @Override
- public Void run() throws ScriptException {
- engine.eval(scriptSrc);
- return null;
- }
- },
- SCRIPT_SANDBOX);
+ doPrivilegedExceptionAction(
+ (PrivilegedExceptionAction<Void>)
+ () -> {
+ engine.eval(scriptSrc);
+ return null;
+ });
} catch (PrivilegedActionException e) {
throw (ScriptException) e.getException();
}
@@ -337,6 +335,13 @@ public class ScriptUpdateProcessorFactory extends
UpdateRequestProcessorFactory
return scriptEngines;
}
+ @SuppressWarnings("removal")
+ @SuppressForbidden(reason = "Deprecated for removal in future Java version")
+ private static <T> void
doPrivilegedExceptionAction(PrivilegedExceptionAction<T> action)
+ throws PrivilegedActionException {
+ AccessController.doPrivileged(action, SCRIPT_SANDBOX);
+ }
+
/**
* For error messages - returns null if there are any exceptions of any kind
building the string
* (or of the list is empty for some unknown reason).
@@ -428,15 +433,11 @@ public class ScriptUpdateProcessorFactory extends
UpdateRequestProcessorFactory
* Result value is computed from the return value of the script function
if: it exists, is
* non-null, and can be cast to a java Boolean.
*/
+ @SuppressWarnings("removal")
+ @SuppressForbidden(reason = "Deprecated for removal in future Java
version")
private boolean invokeFunction(String name, Object... cmd) {
return AccessController.doPrivileged(
- new PrivilegedAction<Boolean>() {
- @Override
- public Boolean run() {
- return invokeFunctionUnsafe(name, cmd);
- }
- },
- SCRIPT_SANDBOX);
+ (PrivilegedAction<Boolean>) () -> invokeFunctionUnsafe(name, cmd),
SCRIPT_SANDBOX);
}
private boolean invokeFunctionUnsafe(String name, Object... cmd) {
@@ -513,6 +514,13 @@ public class ScriptUpdateProcessorFactory extends
UpdateRequestProcessorFactory
}
// sandbox for script code: zero permissions
- private static final AccessControlContext SCRIPT_SANDBOX =
- new AccessControlContext(new ProtectionDomain[] {new
ProtectionDomain(null, null)});
+ @SuppressWarnings("removal")
+ @SuppressForbidden(reason = "Deprecated for removal in future Java version")
+ private static final AccessControlContext SCRIPT_SANDBOX =
getAccessControlContext();
+
+ @SuppressWarnings("removal")
+ @SuppressForbidden(reason = "Deprecated for removal in future Java version")
+ private static AccessControlContext getAccessControlContext() {
+ return new AccessControlContext(new ProtectionDomain[] {new
ProtectionDomain(null, null)});
+ }
}
diff --git
a/solr/modules/scripting/src/test/org/apache/solr/scripting/update/ScriptUpdateProcessorFactoryTest.java
b/solr/modules/scripting/src/test/org/apache/solr/scripting/update/ScriptUpdateProcessorFactoryTest.java
index 9c8110bffaf..3e8bfa9a055 100644
---
a/solr/modules/scripting/src/test/org/apache/solr/scripting/update/ScriptUpdateProcessorFactoryTest.java
+++
b/solr/modules/scripting/src/test/org/apache/solr/scripting/update/ScriptUpdateProcessorFactoryTest.java
@@ -23,6 +23,7 @@ import javax.script.ScriptEngineManager;
import org.apache.solr.common.SolrException;
import org.apache.solr.common.SolrInputDocument;
import org.apache.solr.common.params.ModifiableSolrParams;
+import org.apache.solr.common.util.SuppressForbidden;
import org.apache.solr.core.SolrCore;
import org.apache.solr.update.processor.UpdateProcessorTestBase;
import org.apache.solr.update.processor.UpdateRequestProcessorChain;
@@ -233,6 +234,8 @@ public class ScriptUpdateProcessorFactoryTest extends
UpdateProcessorTestBase {
assertEquals("bar", d.getFieldValue("term_s"));
}
+ @SuppressWarnings("removal")
+ @SuppressForbidden(reason = "Deprecated for removal in future Java version")
public void testScriptSandbox() throws Exception {
assumeTrue("This test only works with security manager",
System.getSecurityManager() != null);
expectThrows(
diff --git
a/solr/solr-ref-guide/modules/deployment-guide/pages/system-requirements.adoc
b/solr/solr-ref-guide/modules/deployment-guide/pages/system-requirements.adoc
index a38a7124147..7bc04774a70 100644
---
a/solr/solr-ref-guide/modules/deployment-guide/pages/system-requirements.adoc
+++
b/solr/solr-ref-guide/modules/deployment-guide/pages/system-requirements.adoc
@@ -27,7 +27,7 @@ Solr is tested on several versions of Linux, macOS and
Windows.
//TODO: this with the next big section on Java fragments the Java requirements
too much. Consider merging sections.
=== Java Requirements
-You will need the Java Runtime Environment (JRE) version 11 or higher.
+You will need the Java Runtime Environment (JRE) version 21 or higher.
At a command line, check your Java version like this:
[source,bash]
@@ -59,8 +59,7 @@ NOTE: While we reference the Java Development Kit (JDK) on
this page, any Java R
== Java and Solr Combinations
-The minimum Java version for Solr 9.x is Java 11. This applies both to the
Solr server and the SolrJ client libraries.
-The recommended Java version is JRE 17.
+The minimum Java version for Solr 10.x is Java 21 for the Solr server, while
the SolrJ client libraries continue to use JDK 17.
This section provides guidance when running Solr with a more recent Java
version than the minimum specified.
diff --git
a/solr/solr-ref-guide/modules/getting-started/pages/tutorial-aws.adoc
b/solr/solr-ref-guide/modules/getting-started/pages/tutorial-aws.adoc
index 3afdadd3781..2bec545b3c8 100644
--- a/solr/solr-ref-guide/modules/getting-started/pages/tutorial-aws.adoc
+++ b/solr/solr-ref-guide/modules/getting-started/pages/tutorial-aws.adoc
@@ -29,7 +29,7 @@ In this guide we are going to:
* Create new _Security Group_
* Configure instances and launch
. Install, configure and start Solr on newly launched EC2 instances
-* Install system prerequisites: Java 11 or later
+* Install system prerequisites: Java 21 or later
* Download latest version of Solr
* Start the Solr nodes in SolrCloud mode
. Create a collection, index documents, and query the system
@@ -129,20 +129,20 @@ $ ssh-add aws-key.pem
$ ssh -A ec2-user@<instance-public-dns>
----
+
-. While logged in to each of the AWS EC2 instances, configure Java 11 and
download Solr:
+. While logged in to each of the AWS EC2 instances, configure Java 21 and
download Solr:
+
[,console]
----
# check if the AWS instance already has java installed
$ java -version
-# install JDK 11
-$ sudo yum install java-11
+# install JDK 21
+$ sudo yum install java-21
-# configure JDK 11 as the default
+# configure JDK 21 as the default
$ sudo /usr/sbin/alternatives --config java
-# verify that the default java version is now 11
+# verify that the default java version is now 21
$ java -version
----
+
diff --git
a/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-10.adoc
b/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-10.adoc
index 0f86500fac7..516141d317c 100644
---
a/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-10.adoc
+++
b/solr/solr-ref-guide/modules/upgrade-notes/pages/major-changes-in-solr-10.adoc
@@ -26,6 +26,10 @@ Before starting an upgrade to this version of Solr, please
take the time to revi
// TODO add similar text that previous releases have at this spot.
+== System Requirements
+
+Minimum Java version for Solr 10.x is Java 21.
+
=== Solr CLI and Scripts
The Solr CLI has gone through some significant renovations to reduce technical
debt, and now functions more consistently and predictably. Most notably, CLI
commands now use unix-style options, e.g. `--help` instead of `-help`.
@@ -38,6 +42,8 @@ Users are urged to review all use of the `bin/solr` command,
such as in scripts
* `SolrClient` implementations that rely on "base URL" strings now only accept
"root" URL paths (i.e. URLs that end in "/solr").
Users who previously relied on collection-specific URLs to avoid including the
collection name with each request can instead achieve this by specifying a
"default collection" using the `withDefaultCollection` method available on most
`SolrClient` Builders.
+* Minimum Java version for Solrj 10.x is Java 17.
+
=== Service installer
The service installer now installs a `systemd` startup script instead of an
`init.d` startup script. It is up to the user to uninstall any existing
`init.d` script when upgrading.
diff --git
a/solr/solrj-streaming/src/test/org/apache/solr/client/solrj/io/stream/eval/AddEvaluatorTest.java
b/solr/solrj-streaming/src/test/org/apache/solr/client/solrj/io/stream/eval/AddEvaluatorTest.java
index a802e266900..1e51f1c9550 100644
---
a/solr/solrj-streaming/src/test/org/apache/solr/client/solrj/io/stream/eval/AddEvaluatorTest.java
+++
b/solr/solrj-streaming/src/test/org/apache/solr/client/solrj/io/stream/eval/AddEvaluatorTest.java
@@ -200,7 +200,7 @@ public class AddEvaluatorTest extends SolrTestCase {
values.put("d", 123456789123456789L);
result = evaluator.evaluate(new Tuple(values));
assertTrue(result instanceof Double);
- assertEquals(4 * 123456789123456784D, (Double) result, 0);
+ assertEquals(4 * 1.2345678912345678E+17, (Double) result, 0);
}
@Test
@@ -251,7 +251,7 @@ public class AddEvaluatorTest extends SolrTestCase {
values.put("d", 123456789123456789L);
result = evaluator.evaluate(new Tuple(values));
assertTrue(result instanceof Double);
- assertEquals(6 * 123456789123456784D, (Double) result, 0);
+ assertEquals(6 * 1.2345678912345678E+17, (Double) result, 0);
values.clear();
values.put("a", 4.12345678);
@@ -311,7 +311,7 @@ public class AddEvaluatorTest extends SolrTestCase {
values.put("d", 123456789123456789L);
result = evaluator.evaluate(new Tuple(values));
assertTrue(result instanceof Double);
- assertEquals(4 * 123456789123456784D, (Double) result, 0);
+ assertEquals(4 * 1.2345678912345678E+17, (Double) result, 0);
values.clear();
values.put("a", -4.12345678);
diff --git
a/solr/solrj/src/java/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java
b/solr/solrj/src/java/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java
index d0f65eeb354..0fac1f7ab03 100644
---
a/solr/solrj/src/java/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java
+++
b/solr/solrj/src/java/org/apache/solr/client/solrj/beans/DocumentObjectBinder.java
@@ -136,6 +136,7 @@ public class DocumentObjectBinder {
return fields;
}
+ @SuppressWarnings("removal")
@SuppressForbidden(reason = "Needs access to possibly private @Field
annotated fields/methods")
private List<DocField> collectInfo(Class<?> clazz) {
List<DocField> fields = new ArrayList<>();
diff --git
a/solr/solrj/src/java/org/apache/solr/common/util/SolrNamedThreadFactory.java
b/solr/solrj/src/java/org/apache/solr/common/util/SolrNamedThreadFactory.java
index 748f5e41501..32950971cc7 100644
---
a/solr/solrj/src/java/org/apache/solr/common/util/SolrNamedThreadFactory.java
+++
b/solr/solrj/src/java/org/apache/solr/common/util/SolrNamedThreadFactory.java
@@ -27,11 +27,17 @@ public class SolrNamedThreadFactory implements
ThreadFactory {
private final String prefix;
public SolrNamedThreadFactory(String namePrefix) {
- SecurityManager s = System.getSecurityManager();
- group = (s != null) ? s.getThreadGroup() :
Thread.currentThread().getThreadGroup();
+ group = getThreadGroup();
prefix = namePrefix + "-" + poolNumber.getAndIncrement() + "-thread-";
}
+ @SuppressWarnings("removal")
+ @SuppressForbidden(reason = "Deprecated, for removal in future Java version")
+ private ThreadGroup getThreadGroup() {
+ SecurityManager s = System.getSecurityManager();
+ return (s != null) ? s.getThreadGroup() :
Thread.currentThread().getThreadGroup();
+ }
+
@Override
public Thread newThread(Runnable r) {
Thread t = new Thread(group, r, prefix + threadNumber.getAndIncrement(),
0);