|
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] Re: [Xen-devel] [PATCH v3 1/5] remus: don't call stream_continue() when doing failover
On 01/09/2016 12:20 AM, Ian Campbell wrote:
> On Fri, 2016-01-08 at 14:38 +0800, Wen Congyang wrote:
>> stream_continue() is used for migration to read emulator
>> xenstore data and emulator context. For remus, if we do
>> failover, we have read it in the checkpoint cycle, and
>> we only need to complete the stream.
>>
>> Signed-off-by: Wen Congyang <wency@xxxxxxxxxxxxxx>
>> Reviewed-by: Andrew Cooper <andrew.cooper3@xxxxxxxxxx>
>> ---
>> tools/libxl/libxl_stream_read.c | 21 ++++++++++++++++-----
>> 1 file changed, 16 insertions(+), 5 deletions(-)
>>
>> diff --git a/tools/libxl/libxl_stream_read.c
>> b/tools/libxl/libxl_stream_read.c
>> index 258dec4..65219d5 100644
>> --- a/tools/libxl/libxl_stream_read.c
>> +++ b/tools/libxl/libxl_stream_read.c
>> @@ -758,6 +758,9 @@ void libxl__xc_domain_restore_done(libxl__egc *egc,
>> void *dcs_void,
>> libxl__stream_read_state *stream = &dcs->srs;
>> STATE_AO_GC(dcs->ao);
>>
>> + /* convenience aliases */
>> + const int checkpointed_stream = dcs-
>>> restore_params.checkpointed_stream;
>> +
>> if (rc)
>> goto err;
>>
>> @@ -777,11 +780,19 @@ void libxl__xc_domain_restore_done(libxl__egc *egc,
>> void *dcs_void,
>> * If the stream is not still alive, we must not continue any work.
>> */
>> if (libxl__stream_read_inuse(stream)) {
>> - /*
>> - * Libxc has indicated that it is done with the stream. Resume
>> reading
>> - * libxl records from it.
>> - */
>> - stream_continue(egc, stream);
>> + if (checkpointed_stream) {
>> + /*
>> + * Failover from primary. Domain state is currently at a
>> + * consistent checkpoint, ready to go.
>
> This implies that the stream is currently at a consistent point. Whereas
> what I think is meant is that things have failed (perhaps halfway through a
> checkpoint, i.e. not at a consistent state), therefore we stop and continue
> with the previous fully consistent checkpoint (which may have been earlier
> in the stream, not at the current point). Is that right?
The state is always consistent, because we buffer the state until all state are
received.
>
> And what does "ready to go" mean? Does it mean that we will return back to
> the next higher level or that we go somewhere else first?
stream's callback will be called to resume the guest.
>
> The big comment about flow control at the top of this file doesn't seem to
> cover the checkpoint case, if it did I suspect I would have found the
> answers there.
We buffer the state in xc_sr_restore.c.
Thanks
Wen Congyang
>
>> + */
>> + stream_complete(egc, stream, 0);
>> + } else {
>> + /*
>> + * Libxc has indicated that it is done with the stream.
>> + * Resume reading libxl records from it.
>> + */
>> + stream_continue(egc, stream);
>> + }
>> }
>> }
>>
>
_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel
|
![]() |
Lists.xenproject.org is hosted with RackSpace, monitoring our |