Temporary fix for dual hvm/pvm instances
authorIustin Pop <iustin@google.com>
Tue, 14 Oct 2008 10:20:10 +0000 (10:20 +0000)
committerIustin Pop <iustin@google.com>
Tue, 14 Oct 2008 10:20:10 +0000 (10:20 +0000)
We have a problem with the current model of combining instance lists
from multiple hypervisors: we don't allow duplicates, but "xm list"
gives the same output for both pvm and hvm. This is a lack in the actual
xen hypervisor implementation/split between pvm and hvm, but for now we
implement a weak workaround: identical instance params will be allowed,
and merged. This breaks because there is a delta in listing, and should
be treated as temporary workaround only.

Note that there are two cases for duplicate instance: the above one (xen
is the same, whether pvm or hvm), and the other case, the real error,
when we have two different hypervisors reporting the same instance name.
The latter case needs to be handled better (not by refusing to list the
instances in the backend).

Reviewed-by: ultrotter

lib/backend.py

index 6f294d9..9a6b5e5 100644 (file)
@@ -502,14 +502,16 @@ def GetAllInstancesInfo(hypervisor_list):
     iinfo = hypervisor.GetHypervisor(hname).GetAllInstancesInfo()
     if iinfo:
       for name, inst_id, memory, vcpus, state, times in iinfo:
-        if name in output:
-          raise errors.HypervisorError("Instance %s running duplicate" % name)
-        output[name] = {
+        value = {
           'memory': memory,
           'vcpus': vcpus,
           'state': state,
           'time': times,
           }
+        if name in output and output[name] != value:
+          raise errors.HypervisorError("Instance %s running duplicate"
+                                       " with different parameters" % name)
+        output[name] = value
 
   return output