[libgovirt] Implement ovirt_resource_refresh{_async}
- From: Christophe Fergeau <teuf src gnome org>
- To: commits-list gnome org
- Cc:
- Subject: [libgovirt] Implement ovirt_resource_refresh{_async}
- Date: Thu, 26 Jun 2014 23:22:05 +0000 (UTC)
commit 063513697ed73220dd420be600075f319f407d5c
Author: Christophe Fergeau <cfergeau redhat com>
Date: Tue Apr 29 13:20:06 2014 +0200
Implement ovirt_resource_refresh{_async}
Calling these functions will refetch the XML corresponding to the
current resource and reparse it. This will sync the local OVirtResource
state with the remote state.
govirt/govirt.sym | 4 ++
govirt/ovirt-resource.c | 86 +++++++++++++++++++++++++++++++++++++++++++++++
govirt/ovirt-resource.h | 12 ++++++
3 files changed, 102 insertions(+), 0 deletions(-)
---
diff --git a/govirt/govirt.sym b/govirt/govirt.sym
index 4700446..760e0f1 100644
--- a/govirt/govirt.sym
+++ b/govirt/govirt.sym
@@ -90,6 +90,10 @@ GOVIRT_0.2.1 {
GOVIRT_0.3.1 {
ovirt_api_get_vm_pools;
+ ovirt_resource_refresh;
+ ovirt_resource_refresh_async;
+ ovirt_resource_refresh_finish;
+
ovirt_vm_pool_get_type;
ovirt_vm_pool_new;
ovirt_vm_pool_allocate_vm;
diff --git a/govirt/ovirt-resource.c b/govirt/ovirt-resource.c
index 172caa3..3d223f4 100644
--- a/govirt/ovirt-resource.c
+++ b/govirt/ovirt-resource.c
@@ -840,3 +840,89 @@ ovirt_resource_action_finish(OvirtResource *resource,
return ovirt_rest_call_finish(result, err);
}
+
+
+static gboolean ovirt_resource_refresh_async_cb(OvirtProxy *proxy,
+ RestProxyCall *call,
+ gpointer user_data,
+ GError **error)
+{
+ OvirtResource *resource;
+ RestXmlNode *root;
+ gboolean refreshed;
+
+ g_return_val_if_fail(REST_IS_PROXY_CALL(call), FALSE);
+ g_return_val_if_fail(OVIRT_IS_RESOURCE(user_data), FALSE);
+
+ root = ovirt_rest_xml_node_from_call(call);
+ resource = OVIRT_RESOURCE(user_data);
+ refreshed = ovirt_resource_init_from_xml(resource, root, error);
+
+ rest_xml_node_unref(root);
+
+ return refreshed;
+}
+
+void ovirt_resource_refresh_async(OvirtResource *resource,
+ OvirtProxy *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data)
+{
+ OvirtResourceRestCall *call;
+ GSimpleAsyncResult *result;
+
+ g_return_if_fail(OVIRT_IS_RESOURCE(resource));
+ g_return_if_fail(OVIRT_IS_PROXY(proxy));
+ g_return_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable));
+
+ result = g_simple_async_result_new(G_OBJECT(resource), callback,
+ user_data,
+ ovirt_resource_refresh_async);
+ call = ovirt_resource_rest_call_new(REST_PROXY(proxy),
+ OVIRT_RESOURCE(resource));
+ /* FIXME: to set or not to set ?? */
+ rest_proxy_call_add_header(REST_PROXY_CALL(call),
+ "All-Content", "true");
+ rest_proxy_call_set_method(REST_PROXY_CALL(call), "GET");
+ ovirt_rest_call_async(OVIRT_REST_CALL(call), result, cancellable,
+ ovirt_resource_refresh_async_cb, resource,
+ NULL);
+ g_object_unref(G_OBJECT(call));
+}
+
+
+gboolean ovirt_resource_refresh_finish(OvirtResource *resource,
+ GAsyncResult *result,
+ GError **err)
+{
+ g_return_val_if_fail(OVIRT_IS_RESOURCE(resource), FALSE);
+ g_return_val_if_fail(g_simple_async_result_is_valid(result,
+ G_OBJECT(resource),
+ ovirt_resource_refresh_async),
+ FALSE);
+
+ return ovirt_rest_call_finish(result, err);
+}
+
+
+gboolean ovirt_resource_refresh(OvirtResource *resource,
+ OvirtProxy *proxy,
+ GError **error)
+{
+ RestXmlNode *root_node;
+ gboolean success;
+
+ g_return_val_if_fail(OVIRT_IS_RESOURCE(resource), FALSE);
+ g_return_val_if_fail(OVIRT_IS_PROXY(proxy), FALSE);
+
+ root_node = ovirt_resource_rest_call(resource, proxy, "GET", error);
+ if (root_node == NULL) {
+ return FALSE;
+ }
+
+ success = ovirt_resource_init_from_xml(resource, root_node, error);
+ rest_xml_node_unref(root_node);
+
+ return success;
+}
diff --git a/govirt/ovirt-resource.h b/govirt/ovirt-resource.h
index 805d53e..23e019c 100644
--- a/govirt/ovirt-resource.h
+++ b/govirt/ovirt-resource.h
@@ -78,6 +78,18 @@ gboolean ovirt_resource_update_finish(OvirtResource *resource,
GAsyncResult *result,
GError **err);
+gboolean ovirt_resource_refresh(OvirtResource *resource,
+ OvirtProxy *proxy,
+ GError **error);
+void ovirt_resource_refresh_async(OvirtResource *resource,
+ OvirtProxy *proxy,
+ GCancellable *cancellable,
+ GAsyncReadyCallback callback,
+ gpointer user_data);
+gboolean ovirt_resource_refresh_finish(OvirtResource *resource,
+ GAsyncResult *result,
+ GError **err);
+
G_END_DECLS
#endif /* __OVIRT_RESOURCE_H__ */
[
Date Prev][
Date Next] [
Thread Prev][
Thread Next]
[
Thread Index]
[
Date Index]
[
Author Index]