@@ -294,10 +294,31 @@ def check_image(params, root_dir):
except error.CmdError:
logging.error("Error getting info from image %s",
image_filename)
- try:
- utils.system("%s check %s" % (qemu_img_cmd, image_filename))
- except error.CmdError:
+
+ cmd_result = utils.run("%s check %s" %
+ (qemu_img_cmd, image_filename),
+ ignore_status=True)
+ # Error check, large chances of a non-fatal problem.
+ # There are chances that bad data was skipped though
+ if cmd_result.exit_status == 1:
+ for e_line in cmd_result.stdout.splitlines():
+ logging.error("[stdout] %s", e_line)
+ for e_line in cmd_result.stderr.splitlines():
+ logging.error("[stderr] %s", e_line)
+ raise error.TestWarn("qemu-img check error. Some bad data in "
+ "the image may have gone unnoticed")
+ # Exit status 2 is data corruption for sure, so fail the test
+ elif cmd_result.exit_status == 2:
+ for e_line in cmd_result.stdout.splitlines():
+ logging.error("[stdout] %s", e_line)
+ for e_line in cmd_result.stderr.splitlines():
+ logging.error("[stderr] %s", e_line)
raise VMImageCheckError(image_filename)
+ # Leaked clusters, they are known to be harmless to data integrity
+ elif cmd_result.exit_status == 3:
+ raise error.TestWarn("Leaked clusters were noticed during "
+ "image check. No data integrity problem "
+ "was found though.")
else:
if not os.path.exists(image_filename):
With the accumulated experience running the KVM test to perform quality control on our KVM branches, we noticed that qemu-img check might return exit code != 0, but not all failures mean some data integrity problem happend. After checking qemu-img check code, we found out that: Exit code 1: Check error. Problem on the check itself, most of the time harmless, however there is some risk of data corruption. Exit code 2: Data corruption error. This means for sure that disk corruption happened. Bad, bad. Exit code 3: Leaked clusters error. This means some leaked clusters were found on the image, which is not a data corruption condition, it only means that some space is going to be lost on that image. So, refine the logic of the image_check function, executing qemu-img check and verifying its exit code Exit code 1: Raise error.TestWarn Exit code 2: Raise VMImageError Exit code 3: Raise error.TestWarn This change, together with the new logic of the KVM run_tests() utility function, will make it possible to still fail tests in cases 1) and 3), but letting the dependencies to be executed. Changes from v1: * Print stdout and stderr of the checking program in cases 1) and 2), to help debug eventual problems. Signed-off-by: Lucas Meneghel Rodrigues <lmr@redhat.com> --- client/tests/kvm/kvm_vm.py | 27 ++++++++++++++++++++++++--- 1 files changed, 24 insertions(+), 3 deletions(-)