WARNING - OLD ARCHIVES

This is an archived copy of the Xen.org mailing list, which we have preserved to ensure that existing links to archives are not broken. The live archive, which contains the latest emails, can be found at http://lists.xen.org/
   
 
 
Xen 
 
Home Products Support Community News
 
   
 

xen-api

[Xen-API] [PATCH] handle transient errors in script

To: xen-api@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-API] [PATCH] handle transient errors in script
From: David Scott <dave.scott@xxxxxxxxxxxxx>
Date: Tue, 16 Mar 2010 14:40:43 +0000
Delivery-date: Tue, 16 Mar 2010 07:31:58 -0700
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-api-request@lists.xensource.com?subject=help>
List-id: Discussion of API issues surrounding Xen <xen-api.lists.xensource.com>
List-post: <mailto:xen-api@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/mailman/listinfo/xen-api>, <mailto:xen-api-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/mailman/listinfo/xen-api>, <mailto:xen-api-request@lists.xensource.com?subject=unsubscribe>
Sender: xen-api-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User Simon Rowe <simon.rowe@xxxxxxxxxxxxx>
# Date 1267785812 0
# Node ID 8dd78efeaad1907d9f67dbc85b93feffc4285c0f
# Parent  5aabe847023214a035f11f405a5ba7079fb20cd4
CA-37466: retry xapi login to handle transient errors

Signed-off-by: Simon Rowe <simon.rowe@xxxxxxxxxxxxx>

diff -r 5aabe8470232 -r 8dd78efeaad1 scripts/set-dom0-memory-target-from-packs
--- a/scripts/set-dom0-memory-target-from-packs Tue Mar 16 14:38:37 2010 +0000
+++ b/scripts/set-dom0-memory-target-from-packs Fri Mar 05 10:43:32 2010 +0000
@@ -11,6 +11,7 @@
 import XenAPI
 import sys
 import os
+import time
 import traceback
 import xml.dom.minidom
 from xml.parsers.expat import ExpatError
@@ -19,7 +20,18 @@
 
 def main():
     session = XenAPI.xapi_local()
-    session.xenapi.login_with_password("", "")
+    logged_in = False
+    for tries in range(5):
+        try:
+            session.xenapi.login_with_password("", "")
+            logged_in = True
+            break
+        except:
+            # repeat after a delay
+            time.sleep(1)
+    if not logged_in:
+        print >> sys.stderr, "Unable to log into xapi, aborting"
+        return 1
 
     # read dom0 uuid out of inventory file and 
     uuid = filter(lambda x: x.startswith('CONTROL_DOMAIN_UUID'), 
open('/etc/xensource-inventory').readlines())[0].strip().split('=')[1].strip("'")
@@ -27,26 +39,34 @@
     rec = session.xenapi.VM.get_record(oref)
     static_min = int(rec['memory_static_min'])
     static_max = int(rec['memory_static_max'])
+    current_target = int(rec['memory_target'])
 
     additional_mb = 0
 
     packs = os.listdir(INSTALLED_REPOS_DIR)
     for pack in packs:
-        xmldoc = xml.dom.minidom.parse(os.path.join(INSTALLED_REPOS_DIR, pack, 
'XS-REPOSITORY'))
-        additional_mb_str = 
xmldoc.documentElement.getAttribute('memory-requirement-mb')
-        if additional_mb_str:
-            additional_mb += int(additional_mb_str)
+        try:
+            xmldoc = xml.dom.minidom.parse(os.path.join(INSTALLED_REPOS_DIR, 
pack, 'XS-REPOSITORY'))
+            additional_mb_str = 
xmldoc.documentElement.getAttribute('memory-requirement-mb')
+            if additional_mb_str:
+                additional_mb += int(additional_mb_str)
+        except:
+            pass
 
     # new memory target
     memory_target = static_min + (100<<20) + (additional_mb<<20)
 
-    print >> sys.stderr, "Memory required by all installed packages: %d" % 
memory_target
+    print >> sys.stdout, "Memory required by all installed packages: %d" % 
memory_target
+
+    if memory_target <= current_target:
+        print >> sys.stdout, "Current target %d greater, skipping" % 
current_target
+        return 0
     
     if memory_target > static_max:
-        print >> sys.stderr, "Truncating to static-max: %d" % static_max
+        print >> sys.stdout, "Truncating to static-max: %d" % static_max
         memory_target = static_max
         
-    print >> sys.stderr, "Setting VM.memory_target: %d" % memory_target
+    print >> sys.stdout, "Setting VM.memory_target: %d" % memory_target
 
     # Next line commented out because this doesn't seem to work - maybe a bug 
in the Python bindings
     #session.xenapi.VM.set_memory_target_live(oref, memory_target)
@@ -56,6 +76,7 @@
     subprocess.call(['xe','vm-memory-target-set', 'uuid=%s' % uuid, 
'target=%d' % memory_target])
 
     session.xenapi.session.logout()
+    return 0
 
 if __name__ == '__main__':
     rc = 1
@@ -65,6 +86,6 @@
         ex = sys.exc_info()
         err = traceback.format_exception(*ex)
         for exline in err:
-            log_err(exline)
+            print >> sys.stderr, exline
 
     sys.exit(rc)
1 file changed, 30 insertions(+), 9 deletions(-)
scripts/set-dom0-memory-target-from-packs |   39 ++++++++++++++++++++++-------


Attachment: xen-api.hg.patch
Description: Text Data

_______________________________________________
xen-api mailing list
xen-api@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/mailman/listinfo/xen-api
<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-API] [PATCH] handle transient errors in script, David Scott <=