|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH] xl save but leave domain paused
----- Original Message -----
> From: Ian Campbell <Ian.Campbell@xxxxxxxxxx>
> To: Ian Murray <murrayie@xxxxxxxxxxx>
> Cc: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>; "xen-devel@xxxxxxxxxxxxx"
> <xen-devel@xxxxxxxxxxxxx>
> 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@xxxxxxxxxx>
>> >To: Ian Murray <murrayie@xxxxxxxxxxx>
>> >Cc: Ian.Campbell@xxxxxxxxxx; xen-devel@xxxxxxxxxxxxx
>> >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@xxxxxxxxxxx>
>> >> ---
>> >> 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@xxxxxxxxxxxxx
> http://lists.xen.org/xen-devel
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |