|
1 | 1 | # Copyright (c) 2016 Juniper Networks, Inc. All rights reserved.#
|
2 | 2 | from gevent import monkey
|
3 | 3 |
|
| 4 | +import os |
4 | 5 | import socket
|
5 | 6 | import yaml
|
6 | 7 | from pysandesh.gen_py.sandesh.ttypes import SandeshLevel
|
@@ -42,7 +43,39 @@ def status(self):
|
42 | 43 | # and this is not allowed in micrioservices setup
|
43 | 44 | pass
|
44 | 45 |
|
| 46 | + def is_nodetool_repair_running(self, event_mgr): |
| 47 | + repair_cmd = "nodetool -p {} repair".format(self.db_jmx_port) |
| 48 | + cmd = 'ps auxww' |
| 49 | + try: |
| 50 | + return repair_cmd in self.exec_cmd(cmd) |
| 51 | + except Exception as e: |
| 52 | + err_msg = "Failed to run cmd: {}.\nError: {}".format(cmd, e) |
| 53 | + event_mgr.msg_log(err_msg, level=SandeshLevel.SYS_ERR) |
| 54 | + # let's return True in case we can't detect nodetool status to avoid second run |
| 55 | + return True |
| 56 | + |
| 57 | + def get_cassandra_node_idx(self, event_mgr): |
| 58 | + db_nodes = None |
| 59 | + try: |
| 60 | + if self._db_owner == 'analytics': |
| 61 | + db_nodes = os.getenv('ANALYTICSDB_NODES') |
| 62 | + elif self._db_owner == 'config': |
| 63 | + db_nodes = os.getenv('CONFIGDB_NODES') |
| 64 | + db_nodes = db_nodes.split(',') |
| 65 | + db_nodes.sort() |
| 66 | + idx = db_nodes.index(self.hostip) |
| 67 | + except Exception as e: |
| 68 | + err_msg = "Failed to get node index. Error is {}".format(e) |
| 69 | + event_mgr.msg_log(err_msg, level=SandeshLevel.SYS_ERR) |
| 70 | + return -1 |
| 71 | + else: |
| 72 | + return idx |
| 73 | + |
45 | 74 | def repair(self, event_mgr):
|
| 75 | + if self.is_nodetool_repair_running(event_mgr): |
| 76 | + msg = "Can't run repair as nodetool is already running" |
| 77 | + event_mgr.msg_log(msg, level=SandeshLevel.SYS_ERR) |
| 78 | + return |
46 | 79 | keyspaces = []
|
47 | 80 | if self._db_owner == 'analytics':
|
48 | 81 | keyspaces = AnalyticsRepairNeededKeyspaces
|
|
0 commit comments