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

[Xen-changelog] [xen-unstable] Tidy and fix bindings for the SR class.



# HG changeset patch
# User Ewan Mellor <ewan@xxxxxxxxxxxxx>
# Date 1167220199 0
# Node ID 11b9ccdc94175a468667fa9313dc6ddf3fe652b0
# Parent  a9a43705f26b0892f722da1b6db8e98db49bad35
Tidy and fix bindings for the SR class.

Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx>
---
 tools/python/xen/xend/XendAPI.py               |   66 +++++++++++++------------
 tools/python/xen/xend/XendStorageRepository.py |   21 ++++++-
 2 files changed, 51 insertions(+), 36 deletions(-)

diff -r a9a43705f26b -r 11b9ccdc9417 tools/python/xen/xend/XendAPI.py
--- a/tools/python/xen/xend/XendAPI.py  Wed Dec 27 00:38:01 2006 +0000
+++ b/tools/python/xen/xend/XendAPI.py  Wed Dec 27 11:49:59 2006 +0000
@@ -100,6 +100,7 @@ def catch_typeerror(func):
         try:
             return func(self, *args, **kwargs)
         except TypeError, exn:
+            #log.exception('catch_typeerror')
             if hasattr(func, 'api') and func.api in argcounts:
                 # Assume that if the exception was thrown inside this
                 # file, then it is due to an invalid call from the client,
@@ -1446,37 +1447,40 @@ class XendAPI:
         return xen_api_success(sr.get_record())
 
     # Attribute acceess
-    def SR_get_VDIs(self, session, sr_ref):
-        sr = XendNode.instance().get_sr()
-        return xen_api_success(sr.list_images())
-
-    def SR_get_virtual_allocation(self, session, sr_ref):
-        sr = XendNode.instance().get_sr()        
-        return sr.used_space_bytes()
-
-    def SR_get_physical_utilisation(self, session, sr_ref):
-        sr = XendNode.instance().get_sr()        
-        return sr.used_space_bytes()
-
-    def SR_get_physical_size(self, session, sr_ref):
-        sr = XendNode.instance().get_sr()        
-        return sr.total_space_bytes()
-    
-    def SR_get_type(self, session, sr_ref):
-        sr = XendNode.instance().get_sr()
-        return xen_api_success(sr.type)
-
-    def SR_get_location(self, session, sr_ref):
-        sr = XendNode.instance().get_sr()
-        return xen_api_success(sr.location)
-
-    def SR_get_name_label(self, session, sr_ref):
-        sr = XendNode.instance().get_sr()
-        return xen_api_success(sr.name_label)      
-    
-    def SR_get_name_description(self, session, sr_ref):
-        sr = XendNode.instance().get_sr()
-        return xen_api_success(sr.name_description)        
+
+    def _get_SR_func(self, _, func, conv = None):
+        result = getattr(XendNode.instance().get_sr(), func)()
+        if conv:
+            result = conv(result)
+        return xen_api_success(result)
+
+    def _get_SR_attr(self, _, attr):
+        return xen_api_success(str(getattr(XendNode.instance().get_sr(),
+                                           attr)))
+
+    def SR_get_VDIs(self, _, ref):
+        return self._get_SR_func(ref, 'list_images')
+
+    def SR_get_virtual_allocation(self, _, ref):
+        return self._get_SR_func(ref, 'virtual_allocation', str)
+
+    def SR_get_physical_utilisation(self, _, ref):
+        return self._get_SR_func(ref, 'used_space_bytes', str)
+
+    def SR_get_physical_size(self, _, ref):
+        return self._get_SR_func(ref, 'total_space_bytes', str)
+    
+    def SR_get_type(self, _, ref):
+        return self._get_SR_attr(ref, 'type')
+
+    def SR_get_location(self, _, ref):
+        return self._get_SR_attr(ref, 'location')
+
+    def SR_get_name_label(self, _, ref):
+        return self._get_SR_attr(ref, 'name_label')
+    
+    def SR_get_name_description(self, _, ref):
+        return self._get_SR_attr(ref, 'name_description')
 
     def SR_set_name_label(self, session, sr_ref, value):
         sr = XendNode.instance().get_sr()
diff -r a9a43705f26b -r 11b9ccdc9417 
tools/python/xen/xend/XendStorageRepository.py
--- a/tools/python/xen/xend/XendStorageRepository.py    Wed Dec 27 00:38:01 
2006 +0000
+++ b/tools/python/xen/xend/XendStorageRepository.py    Wed Dec 27 11:49:59 
2006 +0000
@@ -294,7 +294,11 @@ class XendStorageRepository:
         """
         self.lock.acquire()
         try:
-            return self.storage_max
+            if self.storage_max == XEND_STORAGE_NO_MAXIMUM:
+                stfs = os.statvfs(self.location)
+                return stfs.f_blocks * stfs.f_frsize
+            else:
+                return self.storage_max
         finally:
             self.lock.release()
             
@@ -304,10 +308,17 @@ class XendStorageRepository:
         """
         self.lock.acquire()
         try:
-            total_used = 0
-            for val in self.images.values():
-                total_used += val.physical_utilisation
-            return total_used
+            return self.storage_used
+        finally:
+            self.lock.release()
+
+    def virtual_allocation(self):
+        """Returns the total virtual space allocated within the storage repo.
+        @rtype: int
+        """
+        self.lock.acquire()
+        try:
+            return self.storage_alloc
         finally:
             self.lock.release()
 

_______________________________________________
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®.