[libvirt] [PATCH 2/5] snapshot: remote protocol for getparent

Eric Blake eblake at redhat.com
Sun Sep 25 00:30:03 UTC 2011


Mostly straight-forward, although this is the first API that
returns a new snapshot based on a snapshot rather than a domain.

* src/remote/remote_protocol.x
(REMOTE_PROC_DOMAIN_SNAPSHOT_GET_PARENT): New rpc.
(remote_domain_snapshot_get_parent_args)
(remote_domain_snapshot_get_parent_ret): New structs.
* src/rpc/gendispatch.pl: Adjust generator.
* src/remote/remote_driver.c (remote_driver): Use it.
* src/remote_protocol-structs: Update.
---
 src/remote/remote_driver.c   |    1 +
 src/remote/remote_protocol.x |   12 +++++++++++-
 src/remote_protocol-structs  |    8 ++++++++
 src/rpc/gendispatch.pl       |    4 +++-
 4 files changed, 23 insertions(+), 2 deletions(-)

diff --git a/src/remote/remote_driver.c b/src/remote/remote_driver.c
index 1217d94..740dd75 100644
--- a/src/remote/remote_driver.c
+++ b/src/remote/remote_driver.c
@@ -4412,6 +4412,7 @@ static virDriver remote_driver = {
     .domainSnapshotListNames = remoteDomainSnapshotListNames, /* 0.8.0 */
     .domainSnapshotLookupByName = remoteDomainSnapshotLookupByName, /* 0.8.0 */
     .domainHasCurrentSnapshot = remoteDomainHasCurrentSnapshot, /* 0.8.0 */
+    .domainSnapshotGetParent = remoteDomainSnapshotGetParent, /* 0.9.7 */
     .domainSnapshotCurrent = remoteDomainSnapshotCurrent, /* 0.8.0 */
     .domainRevertToSnapshot = remoteDomainRevertToSnapshot, /* 0.8.0 */
     .domainSnapshotDelete = remoteDomainSnapshotDelete, /* 0.8.0 */
diff --git a/src/remote/remote_protocol.x b/src/remote/remote_protocol.x
index 455e324..3504e34 100644
--- a/src/remote/remote_protocol.x
+++ b/src/remote/remote_protocol.x
@@ -2081,6 +2081,15 @@ struct remote_domain_has_current_snapshot_ret {
     int result;
 };

+struct remote_domain_snapshot_get_parent_args {
+    remote_nonnull_domain_snapshot snap;
+    unsigned int flags;
+};
+
+struct remote_domain_snapshot_get_parent_ret {
+    remote_nonnull_domain_snapshot snap;
+};
+
 struct remote_domain_snapshot_current_args {
     remote_nonnull_domain dom;
     unsigned int flags;
@@ -2509,7 +2518,8 @@ enum remote_procedure {

     REMOTE_PROC_DOMAIN_EVENT_BLOCK_JOB = 241, /* skipgen skipgen */
     REMOTE_PROC_DOMAIN_MIGRATE_GET_MAX_SPEED = 242, /* autogen autogen */
-    REMOTE_PROC_DOMAIN_BLOCK_STATS_FLAGS = 243 /* skipgen skipgen */
+    REMOTE_PROC_DOMAIN_BLOCK_STATS_FLAGS = 243, /* skipgen skipgen */
+    REMOTE_PROC_DOMAIN_SNAPSHOT_GET_PARENT = 244 /* autogen autogen */

     /*
      * Notice how the entries are grouped in sets of 10 ?
diff --git a/src/remote_protocol-structs b/src/remote_protocol-structs
index 810b19c..53705bf 100644
--- a/src/remote_protocol-structs
+++ b/src/remote_protocol-structs
@@ -1568,6 +1568,13 @@ struct remote_domain_has_current_snapshot_args {
 struct remote_domain_has_current_snapshot_ret {
         int                        result;
 };
+struct remote_domain_snapshot_get_parent_args {
+        remote_nonnull_domain_snapshot snap;
+        u_int                      flags;
+};
+struct remote_domain_snapshot_get_parent_ret {
+        remote_nonnull_domain_snapshot snap;
+};
 struct remote_domain_snapshot_current_args {
         remote_nonnull_domain      dom;
         u_int                      flags;
@@ -1958,4 +1965,5 @@ enum remote_procedure {
         REMOTE_PROC_DOMAIN_EVENT_BLOCK_JOB = 241,
         REMOTE_PROC_DOMAIN_MIGRATE_GET_MAX_SPEED = 242,
         REMOTE_PROC_DOMAIN_BLOCK_STATS_FLAGS = 243,
+        REMOTE_PROC_DOMAIN_SNAPSHOT_GET_PARENT = 244,
 };
diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl
index fcd1a26..039d785 100755
--- a/src/rpc/gendispatch.pl
+++ b/src/rpc/gendispatch.pl
@@ -1273,7 +1273,9 @@ elsif ($opt_k) {
                         $single_ret_type = "int";
                     } else {
                         if ($name eq "domain_snapshot") {
-                            push(@ret_list, "rv = get_nonnull_$name(dom, ret.$arg_name);");
+                            my $dom = "$priv_src";
+                            $dom =~ s/->conn//;
+                            push(@ret_list, "rv = get_nonnull_$name($dom, ret.$arg_name);");
                         } else {
                             push(@ret_list, "rv = get_nonnull_$name($priv_src, ret.$arg_name);");
                         }
-- 
1.7.4.4




More information about the libvir-list mailing list