From nobody Fri Dec 19 16:06:55 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of redhat.com designates 207.211.31.120 as permitted sender) client-ip=207.211.31.120; envelope-from=libvir-list-bounces@redhat.com; helo=us-smtp-1.mimecast.com; Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1574804536; cv=none; d=zohomail.com; s=zohoarc; b=f+ptGJFRJytlsK3EQSVLpDVnnXNWnevOugfChPvlftVsWeNDdlfMsorGHQA5/jETDfai72R59wjIN7zFcILSvurIzAv96VCT8c5C+pD/epVbOaVCJRwxdyUzTa+zwkpDd6IzjEuk1NsMtprPDLpzVaM9LtQ95zz8OwDIE7Z81GQ= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1574804536; h=Content-Type:Content-Transfer-Encoding:Date:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:To; bh=QtetUmO2rR/SgjFSgGqjxLwCcDSD2qabuyyR+uJ9NZw=; b=dhrEs7WbWFtmPrxjvLGEMDM/7gizPv1J8ehAJNdk+cx200ixB7q3wMB27+sblKT2jPmq9DS1IXvZluin+KtBYF8ZnoDeyLSU17jtjH0whXzqj0RxNjUBj7dq9mov2gR04MiwNiBFBVvPD3a2L87qVHI3TJvau11A/GK6kNajHwM= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of redhat.com designates 207.211.31.120 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass header.from= (p=none dis=none) header.from= Return-Path: Received: from us-smtp-1.mimecast.com (us-smtp-delivery-1.mimecast.com [207.211.31.120]) by mx.zohomail.com with SMTPS id 1574804536862833.74158142674; Tue, 26 Nov 2019 13:42:16 -0800 (PST) Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-32-8ga1eFRKNMOX1ZZdldYgSg-1; Tue, 26 Nov 2019 16:40:57 -0500 Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.phx2.redhat.com [10.5.11.14]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 4FF1C800C7A; Tue, 26 Nov 2019 21:40:49 +0000 (UTC) Received: from colo-mx.corp.redhat.com (colo-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.21]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 28E375D9E1; Tue, 26 Nov 2019 21:40:49 +0000 (UTC) Received: from lists01.pubmisc.prod.ext.phx2.redhat.com (lists01.pubmisc.prod.ext.phx2.redhat.com [10.5.19.33]) by colo-mx.corp.redhat.com (Postfix) with ESMTP id DCE324E581; Tue, 26 Nov 2019 21:40:48 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx01.intmail.prod.int.phx2.redhat.com [10.5.11.11]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id xAQLeiFg028037 for ; Tue, 26 Nov 2019 16:40:44 -0500 Received: by smtp.corp.redhat.com (Postfix) id F271D600D5; Tue, 26 Nov 2019 21:40:43 +0000 (UTC) Received: from angien.redhat.com (unknown [10.43.2.48]) by smtp.corp.redhat.com (Postfix) with ESMTP id 770F8600CA for ; Tue, 26 Nov 2019 21:40:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1574804535; h=from:from:sender:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:list-id:list-help: list-unsubscribe:list-subscribe:list-post; bh=QtetUmO2rR/SgjFSgGqjxLwCcDSD2qabuyyR+uJ9NZw=; b=iLQvo3xFQaXLtlTXUKJOWJKxQpBryQUTZxAOku4RcTT3n/BBg2dmRmeNWQi9TyqzUKTcbG efJ47hTxoB56nu6ftA9YiQujRfyAfxrZgiYkGLl+1SBiKxbRtyVRQtwE1CtxwGhwnxMCnM LVMGHyNfD3QDbTPW9yyzlZn34F22CTQ= From: Peter Krempa To: libvir-list@redhat.com Date: Tue, 26 Nov 2019 22:40:07 +0100 Message-Id: <21c34e5f8ea90f401694cf796e13b648fa3eda8f.1574803736.git.pkrempa@redhat.com> In-Reply-To: References: MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.79 on 10.5.11.11 X-loop: libvir-list@redhat.com Subject: [libvirt] [PATCH 21/21] qemu: blockjob: Implement concluded blockjob handler for backup blockjobs X-BeenThere: libvir-list@redhat.com X-Mailman-Version: 2.1.12 Precedence: junk List-Id: Development discussions about the libvirt library & tools List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.14 X-MC-Unique: 8ga1eFRKNMOX1ZZdldYgSg-1 X-Mimecast-Spam-Score: 0 Content-Transfer-Encoding: quoted-printable X-ZohoMail-DKIM: pass (identity @redhat.com) Content-Type: text/plain; charset="utf-8" After the individual sub-blockjobs of a backup libvirt job finish we must detect it and notify the parent job, so that it can be properly terminated. Since we update job information to determine success of an blockjob we can directly report back also statistics of the blockjob. Signed-off-by: Peter Krempa --- src/qemu/qemu_blockjob.c | 61 ++++++++++++++++++++++++++++++++++++++-- 1 file changed, 59 insertions(+), 2 deletions(-) diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 8dbb09c30a..3df6ccc068 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -27,6 +27,7 @@ #include "qemu_block.h" #include "qemu_domain.h" #include "qemu_alias.h" +#include "qemu_backup.h" #include "conf/domain_conf.h" #include "conf/domain_event.h" @@ -1269,11 +1270,58 @@ qemuBlockJobProcessEventConcludedCreate(virQEMUDriv= erPtr driver, } +static void +qemuBlockJobProcessEventConcludedBackup(virQEMUDriverPtr driver, + virDomainObjPtr vm, + qemuBlockJobDataPtr job, + qemuDomainAsyncJob asyncJob, + qemuBlockjobState newstate, + unsigned long long progressCurrent, + unsigned long long progressTotal) +{ + g_autoptr(qemuBlockStorageSourceAttachData) backend =3D NULL; + g_autoptr(virJSONValue) actions =3D NULL; + + qemuBackupNotifyBlockjobEnd(vm, job->disk, newstate, progressCurrent, = progressTotal); + + if (job->data.backup.store && + !(backend =3D qemuBlockStorageSourceDetachPrepare(job->data.backup= .store, NULL))) + return; + + if (job->data.backup.bitmap) { + if (!(actions =3D virJSONValueNewArray())) + return; + + if (qemuMonitorTransactionBitmapRemove(actions, + job->disk->src->nodeformat, + job->data.backup.bitmap) < = 0) + return; + } + + if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) + return; + + if (backend) + qemuBlockStorageSourceAttachRollback(qemuDomainGetMonitor(vm), bac= kend); + + if (actions) + qemuMonitorTransaction(qemuDomainGetMonitor(vm), &actions); + + if (qemuDomainObjExitMonitor(driver, vm) < 0) + return; + + if (job->data.backup.store) + qemuDomainStorageSourceAccessRevoke(driver, vm, job->data.backup.s= tore); +} + + static void qemuBlockJobEventProcessConcludedTransition(qemuBlockJobDataPtr job, virQEMUDriverPtr driver, virDomainObjPtr vm, - qemuDomainAsyncJob asyncJob) + qemuDomainAsyncJob asyncJob, + unsigned long long progressCur= rent, + unsigned long long progressTot= al) { bool success =3D job->newstate =3D=3D QEMU_BLOCKJOB_STATE_COMPLETED; @@ -1307,6 +1355,9 @@ qemuBlockJobEventProcessConcludedTransition(qemuBlock= JobDataPtr job, break; case QEMU_BLOCKJOB_TYPE_BACKUP: + qemuBlockJobProcessEventConcludedBackup(driver, vm, job, asyncJob, + job->newstate, progressCur= rent, + progressTotal); break; case QEMU_BLOCKJOB_TYPE_BROKEN: @@ -1333,6 +1384,8 @@ qemuBlockJobEventProcessConcluded(qemuBlockJobDataPtr= job, size_t njobinfo =3D 0; size_t i; bool refreshed =3D false; + unsigned long long progressCurrent =3D 0; + unsigned long long progressTotal =3D 0; if (qemuDomainObjEnterMonitorAsync(driver, vm, asyncJob) < 0) goto cleanup; @@ -1345,6 +1398,9 @@ qemuBlockJobEventProcessConcluded(qemuBlockJobDataPtr= job, if (STRNEQ_NULLABLE(job->name, jobinfo[i]->id)) continue; + progressCurrent =3D jobinfo[i]->progressCurrent; + progressTotal =3D jobinfo[i]->progressTotal; + job->errmsg =3D g_strdup(jobinfo[i]->error); if (job->errmsg) @@ -1377,7 +1433,8 @@ qemuBlockJobEventProcessConcluded(qemuBlockJobDataPtr= job, VIR_DEBUG("handling job '%s' state '%d' newstate '%d'", job->name, job= ->state, job->newstate); - qemuBlockJobEventProcessConcludedTransition(job, driver, vm, asyncJob); + qemuBlockJobEventProcessConcludedTransition(job, driver, vm, asyncJob, + progressCurrent, progressT= otal); /* unplug the backing chains in case the job inherited them */ if (!job->disk) { --=20 2.23.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list