# HG changeset patch
# User root@procyon
# Node ID 0008fca70351c348254398f67a66156272ad1731
# Parent 97f3368d1dd3160474c290cbc39dfe7c8d0b037f
xm dump command add on
xm dump-core [-L|--live][-C| --crash] <domID> [output path]
-L| --live Live dump:
By default, xm dump does an xm pause, unpause before and
after taking the dump, respectively. This option disables
the pause/unpause and simply takes the dump.
-C :| --crash crash dump:
This executes an xm destroy after the dump file is complete.
The output path is optional, and if it is not specified, the path will be
/var/xen/dump/<domU name>.<domU ID>.core
This command uses the existant dumpCore(), which has been used for
coredump when a domU crashed.
Signed-off-by: Ken Hironaka <hironaka.ken@xxxxxxxxxxxxxxxx>
Signed-off-by: Akio Takebe <takebe_akio@xxxxxxxxxxxxxx>
---
tools/python/xen/xend/XendDomain.py | 16 +++++++++++
tools/python/xen/xend/XendDomainInfo.py | 5 ++-
tools/python/xen/xm/main.py | 43 ++++++++++++++++++++++++++++++++
3 files changed, 62 insertions(+), 2 deletions(-)
diff -r 97f3368d1dd3 -r 0008fca70351 tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py Thu Sep 14 08:18:56 2006 +0100
+++ b/tools/python/xen/xend/XendDomain.py Thu Sep 14 08:19:38 2006 +0100
@@ -390,6 +390,22 @@ class XendDomain:
except Exception, ex:
raise XendError(str(ex))
+ def domain_dump(self, domid, filename, live, crash):
+ """Dump domain core."""
+
+ dominfo = self.domain_lookup_by_name_or_id_nr(domid)
+ if not dominfo:
+ raise XendInvalidDomain(str(domid))
+
+ if dominfo.getDomid() == PRIV_DOMAIN:
+ raise XendError("Cannot dump core for privileged domain %s" %
domid)
+
+ try:
+ log.info("Domain core dump requested for domain %s (%d) live=%d
crash=%d.",
+ dominfo.getName(), dominfo.getDomid(), live, crash)
+ return dominfo.dumpCore(filename)
+ except Exception, ex:
+ raise XendError(str(ex))
def domain_destroy(self, domid):
"""Terminate domain immediately."""
diff -r 97f3368d1dd3 -r 0008fca70351 tools/python/xen/xend/XendDomainInfo.py
--- a/tools/python/xen/xend/XendDomainInfo.py Thu Sep 14 08:18:56 2006 +0100
+++ b/tools/python/xen/xend/XendDomainInfo.py Thu Sep 14 08:19:38 2006 +0100
@@ -977,11 +977,12 @@ class XendDomainInfo:
self.restart(True)
- def dumpCore(self):
+ def dumpCore(self,corefile=None):
"""Create a core dump for this domain. Nothrow guarantee."""
try:
- corefile = "/var/xen/dump/%s.%s.core" % (self.info['name'],
+ if not corefile:
+ corefile = "/var/xen/dump/%s.%s.core" % (self.info['name'],
self.domid)
xc.domain_dumpcore(self.domid, corefile)
diff -r 97f3368d1dd3 -r 0008fca70351 tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py Thu Sep 14 08:18:56 2006 +0100
+++ b/tools/python/xen/xm/main.py Thu Sep 14 08:19:38 2006 +0100
@@ -57,6 +57,9 @@ create_help = """create [-c] <ConfigFil
create_help = """create [-c] <ConfigFile>
[Name=Value].. Create a domain based on Config File"""
destroy_help = "destroy <DomId> Terminate a domain
immediately"
+dump_core_help = """dump-core [-L|--live][-C|--crash]
+ <DomId> [FileName] Dump core of the specified domain"""
+
help_help = "help Display this message"
list_help = "list [--long] [DomId, ...] List information about
domains"
list_label_help = "list [--label] [DomId, ...] List information about
domains including their labels"
@@ -138,6 +141,7 @@ short_command_list = [
"console",
"create",
"destroy",
+ "dump-core",
"help",
"list",
"mem-set",
@@ -159,6 +163,7 @@ domain_commands = [
"destroy",
"domid",
"domname",
+ "dump-core",
"list",
"list_label",
"mem-max",
@@ -590,6 +595,43 @@ def xm_unpause(args):
server.xend.domain.unpause(dom)
+def xm_dump_core(args):
+ arg_check(args, "dump-core",1,3)
+ live = False
+ crash = False
+ import getopt
+ (options, params) = getopt.gnu_getopt(args, 'LC', ['live','crash'])
+
+ for (k, v) in options:
+ if k in ['-L', '--live']:
+ live = True
+ if k in ['-C', '--crash']:
+ crash = True
+
+ if len(params) == 0 or len(params) > 2:
+ err("invalid number of parameters")
+ usage("dump-core")
+
+ dom = params[0]
+ if len(params) == 2:
+ filename = os.path.abspath(params[1])
+ else:
+ filename = None
+
+ if not live:
+ server.xend.domain.pause(dom)
+
+ try:
+ print "dumping core of domain:%s ..." % str(dom)
+ server.xend.domain.dump(dom, filename, live, crash)
+ finally:
+ if not live:
+ server.xend.domain.unpause(dom)
+
+ if crash:
+ print "destroying domain:%s ..." % str(dom)
+ server.xend.domain.destroy(dom)
+
def xm_rename(args):
arg_check(args, "rename", 2)
@@ -1168,6 +1210,7 @@ commands = {
"destroy": xm_destroy,
"domid": xm_domid,
"domname": xm_domname,
+ "dump-core": xm_dump_core,
"rename": xm_rename,
"restore": xm_restore,
"save": xm_save,
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|