[libvirt] [libvirt-glib] [PATCH v3 2/4] GVirDomainSnapshot: Add async version of _revert_to

2014-08-20 Thread Timm Bäder
---
 libvirt-gobject/libvirt-gobject-domain-snapshot.c | 59 +++
 libvirt-gobject/libvirt-gobject-domain-snapshot.h | 11 +
 libvirt-gobject/libvirt-gobject.sym   |  2 +
 3 files changed, 72 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.c 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
index 62efce0..4e74f92 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.c
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
@@ -302,6 +302,65 @@ gboolean gvir_domain_snapshot_revert_to(GVirDomainSnapshot 
*snapshot,
 return TRUE;
 }
 
+static void _revert_to_async_thread(GTask *task,
+gpointer source_object,
+gpointer task_data,
+GCancellable *cancellable) {
+GError *error = NULL;
+gboolean status;
+
+status = gvir_domain_snapshot_revert_to(source_object,
+GPOINTER_TO_UINT(task_data),
+&error);
+
+if (status)
+g_task_return_boolean(task, TRUE);
+else
+g_task_return_error(task, error);
+}
+
+
+/**
+ * gvir_domain_snapshot_revert_to_async:
+ * @snapshot: A #GVirDomainSnapshot
+ * @flags: Bitwise OR of #GVirDomainSnapshotRevertFlags
+ * @cancellable: (allow-none) (transfer none): cancellation object
+ * @callback: (scope async): The callback
+ * @user_data: (closure): Opaque data for callback
+ */
+void gvir_domain_snapshot_revert_to_async(GVirDomainSnapshot *snapshot,
+  guint flags,
+  GCancellable *cancellable,
+  GAsyncReadyCallback callback,
+  gpointer user_data) {
+GTask *task;
+
+g_return_if_fail(GVIR_IS_DOMAIN_SNAPSHOT(snapshot));
+
+task = g_task_new(snapshot, cancellable, callback, user_data);
+g_task_set_task_data(task, GUINT_TO_POINTER(flags), NULL);
+g_task_run_in_thread(task, _revert_to_async_thread);
+g_object_unref(task);
+}
+
+
+
+/**
+ * gvir_domain_snapshot_revert_to_finish:
+ * @snapshot: The domain snapshot
+ * @result: (transfer none): The result
+ *
+ * Returns: %TRUE on success, %FALSE otherwise.
+ */
+gboolean gvir_domain_snapshot_revert_to_finish(GVirDomainSnapshot *snapshot,
+   GAsyncResult *result,
+   GError **error) {
+g_return_val_if_fail(GVIR_IS_DOMAIN_SNAPSHOT(snapshot), FALSE);
+g_return_val_if_fail(g_task_is_valid(result, snapshot), FALSE);
+
+return g_task_propagate_boolean(G_TASK(result), error);
+}
+
 
 
 /**
diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.h 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
index 5ab3025..b1dcf20 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.h
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
@@ -107,6 +107,17 @@ gboolean gvir_domain_snapshot_revert_to(GVirDomainSnapshot 
*snapshot,
 guint flags,
 GError **error);
 
+void gvir_domain_snapshot_revert_to_async(GVirDomainSnapshot *snapshot,
+  guint flags,
+  GCancellable *cancellable,
+  GAsyncReadyCallback callback,
+  gpointer user_data);
+
+gboolean gvir_domain_snapshot_revert_to_finish(GVirDomainSnapshot *snapshot,
+   GAsyncResult *result,
+   GError **error);
+
+
 gboolean gvir_domain_snapshot_set_config(GVirDomainSnapshot *snapshot,
  GVirConfigDomainSnapshot *conf,
  GError **error);
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index 68e9b58..ebb9418 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -247,6 +247,8 @@ LIBVIRT_GOBJECT_0.1.9 {
gvir_domain_snapshot_list_flags_get_type;
gvir_domain_snapshot_revert_flags_get_type;
gvir_domain_snapshot_revert_to;
+   gvir_domain_snapshot_revert_to_async;
+   gvir_domain_snapshot_revert_to_finish;
gvir_domain_snapshot_set_config;
gvir_storage_pool_state_get_type;
gvir_storage_vol_resize_flags_get_type;
-- 
2.1.0

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH v2 2/4] GVirDomainSnapshot: Add async version of _revert_to

2014-08-19 Thread Timm Bäder
---
 libvirt-gobject/libvirt-gobject-domain-snapshot.c | 59 +++
 libvirt-gobject/libvirt-gobject-domain-snapshot.h | 11 +
 libvirt-gobject/libvirt-gobject.sym   |  2 +
 3 files changed, 72 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.c 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
index b071c5b..0dcbecc 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.c
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
@@ -304,6 +304,65 @@ gboolean gvir_domain_snapshot_revert_to(GVirDomainSnapshot 
*snapshot,
 return TRUE;
 }
 
+static void _revert_to_async_thread(GTask *task,
+gpointer source_object,
+gpointer task_data,
+GCancellable *cancellable) {
+GError *error = NULL;
+gboolean status;
+
+status = gvir_domain_snapshot_revert_to(source_object,
+GPOINTER_TO_UINT(task_data),
+cancellable,
+&error);
+
+if (status)
+g_task_return_boolean(task, TRUE);
+else
+g_task_return_error(task, error);
+}
+
+
+/**
+ * gvir_domain_snapshot_revert_to_async:
+ * @snapshot: A #GVirDomainSnapshot
+ * @cancellable: (allow-none) (transfer none): cancellation object
+ * @callback: (scope async): The callback
+ * @user_data: (closure): Opaque data for callback
+ */
+void gvir_domain_snapshot_revert_to_async(GVirDomainSnapshot *snapshot,
+  guint flags,
+  GCancellable *cancellable,
+  GAsyncReadyCallback callback,
+  gpointer user_data) {
+GTask *task;
+
+g_return_if_fail(GVIR_IS_DOMAIN_SNAPSHOT(snapshot));
+
+task = g_task_new(snapshot, cancellable, callback, user_data);
+g_task_set_task_data(task, GUINT_TO_POINTER(flags), NULL);
+g_task_run_in_thread(task, _revert_to_async_thread);
+g_object_unref(task);
+}
+
+
+
+/**
+ * gvir_domain_snapshot_revert_to_finished:
+ * @snapshot: The domain snapshot
+ * @result: (transfer none): The result
+ *
+ * Returns: %TRUE on success, %FALSE otherwise.
+ */
+gboolean gvir_domain_snapshot_revert_to_finish(GVirDomainSnapshot *snapshot,
+   GAsyncResult *result,
+   GError **error) {
+g_return_val_if_fail(GVIR_IS_DOMAIN_SNAPSHOT(snapshot), FALSE);
+g_return_val_if_fail(g_task_is_valid(result, snapshot), FALSE);
+
+return g_task_propagate_boolean(G_TASK(result), error);
+}
+
 
 
 /**
diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.h 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
index 401698a..0f4d31f 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.h
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
@@ -108,6 +108,17 @@ gboolean gvir_domain_snapshot_revert_to(GVirDomainSnapshot 
*snapshot,
 GCancellable *cancellable,
 GError **error);
 
+void gvir_domain_snapshot_revert_to_async(GVirDomainSnapshot *snapshot,
+  guint flags,
+  GCancellable *cancellable,
+  GAsyncReadyCallback callback,
+  gpointer user_data);
+
+gboolean gvir_domain_snapshot_revert_to_finish(GVirDomainSnapshot *snapshot,
+   GAsyncResult *result,
+   GError **error);
+
+
 gboolean gvir_domain_snapshot_set_config(GVirDomainSnapshot *snapshot,
  GVirConfigDomainSnapshot *conf,
  GError **error);
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index 68e9b58..ebb9418 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -247,6 +247,8 @@ LIBVIRT_GOBJECT_0.1.9 {
gvir_domain_snapshot_list_flags_get_type;
gvir_domain_snapshot_revert_flags_get_type;
gvir_domain_snapshot_revert_to;
+   gvir_domain_snapshot_revert_to_async;
+   gvir_domain_snapshot_revert_to_finish;
gvir_domain_snapshot_set_config;
gvir_storage_pool_state_get_type;
gvir_storage_vol_resize_flags_get_type;
-- 
2.0.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH v2 3/4] GVirDomain: Add async version of _create_snapshot

2014-08-19 Thread Timm Bäder
---
 libvirt-gobject/libvirt-gobject-domain.c | 74 
 libvirt-gobject/libvirt-gobject-domain.h | 12 ++
 libvirt-gobject/libvirt-gobject.sym  |  2 +
 3 files changed, 88 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain.c 
b/libvirt-gobject/libvirt-gobject-domain.c
index aa2a170..0b94f16 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -61,6 +61,16 @@ enum {
 LAST_SIGNAL
 };
 
+typedef struct {
+guint create_flags;
+GVirConfigDomainSnapshot *snapshot_config;
+} SnapshotCreateData;
+
+static void snapshot_create_data_free (SnapshotCreateData *data) {
+g_clear_object (&data->snapshot_config);
+g_slice_free (SnapshotCreateData, data);
+}
+
 static gint signals[LAST_SIGNAL];
 
 #define GVIR_DOMAIN_ERROR gvir_domain_error_quark()
@@ -1524,6 +1534,70 @@ gvir_domain_create_snapshot(GVirDomain *dom,
 }
 
 
+static void _create_snapshot_async_thread(GTask *task,
+  gpointer source_object,
+  gpointer task_data,
+  GCancellable *cancellable) {
+GError *error = NULL;
+GVirDomainSnapshot *snapshot;
+SnapshotCreateData *create_data = task_data;
+
+snapshot = gvir_domain_create_snapshot(source_object,
+   create_data->snapshot_config,
+   create_data->create_flags,
+   &error);
+if (snapshot)
+g_task_return_pointer(task, snapshot, g_object_unref);
+else
+g_task_return_error(task, error);
+}
+
+/**
+ * gvir_domain_create_snapshot_async:
+ * @dom: The #GVirDomain
+ * @custom_conf: (allow-none): Configuration of snapshot or %NULL
+ * @flags: Bitwise-OR of #GVirDomainSnapshotCreateFlags
+ * @cancellable: (allow-none) (transfer none): cancellation object
+ * @callback: (scope async): Complection callback
+ * @user_data: (closure): Opaque data for callback
+ */
+void gvir_domain_create_snapshot_async(GVirDomain *dom,
+   GVirConfigDomainSnapshot *custom_conf,
+   guint flags,
+   GCancellable *cancellable,
+   GAsyncReadyCallback callback,
+   gpointer user_data) {
+SnapshotCreateData *create_data;
+GTask *task;
+
+g_return_if_fail(GVIR_IS_DOMAIN(dom));
+g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_SNAPSHOT(custom_conf));
+
+create_data = g_slice_new(SnapshotCreateData);
+create_data->create_flags = flags;
+create_data->snapshot_config = g_object_ref (custom_conf);
+
+task = g_task_new(dom, cancellable, callback, user_data);
+g_task_set_task_data(task, create_data, 
(GDestroyNotify)snapshot_create_data_free);
+g_task_run_in_thread(task, _create_snapshot_async_thread);
+g_object_unref(task);
+}
+
+/**
+ * gvir_domain_create_snapshot_finish:
+ * @domain: A #GVirDomain
+ * @result: (transfer none): Async method result
+ * @error: (allow-none): Error placeholder
+ *
+ * Returns: (transfer full): The created snapshot
+ */
+GVirDomainSnapshot * gvir_domain_create_snapshot_finish(GVirDomain  *domain,
+GAsyncResult *result,
+GError **error) {
+g_return_val_if_fail(g_task_is_valid(result, domain), NULL);
+
+return g_task_propagate_pointer(G_TASK(result), error);
+}
 
 /**
  * gvir_domain_fetch_snapshots:
diff --git a/libvirt-gobject/libvirt-gobject-domain.h 
b/libvirt-gobject/libvirt-gobject-domain.h
index 56c80b8..5c48807 100644
--- a/libvirt-gobject/libvirt-gobject-domain.h
+++ b/libvirt-gobject/libvirt-gobject-domain.h
@@ -363,6 +363,18 @@ gvir_domain_create_snapshot(GVirDomain *dom,
 guint flags,
 GError **err);
 
+void gvir_domain_create_snapshot_async(GVirDomain *dom,
+   GVirConfigDomainSnapshot *custom_conf,
+   guint flags,
+   GCancellable *cancellable,
+   GAsyncReadyCallback callback,
+   gpointer user_data);
+
+GVirDomainSnapshot * gvir_domain_create_snapshot_finish(GVirDomain  *domain,
+GAsyncResult *result,
+GError **error);
+
+
 gboolean gvir_domain_fetch_snapshots(GVirDomain *dom,
  guint list_flags,
  GCancellable *cancellable,
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index ebb9418..a610121 100644
--- a/libvirt-gobject/libvir

[libvirt] [libvirt-glib] [PATCH v2 1/4] GVirDomain: Fix some doc comments of the snapshot API

2014-08-19 Thread Timm Bäder
Fixes the following warnings from g-ir-scanner and some cosmetic issues:

libvirt-gobject-domain.c:1532: Warning: LibvirtGObject: unknown
annotation: transfer-none
libvirt-gobject-domain.c:1650: Error: LibvirtGObject: identifier not
found on the first line:
 *
   ^
---
 libvirt-gobject/libvirt-gobject-domain.c | 10 +-
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/libvirt-gobject/libvirt-gobject-domain.c 
b/libvirt-gobject/libvirt-gobject-domain.c
index feac6f0..aa2a170 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -1529,10 +1529,10 @@ gvir_domain_create_snapshot(GVirDomain *dom,
  * gvir_domain_fetch_snapshots:
  * @dom: The domain
  * @list_flags: bitwise-OR of #GVirDomainSnapshotListFlags
- * @cancellable: (allow-none)(transfer-none): cancellation object
- * @error: (allow-none): Place-holder for error or NULL
+ * @cancellable: (allow-none) (transfer none): cancellation object
+ * @error: (allow-none): Place-holder for error or %NULL
  *
- * Returns: TRUE on success, FALSE otherwise.
+ * Returns: %TRUE on success, %FALSE otherwise.
  */
 gboolean gvir_domain_fetch_snapshots(GVirDomain *dom,
  guint list_flags,
@@ -1647,10 +1647,10 @@ static void _fetch_snapshots_async_thread(GTask *task,
 
 
 /**
- *
+ * gvir_domain_fetch_snapshots_async:
  * @dom: The domain
  * @list_flags: bitwise-OR of #GVirDomainSnapshotListFlags
- * @cancellable: (allow-none)(transfer-none): cancellation object
+ * @cancellable: (allow-none) (transfer none): cancellation object
  * @callback: (scope async): completion callback
  * @user_data: (closure): opaque data for callback
  */
-- 
2.0.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH v2 4/4] GVirDomainSnapshot: Add async version of _delete

2014-08-19 Thread Timm Bäder
---
 libvirt-gobject/libvirt-gobject-domain-snapshot.c | 58 +++
 libvirt-gobject/libvirt-gobject-domain-snapshot.h | 10 
 libvirt-gobject/libvirt-gobject.sym   |  2 +
 3 files changed, 70 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.c 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
index 0dcbecc..9c0d60f 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.c
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
@@ -237,6 +237,64 @@ gboolean gvir_domain_snapshot_delete (GVirDomainSnapshot 
*snapshot,
 }
 
 
+
+static void _delete_async_thread(GTask *task,
+ gpointer source_object,
+ gpointer task_data,
+ GCancellable *cancellable) {
+GError *error = NULL;
+gboolean status;
+
+status = gvir_domain_snapshot_delete(source_object,
+ GPOINTER_TO_UINT(task_data),
+ &error);
+
+if (status)
+g_task_return_boolean(task, TRUE);
+else
+g_task_return_error(task, error);
+}
+
+
+/**
+ * gvir_domain_snapshot_delete_async:
+ * @snapshot: A #GVirDomainSnapshot
+ * @flags: Bitwise-OR of #GVirDomainSnapshotDeleteFlags
+ * @cancellable: (allow-none) (transfer none): cancellation object
+ * @callback: (scope async): completion callback
+ * @user_data: (closure): opaque data for callback
+ */
+void gvir_domain_snapshot_delete_async(GVirDomainSnapshot *snapshot,
+   guint flags,
+   GCancellable *cancellable,
+   GAsyncReadyCallback callback,
+   gpointer user_data) {
+GTask *task;
+
+g_return_if_fail(GVIR_IS_DOMAIN_SNAPSHOT(snapshot));
+
+task = g_task_new(snapshot, cancellable, callback, user_data);
+g_task_set_task_data(task, GUINT_TO_POINTER(flags), NULL);
+g_task_run_in_thread(task, _delete_async_thread);
+g_object_unref(task);
+}
+
+/**
+ * gvir_domain_snapshot_delete_finish:
+ * @snapshot: A #GVirDomainSnapshot
+ * @res: (transfer none): async method result
+ *
+ * Returns: %TRUE on success, %FALSE otherwise.
+ */
+gboolean gvir_domain_snapshot_delete_finish(GVirDomainSnapshot *snapshot,
+GAsyncResult *res,
+GError **error) {
+g_return_val_if_fail(GVIR_IS_DOMAIN_SNAPSHOT(snapshot), FALSE);
+g_return_val_if_fail(g_task_is_valid(res, snapshot), FALSE);
+
+return g_task_propagate_boolean(G_TASK(res), error);
+}
+
 /**
  * gvir_domain_snapshot_get_is_current:
  * @snapshot: The domain snapshot
diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.h 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
index 0f4d31f..68bad27 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.h
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
@@ -98,6 +98,16 @@ gboolean gvir_domain_snapshot_delete (GVirDomainSnapshot 
*snapshot,
   guint flags,
   GError **error);
 
+void gvir_domain_snapshot_delete_async(GVirDomainSnapshot *snapshot,
+   guint flags,
+   GCancellable *cancellable,
+   GAsyncReadyCallback callback,
+   gpointer user_data);
+
+gboolean gvir_domain_snapshot_delete_finish(GVirDomainSnapshot *snapshot,
+GAsyncResult *res,
+GError **error);
+
 gboolean gvir_domain_snapshot_get_is_current(GVirDomainSnapshot *snapshot,
  guint flags,
  gboolean *is_current,
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index a610121..f335399 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -244,6 +244,8 @@ LIBVIRT_GOBJECT_0.1.9 {
gvir_domain_get_snapshots;
gvir_domain_get_has_current_snapshot;
gvir_domain_snapshot_delete;
+   gvir_domain_snapshot_delete_async;
+   gvir_domain_snapshot_delete_finish;
gvir_domain_snapshot_delete_flags_get_type;
gvir_domain_snapshot_get_is_current;
gvir_domain_snapshot_list_flags_get_type;
-- 
2.0.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [PATCH] GVirDomainSnapshot: Add _revert_to

2014-08-19 Thread Timm Bäder
Add a way to revert a domain to one of its snapshots.
---
 libvirt-gobject/libvirt-gobject-domain-snapshot.c | 35 +++
 libvirt-gobject/libvirt-gobject-domain-snapshot.h | 18 
 libvirt-gobject/libvirt-gobject.sym   |  2 ++
 3 files changed, 55 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.c 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
index c53e877..56c9ddb 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.c
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
@@ -268,3 +268,38 @@ gboolean 
gvir_domain_snapshot_get_is_current(GVirDomainSnapshot *snapshot,
 
 return TRUE;
 }
+
+
+
+/**
+ * gvir_domain_snapshot_revert_to:
+ * @snapshot: The domain snapshot
+ * @flags: Bitwise OR of GVirDomainSnapshotRevertFlags
+ * @cancellable: (allow-none) (transfer none): cancellation object
+ * @error: (allow-none): Place-holder for error or %NULL
+ *
+ * Returns: %TRUE if the snapshot's domain has successfully been
+ * reverted to the given snapshot, %FALSE otherwise, in which case
+ * @error will be set.
+ */
+gboolean gvir_domain_snapshot_revert_to(GVirDomainSnapshot *snapshot,
+guint flags,
+GCancellable *cancellable,
+GError **error) {
+int status;
+
+g_return_val_if_fail(GVIR_IS_DOMAIN_SNAPSHOT(snapshot), FALSE);
+g_return_val_if_fail((error == NULL) || (*error == NULL), FALSE);
+
+
+status = virDomainRevertToSnapshot(snapshot->priv->handle,
+   flags);
+if (status != 0) {
+gvir_set_error(error, GVIR_DOMAIN_SNAPSHOT_ERROR,
+   0, "Failed to revert to snapshot `%s'",
+   gvir_domain_snapshot_get_name(snapshot));
+return FALSE;
+}
+
+return TRUE;
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.h 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
index 0a0bb96..c67b345 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.h
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
@@ -71,6 +71,19 @@ typedef enum {
 } GVirDomainSnapshotDeleteFlags;
 
 
+/**
+ * GVirDomainSnapshotRevertFlags:
+ * @GVIR_DOMAIN_SNAPSHOT_REVERT_RUNNING: Run after revert
+ * @GVIR_DOMAIN_SNAPSHOT_REVERT_PAUSED: Pause after revert
+ * @GVIR_DOMAIN_SNAPSHOT_REVERT_FORCE: Allow risky reverts
+ */
+typedef enum {
+  GVIR_DOMAIN_SNAPSHOT_REVERT_RUNNING = 1,
+  GVIR_DOMAIN_SNAPSHOT_REVERT_PAUSED = 2,
+  GVIR_DOMAIN_SNAPSHOT_REVERT_FORCE = 4
+} GVirDomainSnapshotRevertFlags;
+
+
 GType gvir_domain_snapshot_get_type(void);
 GType gvir_domain_snapshot_handle_get_type(void);
 
@@ -89,6 +102,11 @@ gboolean 
gvir_domain_snapshot_get_is_current(GVirDomainSnapshot *snapshot,
  guint flags,
  gboolean *is_current,
  GError **error);
+
+gboolean gvir_domain_snapshot_revert_to(GVirDomainSnapshot *snapshot,
+guint flags,
+GCancellable *cancellable,
+GError **error);
 G_END_DECLS
 
 #endif /* __LIBVIRT_GOBJECT_DOMAIN_SNAPSHOT_H__ */
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index c740f88..c1c9421 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -244,6 +244,8 @@ LIBVIRT_GOBJECT_0.1.9 {
gvir_domain_snapshot_delete_flags_get_type;
gvir_domain_snapshot_get_is_current;
gvir_domain_snapshot_list_flags_get_type;
+   gvir_domain_snapshot_revert_flags_get_type;
+   gvir_domain_snapshot_revert_to;
gvir_storage_pool_state_get_type;
gvir_storage_vol_resize_flags_get_type;
gvir_storage_vol_type_get_type;
-- 
2.0.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [libvirt-glib] [PATCH 1/4] GVirDomain: Fix some doc comments of the snapshot API

2014-08-18 Thread Timm Bäder
On 18.08, Christophe Fergeau wrote:
> Hey,
> 
> On Fri, Aug 15, 2014 at 12:05:44PM +0200, Timm Bäder wrote:
> >  /**
> > - *
> > + * gvir_domain_fetch_snapshots_async:
> >   * @dom: The domain
> >   * @list_flags: bitwise-OR of #GVirDomainSnapshotListFlags
> > - * @cancellable: (allow-none)(transfer-none): cancellation object
> > + * @cancellable: (allow-none) (transfer none): cancellation object
> 
> Is g-ir-scanner complaining about the lack of space? or just about
> 'transfer-none'? Just being curious, patch looks good to me, ACK. For
> future commits, c&p-ing the g-ir-scanner warnings that you are fixing in
> the commit log can be useful)
I'll have to check but IIRC it was mostly about the missing function
name on the first line and once I fixed that, it was the transfer-none,
yes. The whitespace fixes are just cosmetic.

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH 3/4] GVirDomain: Add async version of _create_snapshot

2014-08-15 Thread Timm Bäder
---
 libvirt-gobject/libvirt-gobject-domain.c | 67 
 libvirt-gobject/libvirt-gobject-domain.h | 11 ++
 libvirt-gobject/libvirt-gobject.sym  |  2 +
 3 files changed, 80 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain.c 
b/libvirt-gobject/libvirt-gobject-domain.c
index aa2a170..29b82d0 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -61,6 +61,11 @@ enum {
 LAST_SIGNAL
 };
 
+typedef struct {
+guint create_flags;
+GVirConfigDomainSnapshot *snapshot_config;
+} SnapshotCreateData;
+
 static gint signals[LAST_SIGNAL];
 
 #define GVIR_DOMAIN_ERROR gvir_domain_error_quark()
@@ -1524,6 +1529,68 @@ gvir_domain_create_snapshot(GVirDomain *dom,
 }
 
 
+static void _create_snapshot_async_thread(GTask *task,
+  gpointer source_object,
+  gpointer task_data,
+  GCancellable *cancellable) {
+GError *error = NULL;
+GVirDomainSnapshot *snapshot;
+SnapshotCreateData *create_data = task_data;
+
+snapshot = gvir_domain_create_snapshot(source_object,
+   create_data->snapshot_config,
+   create_data->create_flags,
+   &error);
+if (snapshot)
+  g_task_return_pointer(task, snapshot, g_object_unref);
+else
+  g_task_return_error(task, error);
+}
+
+/**
+ * gvir_domain_create_snapshot_async:
+ * @dom: The #GVirDomain
+ * @custom_conf: (allow-none): Configuration of snapshot or %NULL
+ * @flags: Bitwise-OR of #GVirDomainSnapshotCreateFlags
+ * @callback: (scope async): Complection callback
+ * @user_data: (closure): Opaque data for callback
+ */
+void gvir_domain_create_snapshot_async(GVirDomain *dom,
+   GVirConfigDomainSnapshot *custom_conf,
+   guint flags,
+   GAsyncReadyCallback callback,
+   gpointer user_data) {
+SnapshotCreateData *create_data;
+GTask *task;
+
+g_return_if_fail(GVIR_IS_DOMAIN(dom));
+g_return_if_fail(GVIR_CONFIG_IS_DOMAIN_SNAPSHOT(custom_conf));
+
+create_data = g_slice_new(SnapshotCreateData);
+create_data->create_flags = flags;
+create_data->snapshot_config = custom_conf;
+
+task = g_task_new(dom, NULL, callback, user_data);
+g_task_set_task_data(task, create_data, NULL);
+g_task_run_in_thread(task, _create_snapshot_async_thread);
+g_object_unref(task);
+}
+
+/**
+ * gvir_domain_create_snapshot_finish:
+ * @domain: A #GVirDomain
+ * @result: (transfer none): Async method result
+ * @error: (allow-none): Error placeholder
+ *
+ * Returns: (transfer full): The created snapshot
+ */
+GVirDomainSnapshot * gvir_domain_create_snapshot_finish(GVirDomain  *domain,
+GAsyncResult *result,
+GError **error) {
+g_return_val_if_fail(g_task_is_valid(result, domain), NULL);
+
+return g_task_propagate_pointer(G_TASK(result), error);
+}
 
 /**
  * gvir_domain_fetch_snapshots:
diff --git a/libvirt-gobject/libvirt-gobject-domain.h 
b/libvirt-gobject/libvirt-gobject-domain.h
index 56c80b8..b5a0bd9 100644
--- a/libvirt-gobject/libvirt-gobject-domain.h
+++ b/libvirt-gobject/libvirt-gobject-domain.h
@@ -363,6 +363,17 @@ gvir_domain_create_snapshot(GVirDomain *dom,
 guint flags,
 GError **err);
 
+void gvir_domain_create_snapshot_async(GVirDomain *dom,
+   GVirConfigDomainSnapshot *custom_conf,
+   guint flags,
+   GAsyncReadyCallback callback,
+   gpointer user_data);
+
+GVirDomainSnapshot * gvir_domain_create_snapshot_finish(GVirDomain  *domain,
+GAsyncResult *result,
+GError **error);
+
+
 gboolean gvir_domain_fetch_snapshots(GVirDomain *dom,
  guint list_flags,
  GCancellable *cancellable,
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index ebb9418..a610121 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -236,6 +236,8 @@ LIBVIRT_GOBJECT_0.1.5 {
 
 LIBVIRT_GOBJECT_0.1.9 {
   global:
+   gvir_domain_create_snapshot_async;
+   gvir_domain_create_snapshot_finish;
gvir_domain_fetch_snapshots;
gvir_domain_fetch_snapshots_async;
gvir_domain_fetch_snapshots_finish;
-- 
2.0.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.c

[libvirt] [libvirt-glib] [PATCH 4/4] GVirDomainSnapshot: Add async version of _delete

2014-08-15 Thread Timm Bäder
---
 libvirt-gobject/libvirt-gobject-domain-snapshot.c | 56 +++
 libvirt-gobject/libvirt-gobject-domain-snapshot.h |  9 
 libvirt-gobject/libvirt-gobject.sym   |  2 +
 3 files changed, 67 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.c 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
index 61ca53e..46aa70f 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.c
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
@@ -237,6 +237,62 @@ gboolean gvir_domain_snapshot_delete (GVirDomainSnapshot 
*snapshot,
 }
 
 
+
+static void _delete_async_thread(GTask *task,
+ gpointer source_object,
+ gpointer task_data,
+ GCancellable *cancellable) {
+GError *error = NULL;
+gboolean status;
+
+status = gvir_domain_snapshot_delete(source_object,
+ GPOINTER_TO_UINT(task_data),
+ &error);
+
+if (status)
+g_task_return_boolean(task, TRUE);
+else
+g_task_return_error(task, error);
+}
+
+
+/**
+ * gvir_domain_snapshot_delete_async:
+ * @snapshot: A #GVirDomainSnapshot
+ * @flags: Bitwise-OR of #GVirDomainSnapshotDeleteFlags
+ * @callback: (scope async): completion callback
+ * @user_data: (closure): opaque data for callback
+ */
+void gvir_domain_snapshot_delete_async(GVirDomainSnapshot *snapshot,
+   guint flags,
+   GAsyncReadyCallback callback,
+   gpointer user_data) {
+GTask *task;
+
+g_return_if_fail(GVIR_IS_DOMAIN_SNAPSHOT(snapshot));
+
+task = g_task_new(snapshot, NULL, callback, user_data);
+g_task_set_task_data(task, GUINT_TO_POINTER(flags), NULL);
+g_task_run_in_thread(task, _delete_async_thread);
+g_object_unref(task);
+}
+
+/**
+ * gvir_domain_snapshot_delete_finish:
+ * @snapshot: A #GVirDomainSnapshot
+ * @res: (transfer none): async method result
+ *
+ * Returns: %TRUE on success, %FALSE otherwise.
+ */
+gboolean gvir_domain_snapshot_delete_finish(GVirDomainSnapshot *snapshot,
+GAsyncResult *res,
+GError **error) {
+g_return_val_if_fail(GVIR_IS_DOMAIN_SNAPSHOT(snapshot), FALSE);
+g_return_val_if_fail(g_task_is_valid(res, snapshot), FALSE);
+
+return g_task_propagate_boolean(G_TASK(res), error);
+}
+
 /**
  * gvir_domain_snapshot_get_is_current:
  * @snapshot: The domain snapshot
diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.h 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
index c6262e8..ba85dee 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.h
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
@@ -98,6 +98,15 @@ gboolean gvir_domain_snapshot_delete (GVirDomainSnapshot 
*snapshot,
   guint flags,
   GError **error);
 
+void gvir_domain_snapshot_delete_async(GVirDomainSnapshot *snapshot,
+   guint flags,
+   GAsyncReadyCallback callback,
+   gpointer user_data);
+
+gboolean gvir_domain_snapshot_delete_finish(GVirDomainSnapshot *snapshot,
+GAsyncResult *res,
+GError **error);
+
 gboolean gvir_domain_snapshot_get_is_current(GVirDomainSnapshot *snapshot,
  guint flags,
  gboolean *is_current,
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index a610121..f335399 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -244,6 +244,8 @@ LIBVIRT_GOBJECT_0.1.9 {
gvir_domain_get_snapshots;
gvir_domain_get_has_current_snapshot;
gvir_domain_snapshot_delete;
+   gvir_domain_snapshot_delete_async;
+   gvir_domain_snapshot_delete_finish;
gvir_domain_snapshot_delete_flags_get_type;
gvir_domain_snapshot_get_is_current;
gvir_domain_snapshot_list_flags_get_type;
-- 
2.0.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH 2/4] GVirDomainSnapshot: Add async version of _revert_to

2014-08-15 Thread Timm Bäder
---
 libvirt-gobject/libvirt-gobject-domain-snapshot.c | 56 +++
 libvirt-gobject/libvirt-gobject-domain-snapshot.h | 10 
 libvirt-gobject/libvirt-gobject.sym   |  2 +
 3 files changed, 68 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.c 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
index 62efce0..61ca53e 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.c
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
@@ -302,6 +302,62 @@ gboolean gvir_domain_snapshot_revert_to(GVirDomainSnapshot 
*snapshot,
 return TRUE;
 }
 
+static void _revert_to_async_thread(GTask *task,
+gpointer source_object,
+gpointer task_data,
+GCancellable *cancellable) {
+GError *error = NULL;
+gboolean status;
+
+status = gvir_domain_snapshot_revert_to(source_object,
+GPOINTER_TO_UINT(task_data),
+&error);
+
+if (status)
+g_task_return_boolean(task, TRUE);
+else
+g_task_return_error(task, error);
+}
+
+
+/**
+ * gvir_domain_snapshot_revert_to_async:
+ * @snapshot: A #GVirDomainSnapshot
+ * @callback: (scope async): The callback
+ * @user_data: (closure): Opaque data for callback
+ */
+void gvir_domain_snapshot_revert_to_async(GVirDomainSnapshot *snapshot,
+  guint flags,
+  GAsyncReadyCallback callback,
+  gpointer user_data) {
+GTask *task;
+
+g_return_if_fail(GVIR_IS_DOMAIN_SNAPSHOT(snapshot));
+
+task = g_task_new(snapshot, NULL, callback, user_data);
+g_task_set_task_data(task, GUINT_TO_POINTER(flags), NULL);
+g_task_run_in_thread(task, _revert_to_async_thread);
+g_object_unref(task);
+}
+
+
+
+/**
+ * gvir_domain_snapshot_revert_to_finished:
+ * @snapshot: The domain snapshot
+ * @result: (transfer none): The result
+ *
+ * Returns: %TRUE on success, %FALSE otherwise.
+ */
+gboolean gvir_domain_snapshot_revert_to_finish(GVirDomainSnapshot *snapshot,
+   GAsyncResult *result,
+   GError **error) {
+g_return_val_if_fail(GVIR_IS_DOMAIN_SNAPSHOT(snapshot), FALSE);
+g_return_val_if_fail(g_task_is_valid(result, snapshot), FALSE);
+
+return g_task_propagate_boolean(G_TASK(result), error);
+}
+
 
 
 /**
diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.h 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
index 5ab3025..c6262e8 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.h
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
@@ -107,6 +107,16 @@ gboolean gvir_domain_snapshot_revert_to(GVirDomainSnapshot 
*snapshot,
 guint flags,
 GError **error);
 
+void gvir_domain_snapshot_revert_to_async(GVirDomainSnapshot *snapshot,
+  guint flags,
+  GAsyncReadyCallback callback,
+  gpointer user_data);
+
+gboolean gvir_domain_snapshot_revert_to_finish(GVirDomainSnapshot *snapshot,
+   GAsyncResult *result,
+   GError **error);
+
+
 gboolean gvir_domain_snapshot_set_config(GVirDomainSnapshot *snapshot,
  GVirConfigDomainSnapshot *conf,
  GError **error);
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index 68e9b58..ebb9418 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -247,6 +247,8 @@ LIBVIRT_GOBJECT_0.1.9 {
gvir_domain_snapshot_list_flags_get_type;
gvir_domain_snapshot_revert_flags_get_type;
gvir_domain_snapshot_revert_to;
+   gvir_domain_snapshot_revert_to_async;
+   gvir_domain_snapshot_revert_to_finish;
gvir_domain_snapshot_set_config;
gvir_storage_pool_state_get_type;
gvir_storage_vol_resize_flags_get_type;
-- 
2.0.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH 1/4] GVirDomain: Fix some doc comments of the snapshot API

2014-08-15 Thread Timm Bäder
Fixes some warnings from g-ir-scanner.
---
 libvirt-gobject/libvirt-gobject-domain.c | 10 +-
 1 file changed, 5 insertions(+), 5 deletions(-)

diff --git a/libvirt-gobject/libvirt-gobject-domain.c 
b/libvirt-gobject/libvirt-gobject-domain.c
index feac6f0..aa2a170 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -1529,10 +1529,10 @@ gvir_domain_create_snapshot(GVirDomain *dom,
  * gvir_domain_fetch_snapshots:
  * @dom: The domain
  * @list_flags: bitwise-OR of #GVirDomainSnapshotListFlags
- * @cancellable: (allow-none)(transfer-none): cancellation object
- * @error: (allow-none): Place-holder for error or NULL
+ * @cancellable: (allow-none) (transfer none): cancellation object
+ * @error: (allow-none): Place-holder for error or %NULL
  *
- * Returns: TRUE on success, FALSE otherwise.
+ * Returns: %TRUE on success, %FALSE otherwise.
  */
 gboolean gvir_domain_fetch_snapshots(GVirDomain *dom,
  guint list_flags,
@@ -1647,10 +1647,10 @@ static void _fetch_snapshots_async_thread(GTask *task,
 
 
 /**
- *
+ * gvir_domain_fetch_snapshots_async:
  * @dom: The domain
  * @list_flags: bitwise-OR of #GVirDomainSnapshotListFlags
- * @cancellable: (allow-none)(transfer-none): cancellation object
+ * @cancellable: (allow-none) (transfer none): cancellation object
  * @callback: (scope async): completion callback
  * @user_data: (closure): opaque data for callback
  */
-- 
2.0.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH 0/4] Add some async versions of synchronous snapshot API

2014-08-15 Thread Timm Bäder
This adds async versions of a few snapshot related functions and a patch that
cleans up some doc comments I crewed up in earlier commits. All the sync
versions don't seem cancellable to me since we can't just throw the
result away like we do when fetching snapshots in case the operation
gets cancelled, so none of them take a GCancellable.

Timm Bäder (4):
  GVirDomain: Fix some doc comments of the snapshot API
  GVirDomainSnapshot: Add async version of _revert_to
  GVirDomain: Add async version of _create_snapshot
  GVirDomainSnapshot: Add async version of _delete

 libvirt-gobject/libvirt-gobject-domain-snapshot.c | 112 ++
 libvirt-gobject/libvirt-gobject-domain-snapshot.h |  19 
 libvirt-gobject/libvirt-gobject-domain.c  |  77 ++-
 libvirt-gobject/libvirt-gobject-domain.h  |  11 +++
 libvirt-gobject/libvirt-gobject.sym   |   6 ++
 5 files changed, 220 insertions(+), 5 deletions(-)

-- 
2.0.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [PATCH 4/4] GVirDomain: Add _get_has_current_snapshot

2014-08-08 Thread Timm Bäder
... which uses virDomainHasCurrentSnapshot to determine if the given
domain has a current snapshot or not.
---
 libvirt-gobject/libvirt-gobject-domain.c | 34 
 libvirt-gobject/libvirt-gobject-domain.h |  4 
 libvirt-gobject/libvirt-gobject.sym  |  1 +
 3 files changed, 39 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain.c 
b/libvirt-gobject/libvirt-gobject-domain.c
index 5399892..feac6f0 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -1686,3 +1686,37 @@ gboolean gvir_domain_fetch_snapshots_finish(GVirDomain 
*dom,
 
 return g_task_propagate_boolean(G_TASK(res), error);
 }
+
+
+/**
+ * gvir_domain_get_has_current_snapshot:
+ * @dom: a #GVirDomain
+ * @flags: Unused, pass 0
+ * @has_current_snapshot: (out): Will be set to %TRUE if the given domain
+ * has a current snapshot and to %FALSE otherwise.
+ * @error: (allow-none): Place-holder for error or %NULL
+ *
+ * Returns: %TRUE on success, %FALSE otherwise.
+ */
+gboolean gvir_domain_get_has_current_snapshot(GVirDomain *dom,
+  guint flags,
+  gboolean *has_current_snapshot,
+  GError **error) {
+int status;
+g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
+g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
+
+status = virDomainHasCurrentSnapshot(dom->priv->handle,
+ flags);
+
+if (status == -1) {
+gvir_set_error(error, GVIR_DOMAIN_ERROR, 0,
+   "Unable to check if domain `%s' has a current snapshot",
+   gvir_domain_get_name(dom));
+return FALSE;
+}
+
+*has_current_snapshot = status;
+
+return TRUE;
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain.h 
b/libvirt-gobject/libvirt-gobject-domain.h
index 9846375..56c80b8 100644
--- a/libvirt-gobject/libvirt-gobject-domain.h
+++ b/libvirt-gobject/libvirt-gobject-domain.h
@@ -380,6 +380,10 @@ gboolean gvir_domain_fetch_snapshots_finish(GVirDomain 
*dom,
 GAsyncResult *res,
 GError **error);
 
+gboolean gvir_domain_get_has_current_snapshot(GVirDomain *dom,
+  guint flags,
+  gboolean *has_current_snapshot,
+  GError **error);
 
 G_END_DECLS
 
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index bd12239..68e9b58 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -240,6 +240,7 @@ LIBVIRT_GOBJECT_0.1.9 {
gvir_domain_fetch_snapshots_async;
gvir_domain_fetch_snapshots_finish;
gvir_domain_get_snapshots;
+   gvir_domain_get_has_current_snapshot;
gvir_domain_snapshot_delete;
gvir_domain_snapshot_delete_flags_get_type;
gvir_domain_snapshot_get_is_current;
-- 
2.0.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH v2 3/4] GVirDomainSnapshot: Add _set_config

2014-08-07 Thread Timm Bäder
... which is basically analogous to gvir_domain_set_config
---
 libvirt-gobject/libvirt-gobject-domain-snapshot.c | 68 +++
 libvirt-gobject/libvirt-gobject-domain-snapshot.h |  5 ++
 libvirt-gobject/libvirt-gobject.sym   |  1 +
 3 files changed, 74 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.c 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
index dca1086..62efce0 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.c
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
@@ -301,3 +301,71 @@ gboolean gvir_domain_snapshot_revert_to(GVirDomainSnapshot 
*snapshot,
 
 return TRUE;
 }
+
+
+
+/**
+ * gvir_domain_snapshot_set_config:
+ * @snapshot: The domain snapshot
+ * @conf: The new config object
+ * @error: (allow-none): Place-holder for error or %NULL
+ *
+ * Updates the given snapshot's configuration according to the
+ * given GVirConfigDomainSnapshot.
+ *
+ * Returns: %TRUE if no error was reported, %FALSE otherwise.
+ */
+gboolean gvir_domain_snapshot_set_config(GVirDomainSnapshot *snapshot,
+ GVirConfigDomainSnapshot *conf,
+ GError **error)
+{
+gchar *xml;
+virConnectPtr conn;
+virDomainSnapshotPtr handle;
+virDomainPtr domain;
+GVirDomainSnapshotPrivate *priv;
+
+g_return_val_if_fail(GVIR_IS_DOMAIN_SNAPSHOT(snapshot), FALSE);
+g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_SNAPSHOT(conf), FALSE);
+g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
+
+priv = snapshot->priv;
+handle = priv->handle;
+domain = virDomainSnapshotGetDomain(handle);
+
+
+if ((conn = virDomainSnapshotGetConnect(priv->handle)) == NULL) {
+gvir_set_error_literal(error, GVIR_DOMAIN_SNAPSHOT_ERROR,
+   0,
+   "Failed to get domain connection");
+return FALSE;
+}
+
+
+/* XXX Changing the name will create a new snapshot */
+if (g_strcmp0 (gvir_domain_snapshot_get_name(snapshot),
+   gvir_config_domain_snapshot_get_name(conf)) != 0) {
+gvir_set_error_literal(error, GVIR_DOMAIN_SNAPSHOT_ERROR,
+   0,
+   "Cannot set config: snapshot names don't 
match");
+return FALSE;
+}
+
+
+xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(conf));
+
+handle = virDomainSnapshotCreateXML(domain,
+xml,
+VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE);
+g_free(xml);
+
+if (handle == NULL) {
+gvir_set_error(error, GVIR_DOMAIN_SNAPSHOT_ERROR,
+   0,
+   "Failed to create snapshot `%s' from XML definition",
+   gvir_domain_snapshot_get_name(snapshot));
+return FALSE;
+}
+virDomainSnapshotFree(handle);
+return TRUE;
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.h 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
index 7abe8ca..5ab3025 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.h
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
@@ -106,6 +106,11 @@ gboolean 
gvir_domain_snapshot_get_is_current(GVirDomainSnapshot *snapshot,
 gboolean gvir_domain_snapshot_revert_to(GVirDomainSnapshot *snapshot,
 guint flags,
 GError **error);
+
+gboolean gvir_domain_snapshot_set_config(GVirDomainSnapshot *snapshot,
+ GVirConfigDomainSnapshot *conf,
+ GError **error);
+
 G_END_DECLS
 
 #endif /* __LIBVIRT_GOBJECT_DOMAIN_SNAPSHOT_H__ */
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index c1c9421..bd12239 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -246,6 +246,7 @@ LIBVIRT_GOBJECT_0.1.9 {
gvir_domain_snapshot_list_flags_get_type;
gvir_domain_snapshot_revert_flags_get_type;
gvir_domain_snapshot_revert_to;
+   gvir_domain_snapshot_set_config;
gvir_storage_pool_state_get_type;
gvir_storage_vol_resize_flags_get_type;
gvir_storage_vol_type_get_type;
-- 
2.0.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH v2 2/4] GVirDomainSnapshot: Add _revert_to

2014-08-07 Thread Timm Bäder
Add a way to revert a domain to one of its snapshots.
---
 libvirt-gobject/libvirt-gobject-domain-snapshot.c | 33 +++
 libvirt-gobject/libvirt-gobject-domain-snapshot.h | 17 
 libvirt-gobject/libvirt-gobject.sym   |  2 ++
 3 files changed, 52 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.c 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
index c53e877..dca1086 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.c
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
@@ -268,3 +268,36 @@ gboolean 
gvir_domain_snapshot_get_is_current(GVirDomainSnapshot *snapshot,
 
 return TRUE;
 }
+
+
+
+/**
+ * gvir_domain_snapshot_revert_to:
+ * @snapshot: The domain snapshot
+ * @flags: Bitwise OR of GVirDomainSnapshotRevertFlags
+ * @error: (allow-none): Place-holder for error or %NULL
+ *
+ * Returns: %TRUE if the snapshot's domain has successfully been
+ * reverted to the given snapshot, %FALSE otherwise, in which case
+ * @error will be set.
+ */
+gboolean gvir_domain_snapshot_revert_to(GVirDomainSnapshot *snapshot,
+guint flags,
+GError **error) {
+int status;
+
+g_return_val_if_fail(GVIR_IS_DOMAIN_SNAPSHOT(snapshot), FALSE);
+g_return_val_if_fail((error == NULL) || (*error == NULL), FALSE);
+
+
+status = virDomainRevertToSnapshot(snapshot->priv->handle,
+   flags);
+if (status != 0) {
+gvir_set_error(error, GVIR_DOMAIN_SNAPSHOT_ERROR,
+   0, "Failed to revert to snapshot `%s'",
+   gvir_domain_snapshot_get_name(snapshot));
+return FALSE;
+}
+
+return TRUE;
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.h 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
index 0a0bb96..7abe8ca 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.h
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
@@ -71,6 +71,19 @@ typedef enum {
 } GVirDomainSnapshotDeleteFlags;
 
 
+/**
+ * GVirDomainSnapshotRevertFlags:
+ * @GVIR_DOMAIN_SNAPSHOT_REVERT_RUNNING: Run after revert
+ * @GVIR_DOMAIN_SNAPSHOT_REVERT_PAUSED: Pause after revert
+ * @GVIR_DOMAIN_SNAPSHOT_REVERT_FORCE: Allow risky reverts
+ */
+typedef enum {
+  GVIR_DOMAIN_SNAPSHOT_REVERT_RUNNING = 1,
+  GVIR_DOMAIN_SNAPSHOT_REVERT_PAUSED = 2,
+  GVIR_DOMAIN_SNAPSHOT_REVERT_FORCE = 4
+} GVirDomainSnapshotRevertFlags;
+
+
 GType gvir_domain_snapshot_get_type(void);
 GType gvir_domain_snapshot_handle_get_type(void);
 
@@ -89,6 +102,10 @@ gboolean 
gvir_domain_snapshot_get_is_current(GVirDomainSnapshot *snapshot,
  guint flags,
  gboolean *is_current,
  GError **error);
+
+gboolean gvir_domain_snapshot_revert_to(GVirDomainSnapshot *snapshot,
+guint flags,
+GError **error);
 G_END_DECLS
 
 #endif /* __LIBVIRT_GOBJECT_DOMAIN_SNAPSHOT_H__ */
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index c740f88..c1c9421 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -244,6 +244,8 @@ LIBVIRT_GOBJECT_0.1.9 {
gvir_domain_snapshot_delete_flags_get_type;
gvir_domain_snapshot_get_is_current;
gvir_domain_snapshot_list_flags_get_type;
+   gvir_domain_snapshot_revert_flags_get_type;
+   gvir_domain_snapshot_revert_to;
gvir_storage_pool_state_get_type;
gvir_storage_vol_resize_flags_get_type;
gvir_storage_vol_type_get_type;
-- 
2.0.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH v2 1/4] GVirDomainSnapshot: Add _get_is_current

2014-08-07 Thread Timm Bäder
Add a way to determine if the given GVirDomainSnapshot is the current
snapshot of its GVirDomain.
---
 libvirt-gobject/libvirt-gobject-domain-snapshot.c | 33 +++
 libvirt-gobject/libvirt-gobject-domain-snapshot.h |  4 +++
 libvirt-gobject/libvirt-gobject.sym   |  1 +
 3 files changed, 38 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.c 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
index 7bb89f1..c53e877 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.c
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
@@ -235,3 +235,36 @@ gboolean gvir_domain_snapshot_delete (GVirDomainSnapshot 
*snapshot,
 }
 return TRUE;
 }
+
+
+/**
+ * gvir_domain_snapshot_get_is_current:
+ * @snapshot: The domain snapshot
+ * @flags: Currently unused, pass 0
+ * @is_current: (out): %TRUE if the given snapshot is the current snapshot
+ * of its domain, %FALSE otherwise.
+ * @error: (allow-none): Place-holder for error or %NULL
+ *
+ * Returns: %TRUE on success, %FALSE otherwise.
+ */
+gboolean gvir_domain_snapshot_get_is_current(GVirDomainSnapshot *snapshot,
+ guint flags,
+ gboolean *is_current,
+ GError **error) {
+gint status;
+
+g_return_val_if_fail(GVIR_IS_DOMAIN_SNAPSHOT(snapshot), FALSE);
+g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
+
+status = virDomainSnapshotIsCurrent(snapshot->priv->handle, flags);
+if (status == -1) {
+gvir_set_error(error, GVIR_DOMAIN_SNAPSHOT_ERROR, 0,
+   "Could not determine if `%s' is the current snapshot",
+   gvir_domain_snapshot_get_name(snapshot));
+return FALSE;
+}
+
+*is_current = status;
+
+return TRUE;
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.h 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
index b3ebe7f..0a0bb96 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.h
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
@@ -85,6 +85,10 @@ gboolean gvir_domain_snapshot_delete (GVirDomainSnapshot 
*snapshot,
   guint flags,
   GError **error);
 
+gboolean gvir_domain_snapshot_get_is_current(GVirDomainSnapshot *snapshot,
+ guint flags,
+ gboolean *is_current,
+ GError **error);
 G_END_DECLS
 
 #endif /* __LIBVIRT_GOBJECT_DOMAIN_SNAPSHOT_H__ */
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index b0c55b5..c740f88 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -242,6 +242,7 @@ LIBVIRT_GOBJECT_0.1.9 {
gvir_domain_get_snapshots;
gvir_domain_snapshot_delete;
gvir_domain_snapshot_delete_flags_get_type;
+   gvir_domain_snapshot_get_is_current;
gvir_domain_snapshot_list_flags_get_type;
gvir_storage_pool_state_get_type;
gvir_storage_vol_resize_flags_get_type;
-- 
2.0.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH v2 4/4] GVirDomain: Add _has_current_snapshot

2014-08-07 Thread Timm Bäder
... which uses virDomainHasCurrentSnapshot to determine if the given
domain has a current snapshot or not.
---
 libvirt-gobject/libvirt-gobject-domain.c | 34 
 libvirt-gobject/libvirt-gobject-domain.h |  4 
 libvirt-gobject/libvirt-gobject.sym  |  1 +
 3 files changed, 39 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain.c 
b/libvirt-gobject/libvirt-gobject-domain.c
index 5399892..f3794cc 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -1686,3 +1686,37 @@ gboolean gvir_domain_fetch_snapshots_finish(GVirDomain 
*dom,
 
 return g_task_propagate_boolean(G_TASK(res), error);
 }
+
+
+/**
+ * gvir_domain_has_current_snapshot:
+ * @dom: a #GVirDomain
+ * @flags: Unused, pass 0
+ * @has_current_snapshot: (out): Will be set to %TRUE if the given domain
+ * has a current snapshot and to %FALSE otherwise.
+ * @error: (allow-none): Place-holder for error or %NULL
+ *
+ * Returns: %TRUE on success, %FALSE otherwise.
+ */
+gboolean gvir_domain_has_current_snapshot(GVirDomain *dom,
+  guint flags,
+  gboolean *has_current_snapshot,
+  GError **error) {
+int status;
+g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
+g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
+
+status = virDomainHasCurrentSnapshot(dom->priv->handle,
+ flags);
+
+if (status == -1) {
+gvir_set_error(error, GVIR_DOMAIN_ERROR, 0,
+   "Unable to check if domain `%s' has a current snapshot",
+   gvir_domain_get_name(dom));
+return FALSE;
+}
+
+*has_current_snapshot = status;
+
+return TRUE;
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain.h 
b/libvirt-gobject/libvirt-gobject-domain.h
index 9846375..52b805f 100644
--- a/libvirt-gobject/libvirt-gobject-domain.h
+++ b/libvirt-gobject/libvirt-gobject-domain.h
@@ -380,6 +380,10 @@ gboolean gvir_domain_fetch_snapshots_finish(GVirDomain 
*dom,
 GAsyncResult *res,
 GError **error);
 
+gboolean gvir_domain_has_current_snapshot(GVirDomain *dom,
+  guint flags,
+  gboolean *has_current_snapshot,
+  GError **error);
 
 G_END_DECLS
 
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index bd12239..c34bf02 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -240,6 +240,7 @@ LIBVIRT_GOBJECT_0.1.9 {
gvir_domain_fetch_snapshots_async;
gvir_domain_fetch_snapshots_finish;
gvir_domain_get_snapshots;
+   gvir_domain_has_current_snapshot;
gvir_domain_snapshot_delete;
gvir_domain_snapshot_delete_flags_get_type;
gvir_domain_snapshot_get_is_current;
-- 
2.0.4

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [libvirt-glib] [PATCH 3/4] GVirDomainSnapshot: Add _set_config

2014-08-06 Thread Timm Bäder
On 06.08, Christophe Fergeau wrote:
> Hey,
> 
> Thanks for the detailed explanation!
> 
> On Tue, Aug 05, 2014 at 03:52:17PM +0200, Timm Bäder wrote:
> > Also in reply to the 0/4:
> > It will modify the existing one, as long as you don't change the name.
> > Like if you use get_config, then set_description on that config and
> > then _set_config again, no additional snapshot will be created.
> > If you change only the snapshot's name and then use set_config on it,
> > it'll create a new snapshot that is equivalent to the snapshot you
> > wanted to modify except for the name (and to really "modify" the old
> > snapshot, you now have to delete the old one, which is one reason why
> > we show the description to the user instead of the name in gnome-boxes).
> > I had a conversation with eblake on IRC about this and it seemed like
> > this is the wanted behavior (or at least it's a well-known limitation?).
> > 
> > So I guess the name is still correct, but maybe the docs should mention
> > that renaming won't work as expected?
> 
> Hmm at this point I'd error out if the name is different. If people
> complain about this, or if this is too limiting, then we can reconsider
> with clear use cases to decide how this should behave. How does that
> sound?
> 
> Christophe

That sounds good to me, thanks.

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [libvirt-glib] [PATCH 3/4] GVirDomainSnapshot: Add _set_config

2014-08-05 Thread Timm Bäder
On 05.08, Christophe Fergeau wrote:
> On Sat, Aug 02, 2014 at 10:41:48AM +0200, m...@baedert.org wrote:
> > From: Timm Bäder 
> > 
> > ... which is basically analogous to gvir_domain_set_config
> > ---
> >  libvirt-gobject/libvirt-gobject-domain-snapshot.c | 58 
> > +++
> >  libvirt-gobject/libvirt-gobject-domain-snapshot.h |  5 ++
> >  libvirt-gobject/libvirt-gobject.sym   |  1 +
> >  3 files changed, 64 insertions(+)
> > 
> > diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.c 
> > b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
> > index 497288f..2c81882 100644
> > --- a/libvirt-gobject/libvirt-gobject-domain-snapshot.c
> > +++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
> > @@ -297,3 +297,61 @@ gboolean 
> > gvir_domain_snapshot_revert_to(GVirDomainSnapshot *snapshot,
> >  
> >  return TRUE;
> >  }
> > +
> > +
> > +
> > +/**
> > + * gvir_domain_snapshot_set_config:
> > + * @snapshot: The domain snapshot
> > + * @conf: The new config object
> > + * @error: (allow-none): Place-holder for error or NULL
> > + *
> > + * Updates the given snapshot's configuration according to the
> > + * given GVirConfigDomainSnapshot.
> > + *
> > + * Returns: TRUE if no error was reported, FALSE otherwise.
> > + */
> > +gboolean gvir_domain_snapshot_set_config(GVirDomainSnapshot *snapshot,
> > + GVirConfigDomainSnapshot *conf,
> > + GError **error)
> > +{
> > +gchar *xml;
> > +virConnectPtr conn;
> > +virDomainSnapshotPtr handle;
> > +virDomainPtr domain;
> > +GVirDomainSnapshotPrivate *priv;
> > +
> > +g_return_val_if_fail(GVIR_IS_DOMAIN_SNAPSHOT(snapshot), FALSE);
> > +g_return_val_if_fail(GVIR_CONFIG_IS_DOMAIN_SNAPSHOT(conf), FALSE);
> > +g_return_val_if_fail(error == NULL || *error == NULL, FALSE);
> > +
> > +priv = snapshot->priv;
> > +handle = priv->handle;
> > +domain = virDomainSnapshotGetDomain(handle);
> > +
> > +
> > +if ((conn = virDomainSnapshotGetConnect(priv->handle)) == NULL) {
> > +gvir_set_error_literal(error, GVIR_DOMAIN_SNAPSHOT_ERROR,
> > +   0,
> > +   "Failed to get domain connection");
> > +return FALSE;
> > +}
> > +
> > +
> > +xml = gvir_config_object_to_xml(GVIR_CONFIG_OBJECT(conf));
> > +
> > +handle = virDomainSnapshotCreateXML(domain,
> > +xml,
> > +
> > VIR_DOMAIN_SNAPSHOT_CREATE_REDEFINE);
> > +free(xml);
> 
> g_free here.
> 
> > +
> > +if (handle == NULL) {
> > +gvir_set_error(error, GVIR_DOMAIN_SNAPSHOT_ERROR,
> > +   0,
> > +   "Failed to create Snapshot `%s' from XML 
> > definition",
> 
> "snapshot" could have a lower case here.
> 
> I'm not exactly clear on what this method will be doing according to
> your 0/4. If it creates a new snapshot rather than modifying an
> existing one, maybe the name should be different/this should not be
> wrapped?
> 
> Christophe

Also in reply to the 0/4:
It will modify the existing one, as long as you don't change the name.
Like if you use get_config, then set_description on that config and
then _set_config again, no additional snapshot will be created.
If you change only the snapshot's name and then use set_config on it,
it'll create a new snapshot that is equivalent to the snapshot you
wanted to modify except for the name (and to really "modify" the old
snapshot, you now have to delete the old one, which is one reason why
we show the description to the user instead of the name in gnome-boxes).
I had a conversation with eblake on IRC about this and it seemed like
this is the wanted behavior (or at least it's a well-known limitation?).

So I guess the name is still correct, but maybe the docs should mention
that renaming won't work as expected?


Regards,
Timm


--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH v5 1/3] libvirt-gobject-domain: Add _fetch_snapshots

2014-07-09 Thread Timm Bäder
This function can be used to fetch the snapshots of a domain (according
to the given GVirDomainSnapshotListFlags) and save them in a
domain-internal GHashTable. A function to access them from outside will
be added in a later patch.
---
 libvirt-gobject/libvirt-gobject-domain.c | 86 
 libvirt-gobject/libvirt-gobject-domain.h | 37 ++
 libvirt-gobject/libvirt-gobject.sym  |  2 +
 3 files changed, 125 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain.c 
b/libvirt-gobject/libvirt-gobject-domain.c
index c6e30e5..adb5179 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -38,6 +38,8 @@ struct _GVirDomainPrivate
 {
 virDomainPtr handle;
 gchar uuid[VIR_UUID_STRING_BUFLEN];
+GHashTable *snapshots;
+GMutex *lock;
 };
 
 G_DEFINE_TYPE(GVirDomain, gvir_domain, G_TYPE_OBJECT);
@@ -121,6 +123,11 @@ static void gvir_domain_finalize(GObject *object)
 
 g_debug("Finalize GVirDomain=%p", domain);
 
+if (priv->snapshots) {
+g_hash_table_unref(priv->snapshots);
+}
+g_mutex_free(priv->lock);
+
 virDomainFree(priv->handle);
 
 G_OBJECT_CLASS(gvir_domain_parent_class)->finalize(object);
@@ -237,6 +244,7 @@ static void gvir_domain_init(GVirDomain *domain)
 g_debug("Init GVirDomain=%p", domain);
 
 domain->priv = GVIR_DOMAIN_GET_PRIVATE(domain);
+domain->priv->lock = g_mutex_new();
 }
 
 typedef struct virDomain GVirDomainHandle;
@@ -1514,3 +1522,81 @@ gvir_domain_create_snapshot(GVirDomain *dom,
 g_free(custom_xml);
 return dom_snapshot;
 }
+
+
+
+/**
+ * gvir_domain_fetch_snapshots:
+ * @dom: The domain
+ * @list_flags: bitwise-OR of #GVirDomainSnapshotListFlags
+ * @cancellable: (allow-none)(transfer-none): cancellation object
+ * @error: (allow-none): Place-holder for error or NULL
+ *
+ * Returns: TRUE on success, FALSE otherwise.
+ */
+gboolean gvir_domain_fetch_snapshots(GVirDomain *dom,
+ guint list_flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+GVirDomainPrivate *priv;
+virDomainSnapshotPtr *snapshots = NULL;
+GVirDomainSnapshot *snap;
+GHashTable *snap_table;
+int n_snaps = 0;
+int i;
+gboolean ret = TRUE;
+
+g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
+g_return_val_if_fail((error == NULL) || (*error == NULL), FALSE);
+
+priv = dom->priv;
+
+snap_table = g_hash_table_new_full(g_str_hash,
+   g_str_equal,
+   NULL,
+   g_object_unref);
+
+
+n_snaps = virDomainListAllSnapshots(priv->handle, &snapshots, list_flags);
+
+if (g_cancellable_set_error_if_cancelled(cancellable, error)) {
+ret = FALSE;
+goto cleanup;
+}
+
+if (n_snaps < 0) {
+gvir_set_error(error, GVIR_DOMAIN_ERROR, 0,
+   "Unable to fetch snapshots of %s",
+   gvir_domain_get_name(dom));
+ret = FALSE;
+goto cleanup;
+}
+
+for (i = 0; i < n_snaps; i ++) {
+if (g_cancellable_set_error_if_cancelled(cancellable, error)) {
+ret = FALSE;
+goto cleanup;
+}
+snap = GVIR_DOMAIN_SNAPSHOT(g_object_new(GVIR_TYPE_DOMAIN_SNAPSHOT,
+ "handle", snapshots[i],
+ NULL));
+g_hash_table_insert(snap_table,
+(gpointer)gvir_domain_snapshot_get_name(snap),
+snap);
+}
+
+
+g_mutex_lock(priv->lock);
+if (priv->snapshots != NULL)
+g_hash_table_unref(priv->snapshots);
+priv->snapshots = snap_table;
+snap_table = NULL;
+g_mutex_unlock(priv->lock);
+
+cleanup:
+free(snapshots);
+if (snap_table != NULL)
+g_hash_table_unref (snap_table);
+return ret;
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain.h 
b/libvirt-gobject/libvirt-gobject-domain.h
index 38d3458..8c1a8e5 100644
--- a/libvirt-gobject/libvirt-gobject-domain.h
+++ b/libvirt-gobject/libvirt-gobject-domain.h
@@ -183,6 +183,39 @@ typedef enum {
 GVIR_DOMAIN_REBOOT_GUEST_AGENT= VIR_DOMAIN_REBOOT_GUEST_AGENT,
 } GVirDomainRebootFlags;
 
+/**
+ * GVirDomainSnapshotListFlags:
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_ALL: List all snapshots
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS: List all descendants, not just
+ * children, when listing a snapshot.
+ * For historical reasons, groups do 
not use contiguous bits.
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_ROOTS: Filter by snapshots with no parents, when 
listing a domain
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_METADATA: Filter by snapshots which have metadata
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_LEAVES: Filter by snapshots wi

[libvirt] [libvirt-glib] [PATCH v5 3/3] GVirDomain: Add async version of _fetch_snapshots

2014-07-09 Thread Timm Bäder
---
 libvirt-gobject/libvirt-gobject-domain.c | 61 
 libvirt-gobject/libvirt-gobject-domain.h | 10 ++
 libvirt-gobject/libvirt-gobject.sym  |  2 ++
 3 files changed, 73 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain.c 
b/libvirt-gobject/libvirt-gobject-domain.c
index 8f48c2e..7fd5043 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -1621,3 +1621,64 @@ GList *gvir_domain_get_snapshots(GVirDomain *dom)
 
 return snapshots;
 }
+
+
+
+static void _fetch_snapshots_async_thread(GTask *task,
+  gpointer source_object,
+  gpointer task_data,
+  GCancellable *cancellable) {
+GError *error = NULL;
+gboolean status;
+
+status = gvir_domain_fetch_snapshots(source_object,
+ GPOINTER_TO_UINT(task_data),
+ cancellable,
+ &error);
+if (status)
+g_task_return_boolean(task, TRUE);
+else
+g_task_return_error(task, error);
+}
+
+
+/**
+ *
+ * @dom: The domain
+ * @list_flags: bitwise-OR of #GVirDomainSnapshotListFlags
+ * @cancellable: (allow-none)(transfer-none): cancellation object
+ * @callback: (scope async): completion callback
+ * @user_data: (closure): opaque data for callback
+ */
+void gvir_domain_fetch_snapshots_async(GVirDomain *dom,
+   guint list_flags,
+   GCancellable *cancellable,
+   GAsyncReadyCallback callback,
+   gpointer user_data) {
+GTask *task;
+
+g_return_if_fail(GVIR_IS_DOMAIN(dom));
+g_return_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable));
+
+task = g_task_new(dom, cancellable, callback, user_data);
+g_task_set_task_data(task, GUINT_TO_POINTER(list_flags), NULL);
+g_task_run_in_thread(task, _fetch_snapshots_async_thread);
+g_object_unref(task);
+}
+
+
+/**
+ * gvir_domain_fetch_snapshots_finish:
+ * @dom: a #GVirDomain
+ * @res: (transfer none): async method result
+ *
+ * Returns: TRUE on success, FALSE otherwise.
+ */
+gboolean gvir_domain_fetch_snapshots_finish(GVirDomain *dom,
+GAsyncResult *res,
+GError **error) {
+g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
+g_return_val_if_fail(g_task_is_valid(res, dom), FALSE);
+
+return g_task_propagate_boolean(G_TASK(res), error);
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain.h 
b/libvirt-gobject/libvirt-gobject-domain.h
index 22870c1..9846375 100644
--- a/libvirt-gobject/libvirt-gobject-domain.h
+++ b/libvirt-gobject/libvirt-gobject-domain.h
@@ -370,6 +370,16 @@ gboolean gvir_domain_fetch_snapshots(GVirDomain *dom,
 
 GList *gvir_domain_get_snapshots(GVirDomain *dom);
 
+void gvir_domain_fetch_snapshots_async(GVirDomain *dom,
+   guint list_flags,
+   GCancellable *cancellable,
+   GAsyncReadyCallback callback,
+   gpointer user_data);
+
+gboolean gvir_domain_fetch_snapshots_finish(GVirDomain *dom,
+GAsyncResult *res,
+GError **error);
+
 
 G_END_DECLS
 
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index 28e547a..6aa8b86 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -237,6 +237,8 @@ LIBVIRT_GOBJECT_0.1.5 {
 LIBVIRT_GOBJECT_0.1.9 {
   global:
gvir_domain_fetch_snapshots;
+   gvir_domain_fetch_snapshots_async;
+   gvir_domain_fetch_snapshots_finish;
gvir_domain_get_snapshots;
gvir_domain_snapshot_delete;
gvir_domain_snapshot_list_flags_get_type;
-- 
2.0.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH v5 2/3] libvirt-gobject-domain: Add _get_snapshots

2014-07-09 Thread Timm Bäder
... which returns a GList of GVirDomainSnapshots, i.e. without any tree
structure or other relationship between the snapshots.
---
 libvirt-gobject/libvirt-gobject-domain.c | 21 +
 libvirt-gobject/libvirt-gobject-domain.h |  4 
 libvirt-gobject/libvirt-gobject.sym  |  1 +
 3 files changed, 26 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain.c 
b/libvirt-gobject/libvirt-gobject-domain.c
index adb5179..8f48c2e 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -1600,3 +1600,24 @@ cleanup:
 g_hash_table_unref (snap_table);
 return ret;
 }
+
+/**
+ * gvir_domain_get_snapshots:
+ * @dom: The domain
+ * Returns: (element-type LibvirtGObject.DomainSnapshot) (transfer full): A
+ * list of all the snapshots available for the given domain. The returned
+ * list should be freed with g_list_free(), after its elements have been
+ * unreffed with g_object_unref().
+ */
+GList *gvir_domain_get_snapshots(GVirDomain *dom)
+{
+GList *snapshots = NULL;
+g_return_val_if_fail(GVIR_IS_DOMAIN(dom), NULL);
+
+if (dom->priv->snapshots != NULL) {
+snapshots = g_hash_table_get_values(dom->priv->snapshots);
+g_list_foreach(snapshots, (GFunc)g_object_ref, NULL);
+}
+
+return snapshots;
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain.h 
b/libvirt-gobject/libvirt-gobject-domain.h
index 8c1a8e5..22870c1 100644
--- a/libvirt-gobject/libvirt-gobject-domain.h
+++ b/libvirt-gobject/libvirt-gobject-domain.h
@@ -367,6 +367,10 @@ gboolean gvir_domain_fetch_snapshots(GVirDomain *dom,
  guint list_flags,
  GCancellable *cancellable,
  GError **error);
+
+GList *gvir_domain_get_snapshots(GVirDomain *dom);
+
+
 G_END_DECLS
 
 #endif /* __LIBVIRT_GOBJECT_DOMAIN_H__ */
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index 781310f..28e547a 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -237,6 +237,7 @@ LIBVIRT_GOBJECT_0.1.5 {
 LIBVIRT_GOBJECT_0.1.9 {
   global:
gvir_domain_fetch_snapshots;
+   gvir_domain_get_snapshots;
gvir_domain_snapshot_delete;
gvir_domain_snapshot_list_flags_get_type;
 } LIBVIRT_GOBJECT_0.1.5;
-- 
2.0.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [libvirt-glib] [PATCH v4 3/3] GVirDomain: Add async version of _fetch_snapshots

2014-07-09 Thread Timm Bäder
On 07.07, Christophe Fergeau wrote:
> Hey,
> 
> On Mon, Jun 30, 2014 at 07:50:16PM +0200, Timm Bäder wrote:
> > ---
> >  libvirt-gobject/libvirt-gobject-domain.c | 60 
> > 
> >  libvirt-gobject/libvirt-gobject-domain.h | 10 ++
> >  libvirt-gobject/libvirt-gobject.sym  |  2 ++
> >  3 files changed, 72 insertions(+)
> > 
> > diff --git a/libvirt-gobject/libvirt-gobject-domain.c 
> > b/libvirt-gobject/libvirt-gobject-domain.c
> > index b12a4a0..6b53d25 100644
> > --- a/libvirt-gobject/libvirt-gobject-domain.c
> > +++ b/libvirt-gobject/libvirt-gobject-domain.c
> > @@ -1618,3 +1618,63 @@ GList *gvir_domain_get_snapshots(GVirDomain *dom)
> >  
> >  return snapshots;
> >  }
> > +
> > +
> > +
> > +static void _fetch_snapshots_async_thread(GTask *task,
> > +  gpointer source_object,
> > +  gpointer task_data,
> > +  GCancellable *cancellable) {
> > +GError *error = NULL;
> > +gboolean status;
> > +
> > +status = gvir_domain_fetch_snapshots(source_object,
> > + GPOINTER_TO_UINT(task_data),
> > + cancellable,
> > + &error);
> > +if (status)
> > +g_task_return_boolean(task, TRUE);
> > +else
> > +g_task_return_error(task, error);
> > +}
> > +
> > +
> > +/**
> > + *
> > + * @dom: The domain
> > + * @list_flags: bitwise-OR of #GVirDomainSnapshotListFlags
> > + * @cancellable: (allow-none)(transfer-none): cancellation object
> > + * @callback: (scope async): completion callback
> > + * @user_data: (closure): opaque data for callback
> > + */
> > +void gvir_domain_fetch_snapshots_async(GVirDomain *dom,
> > +   guint list_flags,
> > +   GCancellable *cancellable,
> > +   GAsyncReadyCallback callback,
> > +   gpointer user_data) {
> > +GTask *task;
> > +
> > +g_return_if_fail(GVIR_IS_DOMAIN(dom));
> > +g_return_if_fail((cancellable == NULL) || 
> > G_IS_CANCELLABLE(cancellable));
> > +
> > +task = g_task_new(dom, cancellable, callback, user_data);
> 
> GTask was introduced in glib 2.36, so configure.ac needs to be updated
> to reflect that. glib 2.36 was released in March 2013, and is available
> in RHEL7, so using this would be fine with me. Others may want to
> disagree though :)
> 
> > +g_task_set_task_data(task, GUINT_TO_POINTER(list_flags), NULL);
> > +g_task_run_in_thread(task, _fetch_snapshots_async_thread);
> 
> I'm a bit unclear as how the initial ref obtained through g_task_new()
> is handled. Have you checked it's correctly freed after _finish() has
> been called and that it's not leaked?

Ouch, I've been fooled by the example in the GTask documentation (which
was wrong), it does ineed have to be unreffed in the function that calls
g_task_run_in_thread (which will itself take its own ref).


> 
> Looks good otherwise.
> 
> Christophe



> --
> libvir-list mailing list
> libvir-list@redhat.com
> https://www.redhat.com/mailman/listinfo/libvir-list

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [libvirt-glib] [PATCH v4 2/3] libvirt-gobject-domain: Add _get_snapshots

2014-07-09 Thread Timm Bäder
On 07.07, Christophe Fergeau wrote:
> Hey,
> 
> On Mon, Jun 30, 2014 at 07:50:15PM +0200, Timm Bäder wrote:
> > ... which returns a GList of GVirDomainSnapshots, i.e. without any tree
> > structure or other relationship between the snapshots.
> 
> Looks good, ACK. Any plans to return the snapshots as a tree at some
> point? Or can the library user reconstruct this tree information from
> the current API?
> 
> Christophe

I don't really have plans on this (since I don't need it) but since
there's gvir_config_domain_snapshot_get_parent exists I guess it can be
done manually (although not very convenient...).

Timm

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH v4 3/3] GVirDomain: Add async version of _fetch_snapshots

2014-06-30 Thread Timm Bäder
---
 libvirt-gobject/libvirt-gobject-domain.c | 60 
 libvirt-gobject/libvirt-gobject-domain.h | 10 ++
 libvirt-gobject/libvirt-gobject.sym  |  2 ++
 3 files changed, 72 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain.c 
b/libvirt-gobject/libvirt-gobject-domain.c
index b12a4a0..6b53d25 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -1618,3 +1618,63 @@ GList *gvir_domain_get_snapshots(GVirDomain *dom)
 
 return snapshots;
 }
+
+
+
+static void _fetch_snapshots_async_thread(GTask *task,
+  gpointer source_object,
+  gpointer task_data,
+  GCancellable *cancellable) {
+GError *error = NULL;
+gboolean status;
+
+status = gvir_domain_fetch_snapshots(source_object,
+ GPOINTER_TO_UINT(task_data),
+ cancellable,
+ &error);
+if (status)
+g_task_return_boolean(task, TRUE);
+else
+g_task_return_error(task, error);
+}
+
+
+/**
+ *
+ * @dom: The domain
+ * @list_flags: bitwise-OR of #GVirDomainSnapshotListFlags
+ * @cancellable: (allow-none)(transfer-none): cancellation object
+ * @callback: (scope async): completion callback
+ * @user_data: (closure): opaque data for callback
+ */
+void gvir_domain_fetch_snapshots_async(GVirDomain *dom,
+   guint list_flags,
+   GCancellable *cancellable,
+   GAsyncReadyCallback callback,
+   gpointer user_data) {
+GTask *task;
+
+g_return_if_fail(GVIR_IS_DOMAIN(dom));
+g_return_if_fail((cancellable == NULL) || G_IS_CANCELLABLE(cancellable));
+
+task = g_task_new(dom, cancellable, callback, user_data);
+g_task_set_task_data(task, GUINT_TO_POINTER(list_flags), NULL);
+g_task_run_in_thread(task, _fetch_snapshots_async_thread);
+}
+
+
+/**
+ * gvir_domain_fetch_snapshots_finish:
+ * @dom: a #GVirDomain
+ * @res: (transfer none): async method result
+ *
+ * Returns: TRUE on success, FALSE otherwise.
+ */
+gboolean gvir_domain_fetch_snapshots_finish(GVirDomain *dom,
+GAsyncResult *res,
+GError **error) {
+g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
+g_return_val_if_fail(g_task_is_valid(res, dom), FALSE);
+
+return g_task_propagate_boolean(G_TASK(res), error);
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain.h 
b/libvirt-gobject/libvirt-gobject-domain.h
index 22870c1..9846375 100644
--- a/libvirt-gobject/libvirt-gobject-domain.h
+++ b/libvirt-gobject/libvirt-gobject-domain.h
@@ -370,6 +370,16 @@ gboolean gvir_domain_fetch_snapshots(GVirDomain *dom,
 
 GList *gvir_domain_get_snapshots(GVirDomain *dom);
 
+void gvir_domain_fetch_snapshots_async(GVirDomain *dom,
+   guint list_flags,
+   GCancellable *cancellable,
+   GAsyncReadyCallback callback,
+   gpointer user_data);
+
+gboolean gvir_domain_fetch_snapshots_finish(GVirDomain *dom,
+GAsyncResult *res,
+GError **error);
+
 
 G_END_DECLS
 
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index 28e547a..6aa8b86 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -237,6 +237,8 @@ LIBVIRT_GOBJECT_0.1.5 {
 LIBVIRT_GOBJECT_0.1.9 {
   global:
gvir_domain_fetch_snapshots;
+   gvir_domain_fetch_snapshots_async;
+   gvir_domain_fetch_snapshots_finish;
gvir_domain_get_snapshots;
gvir_domain_snapshot_delete;
gvir_domain_snapshot_list_flags_get_type;
-- 
2.0.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH v4 1/3] libvirt-gobject-domain: Add _fetch_snapshots

2014-06-30 Thread Timm Bäder
This function can be used to fetch the snapshots of a domain (according
to the given GVirDomainSnapshotListFlags) and save them in a
domain-internal GHashTable. A function to access them from outside will
be added in a later patch.
---
 libvirt-gobject/libvirt-gobject-domain.c | 83 
 libvirt-gobject/libvirt-gobject-domain.h | 37 ++
 libvirt-gobject/libvirt-gobject.sym  |  2 +
 3 files changed, 122 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain.c 
b/libvirt-gobject/libvirt-gobject-domain.c
index c6e30e5..180a206 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -38,6 +38,8 @@ struct _GVirDomainPrivate
 {
 virDomainPtr handle;
 gchar uuid[VIR_UUID_STRING_BUFLEN];
+GHashTable *snapshots;
+GMutex *lock;
 };
 
 G_DEFINE_TYPE(GVirDomain, gvir_domain, G_TYPE_OBJECT);
@@ -121,6 +123,11 @@ static void gvir_domain_finalize(GObject *object)
 
 g_debug("Finalize GVirDomain=%p", domain);
 
+if (priv->snapshots) {
+g_hash_table_unref(priv->snapshots);
+}
+g_mutex_free(priv->lock);
+
 virDomainFree(priv->handle);
 
 G_OBJECT_CLASS(gvir_domain_parent_class)->finalize(object);
@@ -237,6 +244,7 @@ static void gvir_domain_init(GVirDomain *domain)
 g_debug("Init GVirDomain=%p", domain);
 
 domain->priv = GVIR_DOMAIN_GET_PRIVATE(domain);
+domain->priv->lock = g_mutex_new();
 }
 
 typedef struct virDomain GVirDomainHandle;
@@ -1514,3 +1522,78 @@ gvir_domain_create_snapshot(GVirDomain *dom,
 g_free(custom_xml);
 return dom_snapshot;
 }
+
+
+
+/**
+ * gvir_domain_fetch_snapshots:
+ * @dom: The domain
+ * @list_flags: bitwise-OR of #GVirDomainSnapshotListFlags
+ * @cancellable: (allow-none)(transfer-none): cancellation object
+ * @error: (allow-none): Place-holder for error or NULL
+ *
+ * Returns: TRUE on success, FALSE otherwise.
+ */
+gboolean gvir_domain_fetch_snapshots(GVirDomain *dom,
+ guint list_flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+GVirDomainPrivate *priv;
+virDomainSnapshotPtr *snapshots = NULL;
+GVirDomainSnapshot *snap;
+GHashTable *snap_table;
+int n_snaps = 0;
+int i;
+gboolean ret = TRUE;
+
+g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
+g_return_val_if_fail((error == NULL) || (*error == NULL), FALSE);
+
+priv = dom->priv;
+
+snap_table = g_hash_table_new_full(g_str_hash,
+   g_str_equal,
+   NULL,
+   g_object_unref);
+
+
+n_snaps = virDomainListAllSnapshots(priv->handle, &snapshots, list_flags);
+
+if (g_cancellable_set_error_if_cancelled(cancellable, error)) {
+ret = FALSE;
+goto cleanup;
+}
+
+if (n_snaps < 0) {
+gvir_set_error(error, GVIR_DOMAIN_ERROR, 0,
+   "Unable to fetch snapshots of %s",
+   gvir_domain_get_name(dom));
+ret = FALSE;
+goto cleanup;
+}
+
+for (i = 0; i < n_snaps; i ++) {
+if (g_cancellable_set_error_if_cancelled(cancellable, error)) {
+ret = FALSE;
+goto cleanup;
+}
+snap = GVIR_DOMAIN_SNAPSHOT(g_object_new(GVIR_TYPE_DOMAIN_SNAPSHOT,
+ "handle", snapshots[i],
+ NULL));
+g_hash_table_insert(snap_table,
+(gpointer)gvir_domain_snapshot_get_name(snap),
+snap);
+}
+
+
+g_mutex_lock(priv->lock);
+if (priv->snapshots != NULL)
+g_hash_table_unref(priv->snapshots);
+priv->snapshots = snap_table;
+g_mutex_unlock(priv->lock);
+
+cleanup:
+free(snapshots);
+return ret;
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain.h 
b/libvirt-gobject/libvirt-gobject-domain.h
index 38d3458..8c1a8e5 100644
--- a/libvirt-gobject/libvirt-gobject-domain.h
+++ b/libvirt-gobject/libvirt-gobject-domain.h
@@ -183,6 +183,39 @@ typedef enum {
 GVIR_DOMAIN_REBOOT_GUEST_AGENT= VIR_DOMAIN_REBOOT_GUEST_AGENT,
 } GVirDomainRebootFlags;
 
+/**
+ * GVirDomainSnapshotListFlags:
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_ALL: List all snapshots
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS: List all descendants, not just
+ * children, when listing a snapshot.
+ * For historical reasons, groups do 
not use contiguous bits.
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_ROOTS: Filter by snapshots with no parents, when 
listing a domain
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_METADATA: Filter by snapshots which have metadata
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_LEAVES: Filter by snapshots with no children
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_NO_LEAVES: Filter by snapshots that have children

[libvirt] [libvirt-glib] [PATCH v4 0/3] Add API to fetch snapshots

2014-06-30 Thread Timm Bäder

Argh, sorry about the earlier version, die last mail didn't get through
the smtp server.

This patchset replaces the old one and includes
gvir_domain_fetch_snapshots_async as well as a version of
gvir_domain_fetch_snapshots that works with it.


Timm Bäder (3):
  libvirt-gobject-domain: Add _fetch_snapshots
  libvirt-gobject-domain: Add _get_snapshots
  GVirDomain: Add async version of _fetch_snapshots

 libvirt-gobject/libvirt-gobject-domain.c | 164 +++
 libvirt-gobject/libvirt-gobject-domain.h |  51 ++
 libvirt-gobject/libvirt-gobject.sym  |   5 +
 3 files changed, 220 insertions(+)

-- 
2.0.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [libvirt-glib] [PATCH v4 2/3] libvirt-gobject-domain: Add _get_snapshots

2014-06-30 Thread Timm Bäder
... which returns a GList of GVirDomainSnapshots, i.e. without any tree
structure or other relationship between the snapshots.
---
 libvirt-gobject/libvirt-gobject-domain.c | 21 +
 libvirt-gobject/libvirt-gobject-domain.h |  4 
 libvirt-gobject/libvirt-gobject.sym  |  1 +
 3 files changed, 26 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain.c 
b/libvirt-gobject/libvirt-gobject-domain.c
index 180a206..b12a4a0 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -1597,3 +1597,24 @@ cleanup:
 free(snapshots);
 return ret;
 }
+
+/**
+ * gvir_domain_get_snapshots:
+ * @dom: The domain
+ * Returns: (element-type LibvirtGObject.DomainSnapshot) (transfer full): A
+ * list of all the snapshots available for the given domain. The returned
+ * list should be freed with g_list_free(), after its elements have been
+ * unreffed with g_object_unref().
+ */
+GList *gvir_domain_get_snapshots(GVirDomain *dom)
+{
+GList *snapshots = NULL;
+g_return_val_if_fail(GVIR_IS_DOMAIN(dom), NULL);
+
+if (dom->priv->snapshots != NULL) {
+snapshots = g_hash_table_get_values(dom->priv->snapshots);
+g_list_foreach(snapshots, (GFunc)g_object_ref, NULL);
+}
+
+return snapshots;
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain.h 
b/libvirt-gobject/libvirt-gobject-domain.h
index 8c1a8e5..22870c1 100644
--- a/libvirt-gobject/libvirt-gobject-domain.h
+++ b/libvirt-gobject/libvirt-gobject-domain.h
@@ -367,6 +367,10 @@ gboolean gvir_domain_fetch_snapshots(GVirDomain *dom,
  guint list_flags,
  GCancellable *cancellable,
  GError **error);
+
+GList *gvir_domain_get_snapshots(GVirDomain *dom);
+
+
 G_END_DECLS
 
 #endif /* __LIBVIRT_GOBJECT_DOMAIN_H__ */
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index 781310f..28e547a 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -237,6 +237,7 @@ LIBVIRT_GOBJECT_0.1.5 {
 LIBVIRT_GOBJECT_0.1.9 {
   global:
gvir_domain_fetch_snapshots;
+   gvir_domain_get_snapshots;
gvir_domain_snapshot_delete;
gvir_domain_snapshot_list_flags_get_type;
 } LIBVIRT_GOBJECT_0.1.5;
-- 
2.0.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH v3 2/3] libvirt-gobject-domain: Add _get_snapshots

2014-06-30 Thread Timm Bäder
... which returns a GList of GVirDomainSnapshots, i.e. without any tree
structure or other relationship between the snapshots.
---
 libvirt-gobject/libvirt-gobject-domain.c | 21 +
 libvirt-gobject/libvirt-gobject-domain.h |  4 
 libvirt-gobject/libvirt-gobject.sym  |  1 +
 3 files changed, 26 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain.c 
b/libvirt-gobject/libvirt-gobject-domain.c
index 180a206..b12a4a0 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -1597,3 +1597,24 @@ cleanup:
 free(snapshots);
 return ret;
 }
+
+/**
+ * gvir_domain_get_snapshots:
+ * @dom: The domain
+ * Returns: (element-type LibvirtGObject.DomainSnapshot) (transfer full): A
+ * list of all the snapshots available for the given domain. The returned
+ * list should be freed with g_list_free(), after its elements have been
+ * unreffed with g_object_unref().
+ */
+GList *gvir_domain_get_snapshots(GVirDomain *dom)
+{
+GList *snapshots = NULL;
+g_return_val_if_fail(GVIR_IS_DOMAIN(dom), NULL);
+
+if (dom->priv->snapshots != NULL) {
+snapshots = g_hash_table_get_values(dom->priv->snapshots);
+g_list_foreach(snapshots, (GFunc)g_object_ref, NULL);
+}
+
+return snapshots;
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain.h 
b/libvirt-gobject/libvirt-gobject-domain.h
index 8c1a8e5..22870c1 100644
--- a/libvirt-gobject/libvirt-gobject-domain.h
+++ b/libvirt-gobject/libvirt-gobject-domain.h
@@ -367,6 +367,10 @@ gboolean gvir_domain_fetch_snapshots(GVirDomain *dom,
  guint list_flags,
  GCancellable *cancellable,
  GError **error);
+
+GList *gvir_domain_get_snapshots(GVirDomain *dom);
+
+
 G_END_DECLS
 
 #endif /* __LIBVIRT_GOBJECT_DOMAIN_H__ */
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index 781310f..28e547a 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -237,6 +237,7 @@ LIBVIRT_GOBJECT_0.1.5 {
 LIBVIRT_GOBJECT_0.1.9 {
   global:
gvir_domain_fetch_snapshots;
+   gvir_domain_get_snapshots;
gvir_domain_snapshot_delete;
gvir_domain_snapshot_list_flags_get_type;
 } LIBVIRT_GOBJECT_0.1.5;
-- 
2.0.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH v3 1/3] libvirt-gobject-domain: Add _fetch_snapshots

2014-06-30 Thread Timm Bäder
This function can be used to fetch the snapshots of a domain (according
to the given GVirDomainSnapshotListFlags) and save them in a
domain-internal GHashTable. A function to access them from outside will
be added in a later patch.
---
 libvirt-gobject/libvirt-gobject-domain.c | 83 
 libvirt-gobject/libvirt-gobject-domain.h | 37 ++
 libvirt-gobject/libvirt-gobject.sym  |  2 +
 3 files changed, 122 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain.c 
b/libvirt-gobject/libvirt-gobject-domain.c
index c6e30e5..180a206 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -38,6 +38,8 @@ struct _GVirDomainPrivate
 {
 virDomainPtr handle;
 gchar uuid[VIR_UUID_STRING_BUFLEN];
+GHashTable *snapshots;
+GMutex *lock;
 };
 
 G_DEFINE_TYPE(GVirDomain, gvir_domain, G_TYPE_OBJECT);
@@ -121,6 +123,11 @@ static void gvir_domain_finalize(GObject *object)
 
 g_debug("Finalize GVirDomain=%p", domain);
 
+if (priv->snapshots) {
+g_hash_table_unref(priv->snapshots);
+}
+g_mutex_free(priv->lock);
+
 virDomainFree(priv->handle);
 
 G_OBJECT_CLASS(gvir_domain_parent_class)->finalize(object);
@@ -237,6 +244,7 @@ static void gvir_domain_init(GVirDomain *domain)
 g_debug("Init GVirDomain=%p", domain);
 
 domain->priv = GVIR_DOMAIN_GET_PRIVATE(domain);
+domain->priv->lock = g_mutex_new();
 }
 
 typedef struct virDomain GVirDomainHandle;
@@ -1514,3 +1522,78 @@ gvir_domain_create_snapshot(GVirDomain *dom,
 g_free(custom_xml);
 return dom_snapshot;
 }
+
+
+
+/**
+ * gvir_domain_fetch_snapshots:
+ * @dom: The domain
+ * @list_flags: bitwise-OR of #GVirDomainSnapshotListFlags
+ * @cancellable: (allow-none)(transfer-none): cancellation object
+ * @error: (allow-none): Place-holder for error or NULL
+ *
+ * Returns: TRUE on success, FALSE otherwise.
+ */
+gboolean gvir_domain_fetch_snapshots(GVirDomain *dom,
+ guint list_flags,
+ GCancellable *cancellable,
+ GError **error)
+{
+GVirDomainPrivate *priv;
+virDomainSnapshotPtr *snapshots = NULL;
+GVirDomainSnapshot *snap;
+GHashTable *snap_table;
+int n_snaps = 0;
+int i;
+gboolean ret = TRUE;
+
+g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
+g_return_val_if_fail((error == NULL) || (*error == NULL), FALSE);
+
+priv = dom->priv;
+
+snap_table = g_hash_table_new_full(g_str_hash,
+   g_str_equal,
+   NULL,
+   g_object_unref);
+
+
+n_snaps = virDomainListAllSnapshots(priv->handle, &snapshots, list_flags);
+
+if (g_cancellable_set_error_if_cancelled(cancellable, error)) {
+ret = FALSE;
+goto cleanup;
+}
+
+if (n_snaps < 0) {
+gvir_set_error(error, GVIR_DOMAIN_ERROR, 0,
+   "Unable to fetch snapshots of %s",
+   gvir_domain_get_name(dom));
+ret = FALSE;
+goto cleanup;
+}
+
+for (i = 0; i < n_snaps; i ++) {
+if (g_cancellable_set_error_if_cancelled(cancellable, error)) {
+ret = FALSE;
+goto cleanup;
+}
+snap = GVIR_DOMAIN_SNAPSHOT(g_object_new(GVIR_TYPE_DOMAIN_SNAPSHOT,
+ "handle", snapshots[i],
+ NULL));
+g_hash_table_insert(snap_table,
+(gpointer)gvir_domain_snapshot_get_name(snap),
+snap);
+}
+
+
+g_mutex_lock(priv->lock);
+if (priv->snapshots != NULL)
+g_hash_table_unref(priv->snapshots);
+priv->snapshots = snap_table;
+g_mutex_unlock(priv->lock);
+
+cleanup:
+free(snapshots);
+return ret;
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain.h 
b/libvirt-gobject/libvirt-gobject-domain.h
index 38d3458..8c1a8e5 100644
--- a/libvirt-gobject/libvirt-gobject-domain.h
+++ b/libvirt-gobject/libvirt-gobject-domain.h
@@ -183,6 +183,39 @@ typedef enum {
 GVIR_DOMAIN_REBOOT_GUEST_AGENT= VIR_DOMAIN_REBOOT_GUEST_AGENT,
 } GVirDomainRebootFlags;
 
+/**
+ * GVirDomainSnapshotListFlags:
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_ALL: List all snapshots
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS: List all descendants, not just
+ * children, when listing a snapshot.
+ * For historical reasons, groups do 
not use contiguous bits.
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_ROOTS: Filter by snapshots with no parents, when 
listing a domain
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_METADATA: Filter by snapshots which have metadata
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_LEAVES: Filter by snapshots with no children
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_NO_LEAVES: Filter by snapshots that have children

[libvirt] [libvirt-glib] [PATCH v3 0/3] Add API to fetch snapshots

2014-06-30 Thread Timm Bäder

This patchset replaces the old one and includes
gvir_domain_fetch_snapshtos_async as well as a version of 
gvir_domain_fetch_snapshots that works with it.

Timm Bäder (3):
  libvirt-gobject-domain: Add _fetch_snapshots
  libvirt-gobject-domain: Add _get_snapshots
  GVirDomain: Add async version of _fetch_snapshots

 libvirt-gobject/libvirt-gobject-domain.c | 164 +++
 libvirt-gobject/libvirt-gobject-domain.h |  51 ++
 libvirt-gobject/libvirt-gobject.sym  |   5 +
 3 files changed, 220 insertions(+)

-- 
2.0.1

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [libvirt-glib] [PATCHv2 2/2] libvirt-gobject-domain: Add _get_snapshots

2014-06-27 Thread Timm Bäder
... which returns a GList of GVirDomainSnapshots, i.e. without any tree
structure or other relationship between the snapshots.
---
 libvirt-gobject/libvirt-gobject-domain.c | 21 +
 libvirt-gobject/libvirt-gobject-domain.h |  4 
 libvirt-gobject/libvirt-gobject.sym  |  1 +
 3 files changed, 26 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain.c 
b/libvirt-gobject/libvirt-gobject-domain.c
index a527d4e..e4c99ed 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -1575,3 +1575,24 @@ gboolean gvir_domain_fetch_snapshots(GVirDomain *dom,
 free(snapshots);
 return TRUE;
 }
+
+/**
+ * gvir_domain_get_snapshots:
+ * @dom: The domain
+ * Returns: (element-type LibvirtGObject.DomainSnapshot) (transfer full): A
+ * list of all the snapshots available for the given domain. The returned
+ * list should be freed with g_list_free(), after its elements have been
+ * unreffed with g_object_unref().
+ */
+GList *gvir_domain_get_snapshots(GVirDomain *dom)
+{
+GList *snapshots = NULL;
+g_return_val_if_fail(GVIR_IS_DOMAIN(dom), NULL);
+
+if (dom->priv->snapshots != NULL) {
+snapshots = g_hash_table_get_values(dom->priv->snapshots);
+g_list_foreach(snapshots, (GFunc)g_object_ref, NULL);
+}
+
+return snapshots;
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain.h 
b/libvirt-gobject/libvirt-gobject-domain.h
index fb33e2b..acea7c2 100644
--- a/libvirt-gobject/libvirt-gobject-domain.h
+++ b/libvirt-gobject/libvirt-gobject-domain.h
@@ -366,6 +366,10 @@ gvir_domain_create_snapshot(GVirDomain *dom,
 gboolean gvir_domain_fetch_snapshots(GVirDomain *dom,
  guint flags,
  GError **error);
+
+GList *gvir_domain_get_snapshots(GVirDomain *dom);
+
+
 G_END_DECLS
 
 #endif /* __LIBVIRT_GOBJECT_DOMAIN_H__ */
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index 781310f..28e547a 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -237,6 +237,7 @@ LIBVIRT_GOBJECT_0.1.5 {
 LIBVIRT_GOBJECT_0.1.9 {
   global:
gvir_domain_fetch_snapshots;
+   gvir_domain_get_snapshots;
gvir_domain_snapshot_delete;
gvir_domain_snapshot_list_flags_get_type;
 } LIBVIRT_GOBJECT_0.1.5;
-- 
2.0.0

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCHv2 1/2] libvirt-gobject-domain: Add _fetch_snapshots

2014-06-27 Thread Timm Bäder
This function can be used to fetch the snapshots of a domain (according
to the given GVirDomainSnapshotListFlags) and save them in a
domain-internal GHashTable. A function to access them from outside will
be added in a later patch.
---
 libvirt-gobject/libvirt-gobject-domain.c | 61 
 libvirt-gobject/libvirt-gobject-domain.h | 36 +++
 libvirt-gobject/libvirt-gobject.sym  |  2 ++
 3 files changed, 99 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain.c 
b/libvirt-gobject/libvirt-gobject-domain.c
index c6e30e5..a527d4e 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -38,6 +38,7 @@ struct _GVirDomainPrivate
 {
 virDomainPtr handle;
 gchar uuid[VIR_UUID_STRING_BUFLEN];
+GHashTable *snapshots;
 };
 
 G_DEFINE_TYPE(GVirDomain, gvir_domain, G_TYPE_OBJECT);
@@ -121,6 +122,10 @@ static void gvir_domain_finalize(GObject *object)
 
 g_debug("Finalize GVirDomain=%p", domain);
 
+if (priv->snapshots) {
+g_hash_table_unref (priv->snapshots);
+}
+
 virDomainFree(priv->handle);
 
 G_OBJECT_CLASS(gvir_domain_parent_class)->finalize(object);
@@ -1514,3 +1519,59 @@ gvir_domain_create_snapshot(GVirDomain *dom,
 g_free(custom_xml);
 return dom_snapshot;
 }
+
+
+
+/**
+ * gvir_domain_fetch_snapshots:
+ * @dom: The domain
+ * @list_flags: bitwise-OR of #GVirDomainSnapshotListFlags
+ * @error: (allow-none): Place-holder for error or NULL
+ *
+ * Returns: TRUE on success, FALSE otherwise.
+ */
+gboolean gvir_domain_fetch_snapshots(GVirDomain *dom,
+ guint list_flags,
+ GError **error)
+{
+GVirDomainPrivate *priv;
+virDomainSnapshotPtr *snapshots = NULL;
+GVirDomainSnapshot *snap;
+int n_snaps = 0;
+int i;
+
+g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
+g_return_val_if_fail((error == NULL) || (*error == NULL), FALSE);
+
+priv = dom->priv;
+
+if (priv->snapshots != NULL) {
+g_hash_table_unref (priv->snapshots);
+}
+
+priv->snapshots = g_hash_table_new_full(g_str_hash,
+g_str_equal,
+NULL,
+g_object_unref);
+
+
+n_snaps = virDomainListAllSnapshots(priv->handle, &snapshots, list_flags);
+
+if (n_snaps < 0) {
+gvir_set_error(error, GVIR_DOMAIN_ERROR, 0,
+   "Unable to fetch snapshots of %s",
+   gvir_domain_get_name (dom));
+return FALSE;
+}
+
+for (i = 0; i < n_snaps; i ++) {
+snap = GVIR_DOMAIN_SNAPSHOT(g_object_new(GVIR_TYPE_DOMAIN_SNAPSHOT,
+ "handle", snapshots[i],
+ NULL));
+g_hash_table_insert(priv->snapshots,
+(gpointer)gvir_domain_snapshot_get_name(snap),
+snap);
+}
+free(snapshots);
+return TRUE;
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain.h 
b/libvirt-gobject/libvirt-gobject-domain.h
index 38d3458..fb33e2b 100644
--- a/libvirt-gobject/libvirt-gobject-domain.h
+++ b/libvirt-gobject/libvirt-gobject-domain.h
@@ -183,6 +183,39 @@ typedef enum {
 GVIR_DOMAIN_REBOOT_GUEST_AGENT= VIR_DOMAIN_REBOOT_GUEST_AGENT,
 } GVirDomainRebootFlags;
 
+/**
+ * GVirDomainSnapshotListFlags:
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_ALL: List all snapshots
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS: List all descendants, not just
+ * children, when listing a snapshot.
+ * For historical reasons, groups do 
not use contiguous bits.
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_ROOTS: Filter by snapshots with no parents, when 
listing a domain
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_METADATA: Filter by snapshots which have metadata
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_LEAVES: Filter by snapshots with no children
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_NO_LEAVES: Filter by snapshots that have children
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_NO_METADATA: Filter by snapshots with no metadata
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_INACTIVE: Filter by snapshots taken while guest 
was shut off
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_ACTIVE: Filter by snapshots taken while guest 
was active, and with memory state
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_DISK_ONLY: Filter by snapshots taken while guest 
was active, but without memory state
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_INTERNAL: Filter by snapshots stored internal to 
disk images
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_EXTERNAL: Filter by snapshots that use files 
external to disk images
+ */
+typedef enum {
+GVIR_DOMAIN_SNAPSHOT_LIST_ALL = 0,
+GVIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS = 
VIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS,
+GVIR_DOMAIN_SNAPSHOT_LIST_ROOTS   = VIR_DOMAIN_SNAPSHOT_LIST_ROOTS,
+GVIR_DOMAIN_S

[libvirt] [libvirt-glib] [PATCH 0/2] Add API to fetch the snapshots of a GVirDomain

2014-06-23 Thread Timm Bäder
The following two patches add gvir_domain_fetch_snapshots which uses
virDomainListAllSnapshots to fetch snapshots from the virDomain
(using the given GVirDomainSnapshotListFlags) and
gvir_domain_get_snapshots which returns a GList of containing all of
the snapshots last fetched.

Timm Bäder (2):
  libvirt-gobject-domain: Add _fetch_snapshots
  libvirt-gobject-domain: Add _get_snapshots

 libvirt-gobject/libvirt-gobject-domain.c | 80 
 libvirt-gobject/libvirt-gobject-domain.h | 40 
 libvirt-gobject/libvirt-gobject.sym  |  3 ++
 3 files changed, 123 insertions(+)

-- 
2.0.0

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list

[libvirt] [libvirt-glib] [PATCH 1/2] libvirt-gobject-domain: Add _fetch_snapshots

2014-06-23 Thread Timm Bäder
This function can be used to fetch the snapshots of a domain (according
to the given GVirDomainSnapshotListFlags) and save them in a
domain-internal GHashTable. A function to access them from outside will
be added in a later patch.
---
 libvirt-gobject/libvirt-gobject-domain.c | 59 
 libvirt-gobject/libvirt-gobject-domain.h | 36 +++
 libvirt-gobject/libvirt-gobject.sym  |  2 ++
 3 files changed, 97 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain.c 
b/libvirt-gobject/libvirt-gobject-domain.c
index c6e30e5..f6b5837 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -38,6 +38,7 @@ struct _GVirDomainPrivate
 {
 virDomainPtr handle;
 gchar uuid[VIR_UUID_STRING_BUFLEN];
+GHashTable *snapshots;
 };
 
 G_DEFINE_TYPE(GVirDomain, gvir_domain, G_TYPE_OBJECT);
@@ -121,6 +122,8 @@ static void gvir_domain_finalize(GObject *object)
 
 g_debug("Finalize GVirDomain=%p", domain);
 
+g_hash_table_unref (priv->snapshots);
+
 virDomainFree(priv->handle);
 
 G_OBJECT_CLASS(gvir_domain_parent_class)->finalize(object);
@@ -1514,3 +1517,59 @@ gvir_domain_create_snapshot(GVirDomain *dom,
 g_free(custom_xml);
 return dom_snapshot;
 }
+
+
+
+/**
+ * gvir_domain_fetch_snapshots:
+ * @dom: The domain
+ * @list_flags: bitwise-OR of #GVirDomainSnapshotListFlags
+ * @error: (allow-none): Place-holder for error or NULL
+ *
+ * Returns: TRUE on success, FALSE otherwise.
+ */
+gboolean gvir_domain_fetch_snapshots(GVirDomain *dom,
+ guint list_flags,
+ GError **error)
+{
+GVirDomainPrivate *priv;
+virDomainSnapshotPtr *snapshots = NULL;
+GVirDomainSnapshot *snap;
+int n_snaps = 0;
+int i;
+
+g_return_val_if_fail(GVIR_IS_DOMAIN(dom), FALSE);
+g_return_val_if_fail((error == NULL) || (*error == NULL), FALSE);
+
+priv = dom->priv;
+
+if (priv->snapshots != NULL) {
+g_hash_table_destroy (priv->snapshots);
+}
+
+priv->snapshots = g_hash_table_new_full(g_str_hash,
+g_str_equal,
+g_free,
+g_object_unref);
+
+
+n_snaps = virDomainListAllSnapshots(priv->handle, &snapshots, list_flags);
+
+if (n_snaps < 0) {
+gvir_set_error(error, GVIR_DOMAIN_ERROR, 0,
+   "Unable to fetch snapshots of %s",
+   gvir_domain_get_name (dom));
+return FALSE;
+}
+
+for (i = 0; i < n_snaps; i ++) {
+snap = GVIR_DOMAIN_SNAPSHOT(g_object_new(GVIR_TYPE_DOMAIN_SNAPSHOT,
+ "handle", snapshots[i],
+ NULL));
+g_hash_table_insert(priv->snapshots,
+(gpointer)gvir_domain_snapshot_get_name(snap),
+snap);
+}
+g_free(snapshots);
+return TRUE;
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain.h 
b/libvirt-gobject/libvirt-gobject-domain.h
index 38d3458..fb33e2b 100644
--- a/libvirt-gobject/libvirt-gobject-domain.h
+++ b/libvirt-gobject/libvirt-gobject-domain.h
@@ -183,6 +183,39 @@ typedef enum {
 GVIR_DOMAIN_REBOOT_GUEST_AGENT= VIR_DOMAIN_REBOOT_GUEST_AGENT,
 } GVirDomainRebootFlags;
 
+/**
+ * GVirDomainSnapshotListFlags:
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_ALL: List all snapshots
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS: List all descendants, not just
+ * children, when listing a snapshot.
+ * For historical reasons, groups do 
not use contiguous bits.
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_ROOTS: Filter by snapshots with no parents, when 
listing a domain
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_METADATA: Filter by snapshots which have metadata
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_LEAVES: Filter by snapshots with no children
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_NO_LEAVES: Filter by snapshots that have children
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_NO_METADATA: Filter by snapshots with no metadata
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_INACTIVE: Filter by snapshots taken while guest 
was shut off
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_ACTIVE: Filter by snapshots taken while guest 
was active, and with memory state
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_DISK_ONLY: Filter by snapshots taken while guest 
was active, but without memory state
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_INTERNAL: Filter by snapshots stored internal to 
disk images
+ * @GVIR_DOMAIN_SNAPSHOT_LIST_EXTERNAL: Filter by snapshots that use files 
external to disk images
+ */
+typedef enum {
+GVIR_DOMAIN_SNAPSHOT_LIST_ALL = 0,
+GVIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS = 
VIR_DOMAIN_SNAPSHOT_LIST_DESCENDANTS,
+GVIR_DOMAIN_SNAPSHOT_LIST_ROOTS   = VIR_DOMAIN_SNAPSHOT_LIST_ROOTS,
+GVIR_DOMAIN_SNAPSHOT_LIST_METADATA= VIR_DOM

[libvirt] [libvirt-glib] [PATCH 2/2] libvirt-gobject-domain: Add _get_snapshots

2014-06-23 Thread Timm Bäder
... which returns a GList of GVirDomainSnapshots, i.e. without any tree
structure or other relationship between the snapshots.
---
 libvirt-gobject/libvirt-gobject-domain.c | 21 +
 libvirt-gobject/libvirt-gobject-domain.h |  4 
 libvirt-gobject/libvirt-gobject.sym  |  1 +
 3 files changed, 26 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain.c 
b/libvirt-gobject/libvirt-gobject-domain.c
index f6b5837..2da99df 100644
--- a/libvirt-gobject/libvirt-gobject-domain.c
+++ b/libvirt-gobject/libvirt-gobject-domain.c
@@ -1573,3 +1573,24 @@ gboolean gvir_domain_fetch_snapshots(GVirDomain *dom,
 g_free(snapshots);
 return TRUE;
 }
+
+/**
+ * gvir_domain_get_snapshots:
+ * @dom: The domain
+ * Returns: (element-type LibvirtGObject.DomainSnapshot) (transfer full): A 
list of
+ * all the snapshots available for the given domain. The returned list
+ * should be freed with g_list_free(), after its elements have been unreffed
+ * with g_object_unref().
+ */
+GList *gvir_domain_get_snapshots(GVirDomain *dom)
+{
+GList *snapshots = NULL;
+g_return_val_if_fail(GVIR_IS_DOMAIN(dom), NULL);
+
+if (dom->priv->snapshots != NULL) {
+snapshots = g_hash_table_get_values(dom->priv->snapshots);
+g_list_foreach(snapshots, (GFunc)g_object_ref, NULL);
+}
+
+return snapshots;
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain.h 
b/libvirt-gobject/libvirt-gobject-domain.h
index fb33e2b..acea7c2 100644
--- a/libvirt-gobject/libvirt-gobject-domain.h
+++ b/libvirt-gobject/libvirt-gobject-domain.h
@@ -366,6 +366,10 @@ gvir_domain_create_snapshot(GVirDomain *dom,
 gboolean gvir_domain_fetch_snapshots(GVirDomain *dom,
  guint flags,
  GError **error);
+
+GList *gvir_domain_get_snapshots(GVirDomain *dom);
+
+
 G_END_DECLS
 
 #endif /* __LIBVIRT_GOBJECT_DOMAIN_H__ */
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index 781310f..28e547a 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -237,6 +237,7 @@ LIBVIRT_GOBJECT_0.1.5 {
 LIBVIRT_GOBJECT_0.1.9 {
   global:
gvir_domain_fetch_snapshots;
+   gvir_domain_get_snapshots;
gvir_domain_snapshot_delete;
gvir_domain_snapshot_list_flags_get_type;
 } LIBVIRT_GOBJECT_0.1.5;
-- 
2.0.0

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH v3] GVirDomainSnapshot: Add gvir_domain_snapshot_delete

2014-06-02 Thread Timm Bäder
---
 libvirt-gobject/libvirt-gobject-domain-snapshot.c | 29 +++
 libvirt-gobject/libvirt-gobject-domain-snapshot.h | 16 +
 libvirt-gobject/libvirt-gobject.sym   |  6 +
 3 files changed, 51 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.c 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
index fcf70ed..f835b58 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.c
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
@@ -205,3 +205,32 @@ GVirConfigDomainSnapshot *gvir_domain_snapshot_get_config
 free(xml);
 return conf;
 }
+
+/**
+ * gvir_domain_snapshot_delete:
+ * @snapshot: The domain snapshot
+ * @flags: Bitwise or of #GVirDomainSnapshotDeleteFlags
+ * @error: (allow-none): Place-holder for error or NULL
+ *
+ * Returns: TRUE on success, FALSE otherwise
+ */
+gboolean gvir_domain_snapshot_delete (GVirDomainSnapshot *snapshot,
+  guint flags,
+  GError **error)
+{
+GVirDomainSnapshotPrivate *priv;
+int status;
+
+g_return_if_fail(GVIR_IS_DOMAIN_SNAPSHOT (snapshot));
+g_return_if_fail(error == NULL || *error == NULL);
+
+priv = snapshot->priv;
+status = virDomainSnapshotDelete(priv->handle, flags);
+if (status < 0) {
+gvir_set_error(error, GVIR_DOMAIN_SNAPSHOT_ERROR, 0,
+   "Unable to delete snapshot `%s'",
+   gvir_domain_snapshot_get_name(snapshot));
+return FALSE;
+}
+return TRUE;
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.h 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
index 5bd827c..b3ebe7f 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.h
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
@@ -58,6 +58,18 @@ struct _GVirDomainSnapshotClass
 gpointer padding[20];
 };
 
+/**
+ * GVirDomainSnapshotDeleteFlags:
+ * @GVIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN: Also delete children
+ * @GVIR_DOMAIN_SNAPSHOT_DELETE_METADATA_ONLY: Delete just metadata
+ * @GVIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN_ONLY: Delete just children
+ */
+typedef enum {
+  GVIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN = 1,
+  GVIR_DOMAIN_SNAPSHOT_DELETE_METADATA_ONLY = 2,
+  GVIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN_ONLY = 4
+} GVirDomainSnapshotDeleteFlags;
+
 
 GType gvir_domain_snapshot_get_type(void);
 GType gvir_domain_snapshot_handle_get_type(void);
@@ -69,6 +81,10 @@ GVirConfigDomainSnapshot *gvir_domain_snapshot_get_config
  guint flags,
  GError **err);
 
+gboolean gvir_domain_snapshot_delete (GVirDomainSnapshot *snapshot,
+  guint flags,
+  GError **error);
+
 G_END_DECLS
 
 #endif /* __LIBVIRT_GOBJECT_DOMAIN_SNAPSHOT_H__ */
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index f2419ac..232e63b 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -234,4 +234,10 @@ LIBVIRT_GOBJECT_0.1.5 {
gvir_connection_open_read_only_finish;
 } LIBVIRT_GOBJECT_0.1.4;
 
+LIBVIRT_GOBJECT_0.1.9 {
+  global:
+  gvir_domain_snapshot_delete_flags_get_type;
+  gvir_domain_snapshot_delete;
+} LIBVIRT_GOBJECT_0.1.5;
+
 #  define new API here using predicted next version number 
-- 
2.0.0

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH v2] GVirDomainSnapshot: Add gvir_domain_snapshot_delete

2014-06-01 Thread Timm Bäder
---

Whoops, totally forgot about the delete flags in the first version,
sorry.

As for the underline in domain_snapshot, I took that from
gvir_domain_snapshot_get_config so I don't really know what's the
correct version.

Since this is using gvir_domain_snapshot_get_name now, the patch
removing the #if 0's in libvirt-gobject-domain-snapshot.c is needed.

 libvirt-gobject/libvirt-gobject-domain-snapshot.c | 25 +++
 libvirt-gobject/libvirt-gobject-domain-snapshot.h | 16 +++
 libvirt-gobject/libvirt-gobject.sym   |  6 ++
 3 files changed, 47 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.c 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
index fcf70ed..aa0504d 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.c
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
@@ -205,3 +205,28 @@ GVirConfigDomainSnapshot *gvir_domain_snapshot_get_config
 free(xml);
 return conf;
 }
+
+/**
+ * gvir_domain_snapshot_delete:
+ * @snapshot: the domain snapshot
+ * @flags: Bitwise or of #GVirDomainSnapshotDeleteFlags
+ * @error: (allow-none): Place-holder for error or NULL
+ */
+void gvir_domain_snapshot_delete (GVirDomainSnapshot *snapshot,
+  GVirDomainSnapshotDeleteFlags flags,
+  GError **error)
+{
+GVirDomainSnapshotPrivate *priv;
+int status;
+
+g_return_if_fail(GVIR_IS_DOMAIN_SNAPSHOT (snapshot));
+g_return_if_fail(error == NULL || *error == NULL);
+
+priv = snapshot->priv;
+status = virDomainSnapshotDelete(priv->handle, flags);
+if (status < 0) {
+gvir_set_error(error, GVIR_DOMAIN_SNAPSHOT_ERROR, 0,
+   "Unable to delete snapshot `%s'",
+  gvir_domain_snapshot_get_name(snapshot));
+}
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.h 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
index 5bd827c..3985795 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.h
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
@@ -58,6 +58,18 @@ struct _GVirDomainSnapshotClass
 gpointer padding[20];
 };
 
+/**
+ * GVirDomainSnapshotDeleteFlags:
+ * @GVIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN: Also delete children
+ * @GVIR_DOMAIN_SNAPSHOT_DELETE_METADATA_ONLY: Delete just metadata
+ * @GVIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN_ONLY: Delete just children
+ */
+typedef enum {
+  GVIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN = 1,
+  GVIR_DOMAIN_SNAPSHOT_DELETE_METADATA_ONLY = 2,
+  GVIR_DOMAIN_SNAPSHOT_DELETE_CHILDREN_ONLY = 4
+} GVirDomainSnapshotDeleteFlags;
+
 
 GType gvir_domain_snapshot_get_type(void);
 GType gvir_domain_snapshot_handle_get_type(void);
@@ -69,6 +81,10 @@ GVirConfigDomainSnapshot *gvir_domain_snapshot_get_config
  guint flags,
  GError **err);
 
+void gvir_domain_snapshot_delete (GVirDomainSnapshot *snapshot,
+  guint flags,
+  GError **error);
+
 G_END_DECLS
 
 #endif /* __LIBVIRT_GOBJECT_DOMAIN_SNAPSHOT_H__ */
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index f2419ac..232e63b 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -234,4 +234,10 @@ LIBVIRT_GOBJECT_0.1.5 {
gvir_connection_open_read_only_finish;
 } LIBVIRT_GOBJECT_0.1.4;
 
+LIBVIRT_GOBJECT_0.1.9 {
+  global:
+  gvir_domain_snapshot_delete_flags_get_type;
+  gvir_domain_snapshot_delete;
+} LIBVIRT_GOBJECT_0.1.5;
+
 #  define new API here using predicted next version number 
-- 
1.9.3

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH] GVirDomainSnapshot: add gvir_domain_snapshot_delete

2014-05-29 Thread Timm Bäder
---
 libvirt-gobject/libvirt-gobject-domain-snapshot.c | 21 +
 libvirt-gobject/libvirt-gobject-domain-snapshot.h |  3 +++
 libvirt-gobject/libvirt-gobject.sym   |  5 +
 3 files changed, 29 insertions(+)

diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.c 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
index ab23342..f46c99b 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.c
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
@@ -206,3 +206,24 @@ GVirConfigDomainSnapshot *gvir_domain_snapshot_get_config
 free(xml);
 return conf;
 }
+
+/**
+ * gvir_domain_snapshot_delete:
+ * @snapshot: the domain_snapshot
+ * @error: (allow-none): Place-holder for error or NULL
+ */
+void gvir_domain_snapshot_delete(GVirDomainSnapshot *snapshot, GError **error)
+{
+GVirDomainSnapshotPrivate *priv;
+int status;
+
+g_return_if_fail(GVIR_IS_DOMAIN_SNAPSHOT (snapshot));
+g_return_if_fail(error == NULL || *error == NULL);
+
+priv = snapshot->priv;
+status = virDomainSnapshotDelete(priv->handle, 0);
+if (status < 0) {
+gvir_set_error_literal(error, GVIR_DOMAIN_SNAPSHOT_ERROR, 0,
+   "Unable to delete snapshot");
+}
+}
diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.h 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
index 5bd827c..575f56f 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.h
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.h
@@ -69,6 +69,9 @@ GVirConfigDomainSnapshot *gvir_domain_snapshot_get_config
  guint flags,
  GError **err);
 
+void gvir_domain_snapshot_delete (GVirDomainSnapshot *snapshot, GError 
**error);
+
+
 G_END_DECLS
 
 #endif /* __LIBVIRT_GOBJECT_DOMAIN_SNAPSHOT_H__ */
diff --git a/libvirt-gobject/libvirt-gobject.sym 
b/libvirt-gobject/libvirt-gobject.sym
index f2419ac..5d12a6a 100644
--- a/libvirt-gobject/libvirt-gobject.sym
+++ b/libvirt-gobject/libvirt-gobject.sym
@@ -234,4 +234,9 @@ LIBVIRT_GOBJECT_0.1.5 {
gvir_connection_open_read_only_finish;
 } LIBVIRT_GOBJECT_0.1.4;
 
+LIBVIRT_GOBJECT_0.1.9 {
+  global:
+  gvir_domain_shapshot_delete;
+} LIBVIRT_GOBJECT_0.1.5;
+
 #  define new API here using predicted next version number 
-- 
1.9.3

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


Re: [libvirt] [libvirt-glib] [PATCH] Remove #if 0's from libvirt-gobject-domain-snapshot

2014-05-24 Thread Timm Bäder
On 21.05, Daniel P. Berrange wrote:
> On Tue, May 20, 2014 at 08:56:24PM +0200, Timm Bäder wrote:
> > The code seems to be fine.
> > ---
> > 
> > I'd like to use this code (in later patches). If anything is wrong
> > with the current implementation, I'd like to know so I can fix it.
> 
> This is just historical cruft. IIRC, I had #if 0'd it, because at the
> time I wrote this, virDomainSnapshotRef didn't exist, but this is long
> since added.
> 
> 
> Regards,
> Daniel

Well, that's even better, thanks. Is that patch OK in its current form?

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list


[libvirt] [libvirt-glib] [PATCH] Remove #if 0's from libvirt-gobject-domain-snapshot

2014-05-20 Thread Timm Bäder
The code seems to be fine.
---

I'd like to use this code (in later patches). If anything is wrong
with the current implementation, I'd like to know so I can fix it.

 libvirt-gobject/libvirt-gobject-domain-snapshot.c | 10 +-
 1 file changed, 1 insertion(+), 9 deletions(-)

diff --git a/libvirt-gobject/libvirt-gobject-domain-snapshot.c 
b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
index d4e9b97..ab23342 100644
--- a/libvirt-gobject/libvirt-gobject-domain-snapshot.c
+++ b/libvirt-gobject/libvirt-gobject-domain-snapshot.c
@@ -144,9 +144,7 @@ typedef struct virDomainSnapshot GVirDomainSnapshotHandle;
 static GVirDomainSnapshotHandle*
 gvir_domain_snapshot_handle_copy(GVirDomainSnapshotHandle *src)
 {
-#if 0
 virDomainSnapshotRef((virDomainSnapshotPtr)src);
-#endif
 return src;
 }
 
@@ -162,7 +160,7 @@ G_DEFINE_BOXED_TYPE(GVirDomainSnapshotHandle, 
gvir_domain_snapshot_handle,
 const gchar *gvir_domain_snapshot_get_name(GVirDomainSnapshot *snapshot)
 {
 g_return_val_if_fail(GVIR_IS_DOMAIN_SNAPSHOT(snapshot), NULL);
-#if 0
+
 GVirDomainSnapshotPrivate *priv = snapshot->priv;
 const char *name;
 
@@ -172,12 +170,6 @@ const gchar 
*gvir_domain_snapshot_get_name(GVirDomainSnapshot *snapshot)
 }
 
 return name;
-#else
-if (snapshot)
-return NULL;
-#endif
-
-g_return_val_if_reached(NULL);
 }
 
 
-- 
1.9.3

--
libvir-list mailing list
libvir-list@redhat.com
https://www.redhat.com/mailman/listinfo/libvir-list