[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Xen-changelog] [xen-unstable] The get_by_name_label functions return a set, not a singleton, because names



# HG changeset patch
# User Ewan Mellor <ewan@xxxxxxxxxxxxx>
# Node ID 4ea1097252a140cc2882f47733388ae8b7e42347
# Parent  5cccc3ed0b1e1207d5cb33101f8c6fa93260350b
The get_by_name_label functions return a set, not a singleton, because names
are not guaranteed to be unique.

Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx>
---
 tools/libxen/include/xen_host.h    |    8 +++----
 tools/libxen/include/xen_network.h |    8 +++----
 tools/libxen/include/xen_sr.h      |    8 +++----
 tools/libxen/include/xen_vdi.h     |    8 +++----
 tools/libxen/include/xen_vm.h      |    8 +++----
 tools/libxen/src/xen_host.c        |    4 +--
 tools/libxen/src/xen_network.c     |    4 +--
 tools/libxen/src/xen_sr.c          |    4 +--
 tools/libxen/src/xen_vdi.c         |    4 +--
 tools/libxen/src/xen_vm.c          |    4 +--
 tools/libxen/test/test_bindings.c  |   41 ++++++++++++++++++++++---------------
 11 files changed, 55 insertions(+), 46 deletions(-)

diff -r 5cccc3ed0b1e -r 4ea1097252a1 tools/libxen/include/xen_host.h
--- a/tools/libxen/include/xen_host.h   Sat Oct 28 12:00:02 2006 +0100
+++ b/tools/libxen/include/xen_host.h   Sat Oct 28 12:04:08 2006 +0100
@@ -175,10 +175,10 @@ xen_host_create(xen_session *session, xe
 
 
 /**
- * Get a reference to the object with the specified label.
- */
-extern bool
-xen_host_get_by_name_label(xen_session *session, xen_host *result, char 
*label);
+ * Get all the host instances with the given label.
+ */
+extern bool
+xen_host_get_by_name_label(xen_session *session, struct xen_host_set **result, 
char *label);
 
 
 /**
diff -r 5cccc3ed0b1e -r 4ea1097252a1 tools/libxen/include/xen_network.h
--- a/tools/libxen/include/xen_network.h        Sat Oct 28 12:00:02 2006 +0100
+++ b/tools/libxen/include/xen_network.h        Sat Oct 28 12:04:08 2006 +0100
@@ -173,10 +173,10 @@ xen_network_create(xen_session *session,
 
 
 /**
- * Get a reference to the object with the specified label.
- */
-extern bool
-xen_network_get_by_name_label(xen_session *session, xen_network *result, char 
*label);
+ * Get all the network instances with the given label.
+ */
+extern bool
+xen_network_get_by_name_label(xen_session *session, struct xen_network_set 
**result, char *label);
 
 
 /**
diff -r 5cccc3ed0b1e -r 4ea1097252a1 tools/libxen/include/xen_sr.h
--- a/tools/libxen/include/xen_sr.h     Sat Oct 28 12:00:02 2006 +0100
+++ b/tools/libxen/include/xen_sr.h     Sat Oct 28 12:04:08 2006 +0100
@@ -174,10 +174,10 @@ xen_sr_create(xen_session *session, xen_
 
 
 /**
- * Get a reference to the object with the specified label.
- */
-extern bool
-xen_sr_get_by_name_label(xen_session *session, xen_sr *result, char *label);
+ * Get all the SR instances with the given label.
+ */
+extern bool
+xen_sr_get_by_name_label(xen_session *session, struct xen_sr_set **result, 
char *label);
 
 
 /**
diff -r 5cccc3ed0b1e -r 4ea1097252a1 tools/libxen/include/xen_vdi.h
--- a/tools/libxen/include/xen_vdi.h    Sat Oct 28 12:00:02 2006 +0100
+++ b/tools/libxen/include/xen_vdi.h    Sat Oct 28 12:04:08 2006 +0100
@@ -180,10 +180,10 @@ xen_vdi_create(xen_session *session, xen
 
 
 /**
- * Get a reference to the object with the specified label.
- */
-extern bool
-xen_vdi_get_by_name_label(xen_session *session, xen_vdi *result, char *label);
+ * Get all the VDI instances with the given label.
+ */
+extern bool
+xen_vdi_get_by_name_label(xen_session *session, struct xen_vdi_set **result, 
char *label);
 
 
 /**
diff -r 5cccc3ed0b1e -r 4ea1097252a1 tools/libxen/include/xen_vm.h
--- a/tools/libxen/include/xen_vm.h     Sat Oct 28 12:00:02 2006 +0100
+++ b/tools/libxen/include/xen_vm.h     Sat Oct 28 12:04:08 2006 +0100
@@ -217,10 +217,10 @@ xen_vm_create(xen_session *session, xen_
 
 
 /**
- * Get a reference to the object with the specified label.
- */
-extern bool
-xen_vm_get_by_name_label(xen_session *session, xen_vm *result, char *label);
+ * Get all the VM instances with the given label.
+ */
+extern bool
+xen_vm_get_by_name_label(xen_session *session, struct xen_vm_set **result, 
char *label);
 
 
 /**
diff -r 5cccc3ed0b1e -r 4ea1097252a1 tools/libxen/src/xen_host.c
--- a/tools/libxen/src/xen_host.c       Sat Oct 28 12:00:02 2006 +0100
+++ b/tools/libxen/src/xen_host.c       Sat Oct 28 12:04:08 2006 +0100
@@ -150,7 +150,7 @@ xen_host_create(xen_session *session, xe
 
 
 bool
-xen_host_get_by_name_label(xen_session *session, xen_host *result, char *label)
+xen_host_get_by_name_label(xen_session *session, struct xen_host_set **result, 
char *label)
 {
     abstract_value param_values[] =
         {
@@ -158,7 +158,7 @@ xen_host_get_by_name_label(xen_session *
               .u.string_val = label }
         };
 
-    abstract_type result_type = abstract_type_string;
+    abstract_type result_type = abstract_type_string_set;
 
     *result = NULL;
     XEN_CALL_("host.get_by_name_label");
diff -r 5cccc3ed0b1e -r 4ea1097252a1 tools/libxen/src/xen_network.c
--- a/tools/libxen/src/xen_network.c    Sat Oct 28 12:00:02 2006 +0100
+++ b/tools/libxen/src/xen_network.c    Sat Oct 28 12:04:08 2006 +0100
@@ -148,7 +148,7 @@ xen_network_create(xen_session *session,
 
 
 bool
-xen_network_get_by_name_label(xen_session *session, xen_network *result, char 
*label)
+xen_network_get_by_name_label(xen_session *session, struct xen_network_set 
**result, char *label)
 {
     abstract_value param_values[] =
         {
@@ -156,7 +156,7 @@ xen_network_get_by_name_label(xen_sessio
               .u.string_val = label }
         };
 
-    abstract_type result_type = abstract_type_string;
+    abstract_type result_type = abstract_type_string_set;
 
     *result = NULL;
     XEN_CALL_("network.get_by_name_label");
diff -r 5cccc3ed0b1e -r 4ea1097252a1 tools/libxen/src/xen_sr.c
--- a/tools/libxen/src/xen_sr.c Sat Oct 28 12:00:02 2006 +0100
+++ b/tools/libxen/src/xen_sr.c Sat Oct 28 12:04:08 2006 +0100
@@ -152,7 +152,7 @@ xen_sr_create(xen_session *session, xen_
 
 
 bool
-xen_sr_get_by_name_label(xen_session *session, xen_sr *result, char *label)
+xen_sr_get_by_name_label(xen_session *session, struct xen_sr_set **result, 
char *label)
 {
     abstract_value param_values[] =
         {
@@ -160,7 +160,7 @@ xen_sr_get_by_name_label(xen_session *se
               .u.string_val = label }
         };
 
-    abstract_type result_type = abstract_type_string;
+    abstract_type result_type = abstract_type_string_set;
 
     *result = NULL;
     XEN_CALL_("SR.get_by_name_label");
diff -r 5cccc3ed0b1e -r 4ea1097252a1 tools/libxen/src/xen_vdi.c
--- a/tools/libxen/src/xen_vdi.c        Sat Oct 28 12:00:02 2006 +0100
+++ b/tools/libxen/src/xen_vdi.c        Sat Oct 28 12:04:08 2006 +0100
@@ -167,7 +167,7 @@ xen_vdi_create(xen_session *session, xen
 
 
 bool
-xen_vdi_get_by_name_label(xen_session *session, xen_vdi *result, char *label)
+xen_vdi_get_by_name_label(xen_session *session, struct xen_vdi_set **result, 
char *label)
 {
     abstract_value param_values[] =
         {
@@ -175,7 +175,7 @@ xen_vdi_get_by_name_label(xen_session *s
               .u.string_val = label }
         };
 
-    abstract_type result_type = abstract_type_string;
+    abstract_type result_type = abstract_type_string_set;
 
     *result = NULL;
     XEN_CALL_("VDI.get_by_name_label");
diff -r 5cccc3ed0b1e -r 4ea1097252a1 tools/libxen/src/xen_vm.c
--- a/tools/libxen/src/xen_vm.c Sat Oct 28 12:00:02 2006 +0100
+++ b/tools/libxen/src/xen_vm.c Sat Oct 28 12:04:08 2006 +0100
@@ -280,7 +280,7 @@ xen_vm_create(xen_session *session, xen_
 
 
 bool
-xen_vm_get_by_name_label(xen_session *session, xen_vm *result, char *label)
+xen_vm_get_by_name_label(xen_session *session, struct xen_vm_set **result, 
char *label)
 {
     abstract_value param_values[] =
         {
@@ -288,7 +288,7 @@ xen_vm_get_by_name_label(xen_session *se
               .u.string_val = label }
         };
 
-    abstract_type result_type = abstract_type_string;
+    abstract_type result_type = abstract_type_string_set;
 
     *result = NULL;
     XEN_CALL_("VM.get_by_name_label");
diff -r 5cccc3ed0b1e -r 4ea1097252a1 tools/libxen/test/test_bindings.c
--- a/tools/libxen/test/test_bindings.c Sat Oct 28 12:00:02 2006 +0100
+++ b/tools/libxen/test/test_bindings.c Sat Oct 28 12:04:08 2006 +0100
@@ -1,5 +1,5 @@
 /*
-  Copyright (c) 2006 XenSource, Inc.
+ * Copyright (c) 2006 XenSource, Inc.
  *
  * This library is free software; you can redistribute it and/or
  * modify it under the terms of the GNU Lesser General Public
@@ -14,7 +14,7 @@
  * You should have received a copy of the GNU Lesser General Public
  * License along with this library; if not, write to the Free Software
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA
-*/
+ */
 
 #define _GNU_SOURCE
 #include <inttypes.h>
@@ -320,8 +320,9 @@ static void create_new_vm(xen_session *s
     /*
      * Create a new disk for the new VM.
      */
-    xen_sr sr;
-    if (!xen_sr_get_by_name_label(session, &sr, "Local"))
+    xen_sr_set *srs;
+    if (!xen_sr_get_by_name_label(session, &srs, "Local") ||
+        srs->size < 1)
     {
         fprintf(stderr, "SR lookup failed.\n");
         print_error(session);
@@ -331,7 +332,7 @@ static void create_new_vm(xen_session *s
 
     xen_sr_record_opt sr_record =
         {
-            .u.handle = sr
+            .u.handle = srs->contents[0]
         };
     xen_vdi_record vdi0_record =
         {
@@ -351,16 +352,24 @@ static void create_new_vm(xen_session *s
         fprintf(stderr, "VDI creation failed.\n");
         print_error(session);
 
-        xen_sr_free(sr);
-        xen_vm_free(vm);
-        return;
-    }
-
-
+        xen_sr_set_free(srs);
+        xen_vm_free(vm);
+        return;
+    }
+
+
+    xen_vm_record_opt vm_record_opt =
+        {
+            .u.handle = vm
+        };
+    xen_vdi_record_opt vdi0_record_opt =
+        {
+            .u.handle = vdi0
+        };
     xen_vbd_record vbd0_record =
         {
-            .vm = vm,
-            .vdi = vdi0,
+            .vm = &vm_record_opt,
+            .vdi = &vdi0_record_opt,
             .device = "sda1",
             .mode = XEN_VBD_MODE_RW,
             .driver = XEN_DRIVER_TYPE_PARAVIRTUALISED
@@ -373,7 +382,7 @@ static void create_new_vm(xen_session *s
         print_error(session);
 
         xen_vdi_free(vdi0);
-        xen_sr_free(sr);
+        xen_sr_set_free(srs);
         xen_vm_free(vm);
         return;
     }
@@ -396,7 +405,7 @@ static void create_new_vm(xen_session *s
         xen_uuid_free(vbd0_uuid);
         xen_vbd_free(vbd0);
         xen_vdi_free(vdi0);
-        xen_sr_free(sr);
+        xen_sr_set_free(srs);
         xen_vm_free(vm);
         return;
     }
@@ -410,6 +419,6 @@ static void create_new_vm(xen_session *s
     xen_uuid_free(vbd0_uuid);
     xen_vbd_free(vbd0);
     xen_vdi_free(vdi0);
-    xen_sr_free(sr);
+    xen_sr_set_free(srs);
     xen_vm_free(vm);
 }

_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.