Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : master
---------------------------------------------------------------
commit 54ea481e3bf4b8973cefa1d1007ba698d27ed786
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Fri Sep 11 15:01:04 2015 +0200
[backend] split backend daemon: extracting RedisLogHandler
---------------------------------------------------------------
backend/backend/daemons/backend.py | 57 --------------------
backend/backend/daemons/log.py | 4 +-
backend/run/copr_run_logger.py | 20 +++++++
...ackend-vmm.service => copr-backend-log.service} | 5 +-
backend/run/systemd/copr-backend-vmm.service | 2 +-
backend/run/systemd/copr-backend.service | 1 +
6 files changed, 27 insertions(+), 62 deletions(-)
diff --git a/backend/backend/daemons/backend.py b/backend/backend/daemons/backend.py
index 1dd1385..4a0096b 100644
--- a/backend/backend/daemons/backend.py
+++ b/backend/backend/daemons/backend.py
@@ -24,19 +24,9 @@ from backend.frontend import FrontendClient
from ..exceptions import CoprBackendError
from ..helpers import BackendConfigReader, get_redis_logger
from .job_grab import CoprJobGrab
-from .log import RedisLogHandler
from .dispatcher import Worker
-from .vm_master import VmMaster
-
-from ..vm_manage.event_handle import EventHandler
-from ..vm_manage.manager import VmManager
-from ..vm_manage.spawn import Spawner
-from ..vm_manage.check import HealthChecker
-from ..vm_manage.terminate import Terminator
-
-
class CoprBackend(object):
"""
@@ -64,11 +54,8 @@ class CoprBackend(object):
self.update_conf()
self.lock = multiprocessing.Lock()
-
self.task_queues = {}
- # event format is a dict {when:time, who:[worker|logger|job|main],
- # what:str}
self.frontend_client = FrontendClient(self.opts)
self.is_running = False
@@ -102,11 +89,6 @@ class CoprBackend(object):
self.clean_task_queues()
- def _start_log_handler(self):
- self.redis_log_handler = RedisLogHandler(self.opts)
- self.redis_log_handler.start()
- time.sleep(1)
-
def _start_job_grab(self):
self.log.info("Starting up Job Grabber")
self._jobgrab = CoprJobGrab(opts=self.opts,
@@ -116,42 +98,13 @@ class CoprBackend(object):
def init_sub_process(self):
"""
- - Create backend logger
- Create job grabber
- - Create VM management
"""
-
- self._start_log_handler()
self._start_job_grab()
- # self._start_vmm()
-
- def _start_vmm(self):
- self.log.info("Creating VM Spawner, HealthChecker, Terminator")
- self.spawner = Spawner(self.opts)
- self.checker = HealthChecker(self.opts)
- self.terminator = Terminator(self.opts)
- self.vm_manager = VmManager(opts=self.opts,
- logger=self.log,
- )
- self.vm_manager.post_init()
- self.log.info("Starting up VM EventHandler")
- self.event_handler = EventHandler(self.opts,
- vmm=self.vm_manager,
- terminator=self.terminator)
- self.event_handler.post_init()
- self.event_handler.start()
-
- self.log.info("Starting up VM Master")
- self.vm_master = VmMaster(self.opts,
- vmm=self.vm_manager,
- spawner=self.spawner,
- checker=self.checker)
- self.vm_master.start()
def ensure_sub_processes_alive(self):
if self.is_running:
for proc, start_method in [
- (self.redis_log_handler, self._start_log_handler),
(self._jobgrab, self._start_job_grab),
]:
@@ -244,16 +197,6 @@ class CoprBackend(object):
self.log.exception(err)
return
- try:
- self.vm_master.terminate()
- except Exception:
- self.log.exception("Failed to terminate vmm daemon")
- try:
- self.event_handler.terminate()
- self.event_handler.join()
- except Exception:
- self.log.exception("Failed to terminate vm EventHandler")
-
def run(self):
"""
Starts backend process. Control sub process start/stop.
diff --git a/backend/backend/daemons/log.py b/backend/backend/daemons/log.py
index f74962e..01c0ca0 100644
--- a/backend/backend/daemons/log.py
+++ b/backend/backend/daemons/log.py
@@ -62,14 +62,14 @@ class CustomFilter(logging.Filter):
return True
-class RedisLogHandler(Process):
+class RedisLogHandler(object):
"""
Single point to collect logs through redis pub/sub and write
them through standard python logging lib
"""
def __init__(self, opts):
- Process.__init__(self, name="log_handler")
+ # Process.__init__(self, name="log_handler")
self.opts = opts
diff --git a/backend/run/copr_run_logger.py b/backend/run/copr_run_logger.py
new file mode 100755
index 0000000..6b41a74
--- /dev/null
+++ b/backend/run/copr_run_logger.py
@@ -0,0 +1,20 @@
+#!/usr/bin/python2
+# coding: utf-8
+
+from __future__ import print_function
+from __future__ import unicode_literals
+from __future__ import division
+from __future__ import absolute_import
+
+from backend.helpers import get_backend_opts
+from backend.daemons.log import RedisLogHandler
+
+
+def main():
+ opts = get_backend_opts()
+ handler = RedisLogHandler(opts)
+ handler.run()
+
+
+if __name__ == "__main__":
+ main()
diff --git a/backend/run/systemd/copr-backend-vmm.service
b/backend/run/systemd/copr-backend-log.service
similarity index 59%
copy from backend/run/systemd/copr-backend-vmm.service
copy to backend/run/systemd/copr-backend-log.service
index 9784b93..1577743 100644
--- a/backend/run/systemd/copr-backend-vmm.service
+++ b/backend/run/systemd/copr-backend-log.service
@@ -1,13 +1,14 @@
[Unit]
-Description=Copr Backend service
+Description=Copr Backend service, Log Handler component
After=syslog.target network.target auditd.service
+Before=copr-backend.service
[Service]
Type=simple
Environment="PYTHONPATH=/usr/share/copr/"
User=copr
Group=copr
-ExecStart=/usr/bin/copr_run_vmm.py
+ExecStart=/usr/bin/copr_run_logger.py
[Install]
WantedBy=multi-user.target
diff --git a/backend/run/systemd/copr-backend-vmm.service
b/backend/run/systemd/copr-backend-vmm.service
index 9784b93..40a3767 100644
--- a/backend/run/systemd/copr-backend-vmm.service
+++ b/backend/run/systemd/copr-backend-vmm.service
@@ -1,5 +1,5 @@
[Unit]
-Description=Copr Backend service
+Description=Copr Backend service, Virtual Machine Management component
After=syslog.target network.target auditd.service
[Service]
diff --git a/backend/run/systemd/copr-backend.service
b/backend/run/systemd/copr-backend.service
index 8aa36db..ea43924 100644
--- a/backend/run/systemd/copr-backend.service
+++ b/backend/run/systemd/copr-backend.service
@@ -2,6 +2,7 @@
Description=Copr Backend service, Virtual Machine Management component
After=syslog.target network.target auditd.service
Requires=copr-backend-vmm.service
+Wants=copr-backend-log.service
[Service]
Type=simple