cocluto v1.0.32 - added quman option --disable-sync
- the db synchronization mechanism needs some requirements that are not always available (sge commands such as qmod and qstat, write access on quman's database), as for example on simpaweb; in such environments, --disable-sync allows quman to work for query-only actions such as show-disable-requests work related to [https://bugzilla.ipr.univ-rennes.fr/show_bug.cgi?id=3093]
This commit is contained in:
parent
73522f83ed
commit
9305967d10
|
|
@ -1,7 +1,7 @@
|
||||||
#!/usr/bin/env python3
|
#!/usr/bin/env python3
|
||||||
from abc import ABC, abstractmethod
|
from abc import ABC, abstractmethod
|
||||||
import sys
|
import sys
|
||||||
from typing import List, Dict, Any, Union
|
from typing import List, Dict, Any, Union, Optional
|
||||||
import logging
|
import logging
|
||||||
import subprocess
|
import subprocess
|
||||||
import argparse
|
import argparse
|
||||||
|
|
@ -92,15 +92,11 @@ class MockGridEngine(IGridEngine):
|
||||||
|
|
||||||
class Sge(IGridEngine):
|
class Sge(IGridEngine):
|
||||||
dry_run: bool
|
dry_run: bool
|
||||||
|
qmod_is_available: Optional[bool]
|
||||||
|
|
||||||
def __init__(self, dry_run: bool = False):
|
def __init__(self, dry_run: bool = False):
|
||||||
self.dry_run = dry_run
|
self.dry_run = dry_run
|
||||||
if not self.dry_run:
|
self.qmod_is_available = None
|
||||||
# check that qmod command is available
|
|
||||||
try:
|
|
||||||
subprocess.run(["qmod", "-help"], check=True, capture_output=True)
|
|
||||||
except FileNotFoundError as exc:
|
|
||||||
raise RuntimeError("qmod command not found. Please make sure that the grid engine client is installed and qmod command is available in the PATH.") from exc
|
|
||||||
|
|
||||||
def run_qmod(self, args):
|
def run_qmod(self, args):
|
||||||
"""runs qmod with the given arguments."""
|
"""runs qmod with the given arguments."""
|
||||||
|
|
@ -108,11 +104,22 @@ class Sge(IGridEngine):
|
||||||
if self.dry_run:
|
if self.dry_run:
|
||||||
print(f"Dry run: {' '.join(cmd)}")
|
print(f"Dry run: {' '.join(cmd)}")
|
||||||
else:
|
else:
|
||||||
|
self.check_qmod_availability()
|
||||||
try:
|
try:
|
||||||
subprocess.run(cmd, check=True)
|
subprocess.run(cmd, check=True)
|
||||||
except subprocess.CalledProcessError as e:
|
except subprocess.CalledProcessError as e:
|
||||||
raise RuntimeError(f"qmod command failed: {e}") from e
|
raise RuntimeError(f"qmod command failed: {e}") from e
|
||||||
|
|
||||||
|
def check_qmod_availability(self):
|
||||||
|
if self.qmod_is_available is None:
|
||||||
|
self.qmod_is_available = False
|
||||||
|
# check that qmod command is available
|
||||||
|
try:
|
||||||
|
subprocess.run(["qmod", "-help"], check=True, capture_output=True)
|
||||||
|
except FileNotFoundError as exc:
|
||||||
|
raise RuntimeError("qmod command not found. Please make sure that the grid engine client is installed and qmod command is available in the PATH.") from exc
|
||||||
|
self.qmod_is_available = True
|
||||||
|
|
||||||
def disable_queue_machine(self, queue_machine: QueueMachineId):
|
def disable_queue_machine(self, queue_machine: QueueMachineId):
|
||||||
self.run_qmod(["-d", queue_machine])
|
self.run_qmod(["-d", queue_machine])
|
||||||
|
|
||||||
|
|
@ -417,6 +424,8 @@ def main():
|
||||||
"ssh_user": "qumandbw"}}
|
"ssh_user": "qumandbw"}}
|
||||||
parser.add_argument("--json", action="store_true", help="Output results in JSON format.")
|
parser.add_argument("--json", action="store_true", help="Output results in JSON format.")
|
||||||
parser.add_argument("--db-def", type=str, default=json.dumps(default_db_def), help="the definition in json format of the database storing the disable requests.")
|
parser.add_argument("--db-def", type=str, default=json.dumps(default_db_def), help="the definition in json format of the database storing the disable requests.")
|
||||||
|
# the db synchronization mechanism needs some requirements that are not always available (sge commands such as qmod and qstat, write access on quman's database), as for example on simpaweb; in such environments, --disable-sync allows quman to work for query-only actions such as show-disable-requests
|
||||||
|
parser.add_argument("--disable-sync", action="store_true", default=False, help="if set, disable the update of the db to fix potential inconsistencies with the current state of the queues, prior to execute the asked action")
|
||||||
|
|
||||||
# add-disable action
|
# add-disable action
|
||||||
add_parser = subparsers.add_parser("add-disable-request", help="adds a disable request to a queue")
|
add_parser = subparsers.add_parser("add-disable-request", help="adds a disable request to a queue")
|
||||||
|
|
@ -473,7 +482,9 @@ def main():
|
||||||
logging.debug("Connected to database successfully with connection %s", conn)
|
logging.debug("Connected to database successfully with connection %s", conn)
|
||||||
quman = QueueManager(conn, grid_engine)
|
quman = QueueManager(conn, grid_engine)
|
||||||
|
|
||||||
quman.synchronize_with_grid_engine()
|
if not args.disable_sync:
|
||||||
|
# fix potential inconsistencies in quman db regarding the current state of the queues
|
||||||
|
quman.synchronize_with_grid_engine()
|
||||||
|
|
||||||
if args.action == "add-disable-request":
|
if args.action == "add-disable-request":
|
||||||
queue_machines = quman.get_queue_machines(args.queue)
|
queue_machines = quman.get_queue_machines(args.queue)
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
__version__ = '1.0.31'
|
__version__ = '1.0.32'
|
||||||
|
|
||||||
|
|
||||||
class Version(object):
|
class Version(object):
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue