From nobody Wed May 14 16:22:11 2025 Delivered-To: importer@patchew.org Received-SPF: pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) client-ip=209.132.183.28; envelope-from=libvir-list-bounces@redhat.com; helo=mx1.redhat.com; Authentication-Results: mx.zohomail.com; spf=pass (zoho.com: domain of redhat.com designates 209.132.183.28 as permitted sender) smtp.mailfrom=libvir-list-bounces@redhat.com; dmarc=pass(p=none dis=none) header.from=redhat.com Return-Path: Received: from mx1.redhat.com (mx1.redhat.com [209.132.183.28]) by mx.zohomail.com with SMTPS id 1525337547154106.09918550602106; Thu, 3 May 2018 01:52:27 -0700 (PDT) Received: from smtp.corp.redhat.com (int-mx02.intmail.prod.int.phx2.redhat.com [10.5.11.12]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id CBE1130B8FB7; Thu, 3 May 2018 08:52:25 +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 79CAB60F8C; Thu, 3 May 2018 08:52:25 +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 11BE74CAA7; Thu, 3 May 2018 08:52:25 +0000 (UTC) Received: from smtp.corp.redhat.com (int-mx04.intmail.prod.int.rdu2.redhat.com [10.11.54.4]) by lists01.pubmisc.prod.ext.phx2.redhat.com (8.13.8/8.13.8) with ESMTP id w438jMfe032363 for ; Thu, 3 May 2018 04:45:22 -0400 Received: by smtp.corp.redhat.com (Postfix) id 9AE7F2022AAC; Thu, 3 May 2018 08:45:22 +0000 (UTC) Received: from katerina.brq.redhat.com (unknown [10.34.245.134]) by smtp.corp.redhat.com (Postfix) with ESMTP id EF3AF2022AA9; Thu, 3 May 2018 08:45:21 +0000 (UTC) From: Katerina Koukiou To: libvir-list@redhat.com Date: Thu, 3 May 2018 10:45:14 +0200 Message-Id: <20180503084519.7421-2-kkoukiou@redhat.com> In-Reply-To: <20180503084519.7421-1-kkoukiou@redhat.com> References: <20180503084519.7421-1-kkoukiou@redhat.com> MIME-Version: 1.0 X-Scanned-By: MIMEDefang 2.78 on 10.11.54.4 X-loop: libvir-list@redhat.com Subject: [libvirt] [dbus RFC PATCH 1/6] Abandon usage of all *TypeToString functions in domain.c 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: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Sender: libvir-list-bounces@redhat.com Errors-To: libvir-list-bounces@redhat.com X-Scanned-By: MIMEDefang 2.79 on 10.5.11.12 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.49]); Thu, 03 May 2018 08:52:26 +0000 (UTC) X-ZohoMail: RSF_0 Z_629925259 SPT_0 Converting ENUMS to str can be user friendly though it can be problematic between libvirt versions. In particular when some translated type will introduce a new constant to the ENUM libvirt-dbus will fail with: size of array =E2=80=98_GStaticAssertCompileTimeAssertion_5=E2=80=99 is neg= ative Since it's not main use case of livirt-dbus API to be invoked interactively by user, having all ENUM types passed as unsigned int is preferable to avoid the previous issue. Signed-off-by: Katerina Koukiou --- data/org.libvirt.Domain.xml | 14 ++-- src/domain.c | 172 ++++------------------------------------= ---- tests/test_domain.py | 6 +- 3 files changed, 25 insertions(+), 167 deletions(-) diff --git a/data/org.libvirt.Domain.xml b/data/org.libvirt.Domain.xml index db43b1c..6448a46 100644 --- a/data/org.libvirt.Domain.xml +++ b/data/org.libvirt.Domain.xml @@ -191,19 +191,19 @@ value=3D"See https://libvirt.org/html/libvirt-libvirt-domain.html#= virDomainGetBlockJobInfo"/> - + - + - + - + - + @@ -319,7 +319,7 @@ - + @@ -492,7 +492,7 @@ - + diff --git a/src/domain.c b/src/domain.c index e305fa3..40cf2f7 100644 --- a/src/domain.c +++ b/src/domain.c @@ -3,75 +3,6 @@ =20 #include =20 -VIRT_DBUS_ENUM_DECL(virtDBusDomainBlockJob) -VIRT_DBUS_ENUM_IMPL(virtDBusDomainBlockJob, - VIR_DOMAIN_BLOCK_JOB_TYPE_LAST, - "unknown", - "pull", - "copy", - "commit", - "active-commit") - -VIRT_DBUS_ENUM_DECL(virtDBusDomainControlErrorReason) -VIRT_DBUS_ENUM_IMPL(virtDBusDomainControlErrorReason, - VIR_DOMAIN_CONTROL_ERROR_REASON_LAST, - "none", - "unknown", - "monitor", - "internal") - -VIRT_DBUS_ENUM_DECL(virtDBusDomainControlState) -VIRT_DBUS_ENUM_IMPL(virtDBusDomainControlState, - VIR_DOMAIN_CONTROL_LAST, - "ok", - "job", - "occupied", - "error") - -VIRT_DBUS_ENUM_DECL(virtDBusDomainDiskError) -VIRT_DBUS_ENUM_IMPL(virtDBusDomainDiskError, - VIR_DOMAIN_DISK_ERROR_LAST, - "none", - "unspec", - "no-space") - -VIRT_DBUS_ENUM_DECL(virtDBusDomainInterfaceAddressesSource) -VIRT_DBUS_ENUM_IMPL(virtDBusDomainInterfaceAddressesSource, - VIR_DOMAIN_INTERFACE_ADDRESSES_SRC_LAST, - "lease", - "agent") - -VIRT_DBUS_ENUM_DECL(virtDBusDomainJob) -VIRT_DBUS_ENUM_IMPL(virtDBusDomainJob, - VIR_DOMAIN_JOB_LAST, - "none", - "bounded", - "unbounded", - "completed", - "failed", - "canceled") - -VIRT_DBUS_ENUM_DECL(virtDBusDomainMemoryStat) -VIRT_DBUS_ENUM_IMPL(virtDBusDomainMemoryStat, - VIR_DOMAIN_MEMORY_STAT_LAST, - "swap_in", - "swap_out", - "major_fault", - "minor_fault", - "unused", - "available", - "actual_baloon", - "rss", - "usable", - "last_update") - -VIRT_DBUS_ENUM_DECL(virtDBusDomainMetadata) -VIRT_DBUS_ENUM_IMPL(virtDBusDomainMetadata, - VIR_DOMAIN_METADATA_LAST, - "description", - "title", - "element") - struct _virtDBusDomainFSInfoList { virDomainFSInfoPtr *info; gint count; @@ -137,12 +68,8 @@ virtDBusDomainMemoryStatsToGVariant(virDomainMemoryStat= Ptr stats, =20 g_variant_builder_init(&builder, G_VARIANT_TYPE("a{st}")); =20 - for (gint i =3D 0; i < nr_stats; i++) { - const gchar *memoryStat =3D virtDBusDomainMemoryStatTypeToString(s= tats[i].tag); - if (!memoryStat) - continue; - g_variant_builder_add(&builder, "{st}", memoryStat, stats[i].val); - } + for (gint i =3D 0; i < nr_stats; i++) + g_variant_builder_add(&builder, "{ut}", stats[i].tag, stats[i].val= ); =20 return g_variant_builder_end(&builder); } @@ -1032,7 +959,6 @@ virtDBusDomainGetBlockJobInfo(GVariant *inArgs, virDomainBlockJobInfo info; const gchar *disk; guint flags; - const gchar *blockJobTypeStr; =20 g_variant_get(inArgs, "(&su)", &disk, &flags); =20 @@ -1043,15 +969,7 @@ virtDBusDomainGetBlockJobInfo(GVariant *inArgs, if (virDomainGetBlockJobInfo(domain, disk, &info, flags) < 0) return virtDBusUtilSetLastVirtError(error); =20 - blockJobTypeStr =3D virtDBusDomainBlockJobTypeToString(info.type); - if (!blockJobTypeStr) { - g_set_error(error, VIRT_DBUS_ERROR, VIRT_DBUS_ERROR_LIBVIRT, - "Can't format virDomainBlockJobType '%d' to string.", - info.type); - return; - } - - *outArgs =3D g_variant_new("((sttt))", blockJobTypeStr, info.bandwidth, + *outArgs =3D g_variant_new("((uttt))", info.type, info.bandwidth, info.cur, info.end); } =20 @@ -1067,8 +985,6 @@ virtDBusDomainGetControlInfo(GVariant *inArgs, virtDBusConnect *connect =3D userData; g_autoptr(virDomain) domain =3D NULL; g_autofree virDomainControlInfoPtr controlInfo =3D NULL; - const gchar *stateStr; - const gchar *errorReasonStr; guint flags; =20 g_variant_get(inArgs, "(u)", &flags); @@ -1081,23 +997,8 @@ virtDBusDomainGetControlInfo(GVariant *inArgs, if (virDomainGetControlInfo(domain, controlInfo, flags) < 0) return virtDBusUtilSetLastVirtError(error); =20 - stateStr =3D virtDBusDomainControlStateTypeToString(controlInfo->state= ); - if (!stateStr) { - g_set_error(error, VIRT_DBUS_ERROR, VIRT_DBUS_ERROR_LIBVIRT, - "Can't format virDomainControlState '%d' to string.", - controlInfo->state); - return; - } - errorReasonStr =3D virtDBusDomainControlErrorReasonTypeToString(contro= lInfo->details); - if (!errorReasonStr) { - g_set_error(error, VIRT_DBUS_ERROR, VIRT_DBUS_ERROR_LIBVIRT, - "Can't format virDomainControlErrorReason '%d' to stri= ng.", - controlInfo->details); - return; - } - - *outArgs =3D g_variant_new("((sst))", stateStr, - errorReasonStr, controlInfo->stateTime); + *outArgs =3D g_variant_new("((uut))", controlInfo->state, + controlInfo->details, controlInfo->stateTime); } =20 static void @@ -1137,15 +1038,11 @@ virtDBusDomainGetDiskErrors(GVariant *inArgs, return virtDBusUtilSetLastVirtError(error); } =20 - g_variant_builder_init(&builder, G_VARIANT_TYPE("a(ss)")); + g_variant_builder_init(&builder, G_VARIANT_TYPE("a(su)")); for (gint i =3D 0; i < count; i++) { - const gchar *err =3D virtDBusDomainDiskErrorTypeToString(disks[i].= error); - - if (!err) - continue; - g_variant_builder_open(&builder, G_VARIANT_TYPE("(ss)")); + g_variant_builder_open(&builder, G_VARIANT_TYPE("(su)")); g_variant_builder_add(&builder, "s", disks[i].disk); - g_variant_builder_add(&builder, "s", err); + g_variant_builder_add(&builder, "u", disks[i].error); g_variant_builder_close(&builder); } res =3D g_variant_builder_end(&builder); @@ -1355,7 +1252,6 @@ virtDBusDomainGetJobInfo(GVariant *inArgs G_GNUC_UNUS= ED, virtDBusConnect *connect =3D userData; g_autoptr(virDomain) domain =3D NULL; g_autofree virDomainJobInfoPtr jobInfo =3D NULL; - const gchar *jobTypeStr; =20 domain =3D virtDBusDomainGetVirDomain(connect, objectPath, error); if (!domain) @@ -1365,13 +1261,7 @@ virtDBusDomainGetJobInfo(GVariant *inArgs G_GNUC_UNU= SED, if (virDomainGetJobInfo(domain, jobInfo) < 0) return virtDBusUtilSetLastVirtError(error); =20 - jobTypeStr =3D virtDBusDomainJobTypeToString(jobInfo->type); - if (!jobTypeStr) { - g_set_error(error, VIRT_DBUS_ERROR, VIRT_DBUS_ERROR_LIBVIRT, - "Can't format virDomainJobType '%d' to string.", jobIn= fo->type); - return; - } - *outArgs =3D g_variant_new("((sttttttttttt))", jobTypeStr, + *outArgs =3D g_variant_new("((uttttttttttt))", jobInfo->type, jobInfo->timeElapsed, jobInfo->timeRemaining, jobInfo->dataTotal, jobInfo->dataProcessed, jobInfo->dataRemaining, jobInfo->memTotal, @@ -1393,7 +1283,6 @@ virtDBusDomainGetJobStats(GVariant *inArgs, g_autoptr(virDomain) domain =3D NULL; g_auto(virtDBusUtilTypedParams) params =3D { 0 }; guint flags; - const gchar *typeStr; gint type; GVariant *grecords; GVariantBuilder builder; @@ -1412,15 +1301,8 @@ virtDBusDomainGetJobStats(GVariant *inArgs, =20 grecords =3D virtDBusUtilTypedParamsToGVariant(params.params, params.n= params); =20 - typeStr =3D virtDBusDomainJobTypeToString(type); - if (!typeStr) { - g_set_error(error, VIRT_DBUS_ERROR, VIRT_DBUS_ERROR_LIBVIRT, - "Can't format virDomainJobType '%d' to string.", type); - return; - } - - g_variant_builder_init(&builder, G_VARIANT_TYPE("(sa{sv})")); - g_variant_builder_add(&builder, "s", typeStr); + g_variant_builder_init(&builder, G_VARIANT_TYPE("(ua{sv})")); + g_variant_builder_add(&builder, "u", type); g_variant_builder_add_value(&builder, grecords); gret =3D g_variant_builder_end(&builder); =20 @@ -1474,13 +1356,12 @@ virtDBusDomainGetMetadata(GVariant *inArgs, { virtDBusConnect *connect =3D userData; g_autoptr(virDomain) domain =3D NULL; - const gchar *typeStr; gint type; const gchar *uri; guint flags; g_autofree gchar *ret =3D NULL; =20 - g_variant_get(inArgs, "(&s&su)", &typeStr, &uri, &flags); + g_variant_get(inArgs, "(u&su)", &type, &uri, &flags); if (g_str_equal(uri, "")) uri =3D NULL; =20 @@ -1488,14 +1369,6 @@ virtDBusDomainGetMetadata(GVariant *inArgs, if (!domain) return; =20 - type =3D virtDBusDomainMetadataTypeFromString(typeStr); - if (type < 0) { - g_set_error(error, VIRT_DBUS_ERROR, VIRT_DBUS_ERROR_LIBVIRT, - "Can't get valid virDomainMetadataType from string '%s= '.", - typeStr); - return; - } - ret =3D virDomainGetMetadata(domain, type, uri, flags); if (!ret) return virtDBusUtilSetLastVirtError(error); @@ -1787,25 +1660,17 @@ virtDBusDomainInterfaceAddresses(GVariant *inArgs, virtDBusConnect *connect =3D userData; g_autoptr(virDomain) domain =3D NULL; gint source; - const gchar *sourceStr; g_auto(virtDBusDomainInterfaceList) ifaces =3D { 0 }; guint flags; GVariantBuilder builder; GVariant *res; =20 - g_variant_get(inArgs, "(&su)", &sourceStr, &flags); + g_variant_get(inArgs, "(uu)", &source, &flags); =20 domain =3D virtDBusDomainGetVirDomain(connect, objectPath, error); if (!domain) return; =20 - source =3D virtDBusDomainInterfaceAddressesSourceTypeFromString(source= Str); - if (source < 0) { - g_set_error(error, VIRT_DBUS_ERROR, VIRT_DBUS_ERROR_LIBVIRT, - "Can't get valid virDomainInterfaceAddressesSource fro= m string '%s'.", - sourceStr); - return; - } ifaces.count =3D virDomainInterfaceAddresses(domain, &(ifaces.ifaces), source, flags); if (ifaces.count < 0) @@ -2617,14 +2482,13 @@ virtDBusDomainSetMetadata(GVariant *inArgs, { virtDBusConnect *connect =3D userData; g_autoptr(virDomain) domain =3D NULL; - const gchar *typeStr; gint type; const gchar *metadata; const gchar *key; const gchar *uri; guint flags; =20 - g_variant_get(inArgs, "(&s&s&s&su)", &typeStr, &metadata, &key, &uri, = &flags); + g_variant_get(inArgs, "(u&s&s&su)", &type, &metadata, &key, &uri, &fla= gs); if (g_str_equal(key, "")) key =3D NULL; if (g_str_equal(uri, "")) @@ -2634,14 +2498,6 @@ virtDBusDomainSetMetadata(GVariant *inArgs, if (!domain) return; =20 - type =3D virtDBusDomainMetadataTypeFromString(typeStr); - if (type < 0) { - g_set_error(error, VIRT_DBUS_ERROR, VIRT_DBUS_ERROR_LIBVIRT, - "Can't get valid virDomainMetadataType from string '%s= '.", - typeStr); - return; - } - if (virDomainSetMetadata(domain, type, metadata, key, uri, flags) < 0) virtDBusUtilSetLastVirtError(error); } diff --git a/tests/test_domain.py b/tests/test_domain.py index d0cebcd..0e83f72 100755 --- a/tests/test_domain.py +++ b/tests/test_domain.py @@ -64,10 +64,12 @@ class TestDomain(libvirttest.BaseTestClass): self.main_loop() =20 def test_domain_metadata(self): + metadata_description =3D 0 obj, domain =3D self.domain() description_expected =3D "This is the Test domain" - domain.SetMetadata('description', description_expected, "", "", 0) - assert description_expected =3D=3D domain.GetMetadata('description= ', "", 0) + domain.SetMetadata(metadata_description, + description_expected, "", "", 0) + assert description_expected =3D=3D domain.GetMetadata(metadata_des= cription, "", 0) =20 def test_resume(self): def domain_resumed(path, _event): --=20 2.15.0 -- libvir-list mailing list libvir-list@redhat.com https://www.redhat.com/mailman/listinfo/libvir-list