On 09/14/2012 03:44 AM, Chris Evich wrote:
On 09/13/2012 01:51 PM, Lucas Meneghel Rodrigues wrote:
From: Yiqiao Pu<[email protected]>

Make kvm_vm create vm following the parameters, not the env,
otherwise the cases runs in a queue will create vm always
follow the first case's nic configuration.

Signed-off-by: Yiqiao Pu<[email protected]>
---
  client/tests/virt/virttest/kvm_vm.py | 26 +++++++++++++++++++++++---
  1 file changed, 23 insertions(+), 3 deletions(-)

diff --git a/client/tests/virt/virttest/kvm_vm.py b/client/tests/virt/virttest/kvm_vm.py
index 98dad8e..18f107c 100644
--- a/client/tests/virt/virttest/kvm_vm.py
+++ b/client/tests/virt/virttest/kvm_vm.py
@@ -904,6 +904,11 @@ class VM(virt_vm.BaseVM):
          # Clone this VM using the new params
          vm = self.clone(name, params, root_dir, copy_state=True)

+        # Update the virtnet with params
+ params_virtnet = utils_misc.VirtNet(params, name, self.instance)
+        if vm.virtnet != params_virtnet:
+            vm.virtnet = params_virtnet
+
          qemu_binary = utils_misc.get_path(os.path.join(root_dir,
params.get("vm_type")),
params.get("qemu_binary", "qemu"))
@@ -1435,6 +1440,10 @@ class VM(virt_vm.BaseVM):
          name = self.name
          params = self.params
          root_dir = self.root_dir
+        # Update the virtnet with params
+ params_virtnet = utils_misc.VirtNet(params, name, self.instance)
+        if self.virtnet != params_virtnet:
+            self.virtnet = params_virtnet

          # Verify the md5sum of the ISO images
          for cdrom in params.objects("cdroms"):
@@ -2619,11 +2628,22 @@ class VM(virt_vm.BaseVM):
          """
          if (self.__make_qemu_command() !=
                  self.__make_qemu_command(name, params, basedir)):
- logging.debug("VM params in env don't match requested, restarting.")
-            return True
+            restart = True
+        else:
+            for i, nic in enumerate(params.objects('nics')):
+                if (self.virtnet[i]['netdst'] !=
+                    params.object_params('nic').get('netdst')):
+                    restart = True
+            else:
+                restart = False
+
+        if restart:
+            logging.debug("VM params in env don't match requested, "
+                          "restarting.")
          else:
logging.debug("VM params in env do match requested, continuing.")
-            return False
+
+        return restart

      def pause(self):
          """

Talked with lucas on this. We believe this fix will solve the root-problem: https://github.com/kongove/autotest/commit/35bcae3e589a6e5fa6a48e39ea9b58e95ffd32f1#commitcomment-1851180

You're patch may work, but in my experience vm.needs_restart() is VERY sensitive to messing with __init__ behavior. Amos's patch fixes the core of the problem by forcing virtnet to always initialize from params.


Tried Amos's patch but find some problem as the netdst change will not be catched by that fix. That fix only update the KVMIface related parameters but not include ParamsNet. So It can not find the bridge changed.

And another problem I try to fix is after we using tap fd in our command line the command line will shows no different when only netdst changed. This may caused problem when there is a set of cases running without kill vm after test. So any idea about this problem?


Thanks a lot for your review.

_______________________________________________
Autotest-kernel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/autotest-kernel

Reply via email to