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

Re: [Xen-devel] [patch]Make xend to take care of dead qemu-dm process



Hi Xiaowei,

Nonessential comment.

Your patch includes both tab-indent and space-indent.
Could you change tab-indent to space-indent?

Best regards,
 Kan

Wed, 21 May 2008 14:33:05 +0800, shawn wrote:

>Hi all,
>
>There is a problem in Xen now,When fatal error happened on VM like
>qemu-dm process died, xend should take care of it. Don't leave it as
>defunct process (zombie process). 
>Because of mis-configuration or some other reason, qemu-dm process would
>die. 
>
>For now, xend haven't taken care of this dead process and it remains as
>defunct process, and xm list shows VM status assigned to the process as 
>vserv1134             5  6144     1     ------      0.0 
>
>This patch fix xend as when fatal error happened (e.g. qemu-dm process
>was killed) 
>log  error meesge then destroy that domain and clean up the process (no
>zombies)
>
>This is caused by the xend daemon, xend forks a process and run the
>qemu-dm  program, when qemu-dm was killed directly ,xend doesn't have a
>chance to call 
>the wait() function to collect this zombie child(qemu-dm is executed by
>a thread).For the xend doesn't have any idea of the qemu-dm child is
>alive or being killed. 
>
>For the above reason,added some code in xend to check those hvm DM
>status each 30 seconds. 
>
>Have made a patch based on the open source xen3.2.1 source code. 
>
>Please review this patch.
>
>Thanks.
>Xiaowei
>
>--- xen-3.2.1/tools/python/xen/xend/server/SrvServer.py.org    2008-05-21
>13:53:08.000000000 +0800
>+++ xen-3.2.1/tools/python/xen/xend/server/SrvServer.py        2008-05-21
>13:58:56.000000000 +0800
>@@ -44,6 +44,7 @@
> import re
> import time
> import signal
>+import os
> from threading import Thread
> 
> from xen.web.httpserver import HttpServer, UnixHttpServer
>@@ -148,14 +149,28 @@
> 
>             # Reaching this point means we can auto start domains
>             try:
>-                xenddomain().autostart_domains()
>+                dom = xenddomain()
>+              dom.autostart_domains()
>             except Exception, e:
>                 log.exception("Failed while autostarting domains")
> 
>             # loop to keep main thread alive until it receives a
>SIGTERM
>             self.running = True
>             while self.running:
>-                time.sleep(100000000)
>+              # loop to destroy those hvm domain that whoes DM has dead
>unexpectedly.
>+              for item in dom.domains.values():
>+                    if item.info.is_hvm():
>+                        device_model_pid =
>item.gatherDom(('image/device-model-pid', str))
>+                      dm_stat_cmd = "ps -o stat --no-headers -p"+
device_model_pid
>+                      dm_stat = os.popen(dm_stat_cmd).readline().rstrip()
>+                      log.info("status of the command is:" + dm_stat + "end 
of output")
>+                      if dm_stat == 'Z':
>+                          log.info("status of the command is:" + dm_stat + 
"end of
>output")
>+                          log.warn("Devices Model for " + str(item) + "was 
killed
>unexpectedly")
>+                          item.destroy()
>+                      else:
>+                          continue
>+                time.sleep(30)
>                 
>             if self.reloadingConfig:
>                 log.info("Restarting all XML-RPC and Xen-API
>servers...")
>
>
>_______________________________________________
>Xen-devel mailing list
>Xen-devel@xxxxxxxxxxxxxxxxxxx
>http://lists.xensource.com/xen-devel


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


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.