diff --git a/cassandra-3.11.1-scripts-guava20.patch b/cassandra-3.11.1-scripts-guava20.patch new file mode 100644 index 0000000..dbc156d --- /dev/null +++ b/cassandra-3.11.1-scripts-guava20.patch @@ -0,0 +1,375 @@ +From 315b478e8dbda08d24ce097c01c4e5e87ee81021 Mon Sep 17 00:00:00 2001 +From: Tomas Repik +Date: Wed, 12 Jul 2017 13:22:50 +0200 +Subject: [PATCH] modify installed scripts + +--- + bin/cassandra | 25 ++++++++++++++-- + bin/cassandra.in.sh | 70 ++++++++++++++++++++------------------------- + bin/cqlsh.py | 16 ++--------- + bin/nodetool | 38 +++++++++++++----------- + conf/cassandra-env.sh | 29 +++++++++---------- + conf/jvm.options | 2 +- + tools/bin/cassandra-stress | 2 ++ + tools/bin/cassandra-stressd | 2 ++ + 8 files changed, 96 insertions(+), 88 deletions(-) + +diff --git a/bin/cassandra b/bin/cassandra +index 57ea190..848c90d 100755 +--- a/bin/cassandra ++++ b/bin/cassandra +@@ -188,7 +188,7 @@ launch_service() + props="$3" + class="$4" + cassandra_parms="-Dlogback.configurationFile=logback.xml" +- cassandra_parms="$cassandra_parms -Dcassandra.logdir=$CASSANDRA_HOME/logs" ++ cassandra_parms="$cassandra_parms -Dcassandra.logdir=/var/log/cassandra" + cassandra_parms="$cassandra_parms -Dcassandra.storagedir=$cassandra_storagedir" + + if [ "x$pidpath" != "x" ]; then +@@ -210,6 +210,20 @@ launch_service() + return $? + } + ++wait_for_service_available() ++{ ++ host=$(cat $CASSANDRA_CONF/cassandra.yaml | grep listen_address: | cut -d':' -f2) ++ [ -z "$host" ] && host=$(hostname -i | cut -d' ' -f2) ++ port=$(cat $CASSANDRA_CONF/cassandra.yaml | grep native_transport_port | head -1 | cut -d' ' -f2) ++ if ! nc -z $host $port; then ++ # echo "Waiting for Cassandra to start at $host:$port ..." ++ while ! nc -z $host $port; do ++ sleep 1 ++ done ++ # echo "Cassandra is ready." ++ fi ++} ++ + # Parse any command line options. + args=`getopt vRfhp:bD:H:E: "$@"` + eval set -- "$args" +@@ -276,6 +289,14 @@ fi + # Start up the service + launch_service "$pidfile" "$foreground" "$properties" "$classname" + +-exit $? ++ret=$? ++ ++if [ 0$ret -ne "0" ]; then ++ exit $ret ++fi ++ ++wait_for_service_available ++ ++exit 0 + + # vi:ai sw=4 ts=4 tw=0 et +diff --git a/bin/cassandra.in.sh b/bin/cassandra.in.sh +index 92f79c7..8da984e 100644 +--- a/bin/cassandra.in.sh ++++ b/bin/cassandra.in.sh +@@ -15,62 +15,54 @@ + # limitations under the License. + + if [ "x$CASSANDRA_HOME" = "x" ]; then +- CASSANDRA_HOME="`dirname "$0"`/.." ++ CASSANDRA_HOME=~/cassandra + fi + + # The directory where Cassandra's configs live (required) + if [ "x$CASSANDRA_CONF" = "x" ]; then +- CASSANDRA_CONF="$CASSANDRA_HOME/conf" ++ CASSANDRA_CONF="/etc/cassandra" + fi + +-# 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_bin:$CASSANDRA_HOME/build/classes/thrift" +-#cassandra_bin="$CASSANDRA_HOME/build/cassandra.jar" +- + # the default location for commitlogs, sstables, and saved caches + # if not set in cassandra.yaml +-cassandra_storagedir="$CASSANDRA_HOME/data" +- +-# JAVA_HOME can optionally be set here +-#JAVA_HOME=/usr/local/jdk6 ++cassandra_storagedir="$CASSANDRA_HOME" + + # The java classpath (required) +-CLASSPATH="$CASSANDRA_CONF:$cassandra_bin" ++CLASSPATH="$CASSANDRA_CONF" + +-for jar in "$CASSANDRA_HOME"/lib/*.jar; do +- CLASSPATH="$CLASSPATH:$jar" +-done ++DEPS=( cassandra/cassandra-all metrics slf4j/api guava20 snakeyaml commons-codec jackson/jackson-mapper-asl jackson/jackson-core-asl netty/netty-all lz4 logback/logback-classic logback/logback-core jna sigar high-scale-lib/high-scale-lib antlr3-runtime concurrentlinkedhashmap-lru commons-lang3 json_simple stream-lib caffeine snappy-java jBCrypt jctools metrics-reporter-config ) + +-# JSR223 - collect all JSR223 engines' jars +-for jsr223jar in "$CASSANDRA_HOME"/lib/jsr223/*/*.jar; do +- CLASSPATH="$CLASSPATH:$jsr223jar" ++for dep in "${DEPS[@]}"; do ++ CLASSPATH="$CLASSPATH:`build-classpath $dep`" + done +-# JSR223/JRuby - set ruby lib directory +-if [ -d "$CASSANDRA_HOME"/lib/jsr223/jruby/ruby ] ; then +- export JVM_OPTS="$JVM_OPTS -Djruby.lib=$CASSANDRA_HOME/lib/jsr223/jruby" +-fi +-# JSR223/JRuby - set ruby JNI libraries root directory +-if [ -d "$CASSANDRA_HOME"/lib/jsr223/jruby/jni ] ; then +- export JVM_OPTS="$JVM_OPTS -Djffi.boot.library.path=$CASSANDRA_HOME/lib/jsr223/jruby/jni" +-fi +-# JSR223/Jython - set python.home system property +-if [ -f "$CASSANDRA_HOME"/lib/jsr223/jython/jython.jar ] ; then +- export JVM_OPTS="$JVM_OPTS -Dpython.home=$CASSANDRA_HOME/lib/jsr223/jython" +-fi +-# JSR223/Scala - necessary system property +-if [ -f "$CASSANDRA_HOME"/lib/jsr223/scala/scala-compiler.jar ] ; then +- export JVM_OPTS="$JVM_OPTS -Dscala.usejavacp=true" +-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" ++ JAVA_AGENT="$JAVA_AGENT -javaagent:`build-classpath jamm`" + fi + +-# Added sigar-bin to the java.library.path CASSANDRA-7838 +-JAVA_OPTS="$JAVA_OPTS:-Djava.library.path=$CASSANDRA_HOME/lib/sigar-bin" ++java_ver_output=`"${JAVA:-java}" -version 2>&1` ++jvm=`echo "$java_ver_output" | grep -A 1 'version' | awk 'NR==2 {print $1}'` ++case "$jvm" in ++ OpenJDK) ++ # this will be "64-Bit" or "32-Bit" ++ JVM_ARCH=`echo "$java_ver_output" | awk 'NR==3 {print $2}'` ++ ;; ++ "Java(TM)") ++ # 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_ARCH=unknown ++ ;; ++esac ++ ++# Added libsigar.so to the java.library.path CASSANDRA-7838 ++if [ "$JVM_ARCH" = "64-Bit" ]; then ++ JVM_OPTS="$JVM_OPTS -Djava.library.path=/usr/lib64:/usr/lib64/sigar" ++else ++ JVM_OPTS="$JVM_OPTS -Djava.library.path=/usr/lib:/usr/lib/sigar" ++fi +diff --git a/bin/cqlsh.py b/bin/cqlsh.py +index 28e8043..5b5d7e8 100644 +--- a/bin/cqlsh.py ++++ b/bin/cqlsh.py +@@ -1,4 +1,4 @@ +-#!/bin/sh ++#!/usr/bin/python + # -*- mode: Python -*- + + # Licensed to the Apache Software Foundation (ASF) under one +@@ -17,18 +17,6 @@ + # See the License for the specific language governing permissions and + # limitations under the License. + +-""":" +-# bash code here; finds a suitable python interpreter and execs this file. +-# prefer unqualified "python" if suitable: +-python -c 'import sys; sys.exit(not (0x020700b0 < sys.hexversion < 0x03000000))' 2>/dev/null \ +- && exec python "$0" "$@" +-for pyver in 2.7; do +- which python$pyver > /dev/null 2>&1 && exec python$pyver "$0" "$@" +-done +-echo "No appropriate python interpreter found." >&2 +-exit 1 +-":""" +- + from __future__ import with_statement + + import cmd +@@ -237,7 +225,7 @@ optvalues = optparse.Values() + (options, arguments) = parser.parse_args(sys.argv[1:], values=optvalues) + + # BEGIN history/config definition +-HISTORY_DIR = os.path.expanduser(os.path.join('~', '.cassandra')) ++HISTORY_DIR = os.path.expanduser(os.path.join('~', 'cassandra')) + + if hasattr(options, 'cqlshrc'): + CONFIG_FILE = options.cqlshrc +diff --git a/bin/nodetool b/bin/nodetool +index b1cfba5..463dc14 100755 +--- a/bin/nodetool ++++ b/bin/nodetool +@@ -22,22 +22,28 @@ if [ "`basename "$0"`" = 'nodeprobe' ]; then + echo "***************************************************************" >&2 + fi + +-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" \ +- "$HOME/.cassandra.in.sh" \ +- /usr/share/cassandra/cassandra.in.sh \ +- /usr/local/share/cassandra/cassandra.in.sh \ +- /opt/cassandra/cassandra.in.sh; do +- if [ -r "$include" ]; then +- . "$include" +- break +- fi +- done +-elif [ -r "$CASSANDRA_INCLUDE" ]; then +- . "$CASSANDRA_INCLUDE" ++if [ "x$CASSANDRA_HOME" = "x" ]; then ++ CASSANDRA_HOME=~/cassandra + fi + ++# The directory where Cassandra's configs live (required) ++if [ "x$CASSANDRA_CONF" = "x" ]; then ++ CASSANDRA_CONF="/etc/cassandra" ++fi ++ ++# the default location for commitlogs, sstables, and saved caches ++# if not set in cassandra.yaml ++cassandra_storagedir="$CASSANDRA_HOME" ++ ++# The java classpath (required) ++CLASSPATH="$CASSANDRA_CONF" ++ ++DEPS=( airline cassandra/cassandra-all guava20 javax.inject slf4j/api jackson/jackson-mapper-asl jackson/jackson-core-asl logback/logback-classic logback/logback-core commons-lang3 high-scale-lib/high-scale-lib antlr3-runtime metrics concurrentlinkedhashmap-lru snakeyaml commons-codec netty/netty-all) ++ ++for dep in "${DEPS[@]}"; do ++ CLASSPATH="$CLASSPATH:`build-classpath $dep`" ++done ++ + # Use JAVA_HOME if set, otherwise look for java in PATH + if [ -x "$JAVA_HOME/bin/java" ]; then + JAVA="$JAVA_HOME/bin/java" +@@ -50,8 +56,8 @@ if [ "x$JAVA" = "x" ]; then + exit 1 + fi + +-if [ -z "$CASSANDRA_CONF" -o -z "$CLASSPATH" ]; then +- echo "You must set the CASSANDRA_CONF and CLASSPATH vars" >&2 ++if [ -z "$CASSANDRA_CONF" -o -z "$CLASSPATH" -o -z "$CASSANDRA_HOME" ]; then ++ echo "You must set the CASSANDRA_CONF, $CASSANDRA_HOME and CLASSPATH vars" >&2 + exit 1 + fi + +diff --git a/conf/cassandra-env.sh b/conf/cassandra-env.sh +index 5a02f79..3c98159 100644 +--- a/conf/cassandra-env.sh ++++ b/conf/cassandra-env.sh +@@ -88,21 +88,17 @@ calculate_heap_sizes() + + # 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#*_} ++jvmver=`echo "$java_ver_output" | grep '[openjdk|java] version' | awk -F'"' 'NR==1 {print $2}'` ++tmp=(${jvmver//_/ }) ++JVM_VERSION="${tmp[0]}" ++JVM_PATCH_VERSION="${tmp[1]}" + +-if [ "$JVM_VERSION" \< "1.8" ] ; then ++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 + +-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 'java version' | awk 'NR==2 {print $1}'` ++jvm=`echo "$java_ver_output" | grep -A 1 'version' | awk 'NR==2 {print $1}'` + case "$jvm" in + OpenJDK) + JVM_VENDOR=OpenJDK +@@ -121,9 +117,6 @@ case "$jvm" in + ;; + 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. + +@@ -207,7 +200,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:`build-classpath jamm`" + + # set jvm HeapDumpPath with CASSANDRA_HEAPDUMP_DIR + if [ "x$CASSANDRA_HEAPDUMP_DIR" != "x" ]; then +@@ -271,7 +264,7 @@ JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/ + ## which delegates to the IAuthenticator configured in cassandra.yaml. See the sample JAAS configuration + ## file cassandra-jaas.config + #JVM_OPTS="$JVM_OPTS -Dcassandra.jmx.remote.login.config=CassandraLogin" +-#JVM_OPTS="$JVM_OPTS -Djava.security.auth.login.config=$CASSANDRA_HOME/conf/cassandra-jaas.config" ++#JVM_OPTS="$JVM_OPTS -Djava.security.auth.login.config=$CASSANDRA_CONF/cassandra-jaas.config" + + ## Cassandra also ships with a helper for delegating JMX authz calls to the configured IAuthorizer, + ## uncomment this to use it. Requires one of the two authentication options to be enabled +@@ -288,7 +281,11 @@ JVM_OPTS="$JVM_OPTS -Dcom.sun.management.jmxremote.password.file=/etc/cassandra/ + # Cassandra uses SIGAR to capture OS metrics CASSANDRA-7838 + # for SIGAR we have to set the java.library.path + # to the location of the native libraries. +-JVM_OPTS="$JVM_OPTS -Djava.library.path=$CASSANDRA_HOME/lib/sigar-bin" ++if [ "$JVM_ARCH" = "64-Bit" ]; then ++ JVM_OPTS="$JVM_OPTS -Djava.library.path=/usr/lib64:/usr/lib64/sigar" ++else ++ JVM_OPTS="$JVM_OPTS -Djava.library.path=/usr/lib:/usr/lib/sigar" ++fi + + JVM_OPTS="$JVM_OPTS $MX4J_ADDRESS" + JVM_OPTS="$JVM_OPTS $MX4J_PORT" +diff --git a/conf/jvm.options b/conf/jvm.options +index 03378b1..5fcf0c6 100644 +--- a/conf/jvm.options ++++ b/conf/jvm.options +@@ -233,7 +233,7 @@ + -XX:+PrintGCApplicationStoppedTime + -XX:+PrintPromotionFailure + #-XX:PrintFLSStatistics=1 +-#-Xloggc:/var/log/cassandra/gc.log ++-Xloggc:/var/log/cassandra/gc.log + -XX:+UseGCLogFileRotation + -XX:NumberOfGCLogFiles=10 + -XX:GCLogFileSize=10M +diff --git a/tools/bin/cassandra-stress b/tools/bin/cassandra-stress +index 82a3eb5..ef7f130 100755 +--- a/tools/bin/cassandra-stress ++++ b/tools/bin/cassandra-stress +@@ -49,6 +49,8 @@ if [ -z "$CLASSPATH" ]; then + exit 1 + fi + ++CLASSPATH="$CLASSPATH:`build-classpath cassandra-stress`" ++ + "$JAVA" -server -ea -cp "$CLASSPATH" $JVM_OPTS \ + -Dcassandra.storagedir="$cassandra_storagedir" \ + -Dlogback.configurationFile=logback-tools.xml \ +diff --git a/tools/bin/cassandra-stressd b/tools/bin/cassandra-stressd +index 48fbef6..f626ab9 100755 +--- a/tools/bin/cassandra-stressd ++++ b/tools/bin/cassandra-stressd +@@ -50,6 +50,8 @@ if [ -z "$CLASSPATH" ]; then + exit 1 + fi + ++CLASSPATH="$CLASSPATH:`build-classpath cassandra-stress`" ++ + case "$1" in + start) + echo "Starting $DESC: " +-- +2.9.4 + diff --git a/cassandra.spec b/cassandra.spec index f988552..422bce7 100644 --- a/cassandra.spec +++ b/cassandra.spec @@ -10,7 +10,7 @@ Name: %{?scl_prefix}cassandra Version: 3.11.1 -Release: 6%{?dist} +Release: 7%{?dist} Summary: Client utilities for Cassandra # Apache (v2.0) BSD (3 clause): # ./src/java/org/apache/cassandra/utils/vint/VIntCoding.java @@ -47,6 +47,7 @@ Patch8: %{pkg_name}-%{version}-Remove-dependencies-on-internal-JMX-class Patch9: %{pkg_name}-%{version}-use-guava24.patch # change mvn dependency to guava v24 Patch10: %{pkg_name}-%{version}-use-guava24-pom.patch +Patch11: %{pkg_name}-%{version}-scripts-guava20.patch # TODO #BuildArchitectures: noarch @@ -83,7 +84,9 @@ BuildRequires: %{?scl_prefix}compress-lzf BuildRequires: %{?scl_prefix}airline BuildRequires: %{?scl_prefix}jmh BuildRequires: %{?scl_prefix}byteman +%if 0%{?fedora} >= 29 BuildRequires: %{?scl_prefix}byteman-bmunit +%endif BuildRequires: %{?scl_prefix}HdrHistogram BuildRequires: %{?scl_prefix}sigar-java BuildRequires: %{?scl_prefix}jackson @@ -97,7 +100,6 @@ BuildRequires: %{?scl_prefix}ohc BuildRequires: %{?scl_prefix}ohc-core-j8 BuildRequires: %{?scl_prefix_java_common}apache-commons-collections BuildRequires: %{?scl_prefix}jctools -BuildRequires: %{?scl_prefix}guava # using high-scale-lib from stephenc, no Cassandra original #BuildRequires: mvn(com.boundary:high-scale-lib) BuildRequires: %{?scl_prefix}high-scale-lib @@ -216,10 +218,9 @@ cp -p %{SOURCE3} build/%{pkg_name}-%{version}.pom cp -p %{SOURCE4} build/%{pkg_name}-%{version}-parent.pom %if 0%{?fedora} >= 28 -# swap guava18 to guava24 -%patch9 -p1 -# change mvn dependency to guava v24 -%patch10 -p0 +build-jar-repository lib guava20 +%else +build-jar-repository lib guava %endif # build jar repositories for dependencies @@ -228,7 +229,6 @@ build-jar-repository lib stringtemplate4 build-jar-repository lib jsr-305 build-jar-repository lib commons-lang3 build-jar-repository lib slf4j/api -build-jar-repository lib guava build-jar-repository lib jamm build-jar-repository lib stream-lib build-jar-repository lib metrics/metrics-core @@ -292,7 +292,13 @@ build-jar-repository lib javax.inject # airline patch %patch1 -p1 # scripts patch +%if 0%{?fedora} >= 28 +# make source compatible with guava20 up to guava24 +%patch9 -p1 +%patch11 -p1 +%else %patch2 -p1 +%endif # hppc patch %patch3 -p1 # slf4j patch @@ -317,6 +323,7 @@ sed -i '/hadoop/d' test/microbench/org/apache/cassandra/test/microbench/Compacti %pom_remove_dep -r com.thinkaurelius.thrift:thrift-server build/%{pkg_name}-%{version}.pom %pom_remove_dep -r org.apache.cassandra:cassandra-thrift build/%{pkg_name}-%{version}.pom %pom_remove_dep -r org.apache.thrift:libthrift build/%{pkg_name}-%{version}.pom +%pom_remove_dep -r com.google.guava:guava build/%{pkg_name}-%{version}.pom %mvn_package "org.apache.%{pkg_name}:%{pkg_name}-parent:pom:%{version}" parent %if %stress @@ -480,6 +487,9 @@ exit 0 %license LICENSE.txt NOTICE.txt %changelog +* Thu Sep 13 2018 Jakub Janco - 3.11.1-7 +- Use guava20 since fedora28 + * Wed Aug 15 2018 Augusto Caringi - 3.11.1-6 - fix FTBFS (BuildRequires problems)