# HG changeset patch
# User Keir Fraser <keir.fraser@xxxxxxxxxx>
# Date 1253002847 -3600
# Node ID 045b2b8b522708093b91f883f1b7e7c1805f71e3
# Parent 848193b1ec26ccee37ffc7f953dce0ded04f90e0
xend: Receive error message of migration from destination server
The following error message was shown by xm migrate command.
In fact, I caused the command error by intention. I prepared a
destination server where free memory was insufficient, and then
I tried to migrate a VM to the destination server. As I had
expected, the command error occurred. However the error message
was different from my expectation. I would like to show an error
message from the destination server if an error occurred on the
destination server.
# xm migrate --live vm3 bx339
Error: (107, 'Transport endpoint is not connected')
Usage: xm migrate <Domain> <Host>
Migrate a domain to another machine.
Options:
-h, --help Print this help.
-l, --live Use live migration.
-p=3Dportnum, --port=3Dportnum
Use specified port for migration.
-n=3Dnodenum, --node=3Dnodenum
Use specified NUMA node on target.
-s, --ssl Use ssl connection for migration.
If a destination server sends an error message, this patch shows=20
the error message. For example, the following error message is=20
shown if free memory of the destination server is insufficient.
# xm migrate --live vm3 bx339
Error: I need 262144 KiB, but dom0_min_mem is 716800 and shrinking
to=20
716800 KiB would leave only 50368 KiB free. (from bx339)
Usage: xm migrate <Domain> <Host>
Migrate a domain to another machine.
Options:
-h, --help Print this help.
-l, --live Use live migration.
-p=3Dportnum, --port=3Dportnum
Use specified port for migration.
-n=3Dnodenum, --node=3Dnodenum
Use specified NUMA node on target.
-s, --ssl Use ssl connection for migration.
Signed-off-by: Masaki Kanno <kanno.masaki@xxxxxxxxxxxxxx>
---
tools/python/xen/xend/XendDomain.py | 73 +++++++++++++++++++++++++++++++++---
1 files changed, 67 insertions(+), 6 deletions(-)
diff -r 848193b1ec26 -r 045b2b8b5227 tools/python/xen/xend/XendDomain.py
--- a/tools/python/xen/xend/XendDomain.py Tue Sep 15 09:19:23 2009 +0100
+++ b/tools/python/xen/xend/XendDomain.py Tue Sep 15 09:20:47 2009 +0100
@@ -28,6 +28,7 @@ import socket
import socket
import tempfile
import threading
+import re
import xen.lowlevel.xc
@@ -1350,10 +1351,40 @@ class XendDomain:
args=(sock, p2cread)).start()
try:
- XendCheckpoint.save(p2cwrite, dominfo, True, live, dst,
- node=node)
+ try:
+ XendCheckpoint.save(p2cwrite, dominfo, True, live, dst,
+ node=node)
+ except Exception, ex:
+ m_dsterr = None
+ try:
+ sock.settimeout(3.0)
+ dsterr = sock.recv(1024)
+ sock.settimeout(None)
+ if dsterr:
+ # See send_error@xxxxxxxxxxxx If an error occurred
+ # in a destination side, an error message with the
+ # following form is returned from the destination
+ # side.
+ m_dsterr = \
+
re.match(r"^\(err\s\(type\s(.+)\)\s\(value\s'(.+)'\)\)", dsterr)
+ except:
+ # Probably socket.timeout exception occurred.
+ # Ignore the exception because it has nothing to do
with
+ # an exception of XendCheckpoint.save.
+ pass
+
+ if m_dsterr:
+ raise XendError("%s (from %s)" % (m_dsterr.group(2),
dst))
+ raise
finally:
- sock.shutdown(2)
+ try:
+ sock.shutdown(2)
+ except:
+ # Probably the socket is already disconnected by sock.close
+ # in the destination side.
+ # Ignore the exception because it has nothing to do with
+ # an exception of XendCheckpoint.save.
+ pass
sock.close()
os.close(p2cread)
@@ -1376,10 +1407,40 @@ class XendDomain:
raise XendError("can't connect: %s" % err)
try:
- XendCheckpoint.save(sock.fileno(), dominfo, True, live,
- dst, node=node)
+ try:
+ XendCheckpoint.save(sock.fileno(), dominfo, True, live,
+ dst, node=node)
+ except Exception, ex:
+ m_dsterr = None
+ try:
+ sock.settimeout(3.0)
+ dsterr = sock.recv(1024)
+ sock.settimeout(None)
+ if dsterr:
+ # See send_error@xxxxxxxxxxxx If an error occurred
+ # in a destination side, an error message with the
+ # following form is returned from the destination
+ # side.
+ m_dsterr = \
+
re.match(r"^\(err\s\(type\s(.+)\)\s\(value\s'(.+)'\)\)", dsterr)
+ except:
+ # Probably socket.timeout exception occurred.
+ # Ignore the exception because it has nothing to do
with
+ # an exception of XendCheckpoint.save.
+ pass
+
+ if m_dsterr:
+ raise XendError("%s (from %s)" % (m_dsterr.group(2),
dst))
+ raise
finally:
- sock.shutdown(2)
+ try:
+ sock.shutdown(2)
+ except:
+ # Probably the socket is already disconnected by sock.close
+ # in the destination side.
+ # Ignore the exception because it has nothing to do with
+ # an exception of XendCheckpoint.save.
+ pass
sock.close()
def domain_save(self, domid, dst, checkpoint=False):
_______________________________________________
Xen-changelog mailing list
Xen-changelog@xxxxxxxxxxxxxxxxxxx
http://lists.xensource.com/xen-changelog
|