Blame SOURCES/0001-DOWNSTREAM-Workaround-inconsistency-with-REST-API.patch

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