diff --git a/cassandra-3.9-scripts.patch b/cassandra-3.9-scripts.patch index 04ab50a..b1d58a3 100644 --- a/cassandra-3.9-scripts.patch +++ b/cassandra-3.9-scripts.patch @@ -1,6 +1,6 @@ diff -urN cassandra-3.9/bin/cassandra cassandra-3.9new/bin/cassandra --- cassandra-3.9/bin/cassandra 2016-09-26 16:02:27.000000000 +0200 -+++ cassandra-3.9new/bin/cassandra 2017-01-26 16:47:55.552170907 +0100 ++++ cassandra-3.9new/bin/cassandra 2017-02-07 16:56:54.216604418 +0100 @@ -115,13 +115,13 @@ NUMACTL="" fi @@ -28,9 +28,45 @@ diff -urN cassandra-3.9/bin/cassandra cassandra-3.9new/bin/cassandra cassandra_parms="$cassandra_parms -Dcassandra.storagedir=$cassandra_storagedir" if [ "x$pidpath" != "x" ]; then +@@ -210,6 +210,19 @@ + return $? + } + ++wait_for_service_available() ++{ ++ host=$(cat $CASSANDRA_CONF/cassandra.yaml | grep listen_address: | head -1 | 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..." ++ 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" +@@ -283,6 +296,14 @@ + # 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 -urN cassandra-3.9/bin/cassandra.in.sh cassandra-3.9new/bin/cassandra.in.sh --- cassandra-3.9/bin/cassandra.in.sh 2016-09-26 16:02:27.000000000 +0200 -+++ cassandra-3.9new/bin/cassandra.in.sh 2017-01-26 16:52:30.471400690 +0100 ++++ cassandra-3.9new/bin/cassandra.in.sh 2017-02-06 14:48:03.221172120 +0100 @@ -1,3 +1,4 @@ +#!/bin/bash # Licensed to the Apache Software Foundation (ASF) under one @@ -72,7 +108,7 @@ diff -urN cassandra-3.9/bin/cassandra.in.sh cassandra-3.9new/bin/cassandra.in.sh -for jar in "$CASSANDRA_HOME"/lib/*.jar; do - CLASSPATH="$CLASSPATH:$jar" -done -+DEPS=( cassandra/cassandra-all metrics slf4j/api guava 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 cassandra/cassandra-thrift libthrift snappy-java jBCrypt ) ++DEPS=( cassandra/cassandra-all metrics slf4j/api guava 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 cassandra/cassandra-thrift libthrift snappy-java jBCrypt jctools ) -# JSR223 - collect all JSR223 engines' jars -for jsr223jar in "$CASSANDRA_HOME"/lib/jsr223/*/*.jar; do @@ -160,7 +196,24 @@ diff -urN cassandra-3.9/bin/cqlsh.py cassandra-3.9new/bin/cqlsh.py import cmd diff -urN cassandra-3.9/bin/nodetool cassandra-3.9new/bin/nodetool --- cassandra-3.9/bin/nodetool 2016-09-26 16:02:27.000000000 +0200 -+++ cassandra-3.9new/bin/nodetool 2017-01-26 16:47:03.016744809 +0100 ++++ cassandra-3.9new/bin/nodetool 2017-02-07 14:13:01.593406756 +0100 +@@ -24,11 +24,11 @@ + + 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 ++ for include in "`dirname "$0"`/nodetool.in.sh" \ ++ "$HOME/.nodetool.in.sh" \ ++ /usr/share/cassandra/nodetool.in.sh \ ++ /usr/local/share/cassandra/nodetool.in.sh \ ++ /opt/cassandra/nodetool.in.sh; do + if [ -r "$include" ]; then + . "$include" + break @@ -50,15 +50,15 @@ exit 1 fi diff --git a/cassandra.service b/cassandra.service new file mode 100644 index 0000000..8f696c9 --- /dev/null +++ b/cassandra.service @@ -0,0 +1,17 @@ +[Unit] +Description=Cassandra database server for high-scale application +Documentation=http://docs.datastax.com +After=syslog.target network.target + +[Service] +Type=forking +User=cassandra +EnvironmentFile=-/etc/sysconfig/cassandra +ExecStart=/usr/bin/cassandra $OPTIONS + +[Manager] +DefaultTimeoutStartSec=120 +DefaultTimeoutStopSec=9000 + +[Install] +WantedBy=multi-user.target diff --git a/cassandra.spec b/cassandra.spec index 029dc05..33f4864 100644 --- a/cassandra.spec +++ b/cassandra.spec @@ -11,7 +11,7 @@ Name: %{?scl_prefix}cassandra Version: 3.9 -Release: 3%{?dist} +Release: 4%{?dist} Summary: Client utilities for %{pkg_name} # Apache (v2.0) BSD (3 clause): # ./src/java/org/apache/cassandra/utils/vint/VIntCoding.java @@ -19,7 +19,7 @@ License: ASL 2.0 and BSD URL: http://cassandra.apache.org/ Source0: https://github.com/apache/%{pkg_name}/archive/%{pkg_name}-%{version}.tar.gz Source1: %{pkg_name}.logrotate -Source2: %{pkg_name}d.service +Source2: %{pkg_name}.service Source3: %{pkg_name}-tmpfile # pom files are not generated but used are the ones from mavencentral # because of orphaned maven-ant-task package doing the work in this case @@ -58,7 +58,7 @@ Provides: cqlsh = %{cqlsh_version} %description This package contains all client utilities for %{pkg_name}. These are: -1. Commandline client used to communicate with %{pkg_name} server called cqlsh. +1. Command line client used to communicate with %{pkg_name} server called cqlsh. 2. Command line interface for managing cluster called nodetool. 3. Tools for using, upgrading, and changing %{pkg_name} SSTables. @@ -135,6 +135,8 @@ Summary: OpenSource database server for high-scale application Requires(pre): shadow-utils Requires: %{?scl_prefix}sigar Requires: %{pkg_name}-java-libs = %{version}-%{release} +Requires: jctools +Requires: procps-ng %{?systemd_ordering} BuildRequires: systemd @@ -232,7 +234,7 @@ rm test/unit/org/apache/cassandra/hadoop/ColumnFamilyInputFormatTest.java %pom_xpath_remove "pom:dependencies/pom:dependency/pom:classifier" build/%{pkg_name}-%{version}.pom # TRY remove cassandra-java-driver -#%pom_remove_dep -r com.datastax.cassandra:cassandra-driver-core build/%%{pkg_name}-%%{version}.pom +#%%pom_remove_dep -r com.datastax.cassandra:cassandra-driver-core build/%%{pkg_name}-%%{version}.pom #rm src/java/org/apache/cassandra/cql3/functions/UDFunction.java #rm src/java/org/apache/cassandra/cql3/functions/UDFContext.java #rm src/java/org/apache/cassandra/cql3/functions/JavaBasedUDFunction.java @@ -380,6 +382,7 @@ mkdir -p %{buildroot}%{_localstatedir}/log/%{pkg_name} install -p -D -m 644 "%{SOURCE1}" %{buildroot}%{_sysconfdir}/logrotate.d/%{pkg_name} install -p -D -m 755 bin/%{pkg_name} %{buildroot}%{_bindir}/%{pkg_name} install -p -D -m 755 bin/%{pkg_name}.in.sh %{buildroot}%{_datadir}/%{pkg_name}/%{pkg_name}.in.sh +install -p -D -m 755 bin/nodetool.in.sh %{buildroot}%{_datadir}/%{pkg_name}/nodetool.in.sh install -p -D -m 755 conf/%{pkg_name}-env.sh %{buildroot}%{_datadir}/%{pkg_name}/%{pkg_name}-env.sh install -p -D -m 644 conf/%{pkg_name}.yaml %{buildroot}%{_sysconfdir}/%{pkg_name}/%{pkg_name}.yaml install -p -D -m 644 conf/%{pkg_name}-jaas.config %{buildroot}%{_sysconfdir}/%{pkg_name}/%{pkg_name}-jaas.config @@ -407,8 +410,8 @@ install -p -D -m 755 tools/bin/%{pkg_name}-stress %{buildroot}%{_bindir}/%{pkg_n install -p -D -m 755 tools/bin/%{pkg_name}-stressd %{buildroot}%{_bindir}/%{pkg_name}-stressd %endif -# install cassandrad.service -install -p -D -m 644 "%{SOURCE2}" %{buildroot}%{_unitdir}/%{pkg_name}d.service +# install cassandra.service +install -p -D -m 644 "%{SOURCE2}" %{buildroot}%{_unitdir}/%{pkg_name}.service %pre server getent group %{pkg_name} >/dev/null || groupadd -f -g %{gid_uid} -r %{pkg_name} @@ -424,13 +427,13 @@ fi exit 0 %post server -%systemd_post %{pkg_name}d.service +%systemd_post %{pkg_name}.service %preun server -%systemd_preun %{pkg_name}d.service +%systemd_preun %{pkg_name}.service %postun server -%systemd_postun_with_restart %{pkg_name}d.service +%systemd_postun_with_restart %{pkg_name}.service %files -f .mfiles-client %doc README.asc CHANGES.txt NEWS.txt conf/cqlshrc.sample @@ -449,13 +452,14 @@ exit 0 %attr(755, root, root) %{_bindir}/sstablerepairedset %attr(755, root, root) %{_bindir}/sstablesplit %attr(755, root, root) %{_bindir}/cqlsh +%{_datadir}/%{pkg_name}/nodetool.in.sh %files java-libs -f .mfiles %license LICENSE.txt NOTICE.txt %files server %license LICENSE.txt NOTICE.txt -%dir %attr(755, root, root) %{_sharedstatedir}/%{pkg_name} +%dir %attr(711, root, root) %{_sharedstatedir}/%{pkg_name} %dir %attr(700, %{pkg_name}, %{pkg_name}) %{_sharedstatedir}/%{pkg_name}/data %dir %attr(700, %{pkg_name}, %{pkg_name}) %{_localstatedir}/log/%{pkg_name} %{_bindir}/%{pkg_name} @@ -470,7 +474,7 @@ exit 0 %config(noreplace) %{_sysconfdir}/%{pkg_name}/logback.xml %config(noreplace) %{_sysconfdir}/%{pkg_name}/metrics-reporter-config-sample.yaml %config(noreplace) %{_sysconfdir}/logrotate.d/%{pkg_name} -%{_unitdir}/%{pkg_name}d.service +%{_unitdir}/%{pkg_name}.service %files parent -f .mfiles-parent %license LICENSE.txt NOTICE.txt @@ -497,6 +501,12 @@ exit 0 %license LICENSE.txt NOTICE.txt %changelog +* Tue Feb 07 2017 Tomas Repik - 3.9-4 +- service renamed +- nodetool include file added +- runtime dependencies for server added +- init script waits until the server is ready to accept connections + * Tue Jan 31 2017 Tomas Repik - 3.9-3 - reworked the subpackage structure diff --git a/cassandrad.service b/cassandrad.service deleted file mode 100644 index fef323b..0000000 --- a/cassandrad.service +++ /dev/null @@ -1,13 +0,0 @@ -[Unit] -Description=Cassandra database server for high-scale application -Documentation=http://docs.datastax.com -After=syslog.target network.target - -[Service] -Type=forking -User=cassandra -EnvironmentFile=-/etc/sysconfig/cassandra -ExecStart=/usr/bin/cassandra $OPTIONS - -[Install] -WantedBy=multi-user.target