From: Max Reitz <mreitz@redhat.com>
To: John Snow <jsnow@redhat.com>, qemu-devel@nongnu.org
Cc: kwolf@redhat.com, famz@redhat.com, armbru@redhat.com,
vsementsov@parallels.com, stefanha@redhat.com
Subject: Re: [Qemu-devel] [PATCH v12 17/17] iotests: add incremental backup failure recovery test
Date: Wed, 11 Feb 2015 17:11:18 -0500 [thread overview]
Message-ID: <54DBD386.1060606@redhat.com> (raw)
In-Reply-To: <54DBD2ED.9070402@redhat.com>
On 2015-02-11 at 17:08, John Snow wrote:
>
>
> On 02/11/2015 05:01 PM, Max Reitz wrote:
>> On 2015-02-09 at 20:35, John Snow wrote:
>>> To test the failure case, we modify iotests.py to allow us to specify
>>> that we'd like to allow failures when we wait for block job events.
>>>
>>> Signed-off-by: John Snow <jsnow@redhat.com>
>>> ---
>>> tests/qemu-iotests/112 | 55
>>> ++++++++++++++++++++++++++++++++++++++++++-
>>> tests/qemu-iotests/112.out | 4 ++--
>>> tests/qemu-iotests/iotests.py | 6 +++--
>>> 3 files changed, 60 insertions(+), 5 deletions(-)
>>>
>>> diff --git a/tests/qemu-iotests/112 b/tests/qemu-iotests/112
>>> index 7d1a6ec..0c1d35a 100644
>>> --- a/tests/qemu-iotests/112
>>> +++ b/tests/qemu-iotests/112
>>> @@ -24,6 +24,11 @@ import os
>>> import iotests
>>> from iotests import qemu_img, qemu_io, create_image
>>> +def blkdebug_rule(file, type, **kwargs):
>>> + file.write('[%s]\n' % type)
>>> + for key, value in kwargs.iteritems():
>>> + file.write('%s = "%s"\n' % (key, value))
>>> + file.write('\n')
>>> def io_write_patterns(img, patterns):
>>> for pattern in patterns:
>>> @@ -136,7 +141,11 @@ class TestIncrementalBackup(iotests.QMPTestCase):
>>> mode='existing')
>>> self.assert_qmp(result, 'return', {})
>>> - event = self.wait_until_completed(bitmap.node,
>>> check_offset=validate)
>>> + event = self.wait_until_completed(bitmap.node,
>>> check_offset=validate,
>>> + allow_failures=(not
>>> validate))
>>> + if 'error' in event['data']:
>>> + bitmap.del_target()
>>> + return False
>>> if validate:
>>> return self.check_incremental(target)
>>> @@ -221,6 +230,50 @@ class TestIncrementalBackup(iotests.QMPTestCase):
>>> self.assertTrue(res1 and res2)
>>> + def test_incremental_failure(self):
>>> + blkdebug = os.path.join(iotests.test_dir, 'blkdebug.conf')
>>> + self.files.append(blkdebug)
>>> +
>>> + with open(blkdebug, 'w+') as file:
>>> + blkdebug_rule(file, 'set-state',
>>> + event="flush_to_disk",
>>> + state="1",
>>> + new_state="2")
>>> + blkdebug_rule(file, 'inject-error',
>>> + event="read_aio", errno="5",
>>> + state="2", immediately="off",
>>> + once="on")
>>> +
>>> + # Create a blkdebug interface to this img as 'drive1'
>>> + result = self.vm.qmp('blockdev-add', options={
>>> + 'id': 'drive1',
>>> + 'driver': iotests.imgfmt,
>>> + 'file': {
>>> + 'driver': 'blkdebug',
>>> + 'config': blkdebug,
>>> + 'image': {
>>> + 'driver': 'file',
>>> + 'filename': self.test_img
>>> + }
>>> + }
>>> + })
>>
>> Awwww, I've written such a nice QMP interface and you won't use it? :'-(
>>
>> See test 071, I encourage you to try. ;-)
>>
>> Max
>>
>
> Aww, you're going to hold out on me for that?
Yes, not least because I would have to take a peek into Python's I/O
functions first. ;-)
Max
> (Actually, I did notice when you reviewed my blkdebug patch but not
> before then. This was already working so I just left it. (Though it is
> nicer in that you don't have to create a file. (I'll look.)))
>
>>> + self.assert_qmp(result, 'return', {})
>>> +
>>> + self.create_full_backup()
>>> + self.add_bitmap('bitmap0', 'drive1')
>>> + self.vm.hmp("c")
>>> + self.hmp_io_writes('drive1', (('0xab', 0, 512),
>>> + ('0xfe', '16M', '256k'),
>>> + ('0x64', '32736k', '64k')))
>>> +
>>> + result = self.create_incremental(validate=False)
>>> + self.assertFalse(result)
>>> + self.hmp_io_writes('drive1', (('0x9a', 0, 512),
>>> + ('0x55', '8M', '352k'),
>>> + ('0x78', '15872k', '1M')))
>>> + self.create_incremental()
>>> +
>>> +
>>> def test_sync_dirty_bitmap_missing(self):
>>> self.assert_no_active_block_jobs()
>>> self.files.append(self.foo_img)
>>> diff --git a/tests/qemu-iotests/112.out b/tests/qemu-iotests/112.out
>>> index 89968f3..914e373 100644
>>> --- a/tests/qemu-iotests/112.out
>>> +++ b/tests/qemu-iotests/112.out
>>> @@ -1,5 +1,5 @@
>>> -....
>>> +.....
>>> ----------------------------------------------------------------------
>>> -Ran 4 tests
>>> +Ran 5 tests
>>> OK
>>> diff --git a/tests/qemu-iotests/iotests.py
>>> b/tests/qemu-iotests/iotests.py
>>> index 6bff935..e452c40 100644
>>> --- a/tests/qemu-iotests/iotests.py
>>> +++ b/tests/qemu-iotests/iotests.py
>>> @@ -264,14 +264,16 @@ class QMPTestCase(unittest.TestCase):
>>> self.assert_no_active_block_jobs()
>>> return result
>>> - def wait_until_completed(self, drive='drive0', check_offset=True):
>>> + def wait_until_completed(self, drive='drive0', check_offset=True,
>>> + allow_failures=False):
>>> '''Wait for a block job to finish, returning the event'''
>>> completed = False
>>> while not completed:
>>> for event in self.vm.get_qmp_events(wait=True):
>>> if event['event'] == 'BLOCK_JOB_COMPLETED':
>>> self.assert_qmp(event, 'data/device', drive)
>>> - self.assert_qmp_absent(event, 'data/error')
>>> + if not allow_failures:
>>> + self.assert_qmp_absent(event, 'data/error')
>>> if check_offset:
>>> self.assert_qmp(event, 'data/offset',
>>> event['data']['len'])
>>> completed = True
>>
next prev parent reply other threads:[~2015-02-11 22:11 UTC|newest]
Thread overview: 55+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-02-10 1:35 [Qemu-devel] [PATCH v12 00/17] block: incremental backup series John Snow
2015-02-10 1:35 ` [Qemu-devel] [PATCH v12 01/17] qapi: Add optional field "name" to block dirty bitmap John Snow
2015-02-10 1:35 ` [Qemu-devel] [PATCH v12 02/17] qmp: Add block-dirty-bitmap-add and block-dirty-bitmap-remove John Snow
2015-02-10 21:56 ` Max Reitz
2015-02-13 22:24 ` Eric Blake
2015-02-13 22:39 ` John Snow
2015-02-10 1:35 ` [Qemu-devel] [PATCH v12 03/17] block: Introduce bdrv_dirty_bitmap_granularity() John Snow
2015-02-10 22:03 ` Max Reitz
2015-02-11 18:57 ` John Snow
2015-02-11 18:58 ` Max Reitz
2015-02-10 22:13 ` Max Reitz
2015-02-10 22:15 ` John Snow
2015-02-10 1:35 ` [Qemu-devel] [PATCH v12 04/17] hbitmap: add hbitmap_merge John Snow
2015-02-10 22:16 ` Max Reitz
2015-02-10 1:35 ` [Qemu-devel] [PATCH v12 05/17] qmp: Add block-dirty-bitmap-enable and block-dirty-bitmap-disable John Snow
2015-02-11 16:26 ` Max Reitz
2015-02-10 1:35 ` [Qemu-devel] [PATCH v12 06/17] block: Add bitmap successors John Snow
2015-02-11 16:50 ` Max Reitz
2015-02-11 16:51 ` John Snow
2015-02-10 1:35 ` [Qemu-devel] [PATCH v12 07/17] qmp: Add support of "dirty-bitmap" sync mode for drive-backup John Snow
2015-02-11 17:47 ` Max Reitz
2015-02-11 17:54 ` John Snow
2015-02-11 18:18 ` Max Reitz
2015-02-11 18:31 ` John Snow
2015-02-11 18:33 ` Max Reitz
2015-02-11 21:13 ` John Snow
2015-02-13 17:33 ` Vladimir Sementsov-Ogievskiy
2015-02-13 18:35 ` John Snow
2015-02-10 1:35 ` [Qemu-devel] [PATCH v12 08/17] qmp: add block-dirty-bitmap-clear John Snow
2015-02-11 18:28 ` Max Reitz
2015-02-11 18:36 ` John Snow
2015-02-10 1:35 ` [Qemu-devel] [PATCH v12 09/17] qapi: Add transaction support to block-dirty-bitmap operations John Snow
2015-02-11 19:07 ` Max Reitz
2015-02-10 1:35 ` [Qemu-devel] [PATCH v12 10/17] qmp: Add dirty bitmap status fields in query-block John Snow
2015-02-11 19:10 ` Max Reitz
2015-02-11 19:19 ` John Snow
2015-02-10 1:35 ` [Qemu-devel] [PATCH v12 11/17] block: add BdrvDirtyBitmap documentation John Snow
2015-02-11 19:14 ` Max Reitz
2015-02-10 1:35 ` [Qemu-devel] [PATCH v12 12/17] block: Ensure consistent bitmap function prototypes John Snow
2015-02-11 19:20 ` Max Reitz
2015-02-10 1:35 ` [Qemu-devel] [PATCH v12 13/17] iotests: add invalid input incremental backup tests John Snow
2015-02-11 20:45 ` Max Reitz
2015-02-10 1:35 ` [Qemu-devel] [PATCH v12 14/17] iotests: add simple incremental backup case John Snow
2015-02-11 21:40 ` Max Reitz
2015-02-11 22:02 ` John Snow
2015-02-10 1:35 ` [Qemu-devel] [PATCH v12 15/17] iotests: add transactional incremental backup test John Snow
2015-02-11 21:49 ` Max Reitz
2015-02-10 1:35 ` [Qemu-devel] [PATCH v12 16/17] blkdebug: fix "once" rule John Snow
2015-02-11 21:50 ` Max Reitz
2015-02-11 22:04 ` John Snow
2015-02-10 1:35 ` [Qemu-devel] [PATCH v12 17/17] iotests: add incremental backup failure recovery test John Snow
2015-02-11 22:01 ` Max Reitz
2015-02-11 22:08 ` John Snow
2015-02-11 22:11 ` Max Reitz [this message]
2015-02-10 16:32 ` [Qemu-devel] [PATCH v12 00/17] block: incremental backup series John Snow
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=54DBD386.1060606@redhat.com \
--to=mreitz@redhat.com \
--cc=armbru@redhat.com \
--cc=famz@redhat.com \
--cc=jsnow@redhat.com \
--cc=kwolf@redhat.com \
--cc=qemu-devel@nongnu.org \
--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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.