Hello Gerard,
thanks for your reply.

It seems nodetool works only when the cluster is up and running.
In case of a bad startup of Cassandra, if I run "nodetool status" I get one of these 2 errors:

1) error: No nodes present in the cluster. Has this node finished starting up?
-- StackTrace --
java.lang.RuntimeException: No nodes present in the cluster. Has this node finished starting up? at org.apache.cassandra.dht.Murmur3Partitioner.describeOwnership(Murmur3Partitioner.java:129) at org.apache.cassandra.service.StorageService.effectiveOwnership(StorageService.java:3960) at org.apache.cassandra.service.StorageService.effectiveOwnership(StorageService.java:176)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:606)

2) nodetool: Failed to connect to '127.0.0.1:7199' - ConnectException: 'Connection refused'.

In both cases, the nodetool status command kills my Bash script.

Since I want to do some updates on Cassandra right after startup, I must wait until the cluster is ready to process requests. Depending on the hardware, the Cassandra startup may take some time, so I need to be able to detect when Cassandra is up and running.

What I am trying to do is something like follows:

execute cassandra start [=> $CASSANDRA_HOME/bin/cassandra -p $CASSANDRA_PID_FILE]
while (cassandra_status != OK && retries < N){
cassandra_status = some command that returns the status of cassandra startup
    retries++
}
if (cassandra_status != OK){
    echo the user and do some countermeasures
} else {
make updates on Cassandra [=> $CASSANDRA_HOME/bin/cqlsh -f $DATAFARI_HOME/bin/common/config/cassandra/tables]
}

Do you have any idea about the command to use here?
cassandra_status = some command that returns the status of cassandra startup

Thanks

Best regards,
*Giovanni Usai
* giovanni.u...@francelabs.com <mailto:giovanni.u...@francelabs.com>


www.francelabs.com <http://www.francelabs.com/>

CEEI Nice Premium
1 Bd. Maître Maurice Slama
06200 Nice FRANCE

Ph: +33 (0)9 72 43 72 85

On 01/04/2016 03:51 PM, Gerard Maas wrote:
(Hit enter too fast)

In particular, `nodetool status` will give you a summary of the status of the cluster. See the documentation for the parameters it takes.

-kr, Gerard.

On Mon, Jan 4, 2016 at 3:49 PM, Gerard Maas <gerard.m...@gmail.com <mailto:gerard.m...@gmail.com>> wrote:

    I think you are looking for the nodetool utility:
    
https://docs.datastax.com/en/cassandra/2.1/cassandra/tools/toolsNodetool_r.html

    On Mon, Jan 4, 2016 at 1:47 PM, Giovanni Usai
    <giovanni.u...@francelabs.com
    <mailto:giovanni.u...@francelabs.com>> wrote:

        Hello,
        I would gladly welcome the help of the community on the
        following issue I am having while starting Cassandra.

        I am starting Cassandra by a Bash script in this way:

        - $CASSANDRA_HOME/bin/cassandra -p $CASSANDRA_PID_FILE
        and then, I submit some updates via
        - $CASSANDRA_HOME/bin/cqlsh -f
        $DATAFARI_HOME/bin/common/config/cassandra/tables

        => First question: is it a good idea? Or, are there better
        ways to do start Cassandra?


        If it is a good idea to use Bash, this is my need: when
        something goes wrong (e.g. privileges issue on  Cassandra's
        data directory, etc), I would like to detect it to be able to
        apply some countermeasures.

        => Second question: do you know what's the best way to get the
        Cassandra and CQLSH status from Bash (if it is possible)?

        These are all the approaches that I have already tried, with
        no chance:
        - use the return code of Cassandra script ($? Bash operator),
        but it returns all the times 0 even if something goes wrong.
        - grep the Cassandra logs looking for "Exception" or "Error"
        (after redirection with &> ), but it doesn't work as they are
        not yet flushed by Cassandra (as a result, the calling bash
        exits).
        - get the output of the Cassandra script with something like
        cassandra_return=$($CASSANDRA_HOME/bin/cassandra -p
        $CASSANDRA_PID_FILE), but the variable is empty all the times.
        - detach Cassandra process from calling script with '&'
        operator and then grep the logs or get the return code, but it
        doesn't work neither.

        Furthermore, when CQLSH script cannot connect to Cassandra, it
        prints this error on console:
        Connection error: ('Unable to connect to any servers',
        {'127.0.0.1': error(111, "Tried connecting to [('127.0.0.1',
        9042)]. Last error: Connection refused")})
        and then kills the calling script.

        Just for your information, we are embedding Cassandra in our
        open source product "Datafari".

        Thanks for your help and
--
        Best regards,
        *Giovanni Usai
        * giovanni.u...@francelabs.com
        <mailto:giovanni.u...@francelabs.com>


        www.francelabs.com <http://www.francelabs.com/>

        CEEI Nice Premium
        1 Bd. Maître Maurice Slama
        06200 Nice FRANCE

        Ph: +33 (0)9 72 43 72 85




Reply via email to