From nobody Mon Sep 16 19:23:33 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1721085010; cv=none; d=zohomail.com; s=zohoarc; b=LPIfR446cEFWG0TCzEq8W5tzBdzYnrEAqKqCZ6lszO1Rr367aVMBj+GMo8fU8IF9WSNfBeBclIGIKTB8+nLl0pWpbB6f5hzxVOZNaRmQHI9AARFwa/1ELRlUIBHk+ktMSKoe2Ev+pjv7vnk0k/iWKzGFJMyGe2CZNVUXo2b69fk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1721085010; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=yq4DvTvDXjQvdNlze+HSZH72HNScSFeVSFF5YiDHtFw=; b=cqQne0JJiCwPtjtgF9xK91b5O63zAs6eZIH2uON8yvt+vdfBLghu4Auj9vFI8IqbZXq/yXUMESLz8BKfAwmjcuLNz6DfHoBvUSxV09FuO/qo6D7Qio/deY++kQi4MP11dNwXcPXtZLQ9L6hSun6+2RxMLfgT6brlad4dC32Gxwg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1721085010401527.2234692756986; Mon, 15 Jul 2024 16:10:10 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 53E33A55; Mon, 15 Jul 2024 19:10:09 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 8B3A8AD5; Mon, 15 Jul 2024 19:08:04 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 761C4A5C; Mon, 15 Jul 2024 19:07:59 -0400 (EDT) Received: from relay.virtuozzo.com (relay.virtuozzo.com [130.117.225.111]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id C979FA5C for ; Mon, 15 Jul 2024 19:07:48 -0400 (EDT) Received: from [130.117.225.1] (helo=vz9-barybin-2.ch-qa.vzint.dev) by relay.virtuozzo.com with esmtp (Exim 4.96) (envelope-from ) id 1sTUXV-00CvTw-2S; Tue, 16 Jul 2024 00:52:06 +0200 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=virtuozzo.com; s=relay; h=MIME-Version:Message-ID:Date:Subject:From: Content-Type; bh=Z4PgMzLImRizAOn2BE7X77mBlH14wu/7Zg16gz4eQjA=; b=COG1mafbDnNu ilB0JIPM/M1XF7JuYmk32kj8A8y6TEpc/3CVgHirYohvj05dmgZm3Tcs5Ye8VkL0g+D9gPYRdJ+Qs 3JlHzYXoUTmEls2bzr/uZdwI+mvIQuQGMKEmFhVHBU5AWhUQKecS0thG1DNwYhyzIIWhudnSFU/Nn uIl/oqgJYtiyAZkR/MmDE55qS9+BKRlZn0TZSfFcFuA88q8EMP3kNJKEGOanpDD53yg4ZpnoQGkAZ 6kWPTmL8tKMrlJaoLHZrxkCmlpXoA83PmvoTXHFW3vCxkRyvYSOns7SZwRAyunNjEyJd6Wcx+bn8+ NsQpkWAustLdQnOd5Frk5A==; To: devel@lists.libvirt.org Subject: [PATCH 1/4] qemu monitor: add snaphot-save/delete QMP commands Date: Tue, 16 Jul 2024 01:42:25 +0300 Message-ID: <20240715225013.100847-3-nikolai.barybin@virtuozzo.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20240715225013.100847-2-nikolai.barybin@virtuozzo.com> References: <20240715225013.100847-2-nikolai.barybin@virtuozzo.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: WGUO2MFPOBGQSNYBYNOQFPR4CPHQRXJA X-Message-ID-Hash: WGUO2MFPOBGQSNYBYNOQFPR4CPHQRXJA X-MailFrom: nikolai.barybin@virtuozzo.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: den@openvz.org, Nikolai Barybin X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Nikolai Barybin via Devel Reply-To: Nikolai Barybin X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1721085012203116600 Content-Type: text/plain; charset="utf-8" Signed-off-by: Nikolai Barybin --- src/qemu/qemu_monitor.c | 30 ++++++++++++++++ src/qemu/qemu_monitor.h | 13 +++++++ src/qemu/qemu_monitor_json.c | 66 ++++++++++++++++++++++++++++++++++++ src/qemu/qemu_monitor_json.h | 13 +++++++ 4 files changed, 122 insertions(+) diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index b1c0c6a064..53f5ecf223 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -2763,6 +2763,36 @@ qemuMonitorDeleteSnapshot(qemuMonitor *mon, const ch= ar *name) } =20 =20 +int +qemuMonitorSnapshotSave(qemuMonitor *mon, + const char *jobname, + const char *snapshotName, + const char *vmstateDev, + char **wrdevs) +{ + VIR_DEBUG("jobname=3D%s, snapshotName=3D%s, vmstateDev=3D%s, wrdevs=3D= %p", + jobname, snapshotName, vmstateDev, wrdevs); + + QEMU_CHECK_MONITOR(mon); + + return qemuMonitorJSONSnapshotSave(mon, jobname, snapshotName, vmstate= Dev, wrdevs); +} + + +int +qemuMonitorSnapshotDelete(qemuMonitor *mon, + const char *jobname, + const char *snapshotName, + char **wrdevs) +{ + VIR_DEBUG("jobname=3D%s, snapshotName=3D%s, wrdevs=3D%p", jobname, sna= pshotName, wrdevs); + + QEMU_CHECK_MONITOR(mon); + + return qemuMonitorJSONSnapshotDelete(mon, jobname, snapshotName, wrdev= s); +} + + int qemuMonitorBlockdevMirror(qemuMonitor *mon, const char *jobname, diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 76c859a888..27dbb78e06 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -1617,3 +1617,16 @@ int qemuMonitorDisplayReload(qemuMonitor *mon, const char *type, bool tlsCerts); + +int +qemuMonitorSnapshotSave(qemuMonitor *mon, + const char *jobname, + const char *snapshotName, + const char *vmstateDev, + char **wrdevs); + +int +qemuMonitorSnapshotDelete(qemuMonitor *mon, + const char *jobname, + const char *snapshotName, + char **wrdevs); diff --git a/src/qemu/qemu_monitor_json.c b/src/qemu/qemu_monitor_json.c index 8a20ce57e6..312a4aee04 100644 --- a/src/qemu/qemu_monitor_json.c +++ b/src/qemu/qemu_monitor_json.c @@ -8955,3 +8955,69 @@ int qemuMonitorJSONDisplayReload(qemuMonitor *mon, =20 return 0; } + +int +qemuMonitorJSONSnapshotSave(qemuMonitor *mon, + const char *jobname, + const char *snapshotName, + const char *vmstateDev, + char **wrdevs) +{ + g_autoptr(virJSONValue) cmd =3D NULL; + g_autoptr(virJSONValue) reply =3D NULL; + g_autoptr(virJSONValue) wrdev_list =3D NULL; + size_t i =3D 0; + + if (wrdevs) { + wrdev_list =3D virJSONValueNewArray(); + + for (i =3D 0; wrdevs[i]; i++) + if (virJSONValueArrayAppendString(wrdev_list, wrdevs[i]) < 0) + return -1; + } + + if (!(cmd =3D qemuMonitorJSONMakeCommand("snapshot-save", + "s:job-id", jobname, + "s:tag", snapshotName, + "s:vmstate", vmstateDev, + "A:devices", &wrdev_list, + NULL))) + return -1; + + if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) + return -1; + + return qemuMonitorJSONCheckError(cmd, reply); +} + +int +qemuMonitorJSONSnapshotDelete(qemuMonitor *mon, + const char *jobname, + const char *snapshotName, + char **wrdevs) +{ + g_autoptr(virJSONValue) cmd =3D NULL; + g_autoptr(virJSONValue) reply =3D NULL; + g_autoptr(virJSONValue) wrdev_list =3D NULL; + size_t i =3D 0; + + if (wrdevs) { + wrdev_list =3D virJSONValueNewArray(); + + for (i =3D 0; wrdevs[i]; i++) + if (virJSONValueArrayAppendString(wrdev_list, wrdevs[i]) < 0) + return -1; + } + + if (!(cmd =3D qemuMonitorJSONMakeCommand("snapshot-delete", + "s:job-id", jobname, + "s:tag", snapshotName, + "A:devices", &wrdev_list, + NULL))) + return -1; + + if (qemuMonitorJSONCommand(mon, cmd, &reply) < 0) + return -1; + + return qemuMonitorJSONCheckError(cmd, reply); +} diff --git a/src/qemu/qemu_monitor_json.h b/src/qemu/qemu_monitor_json.h index 921dd34ed2..0245cd54fc 100644 --- a/src/qemu/qemu_monitor_json.h +++ b/src/qemu/qemu_monitor_json.h @@ -825,3 +825,16 @@ qemuMonitorJSONQueryStats(qemuMonitor *mon, int qemuMonitorJSONDisplayReload(qemuMonitor *mon, const char *type, bool tlsCerts); + +int +qemuMonitorJSONSnapshotSave(qemuMonitor *mon, + const char *jobname, + const char *snapshotName, + const char *vmstateDev, + char **wrdevs); + +int +qemuMonitorJSONSnapshotDelete(qemuMonitor *mon, + const char *jobname, + const char *snapshotName, + char **wrdevs); --=20 2.43.5 From nobody Mon Sep 16 19:23:33 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1721084937; cv=none; d=zohomail.com; s=zohoarc; b=iJVDDj0T7Ajq3Io3Zl+9R7pVc7PmIXIBUAbWwpwAU/HJ+vVzQO8MH0mXAHb2Pk23oMLt/G2zFDM0YkE3rkbGBidkSrIyTfDqmFKnskfrU+2KJwobeIdu13Rs9z6eoiAilCgRyUelGId39hmrglUoGFFohs0lXj9BClTkLQXN/Yg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1721084937; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=XmNE5t+P3/FsENCLHAXnRyZ14ffufpj6cP1uQpF29Oo=; b=RIYs7XVBRDCaPIbUHxuNelUTiUzz5WCsrebYBmV1sbqk4CySad6U5KP+Pg780AXFfxAKvCOodRp/8dtQ4xts3QEVulBqikfG5z3/5T29kRKt27YmezemR35EAOnXhhx8MwGLVPYiFAY04ExSnf6TnNrAl7PLA19ouC++ZPjdHQg= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 172108493710720.944709565809262; Mon, 15 Jul 2024 16:08:57 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 04C0EAEC; Mon, 15 Jul 2024 19:08:55 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id A311BBD3; Mon, 15 Jul 2024 19:07:50 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 39448A53; Mon, 15 Jul 2024 19:07:46 -0400 (EDT) Received: from relay.virtuozzo.com (relay.virtuozzo.com [130.117.225.111]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id ABC37A56 for ; Mon, 15 Jul 2024 19:07:45 -0400 (EDT) Received: from [130.117.225.1] (helo=vz9-barybin-2.ch-qa.vzint.dev) by relay.virtuozzo.com with esmtp (Exim 4.96) (envelope-from ) id 1sTUXc-00CvTw-2r; Tue, 16 Jul 2024 00:52:13 +0200 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=virtuozzo.com; s=relay; h=MIME-Version:Message-ID:Date:Subject:From: Content-Type; bh=3edKNBxzwV1J7tRCnzi7Jk2TIZpmH0n5RPkPiQM49Jo=; b=dayxaBxookiA WcHbrfa5WbGrw4FRp7/Z2zPeE41yfx3KiTxiFk7qxiKymM08NXGZ7YEZdo+nQt2tFib4hYbs0gnNM Q4+IOuN0KoQp160CivtnydleC1W5/nlrYdgftMvf3QbNOu42l9AQDIBIrXX0rpKRsebwRpjiUcGWL q+1hXHDZ0A+yPP47C/ssdN+5qWUldAftQpEI/TmteMPpWykR7hy2hl6tBb0bl0p1mqJ3kfqQ/cIVR MFd3mSlNARe2ukeN/t5u5MnG5YVeV6BQk5zKu5kGwPuzAiYSZ9wQnOz302Y2eX10HYkBWV1RHWo/U 66lvrzUNeWAHVC/hLLgXsA==; To: devel@lists.libvirt.org Subject: [PATCH 2/4] qemu blockjob: add snapshot-save/delete job types Date: Tue, 16 Jul 2024 01:42:26 +0300 Message-ID: <20240715225013.100847-4-nikolai.barybin@virtuozzo.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20240715225013.100847-2-nikolai.barybin@virtuozzo.com> References: <20240715225013.100847-2-nikolai.barybin@virtuozzo.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: 5HYUUK5Z44ZOIFBSQIMUXNJGNHM6SVOB X-Message-ID-Hash: 5HYUUK5Z44ZOIFBSQIMUXNJGNHM6SVOB X-MailFrom: nikolai.barybin@virtuozzo.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: den@openvz.org, Nikolai Barybin X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Nikolai Barybin via Devel Reply-To: Nikolai Barybin X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1721084937906116600 Content-Type: text/plain; charset="utf-8" Signed-off-by: Nikolai Barybin --- src/qemu/qemu_block.c | 2 ++ src/qemu/qemu_blockjob.c | 6 +++++- src/qemu/qemu_blockjob.h | 2 ++ src/qemu/qemu_domain.c | 4 ++++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c index d6cdf521c4..414803cff2 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c @@ -3766,6 +3766,8 @@ qemuBlockPivot(virDomainObj *vm, case QEMU_BLOCKJOB_TYPE_INTERNAL: case QEMU_BLOCKJOB_TYPE_CREATE: case QEMU_BLOCKJOB_TYPE_BROKEN: + case QEMU_BLOCKJOB_TYPE_SNAPSHOT_SAVE: + case QEMU_BLOCKJOB_TYPE_SNAPSHOT_DELETE: virReportError(VIR_ERR_OPERATION_INVALID, _("job type '%1$s' does not support pivot"), qemuBlockjobTypeToString(job->type)); diff --git a/src/qemu/qemu_blockjob.c b/src/qemu/qemu_blockjob.c index 42856df6d4..0d4fdd64ca 100644 --- a/src/qemu/qemu_blockjob.c +++ b/src/qemu/qemu_blockjob.c @@ -68,7 +68,9 @@ VIR_ENUM_IMPL(qemuBlockjob, "backup", "", "create", - "broken"); + "broken", + "snapshot-save", + "snapshot-delete"); =20 static virClass *qemuBlockJobDataClass; =20 @@ -1450,6 +1452,8 @@ qemuBlockJobEventProcessConcludedTransition(qemuBlock= JobData *job, break; =20 case QEMU_BLOCKJOB_TYPE_BROKEN: + case QEMU_BLOCKJOB_TYPE_SNAPSHOT_SAVE: + case QEMU_BLOCKJOB_TYPE_SNAPSHOT_DELETE: case QEMU_BLOCKJOB_TYPE_NONE: case QEMU_BLOCKJOB_TYPE_INTERNAL: case QEMU_BLOCKJOB_TYPE_LAST: diff --git a/src/qemu/qemu_blockjob.h b/src/qemu/qemu_blockjob.h index f1ac43b4c7..d4a3677050 100644 --- a/src/qemu/qemu_blockjob.h +++ b/src/qemu/qemu_blockjob.h @@ -66,6 +66,8 @@ typedef enum { QEMU_BLOCKJOB_TYPE_INTERNAL, QEMU_BLOCKJOB_TYPE_CREATE, QEMU_BLOCKJOB_TYPE_BROKEN, + QEMU_BLOCKJOB_TYPE_SNAPSHOT_SAVE, + QEMU_BLOCKJOB_TYPE_SNAPSHOT_DELETE, QEMU_BLOCKJOB_TYPE_LAST } qemuBlockJobType; G_STATIC_ASSERT((int)QEMU_BLOCKJOB_TYPE_INTERNAL =3D=3D VIR_DOMAIN_BLOCK_J= OB_TYPE_LAST); diff --git a/src/qemu/qemu_domain.c b/src/qemu/qemu_domain.c index 2134b11038..f512921187 100644 --- a/src/qemu/qemu_domain.c +++ b/src/qemu/qemu_domain.c @@ -2407,6 +2407,8 @@ qemuDomainObjPrivateXMLFormatBlockjobIterator(void *p= ayload, break; =20 case QEMU_BLOCKJOB_TYPE_BROKEN: + case QEMU_BLOCKJOB_TYPE_SNAPSHOT_SAVE: + case QEMU_BLOCKJOB_TYPE_SNAPSHOT_DELETE: case QEMU_BLOCKJOB_TYPE_NONE: case QEMU_BLOCKJOB_TYPE_INTERNAL: case QEMU_BLOCKJOB_TYPE_LAST: @@ -2958,6 +2960,8 @@ qemuDomainObjPrivateXMLParseBlockjobDataSpecific(qemu= BlockJobData *job, break; =20 case QEMU_BLOCKJOB_TYPE_BROKEN: + case QEMU_BLOCKJOB_TYPE_SNAPSHOT_SAVE: + case QEMU_BLOCKJOB_TYPE_SNAPSHOT_DELETE: case QEMU_BLOCKJOB_TYPE_NONE: case QEMU_BLOCKJOB_TYPE_INTERNAL: case QEMU_BLOCKJOB_TYPE_LAST: --=20 2.43.5 From nobody Mon Sep 16 19:23:33 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1721084966; cv=none; d=zohomail.com; s=zohoarc; b=aYWp0LRr2ZP5KL8GaBzOoLVZoagpdiC+mUMoMMEQRXuLSJH7JobFK9Ugg0+eU/Bi7b30N3PNFuGtJO9AOFLpRL2e+zhN0ggWPtVECD0MoIehoCbbu0hnGIJDATYsWMW2cUWWPI5zWB0LufQoEN8F6/9ERo1DYyxv3fjtSO91Lvc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1721084966; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=Aj7gXtfWk9k6jj179DOJwnX4SlneQmlSeTCwdkdgRlQ=; b=QdXRrlWMKA29YfMObLDVhBmEvL8fNmj2yrjmsxuHQisX5ngJ2mD1ZGMvqipLu8R7CsUpjuK4L1XgvA6BccW35+GTONQEgtCdEVCN403DEu5m6OMUmcjV3kAQBc284IjpcKIGJumgCF9JfCIUUCTHwD38gAuXPTcyN50IIV7wrVY= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1721084966023770.2347136399051; Mon, 15 Jul 2024 16:09:26 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id EE37BBD7; Mon, 15 Jul 2024 19:09:24 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id EED51C5D; Mon, 15 Jul 2024 19:07:52 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 64644A53; Mon, 15 Jul 2024 19:07:47 -0400 (EDT) Received: from relay.virtuozzo.com (relay.virtuozzo.com [130.117.225.111]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id B383C95A for ; Mon, 15 Jul 2024 19:07:46 -0400 (EDT) Received: from [130.117.225.1] (helo=vz9-barybin-2.ch-qa.vzint.dev) by relay.virtuozzo.com with esmtp (Exim 4.96) (envelope-from ) id 1sTUXi-00CvTw-0z; Tue, 16 Jul 2024 00:52:18 +0200 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=virtuozzo.com; s=relay; h=MIME-Version:Message-ID:Date:Subject:From: Content-Type; bh=7m+P5nniIsVa7pHgo3YIqG+6ZIth/CZ5apWN+5o1Gbw=; b=mwMC2P2GBsFG TdGWMBG2bhCKY+cWIW5tXden6iQMLfMFdmn6p2SH+TylilvBzdKbrTvuAZHCZzT60XIHUJbyAG7SK 1mpfeaw7CGnYCBwA49akzC1vS4GOpGXM5Xk68fUme1Uwga/9RLTUu8e6HV6VHrVOsM4UBClrmsGj/ UquP4Sy6qgcx/sL7bGmOs1rBcVnyzvxGbjqXFAVOczNh04Zg44fwnZZjFrMpRCBEGBb8IezJPb0uX tNj+GHwlpY57eWn7iu0mGrCqkBjPWrrdl1Js0w3aFg6FcW2ZBIPnK5xBeebUIdOBifGzzVQb7nh46 4790t+rbeJTmkUgviyhhcQ==; To: devel@lists.libvirt.org Subject: [PATCH 3/4] qemu snapshot: use QMP snapshot-save/delete for internal snapshots Date: Tue, 16 Jul 2024 01:42:27 +0300 Message-ID: <20240715225013.100847-5-nikolai.barybin@virtuozzo.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20240715225013.100847-2-nikolai.barybin@virtuozzo.com> References: <20240715225013.100847-2-nikolai.barybin@virtuozzo.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: OCB5X7YMIUTS6RZHWYZTYLMNYBQAKW5E X-Message-ID-Hash: OCB5X7YMIUTS6RZHWYZTYLMNYBQAKW5E X-MailFrom: nikolai.barybin@virtuozzo.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: den@openvz.org, Nikolai Barybin X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Nikolai Barybin via Devel Reply-To: Nikolai Barybin X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1721084968057116600 Content-Type: text/plain; charset="utf-8" The usage of HMP commands are highly discouraged by qemu. Moreover, current snapshot creation routine does not provide flexibility in choosing target device for VM state snapshot. This patch makes use of QMP commands snapshot-save/delete and by default chooses first writable disk (if present) as target for VM state, NVRAM - otherwise. Signed-off-by: Nikolai Barybin --- src/qemu/qemu_snapshot.c | 158 ++++++++++++++++++++++++++++++++++++--- 1 file changed, 148 insertions(+), 10 deletions(-) diff --git a/src/qemu/qemu_snapshot.c b/src/qemu/qemu_snapshot.c index f5260c4a22..83949a9a27 100644 --- a/src/qemu/qemu_snapshot.c +++ b/src/qemu/qemu_snapshot.c @@ -308,6 +308,96 @@ qemuSnapshotCreateInactiveExternal(virQEMUDriver *driv= er, return ret; } =20 +static int +qemuSnapshotActiveInternalGetWrdevListHelper(virDomainObj *vm, + char **wrdevs) +{ + size_t wrdevCount =3D 0; + size_t i =3D 0; + + for (i =3D 0; i < vm->def->ndisks; i++) { + virDomainDiskDef *disk =3D vm->def->disks[i]; + if (!disk->src->readonly) { + wrdevs[wrdevCount] =3D g_strdup(disk->src->nodenameformat); + wrdevCount++; + } + } + + if (wrdevCount =3D=3D 0) { + if (vm->def->os.loader->nvram) { + wrdevs[0] =3D g_strdup(vm->def->os.loader->nvram->nodenameform= at); + } else { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", + _("no writable device for internal snapshot cre= ation/deletion")); + return -1; + } + } + + return 0; +} + + +static int +qemuSnapshotCreateActiveInternalDone(virDomainObj *vm) +{ + qemuBlockJobData *job =3D NULL; + qemuDomainObjPrivate *priv =3D vm->privateData; + + if (!(job =3D virHashLookup(priv->blockjobs, g_strdup_printf("snapsave= %d", vm->def->id)))) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("failed to lookup blockjob 'snapsave%1$d'"), vm->= def->id); + return -1; + } + + qemuBlockJobUpdate(vm, job, VIR_ASYNC_JOB_NONE); + if (job->state =3D=3D VIR_DOMAIN_BLOCK_JOB_FAILED) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("snapshot-save job failed: %1$s"), NULLSTR(job->e= rrmsg)); + return -1; + } + + return job->state =3D=3D VIR_DOMAIN_BLOCK_JOB_COMPLETED ? 1 : 0; +} + + +static int +qemuSnapshotCreateActiveInternalStart(virDomainObj *vm, + const char *name) +{ + qemuBlockJobData *job =3D NULL; + g_autofree char** wrdevs =3D NULL; + int ret =3D -1; + int rc =3D 0; + + wrdevs =3D g_new0(char *, vm->def->ndisks + 1); + if (qemuSnapshotActiveInternalGetWrdevListHelper(vm, wrdevs) < 0) + return -1; + + if (!(job =3D qemuBlockJobDiskNew(vm, NULL, QEMU_BLOCKJOB_TYPE_SNAPSHO= T_SAVE, + g_strdup_printf("snapsave%d", vm->def-= >id)))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("failed to create n= ew blockjob")); + return -1; + } + + qemuBlockJobSyncBegin(job); + if (qemuDomainObjEnterMonitorAsync(vm, VIR_ASYNC_JOB_SNAPSHOT) < 0) { + ret =3D -1; + goto cleanup; + } + + rc =3D qemuMonitorSnapshotSave(qemuDomainGetMonitor(vm), job->name, + name, wrdevs[0], wrdevs); + qemuDomainObjExitMonitor(vm); + if (rc =3D=3D 0) { + qemuBlockJobStarted(job, vm); + ret =3D 0; + } + + cleanup: + qemuBlockJobStartupFinalize(vm, job); + return ret; +} + =20 /* The domain is expected to be locked and active. */ static int @@ -316,11 +406,11 @@ qemuSnapshotCreateActiveInternal(virQEMUDriver *drive= r, virDomainMomentObj *snap, unsigned int flags) { - qemuDomainObjPrivate *priv =3D vm->privateData; virObjectEvent *event =3D NULL; bool resume =3D false; virDomainSnapshotDef *snapdef =3D virDomainSnapshotObjGetDef(snap); int ret =3D -1; + int rv =3D 0; =20 if (!qemuMigrationSrcIsAllowed(vm, false, VIR_ASYNC_JOB_SNAPSHOT, 0)) goto cleanup; @@ -342,15 +432,17 @@ qemuSnapshotCreateActiveInternal(virQEMUDriver *drive= r, } } =20 - if (qemuDomainObjEnterMonitorAsync(vm, VIR_ASYNC_JOB_SNAPSHOT) < 0) { + if ((ret =3D qemuSnapshotCreateActiveInternalStart(vm, snap->def->name= )) < 0) { resume =3D false; goto cleanup; } =20 - ret =3D qemuMonitorCreateSnapshot(priv->mon, snap->def->name); - qemuDomainObjExitMonitor(vm); - if (ret < 0) - goto cleanup; + while ((rv =3D qemuSnapshotCreateActiveInternalDone(vm)) !=3D 1) { + if (rv < 0 || qemuDomainObjWait(vm) < 0) { + ret =3D -1; + goto cleanup; + } + } =20 if (!(snapdef->cookie =3D (virObject *) qemuDomainSaveCookieNew(vm))) goto cleanup; @@ -3603,6 +3695,55 @@ qemuSnapshotDiscardMetadata(virDomainObj *vm, } =20 =20 +static int +qemuSnapshotDiscardActiveInternal(virDomainObj *vm, + const char *name) +{ + qemuBlockJobData *job =3D NULL; + g_autofree char** wrdevs =3D NULL; + int ret =3D -1; + int rc =3D 0; + + wrdevs =3D g_new0(char *, vm->def->ndisks + 1); + if (qemuSnapshotActiveInternalGetWrdevListHelper(vm, wrdevs) < 0) + return -1; + + if (!(job =3D qemuBlockJobDiskNew(vm, NULL, QEMU_BLOCKJOB_TYPE_SNAPSHO= T_DELETE, + g_strdup_printf("snapdelete%d", vm->de= f->id)))) { + virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("failed to create n= ew blockjob")); + return -1; + } + + qemuBlockJobSyncBegin(job); + if (qemuDomainObjEnterMonitorAsync(vm, VIR_ASYNC_JOB_SNAPSHOT) < 0) + goto cleanup; + + rc =3D qemuMonitorSnapshotDelete(qemuDomainGetMonitor(vm), job->name, = name, wrdevs); + qemuDomainObjExitMonitor(vm); + if (rc =3D=3D 0) { + qemuBlockJobStarted(job, vm); + ret =3D 0; + } else { + goto cleanup; + } + + while (job->state !=3D VIR_DOMAIN_BLOCK_JOB_COMPLETED) { + qemuDomainObjWait(vm); + qemuBlockJobUpdate(vm, job, VIR_ASYNC_JOB_NONE); + if (job->state =3D=3D VIR_DOMAIN_BLOCK_JOB_FAILED) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("snapshot-delete job failed: %1$s"), NULLSTR(= job->errmsg)); + ret =3D -1; + break; + } + } + + cleanup: + qemuBlockJobStartupFinalize(vm, job); + return ret; +} + + /* Discard one snapshot (or its metadata), without reparenting any childre= n. */ static int qemuSnapshotDiscardImpl(virQEMUDriver *driver, @@ -3645,11 +3786,8 @@ qemuSnapshotDiscardImpl(virQEMUDriver *driver, /* Similarly as internal snapshot creation we would use a = regular job * here so set a mask to forbid any other job. */ qemuDomainObjSetAsyncJobMask(vm, VIR_JOB_NONE); - if (qemuDomainObjEnterMonitorAsync(vm, VIR_ASYNC_JOB_SNAPS= HOT) < 0) - return -1; /* we continue on even in the face of error */ - qemuMonitorDeleteSnapshot(qemuDomainGetMonitor(vm), snap->= def->name); - qemuDomainObjExitMonitor(vm); + qemuSnapshotDiscardActiveInternal(vm, snap->def->name); qemuDomainObjSetAsyncJobMask(vm, VIR_JOB_DEFAULT_MASK); } } --=20 2.43.5 From nobody Mon Sep 16 19:23:33 2024 Delivered-To: importer@patchew.org Received-SPF: pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) client-ip=8.43.85.245; envelope-from=devel-bounces@lists.libvirt.org; helo=lists.libvirt.org; Authentication-Results: mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass(p=reject dis=none) header.from=lists.libvirt.org ARC-Seal: i=1; a=rsa-sha256; t=1721084907; cv=none; d=zohomail.com; s=zohoarc; b=mWnZKCuZGRMqhLvqKnqauykd316eP4qbLUa3sglsKi/TzmzYOC6xqifLWtIuEQzwUOEX41jv53JBtcbVX8TKPi3UfVYv24mpZdmdioaaRmu74QOMgO1yus0sRd9qeMCghhhi1DeqtlOH0bgndkcIX7VVUAJ+CmQMRmfycOEw6gs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1721084907; h=Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:Reply-To:Reply-To:References:Subject:Subject:To:To:Message-Id; bh=GwR0Vn3fOxQlTRO2AytkmfBeQSkmq07ncIR7n7X2tnw=; b=nNicEsGwsWPr5DYZB/gwaAisPf2q+4eVpTUMMJn769UQ/7cS3Ka8nHL3H9AwP4XbeRPnJiuB7V+8RVaR9eQ+Eby/45LRlkIkD0P1RFQ0Ej1qB3ilP7j/2bEppU5e/cnTKvgdPLW5eb3dagA8OsjShm8bYFCxaKH7bkGlgSsSqg4= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=fail; spf=pass (zohomail.com: domain of lists.libvirt.org designates 8.43.85.245 as permitted sender) smtp.mailfrom=devel-bounces@lists.libvirt.org; dmarc=pass header.from= (p=reject dis=none) Return-Path: Received: from lists.libvirt.org (lists.libvirt.org [8.43.85.245]) by mx.zohomail.com with SMTPS id 1721084907873263.52900311150165; Mon, 15 Jul 2024 16:08:27 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 87726BFA; Mon, 15 Jul 2024 19:08:26 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id CC716A5E; Mon, 15 Jul 2024 19:07:48 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id E4782A58; Mon, 15 Jul 2024 19:07:45 -0400 (EDT) Received: from relay.virtuozzo.com (relay.virtuozzo.com [130.117.225.111]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by lists.libvirt.org (Postfix) with ESMTPS id A243BA53 for ; Mon, 15 Jul 2024 19:07:44 -0400 (EDT) Received: from [130.117.225.1] (helo=vz9-barybin-2.ch-qa.vzint.dev) by relay.virtuozzo.com with esmtp (Exim 4.96) (envelope-from ) id 1sTUXj-00CvTw-2Z; Tue, 16 Jul 2024 00:52:20 +0200 X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-1.5 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_LOW,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 X-Greylist: delayed 950 seconds by postgrey-1.37 at lists.libvirt.org; Mon, 15 Jul 2024 19:07:44 EDT DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=virtuozzo.com; s=relay; h=MIME-Version:Message-ID:Date:Subject:From: Content-Type; bh=1A5IIM0lB6owzwYAqWSEdyrXWQ9Silj5l/yGvD2UqUs=; b=voyyf0rlV+au vyXhAJRg3N872HJ5A59y41fhAtJ+ZH5yOs+Fd3T2UES0GCGSNNclnlaXhS9PeMT/mwOeIld8RPXjF HtK+B0+PrFnFSrFfZxAgS3kvk3EAH/EL+rQhmnYYqDbXNZb+tODgmgcBCPXjGRS8rLnf4DML6veJQ YBdyyd64b4dr1HORkeotwEGtCIhWFA1FDKeZ0z4cxz5Hd9DERyDdFitS6aLHACZ1Qv/qkSB3l98ay xlFHKyL6rbVJFovFs4k5oisDAJ0ol+jK/dXQ7SNv+0NjLFuBK7DMsO2xSflmBlN2m6FaVBm4WVd9q Drqqsxrbww90WrhFRFduFQ==; To: devel@lists.libvirt.org Subject: [PATCH 4/4] qemu monitor: reap qemu_monitor_text Date: Tue, 16 Jul 2024 01:42:28 +0300 Message-ID: <20240715225013.100847-6-nikolai.barybin@virtuozzo.com> X-Mailer: git-send-email 2.43.5 In-Reply-To: <20240715225013.100847-2-nikolai.barybin@virtuozzo.com> References: <20240715225013.100847-2-nikolai.barybin@virtuozzo.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Message-ID-Hash: VHMCI2GZLIDZMX5FKRZKU5KBNRFVR2MA X-Message-ID-Hash: VHMCI2GZLIDZMX5FKRZKU5KBNRFVR2MA X-MailFrom: nikolai.barybin@virtuozzo.com X-Mailman-Rule-Misses: dmarc-mitigation; no-senders; approved; emergency; loop; banned-address; member-moderation; header-match-config-1; header-match-config-2; header-match-config-3; header-match-devel.lists.libvirt.org-0; nonmember-moderation; administrivia; implicit-dest; max-recipients; max-size; news-moderation; no-subject; suspicious-header CC: den@openvz.org, Nikolai Barybin X-Mailman-Version: 3.2.2 Precedence: list List-Id: Development discussions about the libvirt library & tools Archived-At: List-Archive: List-Help: List-Post: List-Subscribe: List-Unsubscribe: From: Nikolai Barybin via Devel Reply-To: Nikolai Barybin X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1721084910163116600 Content-Type: text/plain; charset="utf-8" Signed-off-by: Nikolai Barybin --- po/POTFILES | 1 - po/libvirt.pot | 18 -------- src/qemu/meson.build | 1 - src/qemu/qemu_monitor.c | 25 ---------- src/qemu/qemu_monitor.h | 3 -- src/qemu/qemu_monitor_text.c | 88 ------------------------------------ src/qemu/qemu_monitor_text.h | 29 ------------ 7 files changed, 165 deletions(-) delete mode 100644 src/qemu/qemu_monitor_text.c delete mode 100644 src/qemu/qemu_monitor_text.h diff --git a/po/POTFILES b/po/POTFILES index 1ed4086d2c..28773c6d78 100644 --- a/po/POTFILES +++ b/po/POTFILES @@ -185,7 +185,6 @@ src/qemu/qemu_migration_cookie.c src/qemu/qemu_migration_params.c src/qemu/qemu_monitor.c src/qemu/qemu_monitor_json.c -src/qemu/qemu_monitor_text.c src/qemu/qemu_namespace.c src/qemu/qemu_nbdkit.c src/qemu/qemu_passt.c diff --git a/po/libvirt.pot b/po/libvirt.pot index 30f9344015..15c0871352 100644 --- a/po/libvirt.pot +++ b/po/libvirt.pot @@ -8794,11 +8794,6 @@ msgstr "" msgid "Failed to delete snapshot %1$s" msgstr "" =20 -#: src/qemu/qemu_monitor_text.c:83 -#, c-format -msgid "Failed to delete snapshot: %1$s" -msgstr "" - #: src/bhyve/bhyve_driver.c:389 src/libxl/libxl_driver.c:4670 #: src/lxc/lxc_driver.c:2495 src/network/bridge_driver.c:3618 #: src/qemu/qemu_driver.c:7793 src/storage/storage_driver.c:1399 @@ -10640,11 +10635,6 @@ msgstr "" msgid "Failed to symlink device %1$s to %2$s" msgstr "" =20 -#: src/qemu/qemu_monitor_text.c:52 -#, c-format -msgid "Failed to take snapshot: %1$s" -msgstr "" - #: src/util/virprocess.c:424 src/util/virprocess.c:435 #, c-format msgid "Failed to terminate process %1$lld with SIG%2$s" @@ -44930,14 +44920,6 @@ msgstr "" msgid "this disk doesn't support update" msgstr "" =20 -#: src/qemu/qemu_monitor_text.c:74 -msgid "this domain does not have a device to delete snapshots" -msgstr "" - -#: src/qemu/qemu_monitor_text.c:56 -msgid "this domain does not have a device to take snapshots" -msgstr "" - #: src/util/virerror.c:1042 msgid "this domain exists already" msgstr "" diff --git a/src/qemu/meson.build b/src/qemu/meson.build index 57356451e4..ec0572fdeb 100644 --- a/src/qemu/meson.build +++ b/src/qemu/meson.build @@ -27,7 +27,6 @@ qemu_driver_sources =3D [ 'qemu_migration_params.c', 'qemu_monitor.c', 'qemu_monitor_json.c', - 'qemu_monitor_text.c', 'qemu_namespace.c', 'qemu_nbdkit.c', 'qemu_passt.c', diff --git a/src/qemu/qemu_monitor.c b/src/qemu/qemu_monitor.c index 53f5ecf223..ccd937361c 100644 --- a/src/qemu/qemu_monitor.c +++ b/src/qemu/qemu_monitor.c @@ -28,7 +28,6 @@ =20 #include "qemu_alias.h" #include "qemu_monitor.h" -#include "qemu_monitor_text.h" #include "qemu_monitor_json.h" #include "qemu_domain.h" #include "qemu_capabilities.h" @@ -2739,30 +2738,6 @@ qemuMonitorDelObject(qemuMonitor *mon, } =20 =20 -int -qemuMonitorCreateSnapshot(qemuMonitor *mon, const char *name) -{ - VIR_DEBUG("name=3D%s", name); - - QEMU_CHECK_MONITOR(mon); - - /* there won't ever be a direct QMP replacement for this function */ - return qemuMonitorTextCreateSnapshot(mon, name); -} - - -int -qemuMonitorDeleteSnapshot(qemuMonitor *mon, const char *name) -{ - VIR_DEBUG("name=3D%s", name); - - QEMU_CHECK_MONITOR(mon); - - /* there won't ever be a direct QMP replacement for this function */ - return qemuMonitorTextDeleteSnapshot(mon, name); -} - - int qemuMonitorSnapshotSave(qemuMonitor *mon, const char *jobname, diff --git a/src/qemu/qemu_monitor.h b/src/qemu/qemu_monitor.h index 27dbb78e06..7c9f014b61 100644 --- a/src/qemu/qemu_monitor.h +++ b/src/qemu/qemu_monitor.h @@ -960,9 +960,6 @@ int qemuMonitorDelObject(qemuMonitor *mon, const char *objalias, bool report_error); =20 -int qemuMonitorCreateSnapshot(qemuMonitor *mon, const char *name); -int qemuMonitorDeleteSnapshot(qemuMonitor *mon, const char *name); - int qemuMonitorTransaction(qemuMonitor *mon, virJSONValue **actions) ATTRIBUTE_NONNULL(2); int qemuMonitorBlockdevMirror(qemuMonitor *mon, diff --git a/src/qemu/qemu_monitor_text.c b/src/qemu/qemu_monitor_text.c deleted file mode 100644 index 3482972600..0000000000 --- a/src/qemu/qemu_monitor_text.c +++ /dev/null @@ -1,88 +0,0 @@ -/* - * qemu_monitor_text.c: interaction with QEMU monitor console - * - * Copyright (C) 2006-2014 Red Hat, Inc. - * Copyright (C) 2006 Daniel P. Berrange - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - */ - -#include - - -#include "qemu_monitor_text.h" -#include "qemu_monitor_json.h" -#include "virlog.h" -#include "virerror.h" - -#define VIR_FROM_THIS VIR_FROM_QEMU - -VIR_LOG_INIT("qemu.qemu_monitor_text"); - -int -qemuMonitorTextCreateSnapshot(qemuMonitor *mon, - const char *name) -{ - g_autofree char *cmd =3D NULL; - g_autofree char *reply =3D NULL; - - cmd =3D g_strdup_printf("savevm \"%s\"", name); - - if (qemuMonitorJSONHumanCommand(mon, cmd, -1, &reply)) - return -1; - - if (strstr(reply, "Error while creating snapshot") || - strstr(reply, "Could not open VM state file") || - strstr(reply, "State blocked by non-migratable device") || - strstr(reply, "Error: ") || - (strstr(reply, "Error") && strstr(reply, "while writing VM"))) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("Failed to take snapshot: %1$s"), reply); - return -1; - } else if (strstr(reply, "No block device can accept snapshots")) { - virReportError(VIR_ERR_OPERATION_INVALID, "%s", - _("this domain does not have a device to take snaps= hots")); - return -1; - } - - return 0; -} - -int qemuMonitorTextDeleteSnapshot(qemuMonitor *mon, const char *name) -{ - g_autofree char *cmd =3D NULL; - g_autofree char *reply =3D NULL; - - cmd =3D g_strdup_printf("delvm \"%s\"", name); - if (qemuMonitorJSONHumanCommand(mon, cmd, -1, &reply)) - return -1; - - if (strstr(reply, "No block device supports snapshots")) { - virReportError(VIR_ERR_OPERATION_INVALID, "%s", - _("this domain does not have a device to delete sna= pshots")); - return -1; - } else if (strstr(reply, "Snapshots not supported on device")) { - virReportError(VIR_ERR_OPERATION_INVALID, "%s", reply); - return -1; - } else if (strstr(reply, "Error: ") || - (strstr(reply, "Error") && - strstr(reply, "while deleting snapshot"))) { - virReportError(VIR_ERR_OPERATION_FAILED, - _("Failed to delete snapshot: %1$s"), reply); - return -1; - } - - return 0; -} diff --git a/src/qemu/qemu_monitor_text.h b/src/qemu/qemu_monitor_text.h deleted file mode 100644 index 27d0f061d3..0000000000 --- a/src/qemu/qemu_monitor_text.h +++ /dev/null @@ -1,29 +0,0 @@ -/* - * qemu_monitor_text.h: interaction with QEMU monitor console - * - * Copyright (C) 2006-2009, 2011-2012 Red Hat, Inc. - * Copyright (C) 2006 Daniel P. Berrange - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details. - * - * You should have received a copy of the GNU Lesser General Public - * License along with this library. If not, see - * . - */ - -#pragma once - -#include "internal.h" - -#include "qemu_monitor.h" - -int qemuMonitorTextCreateSnapshot(qemuMonitor *mon, const char *name); -int qemuMonitorTextDeleteSnapshot(qemuMonitor *mon, const char *name); --=20 2.43.5