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-changelog

[Xen-changelog] Added diagnosis tool for broken domains.

To: xen-changelog@xxxxxxxxxxxxxxxxxxx
Subject: [Xen-changelog] Added diagnosis tool for broken domains.
From: Xen patchbot -unstable <patchbot-unstable@xxxxxxxxxxxxxxxxxxx>
Date: Fri, 21 Oct 2005 18:54:12 +0000
Delivery-date: Fri, 21 Oct 2005 18:52:12 +0000
Envelope-to: www-data@xxxxxxxxxxxxxxxxxxx
List-help: <mailto:xen-changelog-request@lists.xensource.com?subject=help>
List-id: BK change log <xen-changelog.lists.xensource.com>
List-post: <mailto:xen-changelog@lists.xensource.com>
List-subscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=subscribe>
List-unsubscribe: <http://lists.xensource.com/cgi-bin/mailman/listinfo/xen-changelog>, <mailto:xen-changelog-request@lists.xensource.com?subject=unsubscribe>
Reply-to: xen-devel@xxxxxxxxxxxxxxxxxxx
Sender: xen-changelog-bounces@xxxxxxxxxxxxxxxxxxx
# HG changeset patch
# User emellor@xxxxxxxxxxxxxxxxxxxxxx
# Node ID 4ba11726df733522f0eb5aca5b068672b8670466
# Parent  857b79d279935d4eeb6b5ec6732a49c748c4151a
Added diagnosis tool for broken domains.

Signed-off-by: Ewan Mellor <ewan@xxxxxxxxxxxxx>

diff -r 857b79d27993 -r 4ba11726df73 tools/python/xen/util/diagnose.py
--- /dev/null   Wed Oct 19 12:37:16 2005
+++ b/tools/python/xen/util/diagnose.py Wed Oct 19 12:59:22 2005
@@ -0,0 +1,148 @@
+# This library is free software; you can redistribute it and/or
+# modify it under the terms of version 2.1 of the GNU Lesser General Public
+# License as published by the Free Software Foundation.
+#
+# This library is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+# Lesser General Public License for more details.
+#
+# 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
+#
+# Copyright (c) 2005 XenSource Ltd
+
+
+import re
+import sys
+
+from xen.xend import sxp
+
+from xen.xend.XendClient import server
+from xen.xend.XendError import XendError
+from xen.xend.xenstore.xstransact import xstransact
+
+import xen.xend.XendProtocol
+
+
+domain = None
+domid = None
+deviceClass = None
+device = None
+frontendPath = None
+backendPath = None
+
+
+def diagnose(dom):
+    global domain
+    global domid
+    global dompath
+    
+    try:
+        domain = server.xend_domain(dom)
+        state = sxp.child_value(domain, 'state')
+        domid = int(sxp.child_value(domain, 'domid'))
+        name = sxp.child_value(domain, 'name')
+        dompath = '/local/domain/%d' % domid
+
+        print "Domain ID is %d." % domid
+        print "Domain name is %s." % name
+
+        if not state:
+            raise XendError("Cannot find state")
+
+        if state.find('c') != -1:
+            print "Domain has crashed."
+
+        diagnose_console()
+
+        diagnose_devices()
+    except xen.xend.XendProtocol.XendError, exn:
+        print exn
+
+
+def diagnose_console():
+    port    = xstransact.Read(dompath + '/console/port')
+    ringref = xstransact.Read(dompath + '/console/ring-ref')
+    tty     = xstransact.Read(dompath + '/console/tty')
+
+    if not port:
+        print "Console port is missing; Xend has failed."
+    if not ringref:
+        print "Console ring-ref is missing; Xend has failed."
+    if not tty:
+        print "Console tty is missing; Xenconsoled has failed."
+
+
+def diagnose_devices():
+    global deviceClass
+    global device
+    global frontendPath
+    global backendPath
+    
+    device_path = dompath + '/device'
+
+    device_classes = xstransact.List(device_path)
+
+    print "Found %d device classes in use." % len(device_classes)
+
+    for dc in device_classes:
+        deviceClass = dc
+        device_class_path = device_path + '/' + deviceClass
+
+        devices = xstransact.List(device_class_path)
+
+        print "Found %d %s devices." % (len(devices), deviceClass)
+
+        for d in devices:
+            device = d
+            
+            print "Found device %s, %s." % (deviceClass, device)
+
+            frontendPath = device_class_path + '/' + device
+            backendPath = xstransact.Read(frontendPath, 'backend')
+
+            if not backendPath:
+                print ("Cannot find backend path for device %s, %s." %
+                       (deviceClass, device))
+            else:
+                backend_error = xstransact.Read(backendPath, 'error')
+
+                if backend_error:
+                    diagnose_device_error(backend_error)
+
+
+def diagnose_device_error(err):
+    if re.search("2 reading .*/ring-ref and event-channel", err):
+        print ("Backend is stuck waiting for frontend for device %s, %s." %
+               (deviceClass, device))
+        diagnose_stuck_frontend()
+    else:
+        print ("Device %s, %s shows error %s." %
+               (deviceClass, device, err))
+
+
+def diagnose_stuck_frontend():
+    if deviceClass == "vbd":
+        phy = xstransact.Read(backendPath, 'physical-device')
+
+        if phy:
+            print ("Device %s, %s hotplugging has completed successfully." %
+                   (deviceClass, device))
+        else:
+            print ("Device %s, %s hotplugging failed." %
+                   (deviceClass, device))
+
+
+def main(argv = None):
+    if argv is None:
+        argv = sys.argv
+
+    diagnose(argv[1])
+
+    return 0
+
+
+if __name__ == "__main__":
+    sys.exit(main())

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

<Prev in Thread] Current Thread [Next in Thread>
  • [Xen-changelog] Added diagnosis tool for broken domains., Xen patchbot -unstable <=