qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Max Reitz <mreitz@redhat.com>
To: John Snow <jsnow@redhat.com>, Stefan Hajnoczi <stefanha@gmail.com>
Cc: kwolf@redhat.com, famz@redhat.com, qemu-block@nongnu.org,
	qemu-devel@nongnu.org, armbru@redhat.com,
	vsementsov@parallels.com, stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH v4 19/20] iotests: add simple incremental backup case
Date: Mon, 13 Apr 2015 18:51:57 +0200	[thread overview]
Message-ID: <552BF42D.7010606@redhat.com> (raw)
In-Reply-To: <5522FF56.90705@redhat.com>

On 06.04.2015 23:49, John Snow wrote:
>
>
> On 04/02/2015 10:27 AM, Stefan Hajnoczi wrote:
>> On Fri, Mar 20, 2015 at 03:17:02PM -0400, John Snow wrote:
>>> Signed-off-by: John Snow <jsnow@redhat.com>
>>> ---
>>>   tests/qemu-iotests/124     | 153 
>>> +++++++++++++++++++++++++++++++++++++++++++++
>>>   tests/qemu-iotests/124.out |   4 +-
>>>   2 files changed, 155 insertions(+), 2 deletions(-)
>>>
>>> diff --git a/tests/qemu-iotests/124 b/tests/qemu-iotests/124
>>> index 85675ec..ce2cda7 100644
>>> --- a/tests/qemu-iotests/124
>>> +++ b/tests/qemu-iotests/124
>
> [snip, snip, snip]
>
>>>
>>>   class TestIncrementalBackup(iotests.QMPTestCase):
>>>       def setUp(self):
>>> @@ -73,6 +109,123 @@ class TestIncrementalBackup(iotests.QMPTestCase):
>>>               iotests.qemu_img('create', '-f', fmt, img, size)
>>>           self.files.append(img)
>>>
>>> +
>>> +    def create_full_backup(self, drive=None):
>>> +        if drive is None:
>>> +            drive = self.drives[-1]
>>> +
>>> +        res = self.vm.qmp('drive-backup', device=drive['id'],
>>> +                          sync='full', format=drive['fmt'],
>>> +                          target=drive['backup'])
>>> +        self.assert_qmp(res, 'return', {})
>>> +        self.wait_until_completed(drive['id'])
>>> +        self.check_full_backup(drive)
>>> +        self.files.append(drive['backup'])
>>> +        return drive['backup']
>>> +
>>> +
>>> +    def check_full_backup(self, drive=None):
>>> +        if drive is None:
>>> +            drive = self.drives[-1]
>>> +        self.assertTrue(iotests.compare_images(drive['file'], 
>>> drive['backup']))
>>
>> I think QEMU still has at least drive['file'] open?  It's not safe to
>> access the file from another program while it is open.
>>
>> The simplest solution is to terminate the VM before calling
>> iotests.compare_images().
>>
>
> Oh, that's unfortunate. I have been checking images after every 
> creation as a nice incremental sanity check. That will be hard to do 
> if I have to actually close QEMU.
>
> My reasoning was:
>
> (1) We're explicitly flushing after every write,
> (2) We're in a qtest mode so there is no guest activity,
> (3) Nobody is writing to this image by the time we call compare_images().
>
> So it should be safe to /read/ the files while QEMU is occupied doing 
> nothing.
>
> I could delay all tests until completion, but I'd lose out on the 
> ability to test the equivalence of any incrementals that are not their 
> most recent versions, unless I also start creating a lot of full 
> backups, but I think this starts to get messy and makes the tests hard 
> to follow.
>
> Is it really that unsafe? I could add in an explicit pause/resume 
> barrier around the check if that would help inspire some confidence in 
> the test.

I'm fine with it (and consciously accepted it while reviewing), because 
the worst I can see is the test breaking. You're modifying the image and 
you're checking whether the modifications are appearing in the image. I 
cannot really see how qemu could not have made the modifications or made 
them differently than expected, and they still appear in the image file, 
just as expected.

