Hi,

I have just noticed that the cpuid.py check for QEMU error messages was
broken by:

  commit cdeed8a35629564c9790e9b19d6442bc2108ae7c
  Author: Ruda Moura <[email protected]>
  Date:   Mon Dec 16 17:16:37 2013 -0200
  
      qemu_vm, aexpect, utils_misc: attempt to catch qemu in defunct state.
  
      Add support to detect if qemu becomes <defunct> (zombie)
      after it was started. If qemu is detected defunct, it will
      raise virt_vm.VMStartError().
  
      Signed-off-by: Ruda Moura <[email protected]>
  

Now I am getting failures instead of SKIP results. For example:

13:46:42 ERROR| FAIL 
type_specific.qemu_cpu.cpuid.full_dump.default.default.machine.rhel.rhel640.kvm.cpu.amd.athlon.unknown.rhel.6.6_4
 -> VMStartError: VM 'virt-tests-vm1' failed to start: Qemu is defunct.
Qemu output:
warning: host doesn't support requested feature: CPUID.80000001H:EDX.mmxext 
[bit 22]
warning: host doesn't support requested feature: CPUID.80000001H:EDX.3dnowext 
[bit 30]
warning: host doesn't support requested feature: CPUID.80000001H:EDX.3dnow [bit 
31]
qemu-kvm: Host's CPU doesn't support requested features

The error above was supposed to be caught by the following code on
cpuid.py:

        try:
            out = get_guest_cpuid(
                self, cpu_model, cpu_model_flags + ',enforce',
                extra_params=dict(machine_type=machine_type, smp=1))
        except virt_vm.VMStartError, e:
            if "host doesn't support requested feature:" in e.output \
                or ("host cpuid" in e.output and
                    ("lacks requested flag" in e.output or
                     "flag restricted to guest" in e.output)):
                raise error.TestNAError(
                    "Can't run CPU model %s on this host" % 
(full_cpu_model_name))
            else:
                raise

I am trying to understand how the new code is supposed to work:

    # Make sure qemu is not defunct
    if self.process.is_defunct():
        logging.error("Bad things happened, qemu process is defunct")
        err = ("Qemu is defunct.\nQemu output:\n%s"
               % self.process.get_output())
        self.destroy()
        raise virt_vm.VMStartError(self.name, err)  

    # Make sure the process was started successfully
    if not self.process.is_alive():
        status = self.process.get_status()
        output = self.process.get_output().strip()
        migration_in_course = migration_mode is not None
        unknown_protocol = "unknown migration protocol" in output
        if migration_in_course and unknown_protocol:
            e = VMMigrateProtoUnsupportedError(migration_mode, output)
        else:
            e = virt_vm.VMCreateError(qemu_command, status, output)
        self.destroy()
        raise e

The above QEMU error message was always caught by the
self.process.is_alive() check, but now the is_defunct() check is
catching it.

So, is the is_alive() check obsolete? If it is not, why isn't it being
triggered anymore on my test case?

-- 
Eduardo

_______________________________________________
Virt-test-devel mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/virt-test-devel

Reply via email to