[Kimchi-devel] [kimchi-devel][PATCHv2] Fix update vcpu count: Check available vcpu count before update

lvroyce at linux.vnet.ibm.com lvroyce at linux.vnet.ibm.com
Tue Mar 24 09:53:08 UTC 2015


From: Royce Lv <lvroyce at linux.vnet.ibm.com>

Currently we just check vcpu count does not exceed host available
count when topology specified.
Actually vcpu count also need to be checked when only vcpu specified.
Move this check outside topology check and add it to param update.

Signed-off-by: Royce Lv <lvroyce at linux.vnet.ibm.com>
---
 src/kimchi/model/cpuinfo.py   | 8 ++++++--
 src/kimchi/model/templates.py | 6 +++---
 tests/test_model.py           | 2 +-
 tests/test_rest.py            | 1 -
 4 files changed, 10 insertions(+), 7 deletions(-)

diff --git a/src/kimchi/model/cpuinfo.py b/src/kimchi/model/cpuinfo.py
index 3411ef5..54bfad4 100644
--- a/src/kimchi/model/cpuinfo.py
+++ b/src/kimchi/model/cpuinfo.py
@@ -114,11 +114,15 @@ class CPUInfoModel(object):
         cores = topology['cores']
         threads = topology['threads']
 
+        self.check_vcpus(vcpus)
+
         if not self.guest_threads_enabled:
             raise InvalidOperation("KCHCPUINF0003E")
         if vcpus != sockets * cores * threads:
             raise InvalidParameter("KCHCPUINF0002E")
-        if vcpus > self.cores_available * self.threads_per_core:
-            raise InvalidParameter("KCHCPUINF0001E")
         if threads > self.threads_per_core:
             raise InvalidParameter("KCHCPUINF0002E")
+
+    def check_vcpus(self, vcpus):
+        if vcpus > self.cores_available * self.threads_per_core:
+            raise InvalidParameter("KCHCPUINF0001E")
diff --git a/src/kimchi/model/templates.py b/src/kimchi/model/templates.py
index 6bc8aca..14e5b37 100644
--- a/src/kimchi/model/templates.py
+++ b/src/kimchi/model/templates.py
@@ -53,7 +53,7 @@ class TemplatesModel(object):
                                            {'filename': iso, 'user': user,
                                             'err': excp})
 
-        cpu_info = params.get('cpu_info')
+        cpu_info = params.setdefault('cpu_info', dict())
         if cpu_info:
             topology = cpu_info.get('topology')
             # Check, even though currently only topology
@@ -68,8 +68,8 @@ class TemplatesModel(object):
                 # exception if a topology is invalid.
                 CPUInfoModel(conn=self.conn).\
                     check_topology(params['cpus'], topology)
-        else:
-            params['cpu_info'] = dict()
+        if params.get('cpus'):
+            CPUInfoModel(conn=self.conn).check_vcpus(params['cpus'])
 
         conn = self.conn.get()
         pool_uri = params.get(u'storagepool', '')
diff --git a/tests/test_model.py b/tests/test_model.py
index 0020022..138a7da 100644
--- a/tests/test_model.py
+++ b/tests/test_model.py
@@ -577,7 +577,7 @@ class ModelTests(unittest.TestCase):
         inst = model.Model(None,
                            objstore_loc=self.tmp_store)
 
-        orig_params = {'name': 'test', 'memory': '1024', 'cpus': '1',
+        orig_params = {'name': 'test', 'memory': '1024', 'cpus': 1,
                        'cdrom': UBUNTU_ISO}
         inst.templates_create(orig_params)
 
diff --git a/tests/test_rest.py b/tests/test_rest.py
index 07e5733..4ecf3ce 100644
--- a/tests/test_rest.py
+++ b/tests/test_rest.py
@@ -932,7 +932,6 @@ class RestTests(unittest.TestCase):
         task_info = model.storagevolumes_create('pool-3', params)
         wait_task(self._task_lookup, task_info['id'])
 
-
         storagevolume = json.loads(self.request(
             '/storagepools/kimchi_isos/storagevolumes/').read())[0]
         self.assertEquals('fedora.iso', storagevolume['name'])
-- 
1.9.1




More information about the Kimchi-devel mailing list