Make C* compile and run on Java 11 and Java 8 patch by Robert Stupp; reviewed by Jason Brown for CASSANDRA-9608
Project: http://git-wip-us.apache.org/repos/asf/cassandra/repo Commit: http://git-wip-us.apache.org/repos/asf/cassandra/commit/6ba2fb93 Tree: http://git-wip-us.apache.org/repos/asf/cassandra/tree/6ba2fb93 Diff: http://git-wip-us.apache.org/repos/asf/cassandra/diff/6ba2fb93 Branch: refs/heads/trunk Commit: 6ba2fb9395226491872b41312d978a169f36fcdb Parents: 176d4ba Author: Robert Stupp <sn...@snazy.de> Authored: Tue Sep 12 20:04:30 2017 +0200 Committer: Robert Stupp <sn...@snazy.de> Committed: Thu Jul 26 18:20:00 2018 +0200 ---------------------------------------------------------------------- .circleci/config.yml | 4 +- .gitignore | 2 + CHANGES.txt | 1 + NEWS.txt | 5 + bin/cassandra | 24 +- bin/cassandra.bat | 2 +- bin/cassandra.in.sh | 100 +++++++- bin/debug-cql | 12 - bin/fqltool | 12 - bin/nodetool | 14 +- bin/sstableloader | 12 - bin/sstablescrub | 12 - bin/sstableupgrade | 12 - bin/sstableutil | 12 - bin/sstableverify | 12 - build.xml | 230 ++++++++++++----- conf/cassandra-env.ps1 | 11 +- conf/cassandra-env.sh | 76 ++---- conf/jvm-clients.options | 10 + conf/jvm-server.options | 191 ++++++++++++++ conf/jvm.options | 254 ------------------- conf/jvm11-clients.options | 21 ++ conf/jvm11-server.options | 89 +++++++ conf/jvm8-clients.options | 9 + conf/jvm8-server.options | 76 ++++++ debian/cassandra.in.sh | 84 +++++- debian/cassandra.install | 2 +- ide/idea-iml-file.xml | 5 +- ide/idea/misc.xml | 2 +- ide/idea/workspace.xml | 6 +- lib/asm-5.0.4.jar | Bin 53297 -> 0 bytes lib/asm-6.2.jar | Bin 0 -> 111214 bytes lib/chronicle-bytes-1.10.1.jar | Bin 273664 -> 0 bytes lib/chronicle-bytes-1.16.3.jar | Bin 0 -> 289991 bytes lib/chronicle-core-1.16.3-SNAPSHOT.jar | Bin 0 -> 218156 bytes lib/chronicle-core-1.9.21.jar | Bin 199833 -> 0 bytes lib/chronicle-queue-4.16.3.jar | Bin 0 -> 237198 bytes lib/chronicle-queue-4.6.55.jar | Bin 215247 -> 0 bytes lib/chronicle-threads-1.16.0.jar | Bin 0 -> 50299 bytes lib/chronicle-threads-1.9.1.jar | Bin 40530 -> 0 bytes lib/chronicle-wire-1.10.1.jar | Bin 419054 -> 0 bytes lib/chronicle-wire-1.16.1.jar | Bin 0 -> 437898 bytes lib/ecj-4.4.2.jar | Bin 2310271 -> 0 bytes lib/ecj-4.6.1.jar | Bin 0 -> 2440899 bytes lib/jamm-0.3.0.jar | Bin 21033 -> 0 bytes lib/jamm-0.3.2.jar | Bin 0 -> 22572 bytes lib/licenses/asm-5.0.4.txt | 29 --- lib/licenses/asm-6.2.txt | 29 +++ lib/licenses/chronicle-bytes-1.10.1.txt | 14 - lib/licenses/chronicle-bytes-1.16.3.txt | 14 + lib/licenses/chronicle-core-1.16.3-SNAPSHOT.txt | 14 + lib/licenses/chronicle-core-1.9.21.txt | 14 - lib/licenses/chronicle-queue-4.16.3.txt | 14 + lib/licenses/chronicle-queue-4.6.55.txt | 14 - lib/licenses/chronicle-threads-1.16.0.txt | 14 + lib/licenses/chronicle-threads-1.9.1.txt | 14 - lib/licenses/chronicle-wire-1.10.1.txt | 14 - lib/licenses/chronicle-wire-1.16.1.txt | 14 + lib/licenses/ecj-4.4.2.txt | 210 --------------- lib/licenses/ecj-4.6.1.txt | 210 +++++++++++++++ lib/licenses/jamm-0.3.0.txt | 202 --------------- lib/licenses/jamm-0.3.2.txt | 202 +++++++++++++++ lib/licenses/ohc-0.4.4.txt | 201 --------------- lib/licenses/ohc-0.5.1.txt | 201 +++++++++++++++ lib/ohc-core-0.4.4.jar | Bin 135369 -> 0 bytes lib/ohc-core-0.5.1.jar | Bin 0 -> 122716 bytes lib/ohc-core-j8-0.4.4.jar | Bin 4995 -> 0 bytes lib/ohc-core-j8-0.5.1.jar | Bin 0 -> 4306 bytes redhat/cassandra.in.sh | 84 +++++- .../cassandra/cache/SerializingCache.java | 2 + .../cassandra/config/DatabaseDescriptor.java | 6 + .../cql3/functions/JavaBasedUDFunction.java | 11 +- .../cql3/functions/ScriptBasedUDFunction.java | 8 + src/java/org/apache/cassandra/db/Memtable.java | 4 - .../apache/cassandra/db/RangeTombstoneList.java | 1 + .../org/apache/cassandra/db/ReadCommand.java | 1 + .../db/SinglePartitionReadCommand.java | 2 + .../cassandra/db/VirtualTableReadQuery.java | 1 + .../db/commitlog/MemoryMappedSegment.java | 3 +- .../cassandra/db/compaction/Scrubber.java | 1 + .../apache/cassandra/db/filter/RowFilter.java | 2 + .../db/partitions/AtomicBTreePartition.java | 9 +- .../db/partitions/PartitionUpdate.java | 3 + .../cassandra/db/partitions/PurgeFunction.java | 1 + .../UnfilteredPartitionIterators.java | 3 + src/java/org/apache/cassandra/db/rows/Row.java | 2 + src/java/org/apache/cassandra/db/rows/Rows.java | 1 + .../cassandra/db/transform/BasePartitions.java | 1 + .../apache/cassandra/db/transform/Filter.java | 1 + .../db/transform/FilteredPartitions.java | 2 + .../cassandra/db/view/ViewBuilderTask.java | 1 + .../db/virtual/AbstractVirtualTable.java | 1 + src/java/org/apache/cassandra/index/Index.java | 1 + .../index/internal/CassandraIndex.java | 1 + .../internal/composites/CompositesSearcher.java | 1 + .../index/sasi/utils/MappedBuffer.java | 3 - .../io/sstable/format/big/BigTableReader.java | 1 + .../org/apache/cassandra/io/util/FileUtils.java | 90 +++++-- .../org/apache/cassandra/io/util/Memory.java | 5 +- .../cassandra/io/util/MmappedRegions.java | 8 - .../security/ThreadAwareSecurityManager.java | 19 +- .../cassandra/service/reads/DataResolver.java | 1 + .../service/reads/ShortReadProtection.java | 1 + .../org/apache/cassandra/tools/NodeTool.java | 5 + .../apache/cassandra/tools/SSTableExport.java | 5 + .../cassandra/triggers/CustomClassLoader.java | 6 +- .../cassandra/utils/CoalescingStrategies.java | 2 +- .../org/apache/cassandra/utils/FBUtilities.java | 24 ++ .../apache/cassandra/utils/JMXServerUtils.java | 30 ++- .../apache/cassandra/utils/MergeIterator.java | 1 + .../apache/cassandra/utils/NativeLibrary.java | 10 +- .../org/apache/cassandra/utils/ObjectSizes.java | 2 +- .../org/apache/cassandra/utils/Throwables.java | 2 +- .../cassandra/utils/concurrent/Locks.java | 54 ---- .../cassandra/utils/memory/MemoryUtil.java | 3 +- .../cassandra/utils/memory/SlabAllocator.java | 4 +- .../db/partitions/AtomicBTreePartitionBase.java | 60 +++++ .../db/partitions/AtomicBTreePartitionBase.java | 81 ++++++ src/jdkoverride/java/util/zip/CRC32.class | Bin 549 -> 0 bytes .../cassandra/audit/FullQueryLoggerTest.java | 5 +- .../config/DatabaseDescriptorRefTest.java | 17 +- .../cql3/validation/entities/UFJavaTest.java | 2 +- .../validation/entities/UFSecurityTest.java | 15 +- .../apache/cassandra/db/DirectoriesTest.java | 2 +- .../org/apache/cassandra/db/MmapFileTest.java | 16 +- .../apache/cassandra/db/RowIndexEntryTest.java | 6 +- .../unit/org/apache/cassandra/db/ScrubTest.java | 2 +- .../cassandra/db/commitlog/CommitLogTest.java | 5 +- .../db/commitlog/SegmentReaderTest.java | 5 +- .../hints/ChecksummedDataInputTest.java | 7 +- .../index/sasi/disk/OnDiskIndexTest.java | 33 +-- .../index/sasi/disk/TokenTreeTest.java | 12 +- .../index/sasi/utils/MappedBufferTest.java | 4 +- .../CompressedRandomAccessReaderTest.java | 22 +- .../CompressedSequentialWriterTest.java | 12 +- .../cassandra/io/compress/CompressorTest.java | 3 +- .../cassandra/io/sstable/DescriptorTest.java | 3 +- .../cassandra/io/sstable/SSTableUtils.java | 3 +- .../metadata/MetadataSerializerTest.java | 3 +- .../io/util/BufferedRandomAccessFileTest.java | 12 +- .../util/ChecksummedRandomAccessReaderTest.java | 12 +- .../cassandra/io/util/MmappedRegionsTest.java | 6 +- .../io/util/NIODataInputStreamTest.java | 2 +- .../io/util/RandomAccessReaderTest.java | 8 +- .../util/RewindableDataInputStreamPlusTest.java | 2 +- .../net/async/MessageOutHandlerTest.java | 3 - .../org/apache/cassandra/schema/MockSchema.java | 13 +- .../cassandra/security/EncryptionUtilsTest.java | 5 +- .../compression/CompressedInputStreamTest.java | 3 +- .../cassandra/utils/binlog/BinLogTest.java | 3 +- .../utils/concurrent/RefCountedTest.java | 3 +- tools/bin/cassandra-stress | 12 - tools/bin/cassandra-stressd | 12 - tools/bin/cassandra.in.sh | 95 ++++++- tools/bin/compaction-stress | 12 - tools/bin/sstabledump | 12 - tools/bin/sstableexpiredblockers | 12 - tools/bin/sstablelevelreset | 12 - tools/bin/sstablemetadata | 12 - tools/bin/sstableofflinerelevel | 12 - tools/bin/sstablerepairedset | 12 - tools/bin/sstablesplit | 12 - .../stress/settings/SettingsGraph.java | 10 +- 163 files changed, 2176 insertions(+), 1595 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/.circleci/config.yml ---------------------------------------------------------------------- diff --git a/.circleci/config.yml b/.circleci/config.yml index 5a84f72..edf7dd5 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -65,9 +65,9 @@ env_vars: &env_vars #<<: *high_capacity_env_vars workflows: version: 2 - build_and_run_tests: *default_jobs + #build_and_run_tests: *default_jobs #build_and_run_tests: *with_dtest_jobs_only - #build_and_run_tests: *with_dtest_jobs + build_and_run_tests: *with_dtest_jobs docker_image: &docker_image kjellman/cassandra-test:0.4.3 version: 2 jobs: http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/.gitignore ---------------------------------------------------------------------- diff --git a/.gitignore b/.gitignore index 76c4bd1..71b3087 100644 --- a/.gitignore +++ b/.gitignore @@ -76,3 +76,5 @@ lib/jsr223/scala/*.jar # Generated files from the documentation doc/source/configuration/cassandra_config_file.rst doc/source/tools/nodetool + +audit http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 4ba3313..6b6418c 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -1,4 +1,5 @@ 4.0 + * Add experimental support for Java 11 (CASSANDRA-9608) * Make PeriodicCommitLogService.blockWhenSyncLagsNanos configurable (CASSANDRA-14580) * Improve logging in MessageInHandler's constructor (CASSANDRA-14576) * Set broadcast address in internode messaging handshake (CASSANDRA-14579) http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/NEWS.txt ---------------------------------------------------------------------- diff --git a/NEWS.txt b/NEWS.txt index da94422..75885e9 100644 --- a/NEWS.txt +++ b/NEWS.txt @@ -38,6 +38,11 @@ using the provided 'sstableupgrade' tool. New features ------------ + - *Experimental* support for Java 11 has been added. JVM options that differ between or are + specific for Java 8 and 11 have been moved from jvm.options into jvm8.options and jvm11.options. + IMPORTANT: Running C* on Java 11 is *experimental* and do it at your own risk. + Compilation recommendations: configure Java 11 SDK via JAVA_HOME and Java 8 SDK via JAVA8_HOME. + Release builds require Java 11 + Java 8. Development builds can use Java 8 without 11. - LCS now respects the max_threshold parameter when compacting - this was hard coded to 32 before, but now it is possible to do bigger compactions when compacting from L0 to L1. This also applies to STCS-compactions in L0 - if there are more than 32 sstables in L0 http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/bin/cassandra ---------------------------------------------------------------------- diff --git a/bin/cassandra b/bin/cassandra index 006c6ae..f5ac059 100755 --- a/bin/cassandra +++ b/bin/cassandra @@ -66,6 +66,9 @@ # POSIX sh and Solaris sh. This means, in particular, no $(( )) and no $( ). # If an include wasn't specified in the environment, then search for one... + +jvmoptions_variant="-server" + if [ "x$CASSANDRA_INCLUDE" = "x" ]; then # Locations (in order) to use when searching for an include file. for include in "`dirname "$0"`/cassandra.in.sh" \ @@ -83,27 +86,6 @@ elif [ -r "$CASSANDRA_INCLUDE" ]; then . "$CASSANDRA_INCLUDE" fi -# Use JAVA_HOME if set, otherwise look for java in PATH -if [ -n "$JAVA_HOME" ]; then - # Why we can't have nice things: Solaris combines x86 and x86_64 - # installations in the same tree, using an unconventional path for the - # 64bit JVM. Since we prefer 64bit, search the alternate path first, - # (see https://issues.apache.org/jira/browse/CASSANDRA-4638). - for java in "$JAVA_HOME"/bin/amd64/java "$JAVA_HOME"/bin/java; do - if [ -x "$java" ]; then - JAVA="$java" - break - fi - done -else - JAVA=java -fi - -if [ -z $JAVA ] ; then - echo Unable to find java executable. Check JAVA_HOME and PATH environment variables. >&2 - exit 1; -fi - # If numactl is available, use it. For Cassandra, the priority is to # avoid disk I/O. Even for the purpose of CPU efficiency, we don't # really have CPU<->data affinity anyway. Also, empirically test that numactl http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/bin/cassandra.bat ---------------------------------------------------------------------- diff --git a/bin/cassandra.bat b/bin/cassandra.bat index a653142..24889d8 100644 --- a/bin/cassandra.bat +++ b/bin/cassandra.bat @@ -54,7 +54,7 @@ if NOT DEFINED JAVA_HOME goto :err REM ----------------------------------------------------------------------------- REM JVM Opts we'll use in legacy run or installation set JAVA_OPTS=-ea^ - -javaagent:"%CASSANDRA_HOME%\lib\jamm-0.3.0.jar"^ + -javaagent:"%CASSANDRA_HOME%\lib\jamm-0.3.2"^ -Xms2G^ -Xmx2G^ -XX:+HeapDumpOnOutOfMemoryError^ http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/bin/cassandra.in.sh ---------------------------------------------------------------------- diff --git a/bin/cassandra.in.sh b/bin/cassandra.in.sh index 228cef7..1de9360 100644 --- a/bin/cassandra.in.sh +++ b/bin/cassandra.in.sh @@ -23,11 +23,18 @@ if [ "x$CASSANDRA_CONF" = "x" ]; then CASSANDRA_CONF="$CASSANDRA_HOME/conf" fi +# The java classpath (required) +CLASSPATH="$CASSANDRA_CONF" + # This can be the path to a jar file, or a directory containing the # compiled classes. NOTE: This isn't needed by the startup script, # it's just used here in constructing the classpath. -cassandra_bin="$CASSANDRA_HOME/build/classes/main" -#cassandra_bin="$CASSANDRA_HOME/build/cassandra.jar" +if [ -d $CASSANDRA_HOME/build ] ; then + #cassandra_bin="$CASSANDRA_HOME/build/classes/main" + cassandra_bin=`ls -1 $CASSANDRA_HOME/build/apache-cassandra*.jar` + + CLASSPATH="$CLASSPATH:$cassandra_bin" +fi # the default location for commitlogs, sstables, and saved caches # if not set in cassandra.yaml @@ -36,9 +43,6 @@ cassandra_storagedir="$CASSANDRA_HOME/data" # JAVA_HOME can optionally be set here #JAVA_HOME=/usr/local/jdk6 -# The java classpath (required) -CLASSPATH="$CASSANDRA_CONF:$cassandra_bin" - for jar in "$CASSANDRA_HOME"/lib/*.jar; do CLASSPATH="$CLASSPATH:$jar" done @@ -65,11 +69,87 @@ if [ -f "$CASSANDRA_HOME"/lib/jsr223/scala/scala-compiler.jar ] ; then fi # set JVM javaagent opts to avoid warnings/errors -if [ "$JVM_VENDOR" != "OpenJDK" -o "$JVM_VERSION" \> "1.6.0" ] \ - || [ "$JVM_VERSION" = "1.6.0" -a "$JVM_PATCH_VERSION" -ge 23 ] -then - JAVA_AGENT="$JAVA_AGENT -javaagent:$CASSANDRA_HOME/lib/jamm-0.3.0.jar" -fi +JAVA_AGENT="$JAVA_AGENT -javaagent:$CASSANDRA_HOME/lib/jamm-0.3.2.jar" # Added sigar-bin to the java.library.path CASSANDRA-7838 JAVA_OPTS="$JAVA_OPTS:-Djava.library.path=$CASSANDRA_HOME/lib/sigar-bin" + + +# +# Java executable and per-Java version JVM settings +# + +# Use JAVA_HOME if set, otherwise look for java in PATH +if [ -n "$JAVA_HOME" ]; then + # Why we can't have nice things: Solaris combines x86 and x86_64 + # installations in the same tree, using an unconventional path for the + # 64bit JVM. Since we prefer 64bit, search the alternate path first, + # (see https://issues.apache.org/jira/browse/CASSANDRA-4638). + for java in "$JAVA_HOME"/bin/amd64/java "$JAVA_HOME"/bin/java; do + if [ -x "$java" ]; then + JAVA="$java" + break + fi + done +else + JAVA=java +fi + +if [ -z $JAVA ] ; then + echo Unable to find java executable. Check JAVA_HOME and PATH environment variables. >&2 + exit 1; +fi + +# Determine the sort of JVM we'll be running on. +java_ver_output=`"${JAVA:-java}" -version 2>&1` +jvmver=`echo "$java_ver_output" | grep '[openjdk|java] version' | awk -F'"' 'NR==1 {print $2}' | cut -d\- -f1` +JVM_VERSION=${jvmver%_*} + +JAVA_VERSION=11 +if [ "$JVM_VERSION" = "1.8.0" ] ; then + JVM_PATCH_VERSION=${jvmver#*_} + if [ "$JVM_VERSION" \< "1.8" ] || [ "$JVM_VERSION" \> "1.8.2" ] ; then + echo "Cassandra 4.0 requires either Java 8 (update 151 or newer) or Java 11 (or newer). Java $JVM_VERSION is not supported." + exit 1; + fi + if [ "$JVM_PATCH_VERSION" -lt 151 ] ; then + echo "Cassandra 4.0 requires either Java 8 (update 151 or newer) or Java 11 (or newer). Java 8 update $JVM_PATCH_VERSION is not supported." + exit 1; + fi + JAVA_VERSION=8 +elif [ "$JVM_VERSION" \< "11" ] ; then + echo "Cassandra 4.0 requires either Java 8 (update 151 or newer) or Java 11 (or newer)." + exit 1; +fi + +jvm=`echo "$java_ver_output" | grep -A 1 '[openjdk|java] version' | awk 'NR==2 {print $1}'` +case "$jvm" in + OpenJDK) + JVM_VENDOR=OpenJDK + # this will be "64-Bit" or "32-Bit" + JVM_ARCH=`echo "$java_ver_output" | awk 'NR==3 {print $2}'` + ;; + "Java(TM)") + JVM_VENDOR=Oracle + # this will be "64-Bit" or "32-Bit" + JVM_ARCH=`echo "$java_ver_output" | awk 'NR==3 {print $3}'` + ;; + *) + # Help fill in other JVM values + JVM_VENDOR=other + JVM_ARCH=unknown + ;; +esac + +# Read user-defined JVM options from jvm-server.options file +JVM_OPTS_FILE=$CASSANDRA_CONF/jvm${jvmoptions_variant:--clients}.options +if [ $JAVA_VERSION -ge 11 ] ; then + JVM_DEP_OPTS_FILE=$CASSANDRA_CONF/jvm11${jvmoptions_variant:--clients}.options +else + JVM_DEP_OPTS_FILE=$CASSANDRA_CONF/jvm8${jvmoptions_variant:--clients}.options +fi + +for opt in `grep "^-" $JVM_OPTS_FILE` `grep "^-" $JVM_DEP_OPTS_FILE` +do + JVM_OPTS="$JVM_OPTS $opt" +done http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/bin/debug-cql ---------------------------------------------------------------------- diff --git a/bin/debug-cql b/bin/debug-cql index 00d4093..c184df9 100755 --- a/bin/debug-cql +++ b/bin/debug-cql @@ -32,18 +32,6 @@ elif [ -r "$CASSANDRA_INCLUDE" ]; then . "$CASSANDRA_INCLUDE" fi -# Use JAVA_HOME if set, otherwise look for java in PATH -if [ -n "$JAVA_HOME" ]; then - JAVA="$JAVA_HOME/bin/java" -else - JAVA=java -fi - -if [ -z "$CASSANDRA_CONF" -o -z "$CLASSPATH" ]; then - echo "You must set the CASSANDRA_CONF and CLASSPATH vars" >&2 - exit 1 -fi - if [ -f "$CASSANDRA_CONF/cassandra-env.sh" ]; then . "$CASSANDRA_CONF/cassandra-env.sh" fi http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/bin/fqltool ---------------------------------------------------------------------- diff --git a/bin/fqltool b/bin/fqltool index 8a05af1..15a0b20 100755 --- a/bin/fqltool +++ b/bin/fqltool @@ -32,18 +32,6 @@ elif [ -r "$CASSANDRA_INCLUDE" ]; then . "$CASSANDRA_INCLUDE" fi -# Use JAVA_HOME if set, otherwise look for java in PATH -if [ -x "$JAVA_HOME/bin/java" ]; then - JAVA="$JAVA_HOME/bin/java" -else - JAVA="`which java`" -fi - -if [ "x$JAVA" = "x" ]; then - echo "Java executable not found (hint: set JAVA_HOME)" >&2 - exit 1 -fi - if [ -z "$CASSANDRA_CONF" -o -z "$CLASSPATH" ]; then echo "You must set the CASSANDRA_CONF and CLASSPATH vars" >&2 exit 1 http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/bin/nodetool ---------------------------------------------------------------------- diff --git a/bin/nodetool b/bin/nodetool index 6456b19..3104582 100755 --- a/bin/nodetool +++ b/bin/nodetool @@ -38,18 +38,6 @@ elif [ -r "$CASSANDRA_INCLUDE" ]; then . "$CASSANDRA_INCLUDE" fi -# Use JAVA_HOME if set, otherwise look for java in PATH -if [ -x "$JAVA_HOME/bin/java" ]; then - JAVA="$JAVA_HOME/bin/java" -else - JAVA="`which java`" -fi - -if [ "x$JAVA" = "x" ]; then - echo "Java executable not found (hint: set JAVA_HOME)" >&2 - exit 1 -fi - if [ -z "$CASSANDRA_CONF" -o -z "$CLASSPATH" ]; then echo "You must set the CASSANDRA_CONF and CLASSPATH vars" >&2 exit 1 @@ -61,7 +49,7 @@ if [ -f "$CASSANDRA_CONF/cassandra-env.sh" ]; then MAX_HEAP_SIZE_SAVE=$MAX_HEAP_SIZE . "$CASSANDRA_CONF/cassandra-env.sh" MAX_HEAP_SIZE=$MAX_HEAP_SIZE_SAVE - JVM_OPTS=$JVM_OPTS_SAVE + JVM_OPTS="$JVM_OPTS_SAVE" fi # JMX Port passed via cmd line args (-p 9999 / --port 9999 / --port=9999) http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/bin/sstableloader ---------------------------------------------------------------------- diff --git a/bin/sstableloader b/bin/sstableloader index 03ab4f9..9045adf 100755 --- a/bin/sstableloader +++ b/bin/sstableloader @@ -32,18 +32,6 @@ elif [ -r "$CASSANDRA_INCLUDE" ]; then . "$CASSANDRA_INCLUDE" fi -# Use JAVA_HOME if set, otherwise look for java in PATH -if [ -x "$JAVA_HOME/bin/java" ]; then - JAVA="$JAVA_HOME/bin/java" -else - JAVA="`which java`" -fi - -if [ "x$JAVA" = "x" ]; then - echo "Java executable not found (hint: set JAVA_HOME)" >&2 - exit 1 -fi - if [ -z "$CLASSPATH" ]; then echo "You must set the CLASSPATH var" >&2 exit 1 http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/bin/sstablescrub ---------------------------------------------------------------------- diff --git a/bin/sstablescrub b/bin/sstablescrub index 366a2b7..9adda77 100755 --- a/bin/sstablescrub +++ b/bin/sstablescrub @@ -32,18 +32,6 @@ elif [ -r "$CASSANDRA_INCLUDE" ]; then . "$CASSANDRA_INCLUDE" fi -# Use JAVA_HOME if set, otherwise look for java in PATH -if [ -x "$JAVA_HOME/bin/java" ]; then - JAVA="$JAVA_HOME/bin/java" -else - JAVA="`which java`" -fi - -if [ "x$JAVA" = "x" ]; then - echo "Java executable not found (hint: set JAVA_HOME)" >&2 - exit 1 -fi - if [ -z "$CLASSPATH" ]; then echo "You must set the CLASSPATH var" >&2 exit 1 http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/bin/sstableupgrade ---------------------------------------------------------------------- diff --git a/bin/sstableupgrade b/bin/sstableupgrade index 7b307eb..c48faf0 100755 --- a/bin/sstableupgrade +++ b/bin/sstableupgrade @@ -32,18 +32,6 @@ elif [ -r "$CASSANDRA_INCLUDE" ]; then . "$CASSANDRA_INCLUDE" fi -# Use JAVA_HOME if set, otherwise look for java in PATH -if [ -x "$JAVA_HOME/bin/java" ]; then - JAVA="$JAVA_HOME/bin/java" -else - JAVA="`which java`" -fi - -if [ "x$JAVA" = "x" ]; then - echo "Java executable not found (hint: set JAVA_HOME)" >&2 - exit 1 -fi - if [ -z "$CLASSPATH" ]; then echo "You must set the CLASSPATH var" >&2 exit 1 http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/bin/sstableutil ---------------------------------------------------------------------- diff --git a/bin/sstableutil b/bin/sstableutil index 7457834..5d0bf1f 100755 --- a/bin/sstableutil +++ b/bin/sstableutil @@ -32,18 +32,6 @@ elif [ -r "$CASSANDRA_INCLUDE" ]; then . "$CASSANDRA_INCLUDE" fi -# Use JAVA_HOME if set, otherwise look for java in PATH -if [ -x "$JAVA_HOME/bin/java" ]; then - JAVA="$JAVA_HOME/bin/java" -else - JAVA="`which java`" -fi - -if [ "x$JAVA" = "x" ]; then - echo "Java executable not found (hint: set JAVA_HOME)" >&2 - exit 1 -fi - if [ -z "$CLASSPATH" ]; then echo "You must set the CLASSPATH var" >&2 exit 1 http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/bin/sstableverify ---------------------------------------------------------------------- diff --git a/bin/sstableverify b/bin/sstableverify index 6b296cf..ff812b9 100755 --- a/bin/sstableverify +++ b/bin/sstableverify @@ -32,18 +32,6 @@ elif [ -r "$CASSANDRA_INCLUDE" ]; then . "$CASSANDRA_INCLUDE" fi -# Use JAVA_HOME if set, otherwise look for java in PATH -if [ -x "$JAVA_HOME/bin/java" ]; then - JAVA="$JAVA_HOME/bin/java" -else - JAVA="`which java`" -fi - -if [ "x$JAVA" = "x" ]; then - echo "Java executable not found (hint: set JAVA_HOME)" >&2 - exit 1 -fi - if [ -z "$CLASSPATH" ]; then echo "You must set the CLASSPATH var" >&2 exit 1 http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/build.xml ---------------------------------------------------------------------- diff --git a/build.xml b/build.xml index c3710e6..903e1ec 100644 --- a/build.xml +++ b/build.xml @@ -35,7 +35,8 @@ <property name="build.src" value="${basedir}/src"/> <property name="build.src.java" value="${basedir}/src/java"/> <property name="build.src.antlr" value="${basedir}/src/antlr"/> - <property name="build.src.jdkoverride" value="${basedir}/src/jdkoverride" /> + <property name="build.src.java8" value="${basedir}/src/java8"/> + <property name="build.src.java11" value="${basedir}/src/java11"/> <property name="build.src.resources" value="${basedir}/src/resources"/> <property name="build.src.gen-java" value="${basedir}/src/gen-java"/> <property name="build.lib" value="${basedir}/lib"/> @@ -66,8 +67,14 @@ <property name="doc.dir" value="${basedir}/doc"/> - <property name="source.version" value="1.8"/> - <property name="target.version" value="1.8"/> + <!-- + We specify '8' instead of '1.8' in source.version to indicate that that this build requires Java 11 _and_ Java 8. + Builds that only run against Java 8, _have to_ specify '1.8' for source version. This makes it possible to let + CI scripts distinguish between "pure Java 8" releases and "hybrid" releases. + --> + <property name="source.version" value="8"/> + <property name="target.version" value="8"/> + <property name="release.version" value="10"/> <condition property="version" value="${base.version}"> <isset property="release"/> @@ -110,16 +117,18 @@ <property name="jacoco.finalexecfile" value="${jacoco.export.dir}/jacoco.exec" /> <property name="jacoco.version" value="0.7.5.201505241946"/> - <property name="byteman.version" value="3.0.3"/> + <property name="byteman.version" value="4.0.2"/> + <property name="jamm.version" value="0.3.2"/> + <property name="ecj.version" value="4.6.1"/> + <property name="ohc.version" value="0.5.1"/> + <property name="asm.version" value="6.2"/> - <property name="ecj.version" value="4.4.2"/> - - <!-- https://mvnrepository.com/artifact/net.openhft/chronicle-bom/1.15.6 --> - <property name="chronicle-queue.version" value="4.6.55" /> - <property name="chronicle-core.version" value="1.9.21" /> - <property name="chronicle-bytes.version" value="1.10.1" /> - <property name="chronicle-wire.version" value="1.10.1" /> - <property name="chronicle-threads.version" value="1.9.1" /> + <!-- https://mvnrepository.com/artifact/net.openhft/chronicle-bom/1.16.23 --> + <property name="chronicle-queue.version" value="4.16.3" /> + <property name="chronicle-core.version" value="1.16.3-SNAPSHOT" /> + <property name="chronicle-bytes.version" value="1.16.3" /> + <property name="chronicle-wire.version" value="1.16.1" /> + <property name="chronicle-threads.version" value="1.16.0" /> <condition property="maven-ant-tasks.jar.exists"> <available file="${build.dir}/maven-ant-tasks-${maven-ant-tasks.version}.jar" /> @@ -152,6 +161,24 @@ </script> <!-- + Build instructions for release builds / builds that support both Java 8 and 11: + - requires JDK 11 in JAVA_HOME + - requires JDK 8 in JAVA8_HOME + + Build instructions for development buils that only support Java 8: + - requires JDK 8 in JAVA_HOME + --> + <condition property="java.version.8"> + <equals arg1="${ant.java.version}" arg2="1.8"/> + </condition> + <condition property="java11-jvmargs" value="-Djdk.attach.allowAttachSelf=true --add-exports java.sql/java.sql=ALL-UNNAMED --add-exports java.base/jdk.internal.misc=ALL-UNNAMED --add-opens java.base/jdk.internal.module=ALL-UNNAMED --add-exports java.base/jdk.internal.ref=ALL-UNNAMED --add-exports java.base/sun.nio.ch=ALL-UNNAMED --add-exports java.management.rmi/com.sun.jmx.remote.internal.rmi=ALL-UNNAMED --add-exports java.rmi/sun.rmi.registry=ALL-UNNAMED --add-exports java.rmi/sun.rmi.server=ALL-UNNAMED --add-opens jdk.management/com.sun.management.internal=ALL-UNNAMED"> + <not> + <equals arg1="${ant.java.version}" arg2="1.8"/> + </not> + </condition> + <property name="java11-jvmargs" value=""/> + + <!-- Add all the dependencies. --> <path id="maven-ant-tasks.classpath" path="${build.dir}/maven-ant-tasks-${maven-ant-tasks.version}.jar" /> @@ -168,6 +195,19 @@ <exclude name="**/ant-*.jar"/> </fileset> </path> + <path id="cassandra.classpath.test"> + <file file="${build.dir}/${final.name}.jar"/> <!-- we need the jar for tests and benchmarks (multi-version jar) --> + <fileset dir="${build.lib}"> + <include name="**/*.jar" /> + <exclude name="**/*-sources.jar"/> + <exclude name="**/ant-*.jar"/> + </fileset> + <fileset dir="${build.dir.lib}"> + <include name="**/*.jar" /> + <exclude name="**/*-sources.jar"/> + <exclude name="**/ant-*.jar"/> + </fileset> + </path> <macrodef name="create-javadoc"> <attribute name="destdir"/> @@ -189,7 +229,7 @@ <target name="init"> <fail unless="is.source.artifact" message="Not a source artifact, stopping here." /> - <mkdir dir="${build.classes.main}"/> + <mkdir dir="${build.classes.main}/META-INF/versions/11"/> <mkdir dir="${test.lib}"/> <mkdir dir="${test.classes}"/> <mkdir dir="${stress.test.classes}"/> @@ -390,7 +430,7 @@ <dependency groupId="com.fasterxml.jackson.core" artifactId="jackson-annotations" version="2.9.5"/> <dependency groupId="com.googlecode.json-simple" artifactId="json-simple" version="1.1"/> <dependency groupId="com.boundary" artifactId="high-scale-lib" version="1.0.6"/> - <dependency groupId="com.github.jbellis" artifactId="jamm" version="0.3.0"/> + <dependency groupId="com.github.jbellis" artifactId="jamm" version="${jamm.version}"/> <dependency groupId="org.yaml" artifactId="snakeyaml" version="1.11"/> <dependency groupId="junit" artifactId="junit" version="4.12" /> @@ -398,15 +438,15 @@ <exclusion groupId="commons-lang" artifactId="commons-lang"/> </dependency> <dependency groupId="org.apache.hadoop" artifactId="hadoop-core" version="1.0.3"> - <exclusion groupId="org.mortbay.jetty" artifactId="servlet-api"/> - <exclusion groupId="commons-logging" artifactId="commons-logging"/> - <exclusion groupId="org.eclipse.jdt" artifactId="core"/> - <exclusion groupId="ant" artifactId="ant"/> - <exclusion groupId="junit" artifactId="junit"/> + <exclusion groupId="org.mortbay.jetty" artifactId="servlet-api"/> + <exclusion groupId="commons-logging" artifactId="commons-logging"/> + <exclusion groupId="org.eclipse.jdt" artifactId="core"/> + <exclusion groupId="ant" artifactId="ant"/> + <exclusion groupId="junit" artifactId="junit"/> <exclusion groupId="org.slf4j" artifactId="slf4j-api"/> </dependency> <dependency groupId="org.apache.hadoop" artifactId="hadoop-minicluster" version="1.0.3"> - <exclusion groupId="asm" artifactId="asm"/> <!-- this is the outdated version 3.1 --> + <exclusion groupId="asm" artifactId="asm"/> <!-- this is the outdated version 3.1 --> <exclusion groupId="org.slf4j" artifactId="slf4j-api"/> </dependency> <dependency groupId="net.java.dev.jna" artifactId="jna" version="4.2.2"/> @@ -419,7 +459,6 @@ <dependency groupId="org.jboss.byteman" artifactId="byteman-submit" version="${byteman.version}"/> <dependency groupId="org.jboss.byteman" artifactId="byteman-bmunit" version="${byteman.version}"/> - <dependency groupId="org.openjdk.jmh" artifactId="jmh-core" version="1.21"/> <dependency groupId="org.openjdk.jmh" artifactId="jmh-generator-annprocess" version="1.21"/> @@ -446,14 +485,14 @@ <exclusion groupId="org.slf4j" artifactId="slf4j-api"/> </dependency> --> - <dependency groupId="org.eclipse.jdt.core.compiler" artifactId="ecj" version="4.4.2" /> - <dependency groupId="org.caffinitas.ohc" artifactId="ohc-core" version="0.4.4"> + <dependency groupId="org.eclipse.jdt.core.compiler" artifactId="ecj" version="${ecj.version}" /> + <dependency groupId="org.caffinitas.ohc" artifactId="ohc-core" version="${ohc.version}"> <exclusion groupId="org.slf4j" artifactId="slf4j-api"/> </dependency> - <dependency groupId="org.caffinitas.ohc" artifactId="ohc-core-j8" version="0.4.4" /> + <dependency groupId="org.caffinitas.ohc" artifactId="ohc-core-j8" version="${ohc.version}" /> <dependency groupId="net.ju-n.compile-command-annotations" artifactId="compile-command-annotations" version="1.2.0" /> <dependency groupId="org.fusesource" artifactId="sigar" version="1.6.4"> - <exclusion groupId="log4j" artifactId="log4j"/> + <exclusion groupId="log4j" artifactId="log4j"/> </dependency> <dependency groupId="joda-time" artifactId="joda-time" version="2.4" /> <dependency groupId="com.carrotsearch" artifactId="hppc" version="0.5.4" /> @@ -462,7 +501,9 @@ <dependency groupId="com.googlecode.concurrent-trees" artifactId="concurrent-trees" version="2.4.0" /> <dependency groupId="com.github.ben-manes.caffeine" artifactId="caffeine" version="2.3.5" /> <dependency groupId="org.jctools" artifactId="jctools-core" version="1.2.1"/> - <dependency groupId="org.ow2.asm" artifactId="asm" version="5.0.4" /> + <dependency groupId="org.ow2.asm" artifactId="asm" version="${asm.version}" /> + <dependency groupId="org.ow2.asm" artifactId="asm-tree" version="${asm.version}" /> + <dependency groupId="org.ow2.asm" artifactId="asm-commons" version="${asm.version}" /> </dependencyManagement> <developer id="adelapena" name="Andres de la Peña"/> <developer id="alakshman" name="Avinash Lakshman"/> @@ -521,8 +562,8 @@ <dependency groupId="org.psjava" artifactId="psjava" version="0.1.19" /> <dependency groupId="org.apache.rat" artifactId="apache-rat"/> <dependency groupId="org.apache.hadoop" artifactId="hadoop-core"/> - <dependency groupId="org.apache.hadoop" artifactId="hadoop-minicluster"/> - <dependency groupId="com.google.code.findbugs" artifactId="jsr305"/> + <dependency groupId="org.apache.hadoop" artifactId="hadoop-minicluster"/> + <dependency groupId="com.google.code.findbugs" artifactId="jsr305"/> <dependency groupId="org.antlr" artifactId="antlr"/> <!-- UPDATE AND UNCOMMENT ON THE DRIVER RELEASE, BEFORE 4.0 RELEASE <dependency groupId="com.datastax.cassandra" artifactId="cassandra-driver-core" classifier="shaded"/> @@ -533,7 +574,7 @@ <dependency groupId="org.openjdk.jmh" artifactId="jmh-core"/> <dependency groupId="org.openjdk.jmh" artifactId="jmh-generator-annprocess"/> <dependency groupId="net.ju-n.compile-command-annotations" artifactId="compile-command-annotations"/> - <dependency groupId="org.apache.ant" artifactId="ant-junit" version="1.9.4" /> + <dependency groupId="org.apache.ant" artifactId="ant-junit" version="1.9.7" /> </artifact:pom> <!-- this build-deps-pom-sources "artifact" is the same as build-deps-pom but only with those artifacts that have "-source.jar" files --> @@ -552,7 +593,7 @@ <dependency groupId="org.openjdk.jmh" artifactId="jmh-core"/> <dependency groupId="org.openjdk.jmh" artifactId="jmh-generator-annprocess"/> <dependency groupId="net.ju-n.compile-command-annotations" artifactId="compile-command-annotations"/> - <dependency groupId="org.apache.ant" artifactId="ant-junit" version="1.9.4" /> + <dependency groupId="org.apache.ant" artifactId="ant-junit" version="1.9.7" /> </artifact:pom> <artifact:pom id="coverage-deps-pom" @@ -703,6 +744,14 @@ </patternset> <mapper type="flatten"/> </unzip> + + <!-- Need to delete some dependencies from build/lib/jars as non-matching versions may get in there + due to transitive dependencies --> + <delete> + <fileset dir="${build.dir.lib}/jars"> + <include name="asm-*" /> + </fileset> + </delete> </target> <target name="maven-ant-tasks-retrieve-test" depends="maven-ant-tasks-init"> @@ -737,16 +786,17 @@ </propertyfile> </target> - <target name="test-run" depends="build" + <target name="test-run" depends="jar" description="Run in test mode. Not for production use!"> <java classname="org.apache.cassandra.service.CassandraDaemon" fork="true"> <classpath> - <path refid="cassandra.classpath"/> + <path refid="cassandra.classpath.test"/> <pathelement location="${test.conf}"/> </classpath> <jvmarg value="-Dstorage-config=${test.conf}"/> - <jvmarg value="-javaagent:${basedir}/lib/jamm-0.3.0.jar" /> + <jvmarg value="-javaagent:${basedir}/lib/jamm-${jamm.version}.jar" /> <jvmarg value="-ea"/> + <jvmarg line="${java11-jvmargs}"/> </java> </target> @@ -757,25 +807,63 @@ depends="maven-ant-tasks-retrieve-build,build-project" description="Compile Cassandra classes"/> <target name="codecoverage" depends="jacoco-run,jacoco-report" description="Create code coverage report"/> - <target depends="init,gen-cql3-grammar,generate-cql-html,generate-jflex-java" - name="build-project"> - <echo message="${ant.project.name}: ${ant.file}"/> - <!-- Order matters! --> + <target name="_build_java8_only" if="java.version.8"> + <echo message="Compiling only for Java 8 ..."/> <javac fork="true" debug="true" debuglevel="${debuglevel}" encoding="utf-8" - destdir="${build.classes.main}" includeantruntime="false" source="${source.version}" target="${target.version}" + destdir="${build.classes.main}" includeantruntime="false" source="8" target="8" memorymaximumsize="512M"> <src path="${build.src.java}"/> + <src path="${build.src.java8}"/> <src path="${build.src.gen-java}"/> <compilerarg value="-XDignore.symbol.file"/> - <compilerarg value="-Xbootclasspath/p:${build.src.jdkoverride}"/> - <classpath refid="cassandra.classpath"/> + <classpath> + <path refid="cassandra.classpath"/> + </classpath> </javac> + </target> + <target name="_build_multi_java" unless="java.version.8"> + <!-- Note: we cannot use javac's 'release' option, as that does not allow accessing sun.misc.Unsafe nor + Nashorn's ClassFilter class as any javac modules option is invalid for relase 8. --> + <echo message="Compiling for Java 8 (using ${env.JAVA8_HOME}/bin/javac) ..."/> + <javac fork="true" + debug="true" debuglevel="${debuglevel}" encoding="utf-8" + destdir="${build.classes.main}" includeantruntime="false" source="8" target="8" + executable="${env.JAVA8_HOME}/bin/javac" + memorymaximumsize="512M"> + <src path="${build.src.java}"/> + <src path="${build.src.java8}"/> + <src path="${build.src.gen-java}"/> + <compilerarg value="-XDignore.symbol.file"/> + <classpath> + <path refid="cassandra.classpath"/> + </classpath> + </javac> + <echo message="Compiling for current java version ..."/> + <javac fork="true" + debug="true" debuglevel="${debuglevel}" encoding="utf-8" + destdir="${build.classes.main}/META-INF/versions/11" includeantruntime="false" + memorymaximumsize="512M"> + <src path="${build.src.java11}"/> + <compilerarg value="--release"/> + <compilerarg value="${release.version}"/> + <compilerarg value="-XDignore.symbol.file"/> + <classpath> + <path refid="cassandra.classpath"/> + </classpath> + </javac> + </target> + <target depends="init,gen-cql3-grammar,generate-cql-html,generate-jflex-java" + name="build-project"> + <echo message="${ant.project.name}: ${ant.file}"/> + <!-- Order matters! --> + <antcall target="_build_java8_only"/> + <antcall target="_build_multi_java"/> <antcall target="createVersionPropFile"/> <copy todir="${build.classes.main}"> <fileset dir="${build.src.resources}" /> </copy> - <copy todir="${basedir}/conf" file="${build.classes.main}/META-INF/hotspot_compiler"/> + <copy todir="${basedir}/conf" file="${build.classes.main}/META-INF/hotspot_compiler"/> </target> <!-- Stress build file --> @@ -790,10 +878,8 @@ <target name="stress-build-test" depends="stress-build" description="Compile stress tests"> <javac debug="true" debuglevel="${debuglevel}" destdir="${stress.test.classes}" - includeantruntime="false" - source="${source.version}" - target="${target.version}" - encoding="utf-8"> + source="${source.version}" target="${target.version}" + includeantruntime="false" encoding="utf-8"> <classpath> <path refid="cassandra.classpath"/> <pathelement location="${stress.build.classes}" /> @@ -804,7 +890,9 @@ <target name="stress-build" depends="build" description="build stress tool"> <mkdir dir="${stress.build.classes}" /> - <javac compiler="modern" debug="true" debuglevel="${debuglevel}" encoding="utf-8" destdir="${stress.build.classes}" includeantruntime="true" source="${source.version}" target="${target.version}"> + <javac compiler="modern" debug="true" debuglevel="${debuglevel}" + source="${source.version}" target="${target.version}" + encoding="utf-8" destdir="${stress.build.classes}" includeantruntime="true"> <src path="${stress.build.src}" /> <classpath> <path refid="cassandra.classes" /> @@ -838,8 +926,8 @@ <!-- The jar target makes cassandra.jar output. --> - <target name="jar" - depends="build, build-test, stress-build, write-poms" + <target name="_main-jar" + depends="build" description="Assemble Cassandra JAR files"> <mkdir dir="${build.classes.main}/META-INF" /> <copy file="LICENSE.txt" @@ -853,15 +941,17 @@ </fileset> <manifest> <!-- <section name="org/apache/cassandra/infrastructure"> --> + <attribute name="Multi-Release" value="true"/> <attribute name="Implementation-Title" value="Cassandra"/> <attribute name="Implementation-Version" value="${version}"/> <attribute name="Implementation-Vendor" value="Apache"/> - <attribute name="Premain-Class" - value="org.apache.cassandra.infrastructure.continuations.CAgent"/> <!-- </section> --> </manifest> </jar> - + </target> + <target name="jar" + depends="_main-jar, build-test, stress-build, write-poms" + description="Assemble Cassandra JAR files"> <!-- Stress jar --> <manifest file="${stress.manifest}"> <attribute name="Built-By" value="Pavel Yaskevich"/> @@ -884,6 +974,9 @@ <fileset dir="${build.src.java}" defaultexcludes="yes"> <include name="org/apache/**/*.java"/> </fileset> + <fileset dir="${build.src.java11}" defaultexcludes="yes"> + <include name="org/apache/**/*.java"/> + </fileset> <fileset dir="${build.src.gen-java}" defaultexcludes="yes"> <include name="org/apache/**/*.java"/> </fileset> @@ -905,6 +998,9 @@ <fileset dir="${build.src.java}" defaultexcludes="yes"> <include name="org/apache/**/*.java"/> </fileset> + <fileset dir="${build.src.java11}" defaultexcludes="yes"> + <include name="org/apache/**/*.java"/> + </fileset> <fileset dir="${build.src.gen-java}" defaultexcludes="yes"> <include name="org/apache/**/*.java"/> </fileset> @@ -913,6 +1009,7 @@ <!-- creates release tarballs --> <target name="artifacts" depends="jar,javadoc,gen-doc" + unless="java.version.8" description="Create Cassandra release artifacts"> <mkdir dir="${dist.dir}"/> <!-- fix the control linefeed so that builds on windows works on linux --> @@ -1058,7 +1155,7 @@ </rat:report> </target> - <target name="build-jmh" depends="build-test" description="Create JMH uber jar"> + <target name="build-jmh" depends="build-test, jar" description="Create JMH uber jar"> <jar jarfile="${build.test.dir}/deps.jar"> <zipgroupfileset dir="${build.dir.lib}/jars"> <include name="*jmh*.jar"/> @@ -1081,7 +1178,7 @@ <!-- use https://github.com/krummas/jstackjunit to get thread dumps when unit tests time out --> <taskdef name="junit" classname="org.krummas.junit.JStackJUnitTask" classpath="lib/jstackjunit-0.0.1.jar"/> - <target name="build-test" depends="build" description="Compile test classes"> + <target name="build-test" depends="_main-jar, stress-build, write-poms" description="Compile test classes"> <javac compiler="modern" debug="true" @@ -1139,7 +1236,7 @@ <jvmarg value="-Dstorage-config=${test.conf}"/> <jvmarg value="-Djava.awt.headless=true"/> <!-- Cassandra 3.0+ needs <jvmarg line="... ${additionalagent}" /> here! (not value=) --> - <jvmarg line="-javaagent:${basedir}/lib/jamm-0.3.0.jar ${additionalagent}" /> + <jvmarg line="-javaagent:${basedir}/lib/jamm-${jamm.version}.jar ${additionalagent}" /> <jvmarg value="-ea"/> <jvmarg value="-Dcassandra.debugrefcount=true"/> <jvmarg value="-Xss256k"/> @@ -1151,6 +1248,7 @@ <jvmarg value="-Djava.security.egd=file:/dev/urandom" /> <jvmarg value="-Dcassandra.testtag=@{testtag}"/> <jvmarg value="-Dcassandra.keepBriefBrief=${cassandra.keepBriefBrief}" /> + <jvmarg line="${java11-jvmargs}"/> <optjvmargs/> <!-- Uncomment to debug unittest, attach debugger to port 1416 --> <!-- @@ -1159,7 +1257,7 @@ <classpath> <pathelement path="${java.class.path}"/> <pathelement location="${stress.build.classes}"/> - <path refid="cassandra.classpath" /> + <path refid="cassandra.classpath.test" /> <pathelement location="${test.classes}"/> <pathelement location="${stress.test.classes}"/> <pathelement location="${test.conf}"/> @@ -1189,7 +1287,7 @@ </sequential> </macrodef> - <target name="testold" depends="build-test" description="Execute unit tests"> + <target name="testold" depends="build-test" description="Execute unit tests"> <testmacro inputdir="${test.unit.src}" timeout="${test.timeout}"> <jvmarg value="-Dlegacy-sstable-root=${test.data}/legacy-sstables"/> <jvmarg value="-Dinvalid-legacy-sstable-root=${test.data}/invalid-legacy-sstables"/> @@ -1294,7 +1392,7 @@ </testmacro> </target> - <target name="test-compression" depends="build-test,stress-build" description="Execute unit tests with sstable compression enabled"> + <target name="test-compression" depends="build-test, stress-build" description="Execute unit tests with sstable compression enabled"> <property name="compressed_yaml" value="${build.test.dir}/cassandra.compressed.yaml"/> <concat destfile="${compressed_yaml}"> <fileset file="${test.conf}/cassandra.yaml"/> @@ -1369,14 +1467,14 @@ <formatter type="brief" usefile="false"/> <jvmarg value="-Dstorage-config=${test.conf}"/> <jvmarg value="-Djava.awt.headless=true"/> - <jvmarg value="-javaagent:${basedir}/lib/jamm-0.3.0.jar" /> + <jvmarg value="-javaagent:${basedir}/lib/jamm-${jamm.version}.jar" /> <jvmarg value="-ea"/> <jvmarg value="-Xss256k"/> <jvmarg value="-Dcassandra.memtable_row_overhead_computation_step=100"/> <jvmarg value="-Dcassandra.test.use_prepared=${cassandra.test.use_prepared}"/> <jvmarg value="-Dcassandra.skip_sync=true" /> <classpath> - <path refid="cassandra.classpath" /> + <path refid="cassandra.classpath.test" /> <pathelement location="${test.classes}"/> <pathelement location="${test.conf}"/> <fileset dir="${test.lib}"> @@ -1411,14 +1509,14 @@ <formatter type="brief" usefile="false"/> <jvmarg value="-Dstorage-config=${test.conf}"/> <jvmarg value="-Djava.awt.headless=true"/> - <jvmarg value="-javaagent:${basedir}/lib/jamm-0.3.0.jar" /> + <jvmarg value="-javaagent:${basedir}/lib/jamm-${jamm.version}.jar" /> <jvmarg value="-ea"/> <jvmarg value="-Xss256k"/> <jvmarg value="-Dcassandra.test.use_prepared=${cassandra.test.use_prepared}"/> <jvmarg value="-Dcassandra.memtable_row_overhead_computation_step=100"/> <jvmarg value="-Dcassandra.skip_sync=true" /> <classpath> - <path refid="cassandra.classpath" /> + <path refid="cassandra.classpath.test" /> <pathelement location="${test.classes}"/> <pathelement location="${test.conf}"/> <fileset dir="${test.lib}"> @@ -1665,7 +1763,7 @@ <echo message="Mem size : ${mem.size}"/> </target> - <target name="test" depends="build-test,get-cores,get-mem,stress-build" description="Parallel Test Runner"> + <target name="test" depends="build-test,get-cores,get-mem" description="Parallel Test Runner"> <path id="all-test-classes-path"> <fileset dir="${test.unit.src}" includes="**/${test.name}.java" /> </path> @@ -1684,13 +1782,13 @@ <testparallel testdelegate="testlist"/> </target> - <!-- run microbenchmarks suite --> + <!-- run microbenchmarks suite --> <target name="microbench" depends="build-jmh"> <java classname="org.openjdk.jmh.Main" fork="true" failonerror="true"> <classpath> - <path refid="cassandra.classpath" /> + <path refid="cassandra.classpath.test" /> <pathelement location="${test.classes}"/> <pathelement location="${test.conf}"/> <fileset dir="${test.lib}"> @@ -1708,6 +1806,7 @@ <copy todir=".idea"> <fileset dir="ide/idea"/> </copy> + <replace file=".idea/workspace.xml" token="trunk" value="${eclipse.project.name}"/> <copy tofile="${eclipse.project.name}.iml" file="ide/idea-iml-file.xml"/> <echo file=".idea/.name">Apache Cassandra ${eclipse.project.name}</echo> <echo file=".idea/modules.xml"><![CDATA[<?xml version="1.0" encoding="UTF-8"?> @@ -1808,7 +1907,8 @@ </target> - <target name="eclipse-warnings" depends="build" description="Run eclipse compiler code analysis"> + <!-- ECJ 4.6.1 in standalone mode does not work with JPMS, so we skip this target for Java 11 --> + <target name="eclipse-warnings" depends="build" description="Run eclipse compiler code analysis" if="java.version.8"> <property name="ecj.log.dir" value="${build.dir}/ecj" /> <property name="ecj.warnings.file" value="${ecj.log.dir}/eclipse_compiler_checks.txt"/> <mkdir dir="${ecj.log.dir}" /> http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/conf/cassandra-env.ps1 ---------------------------------------------------------------------- diff --git a/conf/cassandra-env.ps1 b/conf/cassandra-env.ps1 index f17d265..8ba8a5a 100644 --- a/conf/cassandra-env.ps1 +++ b/conf/cassandra-env.ps1 @@ -380,11 +380,7 @@ Function SetCassandraEnvironment $env:JVM_OPTS = "$env:JVM_OPTS -XX:CompileCommandFile=""$env:CASSANDRA_CONF\hotspot_compiler""" # add the jamm javaagent - if (($env:JVM_VENDOR -ne "OpenJDK") -or ($env:JVM_VERSION.CompareTo("1.6.0") -eq 1) -or - (($env:JVM_VERSION -eq "1.6.0") -and ($env:JVM_PATCH_VERSION.CompareTo("22") -eq 1))) - { - $env:JVM_OPTS = "$env:JVM_OPTS -javaagent:""$env:CASSANDRA_HOME\lib\jamm-0.3.0.jar""" - } + $env:JVM_OPTS = "$env:JVM_OPTS -javaagent:""$env:CASSANDRA_HOME\lib\jamm-0.3.2.jar""" # set jvm HeapDumpPath with CASSANDRA_HEAPDUMP_DIR if ($env:CASSANDRA_HEAPDUMP_DIR) @@ -403,9 +399,10 @@ Function SetCassandraEnvironment # print an heap histogram on OutOfMemoryError # $env:JVM_OPTS="$env:JVM_OPTS -Dcassandra.printHeapHistogramOnOutOfMemoryError=true" - if ($env:JVM_VERSION.CompareTo("1.8.0") -eq -1 -or [convert]::ToInt32($env:JVM_PATCH_VERSION) -lt 40) + $env:JAVA_VERSION=11 + if ($env:JVM_VERSION.CompareTo("1.8.0") -eq -1 -or [convert]::ToInt32($env:JVM_PATCH_VERSION) -lt 151) { - echo "Cassandra 3.0 and later require Java 8u40 or later." + echo "Cassandra 4.0 requires either Java 8 (update 151 or newer) or Java 11 (or newer). Java $env:JVM_VERSION is not supported." exit } http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/conf/cassandra-env.sh ---------------------------------------------------------------------- diff --git a/conf/cassandra-env.sh b/conf/cassandra-env.sh index 3ccb1e1..dc30437 100644 --- a/conf/cassandra-env.sh +++ b/conf/cassandra-env.sh @@ -86,55 +86,27 @@ calculate_heap_sizes() fi } -# Determine the sort of JVM we'll be running on. -java_ver_output=`"${JAVA:-java}" -version 2>&1` -jvmver=`echo "$java_ver_output" | grep '[openjdk|java] version' | awk -F'"' 'NR==1 {print $2}' | cut -d\- -f1` -JVM_VERSION=${jvmver%_*} -JVM_PATCH_VERSION=${jvmver#*_} - -if [ "$JVM_VERSION" \< "1.8" ] ; then - echo "Cassandra 3.0 and later require Java 8u40 or later." - exit 1; -fi - -if [ "$JVM_VERSION" \< "1.8" ] && [ "$JVM_PATCH_VERSION" -lt 40 ] ; then - echo "Cassandra 3.0 and later require Java 8u40 or later." - exit 1; -fi - -jvm=`echo "$java_ver_output" | grep -A 1 '[openjdk|java] version' | awk 'NR==2 {print $1}'` -case "$jvm" in - OpenJDK) - JVM_VENDOR=OpenJDK - # this will be "64-Bit" or "32-Bit" - JVM_ARCH=`echo "$java_ver_output" | awk 'NR==3 {print $2}'` - ;; - "Java(TM)") - JVM_VENDOR=Oracle - # this will be "64-Bit" or "32-Bit" - JVM_ARCH=`echo "$java_ver_output" | awk 'NR==3 {print $3}'` - ;; - *) - # Help fill in other JVM values - JVM_VENDOR=other - JVM_ARCH=unknown - ;; -esac - #GC log path has to be defined here because it needs to access CASSANDRA_HOME -JVM_OPTS="$JVM_OPTS -Xloggc:${CASSANDRA_HOME}/logs/gc.log" - -# Here we create the arguments that will get passed to the jvm when -# starting cassandra. - -# Read user-defined JVM options from jvm.options file -JVM_OPTS_FILE=$CASSANDRA_CONF/jvm.options -for opt in `grep "^-" $JVM_OPTS_FILE` -do - JVM_OPTS="$JVM_OPTS $opt" -done +if [ $JAVA_VERSION -ge 11 ] ; then + # See description of https://bugs.openjdk.java.net/browse/JDK-8046148 for details about the syntax + # The following is the equivalent to -XX:+PrintGCDetails -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M + echo "$JVM_OPTS" | grep -q "^-[X]log:gc" + if [ "$?" = "1" ] ; then # [X] to prevent ccm from replacing this line + # only add -Xlog:gc if it's not mentioned in jvm-server.options file + mkdir -p ${CASSANDRA_HOME}/logs + JVM_OPTS="$JVM_OPTS -Xlog:gc=info,heap*=trace,age*=debug,safepoint=info,promotion*=trace:file=${CASSANDRA_HOME}/logs/gc.log:time,uptime,pid,tid,level:filecount=10,filesize=10485760" + fi +else + # Java 8 + echo "$JVM_OPTS" | grep -q "^-[X]loggc" + if [ "$?" = "1" ] ; then # [X] to prevent ccm from replacing this line + # only add -Xlog:gc if it's not mentioned in jvm-server.options file + mkdir -p ${CASSANDRA_HOME}/logs + JVM_OPTS="$JVM_OPTS -Xloggc:${CASSANDRA_HOME}/logs/gc.log" + fi +fi -# Check what parameters were defined on jvm.options file to avoid conflicts +# Check what parameters were defined on jvm-server.options file to avoid conflicts echo $JVM_OPTS | grep -q Xmn DEFINED_XMN=$? echo $JVM_OPTS | grep -q Xmx @@ -179,21 +151,21 @@ if [ "x$MALLOC_ARENA_MAX" = "x" ] ; then export MALLOC_ARENA_MAX=4 fi -# We only set -Xms and -Xmx if they were not defined on jvm.options file +# We only set -Xms and -Xmx if they were not defined on jvm-server.options file # If defined, both Xmx and Xms should be defined together. if [ $DEFINED_XMX -ne 0 ] && [ $DEFINED_XMS -ne 0 ]; then JVM_OPTS="$JVM_OPTS -Xms${MAX_HEAP_SIZE}" JVM_OPTS="$JVM_OPTS -Xmx${MAX_HEAP_SIZE}" elif [ $DEFINED_XMX -ne 0 ] || [ $DEFINED_XMS -ne 0 ]; then - echo "Please set or unset -Xmx and -Xms flags in pairs on jvm.options file." + echo "Please set or unset -Xmx and -Xms flags in pairs on jvm-server.options file." exit 1 fi -# We only set -Xmn flag if it was not defined in jvm.options file +# We only set -Xmn flag if it was not defined in jvm-server.options file # and if the CMS GC is being used # If defined, both Xmn and Xmx should be defined together. if [ $DEFINED_XMN -eq 0 ] && [ $DEFINED_XMX -ne 0 ]; then - echo "Please set or unset -Xmx and -Xmn flags in pairs on jvm.options file." + echo "Please set or unset -Xmx and -Xmn flags in pairs on jvm-server.options file." exit 1 elif [ $DEFINED_XMN -ne 0 ] && [ $USING_CMS -eq 0 ]; then JVM_OPTS="$JVM_OPTS -Xmn${HEAP_NEWSIZE}" @@ -207,7 +179,7 @@ fi JVM_OPTS="$JVM_OPTS -XX:CompileCommandFile=$CASSANDRA_CONF/hotspot_compiler" # add the jamm javaagent -JVM_OPTS="$JVM_OPTS -javaagent:$CASSANDRA_HOME/lib/jamm-0.3.0.jar" +JVM_OPTS="$JVM_OPTS -javaagent:$CASSANDRA_HOME/lib/jamm-0.3.2.jar" # set jvm HeapDumpPath with CASSANDRA_HEAPDUMP_DIR if [ "x$CASSANDRA_HEAPDUMP_DIR" != "x" ]; then http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/conf/jvm-clients.options ---------------------------------------------------------------------- diff --git a/conf/jvm-clients.options b/conf/jvm-clients.options new file mode 100644 index 0000000..6181ed0 --- /dev/null +++ b/conf/jvm-clients.options @@ -0,0 +1,10 @@ +########################################################################### +# jvm-clients.options # +# # +# See jvm8-clients.options and jvm11-clients.options for Java version # +# specific options. # +########################################################################### + +# intentionally left empty + +# The newline in the end of file is intentional http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/conf/jvm-server.options ---------------------------------------------------------------------- diff --git a/conf/jvm-server.options b/conf/jvm-server.options new file mode 100644 index 0000000..c52e192 --- /dev/null +++ b/conf/jvm-server.options @@ -0,0 +1,191 @@ +########################################################################### +# jvm-server.options # +# # +# - all flags defined here will be used by cassandra to startup the JVM # +# - one flag should be specified per line # +# - lines that do not start with '-' will be ignored # +# - only static flags are accepted (no variables or parameters) # +# - dynamic flags will be appended to these on cassandra-env # +# # +# See jvm8-server.options and jvm11-server.options for Java version # +# specific options. # +########################################################################### + +###################### +# STARTUP PARAMETERS # +###################### + +# Uncomment any of the following properties to enable specific startup parameters + +# In a multi-instance deployment, multiple Cassandra instances will independently assume that all +# CPU processors are available to it. This setting allows you to specify a smaller set of processors +# and perhaps have affinity. +#-Dcassandra.available_processors=number_of_processors + +# The directory location of the cassandra.yaml file. +#-Dcassandra.config=directory + +# Sets the initial partitioner token for a node the first time the node is started. +#-Dcassandra.initial_token=token + +# Set to false to start Cassandra on a node but not have the node join the cluster. +#-Dcassandra.join_ring=true|false + +# Set to false to clear all gossip state for the node on restart. Use when you have changed node +# information in cassandra.yaml (such as listen_address). +#-Dcassandra.load_ring_state=true|false + +# Enable pluggable metrics reporter. See Pluggable metrics reporting in Cassandra 2.0.2. +#-Dcassandra.metricsReporterConfigFile=file + +# Set the port on which the CQL native transport listens for clients. (Default: 9042) +#-Dcassandra.native_transport_port=port + +# Overrides the partitioner. (Default: org.apache.cassandra.dht.Murmur3Partitioner) +#-Dcassandra.partitioner=partitioner + +# To replace a node that has died, restart a new node in its place specifying the address of the +# dead node. The new node must not have any data in its data directory, that is, it must be in the +# same state as before bootstrapping. +#-Dcassandra.replace_address=listen_address or broadcast_address of dead node + +# Allow restoring specific tables from an archived commit log. +#-Dcassandra.replayList=table + +# Allows overriding of the default RING_DELAY (30000ms), which is the amount of time a node waits +# before joining the ring. +#-Dcassandra.ring_delay_ms=ms + +# Set the SSL port for encrypted communication. (Default: 7001) +#-Dcassandra.ssl_storage_port=port + +# Set the port for inter-node communication. (Default: 7000) +#-Dcassandra.storage_port=port + +# Set the default location for the trigger JARs. (Default: conf/triggers) +#-Dcassandra.triggers_dir=directory + +# For testing new compaction and compression strategies. It allows you to experiment with different +# strategies and benchmark write performance differences without affecting the production workload. +#-Dcassandra.write_survey=true + +# To disable configuration via JMX of auth caches (such as those for credentials, permissions and +# roles). This will mean those config options can only be set (persistently) in cassandra.yaml +# and will require a restart for new values to take effect. +#-Dcassandra.disable_auth_caches_remote_configuration=true + +# To disable dynamic calculation of the page size used when indexing an entire partition (during +# initial index build/rebuild). If set to true, the page size will be fixed to the default of +# 10000 rows per page. +#-Dcassandra.force_default_indexing_page_size=true + +# Imposes an upper bound on hint lifetime below the normal min gc_grace_seconds +#-Dcassandra.maxHintTTL=max_hint_ttl_in_seconds + +######################## +# GENERAL JVM SETTINGS # +######################## + +# enable assertions. highly suggested for correct application functionality. +-ea + +# disable assertions for net.openhft.** because it runs out of memory by design +# if enabled and run for more than just brief testing +-da:net.openhft... + +# enable thread priorities, primarily so we can give periodic tasks +# a lower priority to avoid interfering with client workload +-XX:+UseThreadPriorities + +# Enable heap-dump if there's an OOM +-XX:+HeapDumpOnOutOfMemoryError + +# Per-thread stack size. +-Xss256k + +# Larger interned string table, for gossip's benefit (CASSANDRA-6410) +-XX:StringTableSize=1000003 + +# Make sure all memory is faulted and zeroed on startup. +# This helps prevent soft faults in containers and makes +# transparent hugepage allocation more effective. +-XX:+AlwaysPreTouch + +# Disable biased locking as it does not benefit Cassandra. +-XX:-UseBiasedLocking + +# Enable thread-local allocation blocks and allow the JVM to automatically +# resize them at runtime. +-XX:+UseTLAB +-XX:+ResizeTLAB +-XX:+UseNUMA + +# http://www.evanjones.ca/jvm-mmap-pause.html +-XX:+PerfDisableSharedMem + +# Prefer binding to IPv4 network intefaces (when net.ipv6.bindv6only=1). See +# http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6342561 (short version: +# comment out this entry to enable IPv6 support). +-Djava.net.preferIPv4Stack=true + +### Debug options + +# uncomment to enable flight recorder +#-XX:+UnlockCommercialFeatures +#-XX:+FlightRecorder + +# uncomment to have Cassandra JVM listen for remote debuggers/profilers on port 1414 +#-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1414 + +# uncomment to have Cassandra JVM log internal method compilation (developers only) +#-XX:+UnlockDiagnosticVMOptions +#-XX:+LogCompilation + +################# +# HEAP SETTINGS # +################# + +# Heap size is automatically calculated by cassandra-env based on this +# formula: max(min(1/2 ram, 1024MB), min(1/4 ram, 8GB)) +# That is: +# - calculate 1/2 ram and cap to 1024MB +# - calculate 1/4 ram and cap to 8192MB +# - pick the max +# +# For production use you may wish to adjust this for your environment. +# If that's the case, uncomment the -Xmx and Xms options below to override the +# automatic calculation of JVM heap memory. +# +# It is recommended to set min (-Xms) and max (-Xmx) heap sizes to +# the same value to avoid stop-the-world GC pauses during resize, and +# so that we can lock the heap in memory on startup to prevent any +# of it from being swapped out. +#-Xms4G +#-Xmx4G + +# Young generation size is automatically calculated by cassandra-env +# based on this formula: min(100 * num_cores, 1/4 * heap size) +# +# The main trade-off for the young generation is that the larger it +# is, the longer GC pause times will be. The shorter it is, the more +# expensive GC will be (usually). +# +# It is not recommended to set the young generation size if using the +# G1 GC, since that will override the target pause-time goal. +# More info: http://www.oracle.com/technetwork/articles/java/g1gc-1984535.html +# +# The example below assumes a modern 8-core+ machine for decent +# times. If in doubt, and if you do not particularly want to tweak, go +# 100 MB per physical CPU core. +#-Xmn800M + +################################### +# EXPIRATION DATE OVERFLOW POLICY # +################################### + +# Defines how to handle INSERT requests with TTL exceeding the maximum supported expiration date: +# * REJECT: this is the default policy and will reject any requests with expiration date timestamp after 2038-01-19T03:14:06+00:00. +# * CAP: any insert with TTL expiring after 2038-01-19T03:14:06+00:00 will expire on 2038-01-19T03:14:06+00:00 and the client will receive a warning. +# * CAP_NOWARN: same as previous, except that the client warning will not be emitted. +# +#-Dcassandra.expiration_date_overflow_policy=REJECT http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/conf/jvm.options ---------------------------------------------------------------------- diff --git a/conf/jvm.options b/conf/jvm.options deleted file mode 100644 index ac9834f..0000000 --- a/conf/jvm.options +++ /dev/null @@ -1,254 +0,0 @@ -########################################################################### -# jvm.options # -# # -# - all flags defined here will be used by cassandra to startup the JVM # -# - one flag should be specified per line # -# - lines that do not start with '-' will be ignored # -# - only static flags are accepted (no variables or parameters) # -# - dynamic flags will be appended to these on cassandra-env # -########################################################################### - -###################### -# STARTUP PARAMETERS # -###################### - -# Uncomment any of the following properties to enable specific startup parameters - -# In a multi-instance deployment, multiple Cassandra instances will independently assume that all -# CPU processors are available to it. This setting allows you to specify a smaller set of processors -# and perhaps have affinity. -#-Dcassandra.available_processors=number_of_processors - -# The directory location of the cassandra.yaml file. -#-Dcassandra.config=directory - -# Sets the initial partitioner token for a node the first time the node is started. -#-Dcassandra.initial_token=token - -# Set to false to start Cassandra on a node but not have the node join the cluster. -#-Dcassandra.join_ring=true|false - -# Set to false to clear all gossip state for the node on restart. Use when you have changed node -# information in cassandra.yaml (such as listen_address). -#-Dcassandra.load_ring_state=true|false - -# Enable pluggable metrics reporter. See Pluggable metrics reporting in Cassandra 2.0.2. -#-Dcassandra.metricsReporterConfigFile=file - -# Set the port on which the CQL native transport listens for clients. (Default: 9042) -#-Dcassandra.native_transport_port=port - -# Overrides the partitioner. (Default: org.apache.cassandra.dht.Murmur3Partitioner) -#-Dcassandra.partitioner=partitioner - -# To replace a node that has died, restart a new node in its place specifying the address of the -# dead node. The new node must not have any data in its data directory, that is, it must be in the -# same state as before bootstrapping. -#-Dcassandra.replace_address=listen_address or broadcast_address of dead node - -# Allow restoring specific tables from an archived commit log. -#-Dcassandra.replayList=table - -# Allows overriding of the default RING_DELAY (30000ms), which is the amount of time a node waits -# before joining the ring. -#-Dcassandra.ring_delay_ms=ms - -# Set the SSL port for encrypted communication. (Default: 7001) -#-Dcassandra.ssl_storage_port=port - -# Set the port for inter-node communication. (Default: 7000) -#-Dcassandra.storage_port=port - -# Set the default location for the trigger JARs. (Default: conf/triggers) -#-Dcassandra.triggers_dir=directory - -# For testing new compaction and compression strategies. It allows you to experiment with different -# strategies and benchmark write performance differences without affecting the production workload. -#-Dcassandra.write_survey=true - -# To disable configuration via JMX of auth caches (such as those for credentials, permissions and -# roles). This will mean those config options can only be set (persistently) in cassandra.yaml -# and will require a restart for new values to take effect. -#-Dcassandra.disable_auth_caches_remote_configuration=true - -# To disable dynamic calculation of the page size used when indexing an entire partition (during -# initial index build/rebuild). If set to true, the page size will be fixed to the default of -# 10000 rows per page. -#-Dcassandra.force_default_indexing_page_size=true - -# Imposes an upper bound on hint lifetime below the normal min gc_grace_seconds -#-Dcassandra.maxHintTTL=max_hint_ttl_in_seconds - -######################## -# GENERAL JVM SETTINGS # -######################## - -# enable assertions. highly suggested for correct application functionality. --ea - -# disable assertions for net.openhft.** because it runs out of memory by design -# if enabled and run for more than just brief testing --da:net.openhft... - -# enable thread priorities, primarily so we can give periodic tasks -# a lower priority to avoid interfering with client workload --XX:+UseThreadPriorities - -# allows lowering thread priority without being root on linux - probably -# not necessary on Windows but doesn't harm anything. -# see http://tech.stolsvik.com/2010/01/linux-java-thread-priorities-workaround.html --XX:ThreadPriorityPolicy=42 - -# Enable heap-dump if there's an OOM --XX:+HeapDumpOnOutOfMemoryError - -# Per-thread stack size. --Xss256k - -# Larger interned string table, for gossip's benefit (CASSANDRA-6410) --XX:StringTableSize=1000003 - -# Make sure all memory is faulted and zeroed on startup. -# This helps prevent soft faults in containers and makes -# transparent hugepage allocation more effective. --XX:+AlwaysPreTouch - -# Disable biased locking as it does not benefit Cassandra. --XX:-UseBiasedLocking - -# Enable thread-local allocation blocks and allow the JVM to automatically -# resize them at runtime. --XX:+UseTLAB --XX:+ResizeTLAB --XX:+UseNUMA - -# http://www.evanjones.ca/jvm-mmap-pause.html --XX:+PerfDisableSharedMem - -# Prefer binding to IPv4 network intefaces (when net.ipv6.bindv6only=1). See -# http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6342561 (short version: -# comment out this entry to enable IPv6 support). --Djava.net.preferIPv4Stack=true - -### Debug options - -# uncomment to enable flight recorder -#-XX:+UnlockCommercialFeatures -#-XX:+FlightRecorder - -# uncomment to have Cassandra JVM listen for remote debuggers/profilers on port 1414 -#-agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=1414 - -# uncomment to have Cassandra JVM log internal method compilation (developers only) -#-XX:+UnlockDiagnosticVMOptions -#-XX:+LogCompilation - -################# -# HEAP SETTINGS # -################# - -# Heap size is automatically calculated by cassandra-env based on this -# formula: max(min(1/2 ram, 1024MB), min(1/4 ram, 8GB)) -# That is: -# - calculate 1/2 ram and cap to 1024MB -# - calculate 1/4 ram and cap to 8192MB -# - pick the max -# -# For production use you may wish to adjust this for your environment. -# If that's the case, uncomment the -Xmx and Xms options below to override the -# automatic calculation of JVM heap memory. -# -# It is recommended to set min (-Xms) and max (-Xmx) heap sizes to -# the same value to avoid stop-the-world GC pauses during resize, and -# so that we can lock the heap in memory on startup to prevent any -# of it from being swapped out. -#-Xms4G -#-Xmx4G - -# Young generation size is automatically calculated by cassandra-env -# based on this formula: min(100 * num_cores, 1/4 * heap size) -# -# The main trade-off for the young generation is that the larger it -# is, the longer GC pause times will be. The shorter it is, the more -# expensive GC will be (usually). -# -# It is not recommended to set the young generation size if using the -# G1 GC, since that will override the target pause-time goal. -# More info: http://www.oracle.com/technetwork/articles/java/g1gc-1984535.html -# -# The example below assumes a modern 8-core+ machine for decent -# times. If in doubt, and if you do not particularly want to tweak, go -# 100 MB per physical CPU core. -#-Xmn800M - -################################### -# EXPIRATION DATE OVERFLOW POLICY # -################################### - -# Defines how to handle INSERT requests with TTL exceeding the maximum supported expiration date: -# * REJECT: this is the default policy and will reject any requests with expiration date timestamp after 2038-01-19T03:14:06+00:00. -# * CAP: any insert with TTL expiring after 2038-01-19T03:14:06+00:00 will expire on 2038-01-19T03:14:06+00:00 and the client will receive a warning. -# * CAP_NOWARN: same as previous, except that the client warning will not be emitted. -# -#-Dcassandra.expiration_date_overflow_policy=REJECT - -################# -# GC SETTINGS # -################# - -### CMS Settings - --XX:+UseParNewGC --XX:+UseConcMarkSweepGC --XX:+CMSParallelRemarkEnabled --XX:SurvivorRatio=8 --XX:MaxTenuringThreshold=1 --XX:CMSInitiatingOccupancyFraction=75 --XX:+UseCMSInitiatingOccupancyOnly --XX:CMSWaitDuration=10000 --XX:+CMSParallelInitialMarkEnabled --XX:+CMSEdenChunksRecordAlways -# some JVMs will fill up their heap when accessed via JMX, see CASSANDRA-6541 --XX:+CMSClassUnloadingEnabled - -### G1 Settings (experimental, comment previous section and uncomment section below to enable) - -## Use the Hotspot garbage-first collector. -#-XX:+UseG1GC -# -## Have the JVM do less remembered set work during STW, instead -## preferring concurrent GC. Reduces p99.9 latency. -#-XX:G1RSetUpdatingPauseTimePercent=5 -# -## Main G1GC tunable: lowering the pause target will lower throughput and vise versa. -## 200ms is the JVM default and lowest viable setting -## 1000ms increases throughput. Keep it smaller than the timeouts in cassandra.yaml. -#-XX:MaxGCPauseMillis=500 - -## Optional G1 Settings - -# Save CPU time on large (>= 16GB) heaps by delaying region scanning -# until the heap is 70% full. The default in Hotspot 8u40 is 40%. -#-XX:InitiatingHeapOccupancyPercent=70 - -# For systems with > 8 cores, the default ParallelGCThreads is 5/8 the number of logical cores. -# Otherwise equal to the number of cores when 8 or less. -# Machines with > 10 cores should try setting these to <= full cores. -#-XX:ParallelGCThreads=16 -# By default, ConcGCThreads is 1/4 of ParallelGCThreads. -# Setting both to the same value can reduce STW durations. -#-XX:ConcGCThreads=16 - -### GC logging options -- uncomment to enable - --XX:+PrintGCDetails --XX:+PrintGCDateStamps --XX:+PrintHeapAtGC --XX:+PrintTenuringDistribution --XX:+PrintGCApplicationStoppedTime --XX:+PrintPromotionFailure -#-XX:PrintFLSStatistics=1 -#-Xloggc:/var/log/cassandra/gc.log --XX:+UseGCLogFileRotation --XX:NumberOfGCLogFiles=10 --XX:GCLogFileSize=10M http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/conf/jvm11-clients.options ---------------------------------------------------------------------- diff --git a/conf/jvm11-clients.options b/conf/jvm11-clients.options new file mode 100644 index 0000000..54465db --- /dev/null +++ b/conf/jvm11-clients.options @@ -0,0 +1,21 @@ +########################################################################### +# jvm11-clients.options # +# # +# See jvm-clients.options. This file is specific for Java 11 and newer. # +########################################################################### + +################### +# JPMS SETTINGS # +################### + +-Djdk.attach.allowAttachSelf=true +--add-exports java.base/jdk.internal.misc=ALL-UNNAMED +--add-opens java.base/jdk.internal.module=ALL-UNNAMED +--add-exports java.base/jdk.internal.ref=ALL-UNNAMED +--add-exports java.base/sun.nio.ch=ALL-UNNAMED +--add-exports java.management.rmi/com.sun.jmx.remote.internal.rmi=ALL-UNNAMED +--add-exports java.rmi/sun.rmi.registry=ALL-UNNAMED +--add-exports java.rmi/sun.rmi.server=ALL-UNNAMED +--add-opens jdk.management/com.sun.management.internal=ALL-UNNAMED + +# The newline in the end of file is intentional http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/conf/jvm11-server.options ---------------------------------------------------------------------- diff --git a/conf/jvm11-server.options b/conf/jvm11-server.options new file mode 100644 index 0000000..08a7f2e --- /dev/null +++ b/conf/jvm11-server.options @@ -0,0 +1,89 @@ +########################################################################### +# jvm11-server.options # +# # +# See jvm-server.options. This file is specific for Java 11 and newer. # +########################################################################### + +################# +# GC SETTINGS # +################# + + + +### CMS Settings +#-XX:+UseParNewGC +#-XX:+UseConcMarkSweepGC +#-XX:+CMSParallelRemarkEnabled +#-XX:SurvivorRatio=8 +#-XX:MaxTenuringThreshold=1 +#-XX:CMSInitiatingOccupancyFraction=75 +#-XX:+UseCMSInitiatingOccupancyOnly +#-XX:CMSWaitDuration=10000 +#-XX:+CMSParallelInitialMarkEnabled +#-XX:+CMSEdenChunksRecordAlways +## some JVMs will fill up their heap when accessed via JMX, see CASSANDRA-6541 +#-XX:+CMSClassUnloadingEnabled + + + +### G1 Settings +## Use the Hotspot garbage-first collector. +-XX:+UseG1GC +-XX:+ParallelRefProcEnabled + +# +## Have the JVM do less remembered set work during STW, instead +## preferring concurrent GC. Reduces p99.9 latency. +-XX:G1RSetUpdatingPauseTimePercent=5 +# +## Main G1GC tunable: lowering the pause target will lower throughput and vise versa. +## 200ms is the JVM default and lowest viable setting +## 1000ms increases throughput. Keep it smaller than the timeouts in cassandra.yaml. +-XX:MaxGCPauseMillis=500 + +## Optional G1 Settings +# Save CPU time on large (>= 16GB) heaps by delaying region scanning +# until the heap is 70% full. The default in Hotspot 8u40 is 40%. +#-XX:InitiatingHeapOccupancyPercent=70 + +# For systems with > 8 cores, the default ParallelGCThreads is 5/8 the number of logical cores. +# Otherwise equal to the number of cores when 8 or less. +# Machines with > 10 cores should try setting these to <= full cores. +#-XX:ParallelGCThreads=16 +# By default, ConcGCThreads is 1/4 of ParallelGCThreads. +# Setting both to the same value can reduce STW durations. +#-XX:ConcGCThreads=16 + + +### JPMS + +-Djdk.attach.allowAttachSelf=true +--add-exports java.base/jdk.internal.misc=ALL-UNNAMED +--add-opens java.base/jdk.internal.module=ALL-UNNAMED +--add-exports java.base/jdk.internal.ref=ALL-UNNAMED +--add-exports java.base/sun.nio.ch=ALL-UNNAMED +--add-exports java.management.rmi/com.sun.jmx.remote.internal.rmi=ALL-UNNAMED +--add-exports java.rmi/sun.rmi.registry=ALL-UNNAMED +--add-exports java.rmi/sun.rmi.server=ALL-UNNAMED +--add-opens jdk.management/com.sun.management.internal=ALL-UNNAMED + + +### GC logging options -- uncomment to enable + +# Java 11 (and newer) GC logging options: +# See description of https://bugs.openjdk.java.net/browse/JDK-8046148 for details about the syntax +# The following is the equivalent to -XX:+PrintGCDetails -XX:+UseGCLogFileRotation -XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=10M +#-Xlog:gc=info,heap*=trace,age*=debug,safepoint=info,promotion*=trace:file=/var/log/cassandra/gc.log:time,uptime,pid,tid,level:filecount=10,filesize=10485760 + +# Notes for Java 8 migration: +# +# -XX:+PrintGCDetails maps to -Xlog:gc*:... - i.e. add a '*' after "gc" +# -XX:+PrintGCDateStamps maps to decorator 'time' +# +# -XX:+PrintHeapAtGC maps to 'heap' with level 'trace' +# -XX:+PrintTenuringDistribution maps to 'age' with level 'debug' +# -XX:+PrintGCApplicationStoppedTime maps to 'safepoint' with level 'info' +# -XX:+PrintPromotionFailure maps to 'promotion' with level 'trace' +# -XX:PrintFLSStatistics=1 maps to 'freelist' with level 'trace' + +# The newline in the end of file is intentional http://git-wip-us.apache.org/repos/asf/cassandra/blob/6ba2fb93/conf/jvm8-clients.options ---------------------------------------------------------------------- diff --git a/conf/jvm8-clients.options b/conf/jvm8-clients.options new file mode 100644 index 0000000..7d1b2ef --- /dev/null +++ b/conf/jvm8-clients.options @@ -0,0 +1,9 @@ +########################################################################### +# jvm8-clients.options # +# # +# See jvm-clients.options. This file is specific for Java 8 and newer. # +########################################################################### + +# intentionally left empty + +# The newline in the end of file is intentional --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@cassandra.apache.org For additional commands, e-mail: commits-h...@cassandra.apache.org