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

Re: [Xen-devel] [PATCH] xl: Introduce shutdown xm compatibility option -a to shutdown all domains



Thursday, September 6, 2012, 4:36:27 PM, you wrote:

> xl: Introduce shutdown xm compatibility option -a to shutdown all domains

> v2: address review comments.
>     - Change shutdown_domain to take domid instead of domname
>     - Docs: Make it more clear -a only shuts down GUEST domains

> Signed-off-by: Sander Eikelenboom <linux@xxxxxxxxxxxxxx>

> diff -r 9dc729b75595 -r c6d5f62c345b docs/man/xl.pod.1
> --- a/docs/man/xl.pod.1       Mon Sep 03 11:22:02 2012 +0100
> +++ b/docs/man/xl.pod.1       Thu Sep 06 16:35:04 2012 +0200
> @@ -527,7 +527,7 @@ List specifically for that domain. Other
>  
>  =back
>  
> -=item B<shutdown> [I<OPTIONS>] I<domain-id>
> +=item B<shutdown> [I<OPTIONS>] I<-a|domain-id>
>  
>  Gracefully shuts down a domain.  This coordinates with the domain OS
>  to perform graceful shutdown, so there is no guarantee that it will
> @@ -550,6 +550,10 @@ B<OPTIONS>
>  
>  =over 4
>  
> +=item B<-a>
> +
> +-a  Shutdown all guest domains.  Often used when doing a complete shutdown 
> of a Xen system.
> +
>  =item B<-w>
>  
>  Wait for the domain to complete shutdown before returning.
> diff -r 9dc729b75595 -r c6d5f62c345b tools/libxl/xl_cmdimpl.c
> --- a/tools/libxl/xl_cmdimpl.c  Mon Sep 03 11:22:02 2012 +0100
> +++ b/tools/libxl/xl_cmdimpl.c  Thu Sep 06 16:35:04 2012 +0200
> @@ -2683,12 +2683,11 @@ static void destroy_domain(const char *p
>      if (rc) { fprintf(stderr,"destroy failed (rc=%d)\n",rc); exit(-1); }
>  }
>  
> -static void shutdown_domain(const char *p, int wait, int fallback_trigger)
> +static void shutdown_domain(uint32_t domid, int wait, int fallback_trigger)
>  {
>      int rc;
>      libxl_event *event;
>  
> -    find_domain(p);
>      rc=libxl_domain_shutdown(ctx, domid);
>      if (rc == ERROR_NOPARAVIRT) {
>          if (fallback_trigger) {

Hi Ian,

Done some more testing and this seems to lead to the following error when 
issueing both -a and -w:

xentest:/usr/src/xen-unstable.hg# xl shutdown -a -w
libxl: error: libxl_json.c:773:libxl__object_to_json: unable to convert 
libxl_event to JSON representation. YAJL error code 1: keys must be strings
INTERNAL PROBLEM - ignoring unexpected event for domain 11 (expected -1): 
event=(null)
libxl: error: libxl_json.c:773:libxl__object_to_json: unable to convert 
libxl_event to JSON representation. YAJL error code 1: keys must be strings
INTERNAL PROBLEM - ignoring unexpected event for domain 11 (expected -1): 
event=(null)

If i only use -w and specify a specific domain, it works without a problem.

Any ideas ?

--
Sander


> @@ -3670,14 +3669,19 @@ int main_destroy(int argc, char **argv)
>  
>  int main_shutdown(int argc, char **argv)
>  {
> -    int opt;
> +    libxl_dominfo *dominfo;
> +    int opt, i, nb_domain;
> +    int all = 0;
>      int wait = 0;
>      int fallback_trigger = 0;
>  
> -    while ((opt = def_getopt(argc, argv, "wF", "shutdown", 1)) != -1) {
> +    while ((opt = def_getopt(argc, argv, "awF", "shutdown", 0)) != -1) {
>          switch (opt) {
>          case 0: case 2:
>              return opt;
> +        case 'a':
> +            all = 1;
> +            break;
>          case 'w':
>              wait = 1;
>              break;
> @@ -3687,7 +3691,30 @@ int main_shutdown(int argc, char **argv)
>          }
>      }
>  
> -    shutdown_domain(argv[optind], wait, fallback_trigger);
> +    if (!argv[optind] && !all) {
> +        fprintf(stderr, "You must specify -a or a domain id.\n\n");
> +        return opt;
> +    }
> +
> +    if (all) {
> +        if (!(dominfo = libxl_list_domain(ctx, &nb_domain))) {
> +            fprintf(stderr, "libxl_list_domain failed.\n");
> +            return -1;
> +        }
> +
> +        for (i = 0; i<nb_domain; i++) {
> +            if (dominfo[i].domid == 0)
> +                continue;
> +
> +            shutdown_domain(dominfo[i].domid, wait, fallback_trigger);
> +        }
> +
> +        libxl_dominfo_list_free(dominfo, nb_domain);
> +    } else {
> +        find_domain(argv[optind]);
> +        shutdown_domain(domid, wait, fallback_trigger);
> +    }
> +
>      return 0;
>  }
>  
> diff -r 9dc729b75595 -r c6d5f62c345b tools/libxl/xl_cmdtable.c
> --- a/tools/libxl/xl_cmdtable.c       Mon Sep 03 11:22:02 2012 +0100
> +++ b/tools/libxl/xl_cmdtable.c       Thu Sep 06 16:35:04 2012 +0200
> @@ -60,7 +60,8 @@ struct cmd_spec cmd_table[] = {
>      { "shutdown",
>        &main_shutdown, 0, 1,
>        "Issue a shutdown signal to a domain",
> -      "[options] <Domain>",
> +      "[options] <-a|Domain>",
> +      "-a                      Shutdown all guest domains.\n"
>        "-h                      Print this help.\n"
>        "-F                      Fallback to ACPI power event for HVM guests 
> with\n"
>        "                        no PV drivers.\n"




_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

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