Skip to content

Commit 3719888

Browse files
committed
c-foreach-restart: add arguments for retries and delay
1 parent 62a6c16 commit 3719888

File tree

2 files changed

+21
-7
lines changed

2 files changed

+21
-7
lines changed

c-foreach-restart

Lines changed: 14 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,29 @@
11
#!/usr/bin/python
22

33

4+
import argparse
45
import logging
6+
import sys
57

68
from cassandra.tools import get_instances
79
from cassandra.tools.config import LOG_LEVEL
810

911
logging.basicConfig(level=LOG_LEVEL)
1012

1113

12-
def main():
14+
def main(retries, delay):
1315
for instance in get_instances():
14-
instance.restart()
16+
instance.restart(retries=retries, delay=delay)
17+
18+
def parse_args():
19+
parser = argparse.ArgumentParser(description="Cassandra instance restarter")
20+
parser.add_argument("-r", "--retries", metavar="RETRIES", default=10, type=int,
21+
help="Maximum number of times to check if service is up.")
22+
parser.add_argument("-d", "--delay", metavar="DELAY", default=6, type=int,
23+
help="Number seconds between connection attempts, in seconds.")
24+
return parser.parse_args(sys.argv[1:])
1525

1626

1727
if __name__ == "__main__":
18-
main()
28+
args = parse_args()
29+
main(args.retries, args.delay)

cassandra/tools/instances.py

Lines changed: 7 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,8 @@ def __get(key):
4545
"""
4646
Restart this Cassandra instance.
4747
"""
48-
def restart(self):
48+
def restart(self, retries=10, delay=6):
49+
self.__log_debug("Restarting instance... (retries=%s, delay=%s)", retries, delay)
4950
self.__log_info("Disabling client ports...")
5051
self.nodetool.run("disablebinary")
5152
self.nodetool.run("disablethrift")
@@ -54,8 +55,7 @@ def restart(self):
5455
self.__log_info("Restarting service %s", self.service_name)
5556
call("systemctl", "restart", self.service_name)
5657
listening = False
57-
# TODO: The number of retries and timeout used should be configurable
58-
for i in range(0, 10):
58+
for i in range(0, retries):
5959
logging.debug("Testing CQL port (attempt #%s)", (i + 1))
6060
if self.listening(self.rpc_address, self.native_transport_port):
6161
self.__log_info("CQL (%s:%s) is UP", self.rpc_address, self.native_transport_port)
@@ -67,11 +67,14 @@ def restart(self):
6767
self.rpc_address,
6868
self.native_transport_port
6969
)
70-
sleep(6)
70+
sleep(delay)
7171
if not listening:
7272
self.__log_error("CQL (%s:%s) DOWN", self.rpc_address, self.native_transport_port)
7373
raise Exception("{} restart FAILED".format(self.service_name))
7474

75+
def __log_debug(self, msg, *args, **kwargs):
76+
self.__log(logging.DEBUG, msg, *args, **kwargs)
77+
7578
def __log_info(self, msg, *args, **kwargs):
7679
self.__log(logging.INFO, msg, *args, **kwargs)
7780

0 commit comments

Comments
 (0)