[Kimchi-devel] [PATCH] Do not reuse names when cloning the same VM more than once at the same time

Crístian Viana vianac at linux.vnet.ibm.com
Wed Jan 7 19:45:52 UTC 2015


If the user tries to clone a VM while it's already being cloned, the
name of the VM being cloned may be reused because Kimchi only avoids name
conflicts by looking at the existing VMs, not the ones being created at
the moment. When the second clone operation finishes, an error is raised
because that name is already defined.

Look at the names of the VMs being cloned, as well as the existing VMs',
in order to avoid name conflicts when cloning a VM.

Signed-off-by: Crístian Viana <vianac at linux.vnet.ibm.com>
---
 src/kimchi/model/vms.py | 19 ++++++++++++++++---
 1 file changed, 16 insertions(+), 3 deletions(-)

diff --git a/src/kimchi/model/vms.py b/src/kimchi/model/vms.py
index 3aa1145..9472b1c 100644
--- a/src/kimchi/model/vms.py
+++ b/src/kimchi/model/vms.py
@@ -314,9 +314,22 @@ class VMModel(object):
         if info['state'] != u'shutoff':
             raise InvalidParameter('KCHVM0033E', {'name': name})
 
-        # this name will be used as the Task's 'target_uri' so it needs to be
-        # defined now.
-        new_name = get_next_clone_name(self.vms.get_list(), name)
+        # the new VM's name will be used as the Task's 'target_uri' so it needs
+        # to be defined now.
+
+        vms_being_created = []
+
+        # lookup names of VMs being created right now
+        with self.objstore as session:
+            task_names = session.get_list('task')
+            for tn in task_names:
+                t = session.get('task', tn)
+                if t['target_uri'].startswith('/vms/'):
+                    uri_name = t['target_uri'][5:]  # 5 = len('/vms/')
+                    vms_being_created.append(uri_name)
+
+        current_vm_names = self.vms.get_list() + vms_being_created
+        new_name = get_next_clone_name(current_vm_names, name)
 
         # create a task with the actual clone function
         taskid = add_task(u'/vms/%s' % new_name, self._clone_task,
-- 
2.1.0




More information about the Kimchi-devel mailing list