Hello,
thanks to everyone for the fast replies!
Unfortunately, since yesterday afternoon I have been assigned to a more
urgent task, so I will implement the solutions you proposed in the spare
time and I will let you know the outcomes asap (hopefully in few weeks).
Thanks a lot again!
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 05:52 PM, Gerard Maas wrote:
Hi Giovanni,
You could use netcat (nc) to test that the cassandra port is up and
use a timeout to decide when to take an action
nc -z localhost 9160
check for the exit code to decide what action to take.
-kr, Gerard.
On Mon, Jan 4, 2016 at 4:56 PM, Giovanni Usai
<giovanni.u...@francelabs.com <mailto:giovanni.u...@francelabs.com>>
wrote:
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
<http://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