PR#4348: kojid --single mode

Merges #4348
https://pagure.io/koji/pull-request/4348

Fixes: #4440
https://pagure.io/koji/issue/4440
kojid --single mode
This commit is contained in:
Mike McLean 2025-08-20 09:51:59 -04:00
commit 67cc2cdbac
4 changed files with 13 additions and 1 deletions

View file

@ -189,6 +189,9 @@ def main(options, session):
# from getting overloaded.
logger.debug('Sleeping for %s', options.sleeptime)
time.sleep(options.sleeptime)
elif options.single:
# exit after first task
break
except (SystemExit, KeyboardInterrupt):
logger.warning("Exiting")
break
@ -6752,6 +6755,8 @@ def get_options():
parser.add_option("-f", "--fg", dest="daemon",
action="store_false", default=True,
help="run in foreground")
parser.add_option("--single", action="store_true",
help="run a single task in foreground, for debugging")
parser.add_option("--force-lock", action="store_true", default=False,
help="force lock for exclusive session")
parser.add_option("-v", "--verbose", action="store_true", default=False,
@ -6789,6 +6794,10 @@ def get_options():
# not reached
assert False # pragma: no cover
# --single implies --fg
if options.single:
options.daemon = False
# load local config
config = koji.read_config_files(options.configFile, raw=True)
for x in config.sections():

View file

@ -1379,7 +1379,7 @@ class TaskManager(object):
return False
# otherwise...
raise
if handler.Foreground:
if handler.Foreground or getattr(self.options, "single"):
self.logger.info("running task in foreground")
handler.setManager(self)
self.runTask(handler)

View file

@ -13,6 +13,7 @@ class TestGetNextTask(unittest.TestCase):
def setUp(self):
self.options = mock.MagicMock()
self.options.single = False
self.session = mock.MagicMock()
self.tm = koji.daemon.TaskManager(self.options, self.session)
self.tm.readyForTask = mock.MagicMock()
@ -65,6 +66,7 @@ class TestTakeTask(unittest.TestCase):
def setUp(self):
self.options = mock.MagicMock()
self.options.single = False
self.session = mock.MagicMock()
self.tm = koji.daemon.TaskManager(self.options, self.session)
self.tm.readyForTask = mock.MagicMock()

View file

@ -21,6 +21,7 @@ class TestMain(unittest.TestCase):
# set up task handler
self.session = mock.MagicMock()
self.options = mock.MagicMock()
self.options.single = False
self.options.plugin = []
self.options.sleeptime = 1
self.options.pluginpath = ''