qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: Eric Blake <eblake@redhat.com>
To: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>,
	qemu-block@nongnu.org
Cc: kwolf@redhat.com, den@openvz.org, qemu-devel@nongnu.org,
	stefanha@redhat.com, Max Reitz <mreitz@redhat.com>
Subject: Re: [PATCH v10 3/3] iotests: test nbd reconnect
Date: Tue, 22 Oct 2019 20:31:13 -0500	[thread overview]
Message-ID: <0c87e5cd-cddf-b91a-3cca-fa3af9799d2b@redhat.com> (raw)
In-Reply-To: <20191009084158.15614-4-vsementsov@virtuozzo.com>

On 10/9/19 3:41 AM, Vladimir Sementsov-Ogievskiy wrote:
> Add test, which starts backup to nbd target and restarts nbd server
> during backup.
> 
> Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@virtuozzo.com>
> ---
>   tests/qemu-iotests/264        | 95 +++++++++++++++++++++++++++++++++++
>   tests/qemu-iotests/264.out    | 13 +++++
>   tests/qemu-iotests/group      |  1 +
>   tests/qemu-iotests/iotests.py | 11 ++++
>   4 files changed, 120 insertions(+)
>   create mode 100755 tests/qemu-iotests/264
>   create mode 100644 tests/qemu-iotests/264.out
> 
> diff --git a/tests/qemu-iotests/264 b/tests/qemu-iotests/264
> new file mode 100755
> index 0000000000..c8cd97ae2b
> --- /dev/null
> +++ b/tests/qemu-iotests/264

> +import iotests
> +from iotests import qemu_img_create, qemu_io_silent_check, file_path, \
> +        qemu_nbd_popen, log
> +
> +disk_a, disk_b, nbd_sock = file_path('disk_a', 'disk_b', 'nbd-sock')
> +nbd_uri = 'nbd+unix:///?socket=' + nbd_sock

Needs rebasing on top of Max's patches to stick sockets in SOCK_DIR:

https://lists.gnu.org/archive/html/qemu-devel/2019-10/msg04201.html

[or, if my pull request lands first, Max needs to add this one to the 
list of affected tests...]


> +vm.qmp_log('blockdev-add', filters=[iotests.filter_qmp_testfiles],
> +           **{'node_name': 'backup0',
> +              'driver': 'raw',
> +              'file': {'driver': 'nbd',
> +                       'server': {'type': 'unix', 'path': nbd_sock},
> +                       'reconnect-delay': 10}})
> +vm.qmp_log('blockdev-backup', device='drive0', sync='full', target='backup0',
> +           speed=(1 * 1024 * 1024))

This starts the job throttled, to give us time...

> +
> +# Wait for some progress
> +t = 0
> +while t < wait_limit:
> +    jobs = vm.qmp('query-block-jobs')['return']
> +    if jobs and jobs[0]['offset'] > 0:
> +        break
> +    time.sleep(wait_step)
> +    t += wait_step
> +
> +if jobs and jobs[0]['offset'] > 0:
> +    log('Backup job is started')
> +
> +log('Kill NBD server')
> +srv.kill()
> +srv.wait()
> +
> +jobs = vm.qmp('query-block-jobs')['return']
> +if jobs and jobs[0]['offset'] < jobs[0]['len']:
> +    log('Backup job is still in progress')
> +
> +vm.qmp_log('block-job-set-speed', device='drive0', speed=0)
> +
> +# Emulate server down time for 1 second
> +time.sleep(1)

...but once we restart,...

> +
> +log('Start NBD server')
> +srv = qemu_nbd_popen('-k', nbd_sock, '-f', iotests.imgfmt, disk_b)
> +
> +e = vm.event_wait('BLOCK_JOB_COMPLETED')

...should we unthrottle the job to allow the test to complete slightly 
faster after the reconnect?  But that can be done as an improvement on 
top, if it helps.


> +++ b/tests/qemu-iotests/iotests.py
> @@ -165,6 +165,13 @@ def qemu_io_silent(*args):
>                            (-exitcode, ' '.join(args)))
>       return exitcode
>   
> +def qemu_io_silent_check(*args):
> +    '''Run qemu-io and return the true if subprocess returned 0'''
> +    args = qemu_io_args + list(args)
> +    exitcode = subprocess.call(args, stdout=open('/dev/null', 'w'),
> +                               stderr=subprocess.STDOUT)

This discards the stdout data, even on failure. Is there a smarter way 
to grab the output into a variable, but only dump it to the log on 
failure, rather than outright discarding it?

But for the sake of getting this test in before freeze, that can be a 
followup, if at all.

Reviewed-by: Eric Blake <eblake@redhat.com>

I'll send a pull request soon.

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org



  reply	other threads:[~2019-10-23  1:32 UTC|newest]

Thread overview: 9+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-09  8:41 [PATCH v9 0/3] NBD reconnect Vladimir Sementsov-Ogievskiy
2019-10-09  8:41 ` [PATCH v10 1/3] qemu-coroutine-sleep: introduce qemu_co_sleep_wake Vladimir Sementsov-Ogievskiy
2019-10-09  8:41 ` [PATCH v10 2/3] block/nbd: nbd reconnect Vladimir Sementsov-Ogievskiy
2019-10-16 22:39   ` Eric Blake
2019-10-09  8:41 ` [PATCH v10 3/3] iotests: test " Vladimir Sementsov-Ogievskiy
2019-10-23  1:31   ` Eric Blake [this message]
2019-10-23  8:33     ` Vladimir Sementsov-Ogievskiy
2019-10-23 11:33       ` Eric Blake
2019-10-09 15:35 ` [PATCH v9 0/3] NBD reconnect Vladimir Sementsov-Ogievskiy

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=0c87e5cd-cddf-b91a-3cca-fa3af9799d2b@redhat.com \
    --to=eblake@redhat.com \
    --cc=den@openvz.org \
    --cc=kwolf@redhat.com \
    --cc=mreitz@redhat.com \
    --cc=qemu-block@nongnu.org \
    --cc=qemu-devel@nongnu.org \
    --cc=stefanha@redhat.com \
    --cc=vsementsov@virtuozzo.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).