You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cassandra.apache.org by "Murukesh Mohanan (JIRA)" <ji...@apache.org> on 2017/06/29 06:54:00 UTC

[jira] [Commented] (CASSANDRA-13436) Stopping Cassandra shows status "failed" due to non-zero exit status

    [ https://issues.apache.org/jira/browse/CASSANDRA-13436?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16067859#comment-16067859 ] 

Murukesh Mohanan commented on CASSANDRA-13436:
----------------------------------------------

I had a look at the current init script, and tried writing a systemd equivalent. This raised some questions:

1. The part that doesn't easily translate to systemd is the JVM search code (which searches for Java in certain directories and sets the command and {{JAVA_HOME}} appropriately. Perhaps we should leave it to the system administrator to set it in {{/etc/default/cassandra}}?
2. The PID file becomes unnecessary since systemd can track the processes started by a service. But I'm not sure if nothing outside the init script uses the PID file.
3. The log file could also be considered unnecessary since systemd-journald will gather up any output. But, again, people might expect the logs to stored in {{/var/log/cassandra/cassandra.log}}. 

So, we could have a  minimal systemd unit like so (running cassandra in the foreground making it a simple service):

{code}
[Unit]
Description=Cassandra is a distributed storage system for structured data.

[Service]
Environment=CASSANDRA_HOME=/usr/share/cassandra CASSANDRA_CONF=/etc/cassandra/conf CASSANDRA_INCLUDE=/usr/share/cassandra/cassandra.in.sh
EnvironmentFile=-/etc/default/cassandra
User=cassandra
ExecStart=/usr/sbin/cassandra -f
TimeoutStopSec=25
SuccessExitStatus=0 143

[Install]
WantedBy=multi-user.target
{code}

Or more verbose:

{code}
[Unit]
Description=Cassandra is a distributed storage system for structured data.

[Service]
Environment=CASSANDRA_HOME=/usr/share/cassandra CASSANDRA_CONF=/etc/cassandra/conf CASSANDRA_INCLUDE=/usr/share/cassandra/cassandra.in.sh
EnvironmentFile=-/etc/default/cassandra
User=cassandra
PermissionsStartOnly=true
ExecStartPre=/usr/bin/install -m 755 -o cassandra -g cassandra -d /var/run/cassandra
ExecStart=/bin/sh -c '/usr/sbin/cassandra -p /var/run/cassandra/cassandra.pid > /var/log/cassandra/cassandra.log 2>&1'
Type=forking
PIDFile=/var/run/cassandra/cassandra.pid
TimeoutStopSec=25
SuccessExitStatus=0 143

[Install]
WantedBy=multi-user.target
{code}

I prefer the simpler unit. Thoughts?

> Stopping Cassandra shows status "failed" due to non-zero exit status
> --------------------------------------------------------------------
>
>                 Key: CASSANDRA-13436
>                 URL: https://issues.apache.org/jira/browse/CASSANDRA-13436
>             Project: Cassandra
>          Issue Type: Sub-task
>          Components: Packaging
>            Reporter: Stefan Podkowinski
>
> Systemd will monitor the process from the pid file and save the return status once if has been stopped. In case the process terminates with a status other than zero, it will assume the process terminated abnormaly. Stopping Cassandra using the cassandra script will send a kill signal to the JVM causing it to terminate. If this happen, the JVM will exit with status 143, no matter if shutdown hooks have been executed or not. In order to make systemd recognize this as a normal exit code, the following should be added to the yet to be created unit file:
> {noformat}
> [Service]
> ...
> SuccessExitStatus=0 143
> ...
> {noformat}



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cassandra.apache.org
For additional commands, e-mail: commits-help@cassandra.apache.org