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

[Xen-changelog] [xen-unstable] Add -p/--paused flag to xm restore.



# HG changeset patch
# User Brendan Cully <brendan@xxxxxxxxx>
# Node ID a8d2b1393b769048c7b62822e45bef27eef80fb6
# Parent  cbbfadf7c8a50ee5099477d48d43cf251a48ce37
Add -p/--paused flag to xm restore.

When --paused is specified, the domain is paused after it is loaded.

Signed-off-by: Brendan Cully <brendan@xxxxxxxxx>
---
 tools/python/xen/xend/XendCheckpoint.py      |    5 ++--
 tools/python/xen/xend/XendDomain.py          |    8 +++----
 tools/python/xen/xend/server/XMLRPCServer.py |    4 +--
 tools/python/xen/xm/main.py                  |   29 ++++++++++++++++++++++-----
 4 files changed, 33 insertions(+), 13 deletions(-)

diff -r cbbfadf7c8a5 -r a8d2b1393b76 tools/python/xen/xend/XendCheckpoint.py
--- a/tools/python/xen/xend/XendCheckpoint.py   Fri Nov 17 16:21:14 2006 -0700
+++ b/tools/python/xen/xend/XendCheckpoint.py   Tue Nov 21 18:09:23 2006 -0800
@@ -108,7 +108,7 @@ def save(fd, dominfo, network, live, dst
         raise Exception, exn
 
 
-def restore(xd, fd, dominfo = None):
+def restore(xd, fd, dominfo = None, paused = False):
     signature = read_exact(fd, len(SIGNATURE),
         "not a valid guest state file: signature read")
     if signature != SIGNATURE:
@@ -164,7 +164,8 @@ def restore(xd, fd, dominfo = None):
 
         os.read(fd, 1)           # Wait for source to close connection
         dominfo.waitForDevices() # Wait for backends to set up
-        dominfo.unpause()
+        if not paused:
+            dominfo.unpause()
         
         dominfo.completeRestore(handler.store_mfn, handler.console_mfn)
         
diff -r cbbfadf7c8a5 -r a8d2b1393b76 tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py       Fri Nov 17 16:21:14 2006 -0700
+++ b/tools/python/xen/xend/XendDomain.py       Tue Nov 21 18:09:23 2006 -0800
@@ -916,7 +916,7 @@ class XendDomain:
         # !!!
         raise XendError("Unsupported")
 
-    def domain_restore(self, src):
+    def domain_restore(self, src, paused=False):
         """Restore a domain from file.
 
         @param src: filename of checkpoint file to restore from
@@ -928,14 +928,14 @@ class XendDomain:
         try:
             fd = os.open(src, os.O_RDONLY)
             try:
-                return self.domain_restore_fd(fd)
+                return self.domain_restore_fd(fd, paused=paused)
             finally:
                 os.close(fd)
         except OSError, ex:
             raise XendError("can't read guest state file %s: %s" %
                             (src, ex[1]))
 
-    def domain_restore_fd(self, fd):
+    def domain_restore_fd(self, fd, paused=False):
         """Restore a domain from the given file descriptor.
 
         @param fd: file descriptor of the checkpoint file
@@ -945,7 +945,7 @@ class XendDomain:
         """
 
         try:
-            return XendCheckpoint.restore(self, fd)
+            return XendCheckpoint.restore(self, fd, paused=paused)
         except:
             # I don't really want to log this exception here, but the error
             # handling in the relocation-socket handling code (relocate.py) is
diff -r cbbfadf7c8a5 -r a8d2b1393b76 
tools/python/xen/xend/server/XMLRPCServer.py
--- a/tools/python/xen/xend/server/XMLRPCServer.py      Fri Nov 17 16:21:14 
2006 -0700
+++ b/tools/python/xen/xend/server/XMLRPCServer.py      Tue Nov 21 18:09:23 
2006 -0800
@@ -64,8 +64,8 @@ def domain_create(config):
     info = XendDomain.instance().domain_create(config)
     return fixup_sxpr(info.sxpr())
 
-def domain_restore(src):
-    info = XendDomain.instance().domain_restore(src)
+def domain_restore(src, paused=False):
+    info = XendDomain.instance().domain_restore(src, paused)
     return fixup_sxpr(info.sxpr())
 
 def get_log():
diff -r cbbfadf7c8a5 -r a8d2b1393b76 tools/python/xen/xm/main.py
--- a/tools/python/xen/xm/main.py       Fri Nov 17 16:21:14 2006 -0700
+++ b/tools/python/xen/xm/main.py       Tue Nov 21 18:09:23 2006 -0800
@@ -84,7 +84,7 @@ SUBCOMMAND_HELP = {
                      'Migrate a domain to another machine.'),
     'pause'       : ('<Domain>', 'Pause execution of a domain.'),
     'reboot'      : ('<Domain> [-wa]', 'Reboot a domain.'),
-    'restore'     : ('<CheckpointFile>',
+    'restore'     : ('<CheckpointFile> [-p]',
                      'Restore a domain from a saved state.'),
     'save'        : ('<Domain> <CheckpointFile>',
                      'Save a domain state to restore later.'),
@@ -206,6 +206,9 @@ SUBCOMMAND_OPTIONS = {
        ('-L', '--live', 'Dump core without pausing the domain'),
        ('-C', '--crash', 'Crash domain after dumping core'),
     ),
+    'restore': (
+      ('-p', '--paused', 'Do not unpause domain after restoring it'),
+    ),
 }
 
 common_commands = [
@@ -483,15 +486,31 @@ def xm_save(args):
     server.xend.domain.save(domid, savefile)
     
 def xm_restore(args):
-    arg_check(args, "restore", 1)
-
-    savefile = os.path.abspath(args[0])
+    arg_check(args, "restore", 1, 2)
+
+    try:
+        (options, params) = getopt.gnu_getopt(args, 'p', ['paused'])
+    except getopt.GetoptError, opterr:
+        err(opterr)
+        sys.exit(1)
+
+    paused = False
+    for (k, v) in options:
+        if k in ['-p', '--paused']:
+            paused = True
+
+    if len(params) != 1:
+        err("Wrong number of parameters")
+        usage('restore')
+        sys.exit(1)
+
+    savefile = os.path.abspath(params[0])
 
     if not os.access(savefile, os.R_OK):
         err("xm restore: Unable to read file %s" % savefile)
         sys.exit(1)
 
-    server.xend.domain.restore(savefile)
+    server.xend.domain.restore(savefile, paused)
 
 
 def getDomains(domain_names, full = 0):

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