Second, we are already relying on internal things pretty much in the 
iotests (just take qemu-io, it's nothing users should ever use). So 
because relying on things users shouldn't do is already a part of the 
iotests and because if it doesn't work, the test will most likely just 
break, I'm fine with it.


In anticipation of an "Yes, *you* can't see how the behavior can break, 
making the test pass when it's actually failed, but it's not impossible, 
you're relying on undefined behavior after all! Doing this even in just 
a test might consume your HDD in a dragon fire!",

Max

  parent reply	other threads:[~2015-04-13 16:52 UTC|newest]

Thread overview: 54+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-03-20 19:16 [Qemu-devel] [PATCH v4 00/20] block: transactionless incremental backup series John Snow
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 01/20] docs: incremental backup documentation John Snow
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 02/20] qapi: Add optional field "name" to block dirty bitmap John Snow
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 03/20] qmp: Ensure consistent granularity type John Snow
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 04/20] qmp: Add block-dirty-bitmap-add and block-dirty-bitmap-remove John Snow
2015-03-20 19:39   ` Max Reitz
2015-04-02  9:57   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 05/20] block: Introduce bdrv_dirty_bitmap_granularity() John Snow
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 06/20] hbitmap: cache array lengths John Snow
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 07/20] hbitmap: add hbitmap_merge John Snow
2015-04-02 12:19   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 08/20] block: Add bitmap disabled status John Snow
2015-04-02 12:21   ` Stefan Hajnoczi
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 09/20] block: Add bitmap successors John Snow
2015-04-02 12:23   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 10/20] qmp: Add support of "dirty-bitmap" sync mode for drive-backup John Snow
2015-04-02 12:44   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-04-02 16:55     ` John Snow
2015-04-08  2:15     ` John Snow
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 11/20] qmp: add block-dirty-bitmap-clear John Snow
2015-04-02 12:49   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 12/20] qmp: Add dirty bitmap status field in query-block John Snow
2015-04-02 12:49   ` Stefan Hajnoczi
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 13/20] block: add BdrvDirtyBitmap documentation John Snow
2015-04-02 12:50   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 14/20] block: Ensure consistent bitmap function prototypes John Snow
2015-04-02 12:50   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 15/20] block: Resize bitmaps on bdrv_truncate John Snow
2015-04-02 13:37   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-04-02 15:57     ` John Snow
2015-04-07 12:57       ` Stefan Hajnoczi
2015-04-07 16:45         ` John Snow
2015-04-08  8:44           ` Stefan Hajnoczi
2015-03-20 19:16 ` [Qemu-devel] [PATCH v4 16/20] hbitmap: truncate tests John Snow
2015-03-20 19:43   ` Max Reitz
2015-04-02 13:43   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-03-20 19:17 ` [Qemu-devel] [PATCH v4 17/20] iotests: add invalid input incremental backup tests John Snow
2015-03-20 19:49   ` Max Reitz
2015-04-02 13:44   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-03-20 19:17 ` [Qemu-devel] [PATCH v4 18/20] iotests: add QMP event waiting queue John Snow
2015-04-02 13:57   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-04-02 17:19     ` John Snow
2015-03-20 19:17 ` [Qemu-devel] [PATCH v4 19/20] iotests: add simple incremental backup case John Snow
2015-03-20 19:50   ` Max Reitz
2015-04-02 14:27   ` Stefan Hajnoczi
2015-04-06 21:49     ` John Snow
2015-04-07 13:00       ` Stefan Hajnoczi
2015-04-13 16:51       ` Max Reitz [this message]
2015-03-20 19:17 ` [Qemu-devel] [PATCH v4 20/20] iotests: add incremental backup failure recovery test John Snow
2015-03-20 19:51   ` Max Reitz
2015-04-02 14:52   ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi
2015-03-20 19:52 ` [Qemu-devel] [PATCH v4 00/20] block: transactionless incremental backup series Max Reitz
2015-03-20 19:57   ` John Snow
2015-04-02 14:53 ` [Qemu-devel] [Qemu-block] " Stefan Hajnoczi

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=552BF42D.7010606@redhat.com \
    --to=mreitz@redhat.com \
    --cc=armbru@redhat.com \
    --cc=famz@redhat.com \
    --cc=jsnow@redhat.com \
    --cc=kwolf@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@gmail.com \
    --cc=stefanha@redhat.com \
    --cc=vsementsov@parallels.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).