From patchwork Tue Aug 29 14:47:01 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Kashyap Chamarthy X-Patchwork-Id: 9927575 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id CA83B6022E for ; Tue, 29 Aug 2017 14:48:03 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id BAAF928989 for ; Tue, 29 Aug 2017 14:48:03 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id AF6972898F; Tue, 29 Aug 2017 14:48:03 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.9 required=2.0 tests=BAYES_00,RCVD_IN_DNSWL_HI autolearn=ham version=3.3.1 Received: from lists.gnu.org (lists.gnu.org [208.118.235.17]) (using TLSv1 with cipher AES256-SHA (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 6E4B92898D for ; Tue, 29 Aug 2017 14:48:02 +0000 (UTC) Received: from localhost ([::1]:45318 helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dmho9-0003rW-Ej for patchwork-qemu-devel@patchwork.kernel.org; Tue, 29 Aug 2017 10:48:01 -0400 Received: from eggs.gnu.org ([2001:4830:134:3::10]:33542) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1dmhnW-0003pt-Ip for qemu-devel@nongnu.org; Tue, 29 Aug 2017 10:47:23 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1dmhnV-0000cJ-6h for qemu-devel@nongnu.org; Tue, 29 Aug 2017 10:47:22 -0400 Received: from mx1.redhat.com ([209.132.183.28]:39382) by eggs.gnu.org with esmtps (TLS1.0:DHE_RSA_AES_256_CBC_SHA1:32) (Exim 4.71) (envelope-from ) id 1dmhnO-0000Y5-Nl; Tue, 29 Aug 2017 10:47:14 -0400 Received: from smtp.corp.redhat.com (int-mx06.intmail.prod.int.phx2.redhat.com [10.5.11.16]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id DC0385F7AD; Tue, 29 Aug 2017 14:47:10 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com DC0385F7AD Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx10.extmail.prod.ext.phx2.redhat.com; spf=fail smtp.mailfrom=kchamart@redhat.com Received: from eukaryote.localdomain (ovpn-117-86.ams2.redhat.com [10.36.117.86]) by smtp.corp.redhat.com (Postfix) with ESMTPS id E9D0069292; Tue, 29 Aug 2017 14:47:06 +0000 (UTC) Received: by eukaryote.localdomain (Postfix, from userid 1000) id 6480E240CEC; Tue, 29 Aug 2017 16:47:01 +0200 (CEST) Date: Tue, 29 Aug 2017 16:47:01 +0200 From: Kashyap Chamarthy To: Stefan Hajnoczi Message-ID: <20170829144701.yt7t6akywnqbox7v@eukaryote> References: <20170829090622.30843-1-kchamart@redhat.com> <20170829141954.GA18927@stefanha-x1.localdomain> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20170829141954.GA18927@stefanha-x1.localdomain> User-Agent: Mutt/1.6.0.1 (2016-04-01) X-Scanned-By: MIMEDefang 2.79 on 10.5.11.16 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.39]); Tue, 29 Aug 2017 14:47:11 +0000 (UTC) X-detected-operating-system: by eggs.gnu.org: GNU/Linux 2.2.x-3.x [generic] [fuzzy] X-Received-From: 209.132.183.28 Subject: Re: [Qemu-devel] [Qemu-block] [PATCH v2] qemu-iotests: Extend non-shared storage migration test (194) X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: kwolf@redhat.com, famz@redhat.com, qemu-block@nongnu.org, qemu-devel@nongnu.org, dgilbert@redhat.com, stefanha@redhat.com Errors-To: qemu-devel-bounces+patchwork-qemu-devel=patchwork.kernel.org@nongnu.org Sender: "Qemu-devel" X-Virus-Scanned: ClamAV using ClamSMTP On Tue, Aug 29, 2017 at 03:19:54PM +0100, Stefan Hajnoczi wrote: > On Tue, Aug 29, 2017 at 11:06:22AM +0200, Kashyap Chamarthy wrote: [...] > > +iotests.log('Gracefully ending the `drive-mirror` job on source...') > > +iotests.log(source_vm.qmp('block-job-cancel', device='mirror-job0')) > > Two issues: > > 1. Migration may not have completed yet so drive-mirror cannot be > stopped here. We need to wait for migration to complete on the > source before cancelling the block job. > > 2. block-job-cancel is asynchronous. The block job may still be running > after this returns. Therefore it may still be using the NBD drive... > > > + > > +iotests.log('Stopping the NBD server on destination...') > > +iotests.log(dest_vm.qmp('nbd-server-stop')) > > ...and that races with this command on the destination. > > We need to wait for the BLOCK_JOB_CANCELLED/COMPLETED event on the > source QEMU before stopping the NBD server on the destination. Yes, both good points. How about the following `diff` to address both the issues you raised? #---------------------------------------------------------------------- #---------------------------------------------------------------------- And the output would be: #---------------------------------------------------------------------- Launching VMs... Launching NBD server on destination... {u'return': {}} {u'return': {}} Starting `drive-mirror` on source... {u'return': {}} Waiting for `drive-mirror` to complete... {u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'device': u'mirror-job0', u'type': u'mirror', u'speed': 0, u'len': 1073741824, u'offset': 1073741824}, u'event': u'BLOCK_JOB_READY'} Starting migration... {u'return': {}} {u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'setup'}, u'event': u'MIGRATION'} {u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'active'}, u'event': u'MIGRATION'} {u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'status': u'completed'}, u'event': u'MIGRATION'} Gracefully ending the `drive-mirror` job on source... {u'return': {}} {u'timestamp': {u'seconds': 'SECS', u'microseconds': 'USECS'}, u'data': {u'device': u'mirror-job0', u'type': u'mirror', u'speed': 0, u'len': 1073741824, u'offset': 1073741824}, u'event': u'BLOCK_JOB_COMPLETED'} Stopping the NBD server on destination... {u'return': {}} #---------------------------------------------------------------------- diff --git a/tests/qemu-iotests/194 b/tests/qemu-iotests/194 index 9d81189..a3e3bad 100755 --- a/tests/qemu-iotests/194 +++ b/tests/qemu-iotests/194 @@ -67,20 +67,18 @@ dest_vm.qmp('migrate-set-capabilities', capabilities=[{'capability': 'events', 'state': True}]) iotests.log(source_vm.qmp('migrate', uri='unix:{0}'.format(migration_sock_path))) -iotests.log('Gracefully ending the `drive-mirror` job on source...') -iotests.log(source_vm.qmp('block-job-cancel', device='mirror-job0')) - -iotests.log('Stopping the NBD server on destination...') -iotests.log(dest_vm.qmp('nbd-server-stop')) - while True: event1 = source_vm.event_wait('MIGRATION') iotests.log(event1, filters=[iotests.filter_qmp_event]) if event1['data']['status'] in ('completed', 'failed'): + iotests.log('Gracefully ending the `drive-mirror` job on source...') + iotests.log(source_vm.qmp('block-job-cancel', device='mirror-job0')) break while True: event2 = source_vm.event_wait('BLOCK_JOB_COMPLETED') iotests.log(event2, filters=[iotests.filter_qmp_event]) if event2['event'] == 'BLOCK_JOB_COMPLETED': + iotests.log('Stopping the NBD server on destination...') + iotests.log(dest_vm.qmp('nbd-server-stop')) break