* [PATCH] xl save but leave domain paused @ 2013-07-02 23:34 Ian Murray 2013-07-02 23:55 ` Andrew Cooper 0 siblings, 1 reply; 5+ messages in thread From: Ian Murray @ 2013-07-02 23:34 UTC (permalink / raw) To: xen-devel; +Cc: Ian Murray, Ian.Campbell New feature to allow xl save to leave a domain paused after its memory has been saved. This is to allow disk snapshots of domU to be taken that exactly correspond to the memory state at save time. Once the snapshot(s) have been taken or whatever, the domain can be unpaused in the usual manner. Usage: xl save -p <domid> <filespec> Signed-off-by: Ian Murray <murrayie@yahoo.co.uk> --- tools/libxl/xl_cmdimpl.c | 16 ++++++++++++---- tools/libxl/xl_cmdtable.c | 4 +++- 2 files changed, 15 insertions(+), 5 deletions(-) diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c index 8a478ba..670620b 100644 --- a/tools/libxl/xl_cmdimpl.c +++ b/tools/libxl/xl_cmdimpl.c @@ -3266,7 +3266,7 @@ static void save_domain_core_writeconfig(int fd, const char *source, } static int save_domain(uint32_t domid, const char *filename, int checkpoint, - const char *override_config_file) + int leavepaused, const char *override_config_file) { int fd; uint8_t *config_data; @@ -3293,8 +3293,12 @@ static int save_domain(uint32_t domid, const char *filename, int checkpoint, if (rc < 0) fprintf(stderr, "Failed to save domain, resuming domain\n"); - if (checkpoint || rc < 0) + if (leavepaused || checkpoint || rc < 0) { + if (leavepaused && !(rc < 0)) { + libxl_domain_pause(ctx, domid); + } libxl_domain_resume(ctx, domid, 1, 0); + } else libxl_domain_destroy(ctx, domid, 0); @@ -3838,12 +3842,16 @@ int main_save(int argc, char **argv) const char *filename; const char *config_filename = NULL; int checkpoint = 0; + int leavepaused = 0; int opt; - SWITCH_FOREACH_OPT(opt, "c", NULL, "save", 2) { + SWITCH_FOREACH_OPT(opt, "cp", NULL, "save", 2) { case 'c': checkpoint = 1; break; + case 'p': + leavepaused = 1; + break; } if (argc-optind > 3) { @@ -3856,7 +3864,7 @@ int main_save(int argc, char **argv) if ( argc - optind >= 3 ) config_filename = argv[optind + 2]; - save_domain(domid, filename, checkpoint, config_filename); + save_domain(domid, filename, checkpoint, leavepaused, config_filename); return 0; } diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c index 44b42b0..c429cea 100644 --- a/tools/libxl/xl_cmdtable.c +++ b/tools/libxl/xl_cmdtable.c @@ -142,7 +142,9 @@ struct cmd_spec cmd_table[] = { "Save a domain state to restore later", "[options] <Domain> <CheckpointFile> [<ConfigFile>]", "-h Print this help.\n" - "-c Leave domain running after creating the snapshot." + "-c Leave domain running after creating the snapshot.\n" + "-p Leave domain paused after creating the snapshot." + }, { "migrate", &main_migrate, 0, 1, -- 1.7.9.5 ^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH] xl save but leave domain paused 2013-07-02 23:34 [PATCH] xl save but leave domain paused Ian Murray @ 2013-07-02 23:55 ` Andrew Cooper 2013-07-03 8:08 ` Ian Murray 0 siblings, 1 reply; 5+ messages in thread From: Andrew Cooper @ 2013-07-02 23:55 UTC (permalink / raw) To: Ian Murray; +Cc: Ian.Campbell, xen-devel On 03/07/2013 00:34, Ian Murray wrote: > New feature to allow xl save to leave a domain paused after its > memory has been saved. This is to allow disk snapshots of domU > to be taken that exactly correspond to the memory state at save time. > Once the snapshot(s) have been taken or whatever, the domain can be > unpaused in the usual manner. > > Usage: > xl save -p <domid> <filespec> > > Signed-off-by: Ian Murray <murrayie@yahoo.co.uk> > --- > tools/libxl/xl_cmdimpl.c | 16 ++++++++++++---- > tools/libxl/xl_cmdtable.c | 4 +++- > 2 files changed, 15 insertions(+), 5 deletions(-) > > diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c > index 8a478ba..670620b 100644 > --- a/tools/libxl/xl_cmdimpl.c > +++ b/tools/libxl/xl_cmdimpl.c > @@ -3266,7 +3266,7 @@ static void save_domain_core_writeconfig(int fd, const char *source, > } > > static int save_domain(uint32_t domid, const char *filename, int checkpoint, > - const char *override_config_file) > + int leavepaused, const char *override_config_file) #include <stdbool.h> and use bool rather than int. Also, re-align the second line arguments which was misaligned when the function was made static > { > int fd; > uint8_t *config_data; > @@ -3293,8 +3293,12 @@ static int save_domain(uint32_t domid, const char *filename, int checkpoint, > if (rc < 0) > fprintf(stderr, "Failed to save domain, resuming domain\n"); > > - if (checkpoint || rc < 0) > + if (leavepaused || checkpoint || rc < 0) { > + if (leavepaused && !(rc < 0)) { > + libxl_domain_pause(ctx, domid); > + } > libxl_domain_resume(ctx, domid, 1, 0); > + } This logic is quite opaque. It would be clearer to have if (leavepaused && rc == 0) pause() else if (checkpoint ... > else > libxl_domain_destroy(ctx, domid, 0); > > @@ -3838,12 +3842,16 @@ int main_save(int argc, char **argv) > const char *filename; > const char *config_filename = NULL; > int checkpoint = 0; > + int leavepaused = 0; > int opt; > > - SWITCH_FOREACH_OPT(opt, "c", NULL, "save", 2) { > + SWITCH_FOREACH_OPT(opt, "cp", NULL, "save", 2) { > case 'c': > checkpoint = 1; > break; > + case 'p': > + leavepaused = 1; > + break; > } > > if (argc-optind > 3) { > @@ -3856,7 +3864,7 @@ int main_save(int argc, char **argv) > if ( argc - optind >= 3 ) > config_filename = argv[optind + 2]; > > - save_domain(domid, filename, checkpoint, config_filename); > + save_domain(domid, filename, checkpoint, leavepaused, config_filename); > return 0; > } > > diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c > index 44b42b0..c429cea 100644 > --- a/tools/libxl/xl_cmdtable.c > +++ b/tools/libxl/xl_cmdtable.c > @@ -142,7 +142,9 @@ struct cmd_spec cmd_table[] = { > "Save a domain state to restore later", > "[options] <Domain> <CheckpointFile> [<ConfigFile>]", > "-h Print this help.\n" > - "-c Leave domain running after creating the snapshot." > + "-c Leave domain running after creating the snapshot.\n" > + "-p Leave domain paused after creating the snapshot." > + Needless whitespace > }, > { "migrate", > &main_migrate, 0, 1, Can you also patch the manpage, docs/man/xl.pod.1 to the same effect ~Andrew ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] xl save but leave domain paused 2013-07-02 23:55 ` Andrew Cooper @ 2013-07-03 8:08 ` Ian Murray 2013-07-03 8:38 ` Ian Campbell 0 siblings, 1 reply; 5+ messages in thread From: Ian Murray @ 2013-07-03 8:08 UTC (permalink / raw) To: Andrew Cooper; +Cc: Ian.Campbell@citrix.com, xen-devel@lists.xen.org >________________________________ > From: Andrew Cooper <andrew.cooper3@citrix.com> >To: Ian Murray <murrayie@yahoo.co.uk> >Cc: Ian.Campbell@citrix.com; xen-devel@lists.xen.org >Sent: Wednesday, 3 July 2013, 0:55 >Subject: Re: [Xen-devel] [PATCH] xl save but leave domain paused > > Thanks for your feedback. >On 03/07/2013 00:34, Ian Murray wrote: >> New feature to allow xl save to leave a domain paused after its >> memory has been saved. This is to allow disk snapshots of domU >> to be taken that exactly correspond to the memory state at save time. >> Once the snapshot(s) have been taken or whatever, the domain can be >> unpaused in the usual manner. >> >> Usage: >> xl save -p <domid> <filespec> >> >> Signed-off-by: Ian Murray <murrayie@yahoo.co.uk> >> --- >> tools/libxl/xl_cmdimpl.c | 16 ++++++++++++---- >> tools/libxl/xl_cmdtable.c | 4 +++- >> 2 files changed, 15 insertions(+), 5 deletions(-) >> >> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c >> index 8a478ba..670620b 100644 >> --- a/tools/libxl/xl_cmdimpl.c >> +++ b/tools/libxl/xl_cmdimpl.c >> @@ -3266,7 +3266,7 @@ static void save_domain_core_writeconfig(int fd, const char *source, >> } >> >> static int save_domain(uint32_t domid, const char *filename, int checkpoint, >> - const char *override_config_file) >> + int leavepaused, const char *override_config_file) > >#include <stdbool.h> and use bool rather than int. Also, re-align the >second line arguments which was misaligned when the function was made static I used an int for consistency, as this was how the checkpoint was done. I can change it if you like, but it is going to be inconsistent with checkpoint. I could do checkpoint as well but that would be fixing code that isn't broken, which is a bit out of scope and makes the patch footprint bigger. As for the misalignment, is there a style guide or should I just look round some more? I just re-used what was there, which wasn't helpful given it was already broke. I don't want to copy any more OP's mis-alignment mistakes. :) > >> { >> int fd; >> uint8_t *config_data; >> @@ -3293,8 +3293,12 @@ static int save_domain(uint32_t domid, const char *filename, int checkpoint, >> if (rc < 0) >> fprintf(stderr, "Failed to save domain, resuming domain\n"); >> >> - if (checkpoint || rc < 0) >> + if (leavepaused || checkpoint || rc < 0) { >> + if (leavepaused && !(rc < 0)) { >> + libxl_domain_pause(ctx, domid); >> + } >> libxl_domain_resume(ctx, domid, 1, 0); >> + } > >This logic is quite opaque. It would be clearer to have > >if (leavepaused && rc == 0) > pause() >else if (checkpoint ... In itself, this isn't correct logic because the resume has to occur for both checkpointing or pausing. You would end up with if (leavepaused && ...) { pause() resume() } else if (checkpoint && ...) { resume() } Is this preferable? I tend to avoid repeating code if I can help it esp in if statements, although perhaps it does read easier. I used the !(rc<0) because I didn't want to make assumptions about the possible value of rc, given the rest of the code uses rc<0 > >> else >> libxl_domain_destroy(ctx, domid, 0); >> >> @@ -3838,12 +3842,16 @@ int main_save(int argc, char **argv) >> const char *filename; >> const char *config_filename = NULL; >> int checkpoint = 0; >> + int leavepaused = 0; >> int opt; >> >> - SWITCH_FOREACH_OPT(opt, "c", NULL, "save", 2) { >> + SWITCH_FOREACH_OPT(opt, "cp", NULL, "save", 2) { >> case 'c': >> checkpoint = 1; >> break; >> + case 'p': >> + leavepaused = 1; >> + break; >> } >> >> if (argc-optind > 3) { >> @@ -3856,7 +3864,7 @@ int main_save(int argc, char **argv) >> if ( argc - optind >= 3 ) >> config_filename = argv[optind + 2]; >> >> - save_domain(domid, filename, checkpoint, config_filename); >> + save_domain(domid, filename, checkpoint, leavepaused, config_filename); >> return 0; >> } >> >> diff --git a/tools/libxl/xl_cmdtable.c b/tools/libxl/xl_cmdtable.c >> index 44b42b0..c429cea 100644 >> --- a/tools/libxl/xl_cmdtable.c >> +++ b/tools/libxl/xl_cmdtable.c >> @@ -142,7 +142,9 @@ struct cmd_spec cmd_table[] = { >> "Save a domain state to restore later", >> "[options] <Domain> <CheckpointFile> [<ConfigFile>]", >> "-h Print this help.\n" >> - "-c Leave domain running after creating the snapshot." >> + "-c Leave domain running after creating the snapshot.\n" >> + "-p Leave domain paused after creating the snapshot." >> + > >Needless whitespace Sure. Slipped in by accident. > >> }, >> { "migrate", >> &main_migrate, 0, 1, > >Can you also patch the manpage, docs/man/xl.pod.1 to the same effect Yeah, I forgot about that. Thanks. Thanks again for your response. > >~Andrew > >_______________________________________________ >Xen-devel mailing list >Xen-devel@lists.xen.org >http://lists.xen.org/xen-devel > > > ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] xl save but leave domain paused 2013-07-03 8:08 ` Ian Murray @ 2013-07-03 8:38 ` Ian Campbell 2013-07-03 13:31 ` Ian Murray 0 siblings, 1 reply; 5+ messages in thread From: Ian Campbell @ 2013-07-03 8:38 UTC (permalink / raw) To: Ian Murray; +Cc: Andrew Cooper, xen-devel@lists.xen.org On Wed, 2013-07-03 at 09:08 +0100, Ian Murray wrote: > > > > > > > >________________________________ > > From: Andrew Cooper <andrew.cooper3@citrix.com> > >To: Ian Murray <murrayie@yahoo.co.uk> > >Cc: Ian.Campbell@citrix.com; xen-devel@lists.xen.org > >Sent: Wednesday, 3 July 2013, 0:55 > >Subject: Re: [Xen-devel] [PATCH] xl save but leave domain paused > > > > > > Thanks for your feedback. > > > > >On 03/07/2013 00:34, Ian Murray wrote: > >> New feature to allow xl save to leave a domain paused after its > >> memory has been saved. This is to allow disk snapshots of domU > >> to be taken that exactly correspond to the memory state at save time. > >> Once the snapshot(s) have been taken or whatever, the domain can be > >> unpaused in the usual manner. > >> > >> Usage: > >> xl save -p <domid> <filespec> > >> > >> Signed-off-by: Ian Murray <murrayie@yahoo.co.uk> > >> --- > >> tools/libxl/xl_cmdimpl.c | 16 ++++++++++++---- > >> tools/libxl/xl_cmdtable.c | 4 +++- > >> 2 files changed, 15 insertions(+), 5 deletions(-) > >> > >> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c > >> index 8a478ba..670620b 100644 > >> --- a/tools/libxl/xl_cmdimpl.c > >> +++ b/tools/libxl/xl_cmdimpl.c > >> @@ -3266,7 +3266,7 @@ static void save_domain_core_writeconfig(int fd, const char *source, > >> } > >> > >> static int save_domain(uint32_t domid, const char *filename, int checkpoint, > >> - const char *override_config_file) > >> + int leavepaused, const char *override_config_file) > > > >#include <stdbool.h> and use bool rather than int. Also, re-align the > >second line arguments which was misaligned when the function was made static > > I used an int for consistency, as this was how the checkpoint was > done. I can change it if you like, but it is going to be inconsistent > with checkpoint. I could do checkpoint as well but that would be > fixing code that isn't broken, which is a bit out of scope and makes > the patch footprint bigger. I don't think this is necessary unless you really want to. If xl_cmdimpl.c was already using bool in some places it might be more worthwhile, but currently it doesn't use it at all. IMHO any overall change to use bool should be in a separate patch, but there is no onus on you to make this change unless you want to. > As for the misalignment, is there a style guide or should I just look > round some more? I just re-used what was there, which wasn't helpful > given it was already broke. I don't want to copy any more OP's > mis-alignment mistakes. :) tools/libxl/CODING_STYLE covers this code. There is also a top-level CODING_STYLE which sometimes applies when there is no more specific CODING_STYLE documented (although see the caveats at the top of the file) > >> { > >> int fd; > >> uint8_t *config_data; > >> @@ -3293,8 +3293,12 @@ static int save_domain(uint32_t domid, const char *filename, int checkpoint, > >> if (rc < 0) > >> fprintf(stderr, "Failed to save domain, resuming domain\n"); > >> > >> - if (checkpoint || rc < 0) > >> + if (leavepaused || checkpoint || rc < 0) { > >> + if (leavepaused && !(rc < 0)) { > >> + libxl_domain_pause(ctx, domid); > >> + } > >> libxl_domain_resume(ctx, domid, 1, 0); > >> + } > > > >This logic is quite opaque. It would be clearer to have > > > >if (leavepaused && rc == 0) > > pause() > >else if (checkpoint ... > > In itself, this isn't correct logic because the resume has to occur for both checkpointing or pausing. > > You would end up with > > if (leavepaused && ...) { > > pause() > resume() > > } else if (checkpoint && ...) { > resume() > > } else if ( rc < 0 ) { resume() too... > Is this preferable? I tend to avoid repeating code if I can help it > esp in if statements, although perhaps it does read easier. Both variants have their upside and downside IMHO. What about refactoring the failure case (rc < 0) out from the success cases? if (rc < 0) { resume(...) } else if (leavepaused || checkpoint) { if (leavepaused) pause(...) resume(...) } It's still a repetitive but "error" and "not error" are somewhat different cases IYSWIM. Ian. ^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH] xl save but leave domain paused 2013-07-03 8:38 ` Ian Campbell @ 2013-07-03 13:31 ` Ian Murray 0 siblings, 0 replies; 5+ messages in thread From: Ian Murray @ 2013-07-03 13:31 UTC (permalink / raw) To: Ian Campbell; +Cc: Andrew Cooper, xen-devel@lists.xen.org ----- Original Message ----- > From: Ian Campbell <Ian.Campbell@citrix.com> > To: Ian Murray <murrayie@yahoo.co.uk> > Cc: Andrew Cooper <andrew.cooper3@citrix.com>; "xen-devel@lists.xen.org" <xen-devel@lists.xen.org> > Sent: Wednesday, 3 July 2013, 9:38 > Subject: Re: [Xen-devel] [PATCH] xl save but leave domain paused > > On Wed, 2013-07-03 at 09:08 +0100, Ian Murray wrote: >> >> >> >> >> >> >> >________________________________ >> > From: Andrew Cooper <andrew.cooper3@citrix.com> >> >To: Ian Murray <murrayie@yahoo.co.uk> >> >Cc: Ian.Campbell@citrix.com; xen-devel@lists.xen.org >> >Sent: Wednesday, 3 July 2013, 0:55 >> >Subject: Re: [Xen-devel] [PATCH] xl save but leave domain paused >> > >> > >> >> Thanks for your feedback. >> >> >> >> >On 03/07/2013 00:34, Ian Murray wrote: >> >> New feature to allow xl save to leave a domain paused after its >> >> memory has been saved. This is to allow disk snapshots of domU >> >> to be taken that exactly correspond to the memory state at save > time. >> >> Once the snapshot(s) have been taken or whatever, the domain can > be >> >> unpaused in the usual manner. >> >> >> >> Usage: >> >> xl save -p <domid> <filespec> >> >> >> >> Signed-off-by: Ian Murray <murrayie@yahoo.co.uk> >> >> --- >> >> tools/libxl/xl_cmdimpl.c | 16 ++++++++++++---- >> >> tools/libxl/xl_cmdtable.c | 4 +++- >> >> 2 files changed, 15 insertions(+), 5 deletions(-) >> >> >> >> diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c >> >> index 8a478ba..670620b 100644 >> >> --- a/tools/libxl/xl_cmdimpl.c >> >> +++ b/tools/libxl/xl_cmdimpl.c >> >> @@ -3266,7 +3266,7 @@ static void save_domain_core_writeconfig(int > fd, const char *source, >> >> } >> >> >> >> static int save_domain(uint32_t domid, const char *filename, int > checkpoint, >> >> - const char *override_config_file) >> >> + int leavepaused, const char > *override_config_file) >> > >> >#include <stdbool.h> and use bool rather than int. Also, > re-align the >> >second line arguments which was misaligned when the function was made > static >> >> I used an int for consistency, as this was how the checkpoint was >> done. I can change it if you like, but it is going to be inconsistent >> with checkpoint. I could do checkpoint as well but that would be >> fixing code that isn't broken, which is a bit out of scope and makes >> the patch footprint bigger. > > I don't think this is necessary unless you really want to. If > xl_cmdimpl.c was already using bool in some places it might be more > worthwhile, but currently it doesn't use it at all. > > IMHO any overall change to use bool should be in a separate patch, but > there is no onus on you to make this change unless you want to. > No, I will leave as is, if it's all the same. >> As for the misalignment, is there a style guide or should I just look >> round some more? I just re-used what was there, which wasn't helpful >> given it was already broke. I don't want to copy any more OP's >> mis-alignment mistakes. :) > > tools/libxl/CODING_STYLE covers this code. > > There is also a top-level CODING_STYLE which sometimes applies when > there is no more specific CODING_STYLE documented (although see the > caveats at the top of the file) ) Thanks, I will take a look. > >> >> { >> >> int fd; >> >> uint8_t *config_data; >> >> @@ -3293,8 +3293,12 @@ static int save_domain(uint32_t domid, > const char *filename, int checkpoint, >> >> if (rc < 0) >> >> fprintf(stderr, "Failed to save domain, resuming > domain\n"); >> >> >> >> - if (checkpoint || rc < 0) >> >> + if (leavepaused || checkpoint || rc < 0) { >> >> + if (leavepaused && !(rc < 0)) { >> >> + libxl_domain_pause(ctx, domid); >> >> + } >> >> libxl_domain_resume(ctx, domid, 1, 0); >> >> + } >> > >> >This logic is quite opaque. It would be clearer to have >> > >> >if (leavepaused && rc == 0) >> > pause() >> >else if (checkpoint ... >> >> In itself, this isn't correct logic because the resume has to occur for > both checkpointing or pausing. >> >> You would end up with >> >> if (leavepaused && ...) { >> >> pause() >> resume() >> >> } else if (checkpoint && ...) { >> resume() >> >> } > else if ( rc < 0 ) { > resume() > too... > >> Is this preferable? I tend to avoid repeating code if I can help it >> esp in if statements, although perhaps it does read easier. > > Both variants have their upside and downside IMHO. > > What about refactoring the failure case (rc < 0) out from the success > cases? > if (rc < 0) { > resume(...) > } else if (leavepaused || checkpoint) { > if (leavepaused) pause(...) > resume(...) > } > > It's still a repetitive but "error" and "not error" are > somewhat > different cases IYSWIM. Possibly an exercise in cat skinning, but I do see the logic of your logic ( ;) ), so am happy to go with it. > > Ian. > > > _______________________________________________ > Xen-devel mailing list > Xen-devel@lists.xen.org > http://lists.xen.org/xen-devel > ^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2013-07-03 13:31 UTC | newest] Thread overview: 5+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2013-07-02 23:34 [PATCH] xl save but leave domain paused Ian Murray 2013-07-02 23:55 ` Andrew Cooper 2013-07-03 8:08 ` Ian Murray 2013-07-03 8:38 ` Ian Campbell 2013-07-03 13:31 ` Ian Murray
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.