| 
   
sorry, Ian, I resend the patch and attach it here. thank you very much! 
  
  
  
  
Signed-off-by: James (Song Wei) <jsong@xxxxxxxxxx> 
  
diff -r b622e411eef8 tools/python/xen/xend/XendDomain.py --- a/tools/python/xen/xend/XendDomain.py Thu Jun 24 21:56:03 2010 +0100 +++ b/tools/python/xen/xend/XendDomain.py Tue Jun 29 11:06:56 2010 +0800 @@ -250,6 +250,18 @@          @return: path to config file.          """          return os.path.join(self._managed_path(domuuid), CACHED_CONFIG_FILE) +    def domain_setpauseflag(self, dom, flag=False): +        try: +            dominfo = self.domain_lookup_nr(dom) +            dominfo.paused_by_admin = flag +        except Exception, err: +            log.debug("error in in setpauseflag") +    def domain_getpauseflag(self, dom): +        try: +            dominfo = self.domain_lookup_nr(dom) +            return dominfo.paused_by_admin +        except Exception, err: +            log.debug("error in in getpauseflag")        def _managed_check_point_path(self, domuuid):          """Returns absolute path to check point file for managed domain. diff -r b622e411eef8 tools/python/xen/xend/XendDomainInfo.py --- a/tools/python/xen/xend/XendDomainInfo.py Thu Jun 24 21:56:03 2010 +0100 +++ b/tools/python/xen/xend/XendDomainInfo.py Tue Jun 29 11:06:56 2010 +0800 @@ -329,6 +329,8 @@      @type info: dictionary      @ivar domid: Domain ID (if VM has started)      @type domid: int or None +    @ivar paused_by_admin: Is this Domain paused by command or API  +    @type paused_by_admin: bool       @ivar guest_bitsize: the bitsize of guest       @type guest_bitsize: int or None      @ivar alloc_mem: the memory domain allocated when booting  @@ -392,6 +394,7 @@              self.domid = domid          self.guest_bitsize = None          self.alloc_mem = None +        self.paused_by_admin = False            maxmem = self.info.get('memory_static_max', 0)          memory = self.info.get('memory_dynamic_max', 0) diff -r b622e411eef8 tools/python/xen/xend/server/SrvDomain.py --- a/tools/python/xen/xend/server/SrvDomain.py Thu Jun 24 21:56:03 2010 +0100 +++ b/tools/python/xen/xend/server/SrvDomain.py Tue Jun 29 11:06:56 2010 +0800 @@ -238,6 +238,20 @@      def op_reset(self, _, req):          self.acceptCommand(req)          return self.xd.domain_reset(self.dom.getName()) +  +    def op_do_get_pauseflag(self, op, req): +        self.acceptCommand(req) +        return req.threadRequest(self.do_get_pauseflag, op, req) + +    def do_get_pauseflag(self, _, req): +        return self.xd.domain_getpauseflag(self.dom.getName(), req) +  +    def op_do_set_pauseflag(self, op, req): +        self.acceptCommand(req) +        return req.threadRequest(self.do_set_pauseflag, op, req) + +    def do_set_pauseflag(self, _, req): +        return self.xd.domain_setpauseflag(self.dom.getName(), req)        def op_usb_add(self, op, req):          self.acceptCommand(req) diff -r b622e411eef8 tools/python/xen/xm/main.py --- a/tools/python/xen/xm/main.py Thu Jun 24 21:56:03 2010 +0100 +++ b/tools/python/xen/xm/main.py Tue Jun 29 11:06:56 2010 +0800 @@ -169,6 +169,8 @@      #usb      'usb-add'     : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Add the usb device to FV VM.'),      'usb-del'     : ('<domain> <[host:bus.addr] [host:vendor_id:product_id]>','Delete the usb device to FV VM.'), +    #domstate +    'domstate'  : ('<domain> ', 'get the state of a domain'),        # device commands   @@ -401,6 +403,7 @@      "uptime",      "usb-add",      "usb-del", +    "domstate",      "vcpu-set",      ]   @@ -435,6 +438,7 @@      "uptime",      "usb-add",      "usb-del", +    "domstate",      "vcpu-list",      "vcpu-pin",      "vcpu-set", @@ -948,7 +952,6 @@                      return "-"              state_str = "".join([state_on_off(state)                                   for state in states]) -                          dom_rec.update({'name':     dom_rec['name_label'],                              'memory_actual': int(dom_metrics_rec['memory_actual'])/1024,                              'vcpus':    dom_metrics_rec['VCPUs_number'], @@ -1457,8 +1460,10 @@        if serverType == SERVER_XEN_API:          server.xenapi.VM.pause(get_single_vm(dom)) +        server.xenapi.VM.set_pauseflag(get_single_vm(dom), True)      else:          server.xend.domain.pause(dom) +        server.xend.domain.setpauseflag(dom, True)    def xm_unpause(args):      arg_check(args, "unpause", 1) @@ -1466,8 +1471,10 @@        if serverType == SERVER_XEN_API:          server.xenapi.VM.unpause(get_single_vm(dom)) +        server.xenapi.VM.set_pauseflag(get_single_vm(dom), False)      else:          server.xend.domain.unpause(dom) +        server.xend.domain.setpauseflag(dom, False)    def xm_dump_core(args):      live = False @@ -1579,6 +1586,32 @@      arg_check(args, "usb-add", 2)      server.xend.domain.usb_add(args[0],args[1])   +def xm_domstate(args): +    arg_check(args, "domstate", 1) +    (opitons, params) = getopt.gnu_getopt(args, 's',  ['domname=']) +    doms = getDomains(params, 'all') +    d = parse_doms_info(doms[0]) +    state =  d['state'] +    if state: +        if   state.find('s') > 0: +            print 'shutoff'   +        elif state.find('b') > 0:  +            print 'idle'   +        elif state.find('d') > 0:  +            print 'shutdown'   +        elif state.find('r') > 0:  +            print 'running'   +        elif state.find('c') > 0: +            print 'crashed'  +        elif state.find('p') > 0: +            if server.xend.domain.getpauseflag(args[0]): +                print 'paused by admin' +            else: +                print 'paused' +    else: +        print 'shutoff' +    return  +  def xm_usb_del(args):      arg_check(args, "usb-del", 2)      server.xend.domain.usb_del(args[0],args[1]) @@ -3861,6 +3894,8 @@      #usb      "usb-add": xm_usb_add,      "usb-del": xm_usb_del, +    #domstate +    "domstate": xm_domstate,      }    ## The commands supported by a separate argument parser in xend.xm.
 
  >>> Ian Jackson <Ian.Jackson@xxxxxxxxxxxxx> 2010-6-25 22:21 >>> I wrote: > James (song wei) writes ("[Xen-devel] [PATCH] add a command to get the state of VMs"): > > add a command "domstate" to get the state of Vms, which may have one state of > > {'shutoff', 'idle','shutdown','running','crashed','paused' or 'paused by > > admin"}. >  > I'm going to apply this patch, but:
  I'm afraid that the patch has been mangled by your email client; it has been wordwrapped.
  Can you submit it again, please ?  If you can't manage to stop your email program mangling it, try sending it as an attachment (although if you do this please send a copy in the body of the message too as otherwise it can be hard for people to review it).
  Thanks, Ian.
  
 |