From nobody Sat Feb 7 09:11:02 2026 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=1743433535; cv=none; d=zohomail.com; s=zohoarc; b=HgW2B5Ea0gSwwwkzx4zt5QBzTgEfMqKi0U3B6D+q+jlDMLNDzlitEDz5+gWjojOBXj/zVOqJnMDj8uuNG7C8DCc1qPkiQIGJJ0jsD3Cl94irJBv0uCwJzn8E4pAlEakwkW0GK1sostlI5r7v35aUyjoihhWSZ7SU/J5Ej3nzBeg= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1743433535; h=Content-Type: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=Qbeq0aqfMnYWbBsVnyDeU1mcK2RWDBZBDTILVB2KTK0=; b=IB6oGABegCBKYKrehCjiJtM4vkmAl9e5oZewKX8umGK3zIUc1htVFeRzS28hVH3nxdS39+NztzcQgiOJeXaP2PNPrATpz5fMjWrp99HZfiEIzSOEVUVaoXhqj6XPjfQdO6HrfH0MTmMXUBR7w/mwbfdgIGJR37816ulh4v29sBA= 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 1743433535505393.8481200361979; Mon, 31 Mar 2025 08:05:35 -0700 (PDT) Received: by lists.libvirt.org (Postfix, from userid 996) id 7248A1357; Mon, 31 Mar 2025 11:05:34 -0400 (EDT) Received: from lists.libvirt.org (localhost [IPv6:::1]) by lists.libvirt.org (Postfix) with ESMTP id 9B13F1371; Mon, 31 Mar 2025 11:04:19 -0400 (EDT) Received: by lists.libvirt.org (Postfix, from userid 996) id BB87B11A6; Mon, 31 Mar 2025 11:04:12 -0400 (EDT) Received: from us-smtp-delivery-124.mimecast.com (us-smtp-delivery-124.mimecast.com [170.10.129.124]) (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 350C111AC for ; Mon, 31 Mar 2025 11:04:12 -0400 (EDT) Received: from mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (ec2-54-186-198-63.us-west-2.compute.amazonaws.com [54.186.198.63]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-449-Yq7XHmoEP-qc6RvjS41udw-1; Mon, 31 Mar 2025 11:04:10 -0400 Received: from mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com [10.30.177.40]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mx-prod-mc-05.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTPS id 6DDDB19560BC for ; Mon, 31 Mar 2025 15:04:09 +0000 (UTC) Received: from kshcheti-thinkpadp1gen4i.tpbc.com (unknown [10.43.2.246]) by mx-prod-int-04.mail-002.prod.us-west-2.aws.redhat.com (Postfix) with ESMTP id 7C3981955BEF; Mon, 31 Mar 2025 15:04:08 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.4.4 (2020-01-24) on lists.libvirt.org X-Spam-Level: X-Spam-Status: No, score=-0.8 required=5.0 tests=DKIM_INVALID,DKIM_SIGNED, MAILING_LIST_MULTI,RCVD_IN_DNSWL_NONE,RCVD_IN_MSPIKE_H5, RCVD_IN_MSPIKE_WL,RCVD_IN_VALIDITY_RPBL_BLOCKED, RCVD_IN_VALIDITY_SAFE_BLOCKED,SPF_HELO_NONE autolearn=unavailable autolearn_force=no version=3.4.4 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1743433451; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=ISJX8verpHfaZ4XKma9XCmwDLOmscJqQF86bet8EUDI=; b=ekJC4BHSMnNm9kglX2fdYUeGAGwPg0Ff7DDFR/mOfEHgrxz7q9QJIb/oSuV1d4hqs9OVCE Wkq0wBcgci4P7Fag9FVtqjVaS+n6VC5zuU3Utjm64tYcb7jdyolEm/S54n8TTNEznCDxqN irr/MHyYVb90/DP8YkYS7p1lVdtSo9s= X-MC-Unique: Yq7XHmoEP-qc6RvjS41udw-1 X-Mimecast-MFC-AGG-ID: Yq7XHmoEP-qc6RvjS41udw_1743433449 To: devel@lists.libvirt.org Subject: [PATCH 2/4] ch: add transient definition save and load Date: Mon, 31 Mar 2025 17:01:39 +0200 Message-ID: <20250331150359.276206-3-kshcheti@redhat.com> In-Reply-To: <20250331150359.276206-1-kshcheti@redhat.com> References: <20250331150359.276206-1-kshcheti@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 3.0 on 10.30.177.40 X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: Wz5D7Nc5NgdiuNVQeoJfdgiXj1qXnHfU2-3UnKQjMgs_1743433449 X-Mimecast-Originator: redhat.com Content-Transfer-Encoding: quoted-printable Message-ID-Hash: QUDTEJWCPM2XUFH5FUPLWO3RDPLFBOCD X-Message-ID-Hash: QUDTEJWCPM2XUFH5FUPLWO3RDPLFBOCD X-MailFrom: kshcheti@redhat.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: Kirill Shchetiniuk 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: Kirill Shchetiniuk via Devel Reply-To: Kirill Shchetiniuk X-ZohoMail-DKIM: fail (Header signature does not verify) X-ZM-MESSAGEID: 1743433538411019100 Content-Type: text/plain; charset="utf-8"; x-default="true" When domain was started its transient definition was not saved on disk, this led to the situation when CH driver dies and starts again, all transient definitions of currently running domains had been lost. Newly all transient definitions of running domains are saved on disk and can be loaded during the CH driver initialization. Transient definitions are also removed when domain stops. Resolves: https://gitlab.com/libvirt/libvirt/-/issues/743 Signed-off-by: Kirill Shchetiniuk --- src/ch/ch_domain.c | 15 +++++++++++++++ src/ch/ch_domain.h | 3 +++ src/ch/ch_driver.c | 8 ++++++++ src/ch/ch_process.c | 25 +++++++++++++++++++++++++ 4 files changed, 51 insertions(+) diff --git a/src/ch/ch_domain.c b/src/ch/ch_domain.c index c0c9acd85b..4c9ed93b15 100644 --- a/src/ch/ch_domain.c +++ b/src/ch/ch_domain.c @@ -414,3 +414,18 @@ virCHDomainValidateActualNetDef(virDomainNetDef *net) =20 return 0; } + +void +virCHDomainSaveStatus(virDomainObj *vm) +{ + virCHDomainObjPrivate *priv =3D vm->privateData; + virCHDriver *driver =3D priv->driver; + g_autoptr(virCHDriverConfig) cfg =3D virCHDriverGetConfig(driver); + + VIR_DEBUG("Saving status on vm %s", vm->def->name); + + if (virDomainObjIsActive(vm)) { + if (virDomainObjSave(vm, driver->xmlopt, cfg->stateDir) < 0) + VIR_WARN("Failed to save status on vm %s", vm->def->name); + } +} diff --git a/src/ch/ch_domain.h b/src/ch/ch_domain.h index 69a657f6af..1a43049f91 100644 --- a/src/ch/ch_domain.h +++ b/src/ch/ch_domain.h @@ -79,3 +79,6 @@ virCHDomainObjFromDomain(virDomainPtr domain); =20 int virCHDomainValidateActualNetDef(virDomainNetDef *net); + +void +virCHDomainSaveStatus(virDomainObj *vm); diff --git a/src/ch/ch_driver.c b/src/ch/ch_driver.c index c7f357dac9..4ce68c9299 100644 --- a/src/ch/ch_driver.c +++ b/src/ch/ch_driver.c @@ -1473,6 +1473,14 @@ chStateInitialize(bool privileged, goto cleanup; } =20 + /* Transient domains load */ + if (virDomainObjListLoadAllConfigs(ch_driver->domains, + cfg->stateDir, + NULL, true, + ch_driver->xmlopt, + NULL, NULL) < 0) + goto cleanup; + /* Persistent domains load */ if (virDomainObjListLoadAllConfigs(ch_driver->domains, cfg->configDir, diff --git a/src/ch/ch_process.c b/src/ch/ch_process.c index 31aa49b3a5..08331352a4 100644 --- a/src/ch/ch_process.c +++ b/src/ch/ch_process.c @@ -995,6 +995,8 @@ virCHProcessStart(virCHDriver *driver, =20 virDomainObjSetState(vm, VIR_DOMAIN_RUNNING, reason); =20 + virCHDomainSaveStatus(vm); + return 0; =20 cleanup: @@ -1004,6 +1006,25 @@ virCHProcessStart(virCHDriver *driver, return ret; } =20 +static void +virCHProcessRemoveDomainStatus(virCHDriver *driver, + virDomainObj *vm) +{ + g_autofree char *file =3D NULL; + virCHDomainObjPrivate *priv =3D vm->privateData; + g_autoptr(virCHDriverConfig) cfg =3D virCHDriverGetConfig(driver); + + file =3D g_strdup_printf("%s/%s.xml", cfg->stateDir, vm->def->name); + + if (unlink(file) < 0 && errno !=3D ENOENT && errno !=3D ENOTDIR) + VIR_WARN("Failed to remove domain status XML for %s: %s", + vm->def->name, g_strerror(errno)); + + if (priv->pidfile && unlink(priv->pidfile) && errno !=3D ENOENT) + VIR_WARN("Failed to remove PID file for %s: %s", + vm->def->name, g_strerror(errno)); +} + int virCHProcessStop(virCHDriver *driver, virDomainObj *vm, @@ -1056,6 +1077,10 @@ virCHProcessStop(virCHDriver *driver, virHostdevReAttachDomainDevices(driver->hostdevMgr, CH_DRIVER_NAME, de= f, hostdev_flags); =20 + virDomainObjRemoveTransientDef(vm); + + virCHProcessRemoveDomainStatus(driver, vm); + virErrorRestore(&orig_err); return 0; } --=20 2.48.1