Repository :
http://git.fedorahosted.org/cgit/copr.git
On branch : master
---------------------------------------------------------------
commit 5470aa27f25ae9e03827ba3e5ee34a64a1ea2c5a
Author: Valentin Gologuzov <vgologuz(a)redhat.com>
Date: Thu Apr 16 12:28:57 2015 +0200
[backend] VMM aware cleunup_vm_nova
---------------------------------------------------------------
backend/backend/daemons/vm_master.py | 1 -
backend/backend/helpers.py | 3 +++
backend/backend/vm_manage/manager.py | 2 +-
backend/docs/source/conf.py | 2 +-
backend/run/cleanup_vm_nova.py | 27 +++++++++++++++++++++++----
5 files changed, 28 insertions(+), 7 deletions(-)
diff --git a/backend/backend/daemons/vm_master.py b/backend/backend/daemons/vm_master.py
index f9a7e8a..7f3bbe0 100644
--- a/backend/backend/daemons/vm_master.py
+++ b/backend/backend/daemons/vm_master.py
@@ -97,7 +97,6 @@ class VmMaster(Process):
for vmd in self.vmm.get_vm_by_group_and_state_list(None, [VmStates.IN_USE]):
self.check_one_vm_for_dead_builder(vmd)
-
def check_vms_health(self):
# for machines in state ready and time.time() - vm.last_health_check >
threshold_health_check_period
states_to_check = [VmStates.CHECK_HEALTH_FAILED, VmStates.READY,
diff --git a/backend/backend/helpers.py b/backend/backend/helpers.py
index 382716a..dc97854 100644
--- a/backend/backend/helpers.py
+++ b/backend/backend/helpers.py
@@ -154,6 +154,9 @@ class BackendConfigReader(object):
"max_vm_per_user": _get_conf(
cp, "backend",
"group{}_max_vm_per_user".format(group_id),
default=4, mode="int"),
+ "max_builds_per_vm": _get_conf(
+ cp, "backend",
"group{}_max_builds_per_vm".format(group_id),
+ default=10, mode="int"),
"max_spawn_processes": _get_conf(
cp, "backend",
"group{}_max_spawn_processes".format(group_id),
default=2, mode="int"),
diff --git a/backend/backend/vm_manage/manager.py b/backend/backend/vm_manage/manager.py
index c058f2a..d519531 100644
--- a/backend/backend/vm_manage/manager.py
+++ b/backend/backend/vm_manage/manager.py
@@ -67,7 +67,7 @@ if old_state ~= "in_use" then
else
redis.call("HMSET", KEYS[1], "state", "ready",
"last_release", ARGV[1])
redis.call("HDEL", KEYS[1], "in_use_since",
"used_by_pid", "task_id", "build_id", "chroot")
-
+ redis.call("HINCRBY", KEYS[1], "builds_count", 1)
local check_fails = tonumber(redis.call("HGET", KEYS[1],
"check_fails"))
if check_fails > 0 then
diff --git a/backend/docs/source/conf.py b/backend/docs/source/conf.py
index 6d3a878..fbfe196 100644
--- a/backend/docs/source/conf.py
+++ b/backend/docs/source/conf.py
@@ -49,7 +49,7 @@ sys.path.append(os.path.abspath('../../../python/'))
# coming with Sphinx (named 'sphinx.ext.*') or your custom ones.
extensions = ['sphinx.ext.autodoc', 'sphinx.ext.coverage',
'sphinx.ext.ifconfig', 'sphinx.ext.viewcode']
-extensions += ['sphinxarg.ext']
+# extensions += ['sphinxarg.ext']
# Add any paths that contain templates here, relative to this directory.
templates_path = ['_templates']
diff --git a/backend/run/cleanup_vm_nova.py b/backend/run/cleanup_vm_nova.py
index e23098c..f662258 100755
--- a/backend/run/cleanup_vm_nova.py
+++ b/backend/run/cleanup_vm_nova.py
@@ -16,6 +16,8 @@ from novaclient.v1_1.client import Client
sys.path.append("/usr/share/copr/")
+
+from backend.helpers import BackendConfigReader
try:
from backend.helpers import utc_now
except ImportError:
@@ -29,7 +31,10 @@ except ImportError:
u = datetime.utcnow()
u = u.replace(tzinfo=pytz.utc)
return u
-
+try:
+ from backend.vm_manage.manager import VmManager
+except ImportError:
+ VmManager = None
logging.getLogger("requests").setLevel(logging.ERROR)
@@ -51,6 +56,17 @@ def get_client(conf):
insecure=True)
+def get_managed_vms_names():
+ result = []
+ if VmManager:
+ opts = BackendConfigReader().read()
+ vmm = VmManager(opts, log)
+ vmm.post_init()
+ result.extend(vmd.vm_name for vmd in vmm.get_all_vm())
+
+ return result
+
+
class Cleaner(object):
def __init__(self, conf):
self.conf = conf
@@ -58,10 +74,13 @@ class Cleaner(object):
self.ps_set = None
def post_init(self):
- self.nt = get_client(self.conf)
- # TODO: use VM management after release
+ # TODO: use only VM management after release
self.ps_set = "\n".join(p.name + " ".join(p.cmdline) for p in
psutil.process_iter())
- # log.debug("ps_set: \n{}".format(self.ps_set))
+ self.ps_set += "\n".join(get_managed_vms_names())
+ log.info("ps_set: \n{}".format(self.ps_set))
+
+ self.nt = get_client(self.conf)
+
@staticmethod
def terminate(srv):