81 lines
3.0 KiB
Diff
81 lines
3.0 KiB
Diff
|
From 182fb30ff7cd85873d479b214bebf291aed2eaf1 Mon Sep 17 00:00:00 2001
|
||
|
From: "Eduardo Lima (Etrunko)" <etrunko@redhat.com>
|
||
|
Date: Fri, 23 Aug 2019 11:30:32 -0300
|
||
|
Subject: [PATCH virt-viewer] [DOWNSTREAM] Workaround inconsistency with REST
|
||
|
API
|
||
|
|
||
|
The storage domain object returned in this stage does not provide a link
|
||
|
to the files subcollection. To workaround this problem, we use the id of
|
||
|
the given storage domain to create a new object but referencing the
|
||
|
toplevel api, which in turn provides the file collection.
|
||
|
|
||
|
This is meant to be a donwnstream patch only, while this issue is not
|
||
|
addressed by RHV.
|
||
|
|
||
|
Fixes https://bugzilla.redhat.com/show_bug.cgi?id=1717900
|
||
|
|
||
|
Signed-off-by: Eduardo Lima (Etrunko) <etrunko@redhat.com>
|
||
|
---
|
||
|
src/ovirt-foreign-menu.c | 38 ++++++++++++++++++++++++++++++++++++--
|
||
|
1 file changed, 36 insertions(+), 2 deletions(-)
|
||
|
|
||
|
diff --git a/src/ovirt-foreign-menu.c b/src/ovirt-foreign-menu.c
|
||
|
index 98ab7b9..a849991 100644
|
||
|
--- a/src/ovirt-foreign-menu.c
|
||
|
+++ b/src/ovirt-foreign-menu.c
|
||
|
@@ -686,6 +686,37 @@ static gboolean ovirt_foreign_menu_set_file_collection(OvirtForeignMenu *menu, O
|
||
|
return TRUE;
|
||
|
}
|
||
|
|
||
|
+static gboolean set_file_collection_from_toplevel_storage_domain(OvirtForeignMenu *menu, OvirtStorageDomain *domain)
|
||
|
+{
|
||
|
+ gboolean ret = FALSE;
|
||
|
+ GError *error = NULL;
|
||
|
+ OvirtResource *resource = NULL;
|
||
|
+ gchar *href = NULL, *id = NULL;
|
||
|
+
|
||
|
+ g_object_get(domain, "guid", &id, NULL);
|
||
|
+ href = g_strdup_printf("/ovirt-engine/api/storagedomains/%s", id);
|
||
|
+ resource = g_initable_new(OVIRT_TYPE_STORAGE_DOMAIN, NULL, &error, "guid", id, "href", href, NULL);
|
||
|
+ if (error != NULL) {
|
||
|
+ g_warning("Failed to create storage domain with href %s: %s", href, error->message);
|
||
|
+ goto end;
|
||
|
+ }
|
||
|
+
|
||
|
+ ovirt_resource_refresh(resource, menu->priv->proxy, &error);
|
||
|
+ if (error != NULL) {
|
||
|
+ g_warning("Failed to refresh storage domain: %s", error->message);
|
||
|
+ goto end;
|
||
|
+ }
|
||
|
+
|
||
|
+ ret = ovirt_foreign_menu_set_file_collection(menu, ovirt_storage_domain_get_files(OVIRT_STORAGE_DOMAIN(resource)));
|
||
|
+
|
||
|
+end:
|
||
|
+ g_clear_error(&error);
|
||
|
+ g_clear_object(&resource);
|
||
|
+ g_free(id);
|
||
|
+ g_free(href);
|
||
|
+ return ret;
|
||
|
+}
|
||
|
+
|
||
|
static void storage_domains_fetched_cb(GObject *source_object,
|
||
|
GAsyncResult *result,
|
||
|
gpointer user_data)
|
||
|
@@ -717,8 +748,11 @@ static void storage_domains_fetched_cb(GObject *source_object,
|
||
|
domain_valid = TRUE;
|
||
|
|
||
|
file_collection = ovirt_storage_domain_get_files(domain);
|
||
|
- if (!ovirt_foreign_menu_set_file_collection(menu, file_collection))
|
||
|
- continue;
|
||
|
+ if (!ovirt_foreign_menu_set_file_collection(menu, file_collection)) {
|
||
|
+ /* Retry with toplevel storage domain */
|
||
|
+ if (!set_file_collection_from_toplevel_storage_domain(menu, domain))
|
||
|
+ continue;
|
||
|
+ }
|
||
|
|
||
|
break; /* There can only be one valid storage domain at a time,
|
||
|
no need to iterate more on the list */
|
||
|
--
|
||
|
2.26.2
|
||
|
|