Message ID | 20180603050546.6827-11-zhangckid@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 06/03/2018 12:05 AM, Zhang Chen wrote: > From: zhanghailiang <zhang.zhanghailiang@huawei.com> > > If some errors happen during VM's COLO FT stage, it's important to > notify the users of this event. Together with 'x-colo-lost-heartbeat', > Users can intervene in COLO's failover work immediately. > If users don't want to get involved in COLO's failover verdict, > it is still necessary to notify users that we exited COLO mode. > > Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com> > Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com> > Signed-off-by: Zhang Chen <zhangckid@gmail.com> > Reviewed-by: Eric Blake <eblake@redhat.com> > --- > migration/colo.c | 31 +++++++++++++++++++++++++++++++ > qapi/migration.json | 38 ++++++++++++++++++++++++++++++++++++++ > 2 files changed, 69 insertions(+) > > diff --git a/migration/colo.c b/migration/colo.c > index c083d3696f..bedb677788 100644 > --- a/migration/colo.c > > + /* > + * There are only two reasons we can go here, some error happened. > + * Or the user triggered failover. s/go here/get here/ s/happened. Or/happened, or/ > +++ b/qapi/migration.json > @@ -880,6 +880,44 @@ > { 'enum': 'FailoverStatus', > 'data': [ 'none', 'require', 'active', 'completed', 'relaunch' ] } > > +## > +# @COLO_EXIT: > +# > +# Emitted when VM finishes COLO mode due to some errors happening or > +# at the request of users. > +# > +# @mode: report COLO mode when COLO exited. > +# > +# @reason: describes the reason for the COLO exit. > +# > +# Since: 2.13 s/2.13/3.0/ > +# > +# Example: > +# > +# <- { "timestamp": {"seconds": 2032141960, "microseconds": 417172}, > +# "event": "COLO_EXIT", "data": {"mode": "primary", "reason": "request" } } > +# > +## > +{ 'event': 'COLO_EXIT', > + 'data': {'mode': 'COLOMode', 'reason': 'COLOExitReason' } } > + > +## > +# @COLOExitReason: > +# > +# The reason for a COLO exit > +# > +# @none: no failover has ever happened, This can't occur in the COLO_EXIT event, s/happened,/happened./ > +# only in the result of query-colo-status. > +# > +# @request: COLO exit is due to an external request > +# > +# @error: COLO exit is due to an internal error > +# > +# Since: 2.13 s/2.13/3.0/ > +## > +{ 'enum': 'COLOExitReason', > + 'data': [ 'none', 'request', 'error' ] } > + > ## > # @x-colo-lost-heartbeat: > # >
Eric Blake <eblake@redhat.com> writes: > On 06/03/2018 12:05 AM, Zhang Chen wrote: >> From: zhanghailiang <zhang.zhanghailiang@huawei.com> >> >> If some errors happen during VM's COLO FT stage, it's important to >> notify the users of this event. Together with 'x-colo-lost-heartbeat', >> Users can intervene in COLO's failover work immediately. >> If users don't want to get involved in COLO's failover verdict, >> it is still necessary to notify users that we exited COLO mode. >> >> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com> >> Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com> >> Signed-off-by: Zhang Chen <zhangckid@gmail.com> >> Reviewed-by: Eric Blake <eblake@redhat.com> >> --- >> migration/colo.c | 31 +++++++++++++++++++++++++++++++ >> qapi/migration.json | 38 ++++++++++++++++++++++++++++++++++++++ >> 2 files changed, 69 insertions(+) >> >> diff --git a/migration/colo.c b/migration/colo.c >> index c083d3696f..bedb677788 100644 >> --- a/migration/colo.c > >> + /* >> + * There are only two reasons we can go here, some error happened. >> + * Or the user triggered failover. > > s/go here/get here/ > s/happened. Or/happened, or/ > >> +++ b/qapi/migration.json >> @@ -880,6 +880,44 @@ >> { 'enum': 'FailoverStatus', >> 'data': [ 'none', 'require', 'active', 'completed', 'relaunch' ] } >> +## >> +# @COLO_EXIT: >> +# >> +# Emitted when VM finishes COLO mode due to some errors happening or >> +# at the request of users. >> +# >> +# @mode: report COLO mode when COLO exited. >> +# >> +# @reason: describes the reason for the COLO exit. >> +# >> +# Since: 2.13 > > s/2.13/3.0/ > >> +# >> +# Example: >> +# >> +# <- { "timestamp": {"seconds": 2032141960, "microseconds": 417172}, >> +# "event": "COLO_EXIT", "data": {"mode": "primary", "reason": "request" } } >> +# >> +## >> +{ 'event': 'COLO_EXIT', >> + 'data': {'mode': 'COLOMode', 'reason': 'COLOExitReason' } } >> + >> +## >> +# @COLOExitReason: >> +# >> +# The reason for a COLO exit >> +# >> +# @none: no failover has ever happened, This can't occur in the COLO_EXIT event, > > s/happened,/happened./ While there, wrap the line around column 70, please. >> +# only in the result of query-colo-status. >> +# >> +# @request: COLO exit is due to an external request >> +# >> +# @error: COLO exit is due to an internal error >> +# >> +# Since: 2.13 > > s/2.13/3.0/ > >> +## >> +{ 'enum': 'COLOExitReason', >> + 'data': [ 'none', 'request', 'error' ] } >> + >> ## >> # @x-colo-lost-heartbeat: >> # >> With these touch-ups: Reviewed-by: Markus Armbruster <armbru@redhat.com>
On Thu, Jun 7, 2018 at 8:54 PM, Markus Armbruster <armbru@redhat.com> wrote: > Eric Blake <eblake@redhat.com> writes: > > > On 06/03/2018 12:05 AM, Zhang Chen wrote: > >> From: zhanghailiang <zhang.zhanghailiang@huawei.com> > >> > >> If some errors happen during VM's COLO FT stage, it's important to > >> notify the users of this event. Together with 'x-colo-lost-heartbeat', > >> Users can intervene in COLO's failover work immediately. > >> If users don't want to get involved in COLO's failover verdict, > >> it is still necessary to notify users that we exited COLO mode. > >> > >> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com> > >> Signed-off-by: Li Zhijian <lizhijian@cn.fujitsu.com> > >> Signed-off-by: Zhang Chen <zhangckid@gmail.com> > >> Reviewed-by: Eric Blake <eblake@redhat.com> > >> --- > >> migration/colo.c | 31 +++++++++++++++++++++++++++++++ > >> qapi/migration.json | 38 ++++++++++++++++++++++++++++++++++++++ > >> 2 files changed, 69 insertions(+) > >> > >> diff --git a/migration/colo.c b/migration/colo.c > >> index c083d3696f..bedb677788 100644 > >> --- a/migration/colo.c > > > >> + /* > >> + * There are only two reasons we can go here, some error happened. > >> + * Or the user triggered failover. > > > > s/go here/get here/ > > s/happened. Or/happened, or/ > > > >> +++ b/qapi/migration.json > >> @@ -880,6 +880,44 @@ > >> { 'enum': 'FailoverStatus', > >> 'data': [ 'none', 'require', 'active', 'completed', 'relaunch' ] } > >> +## > >> +# @COLO_EXIT: > >> +# > >> +# Emitted when VM finishes COLO mode due to some errors happening or > >> +# at the request of users. > >> +# > >> +# @mode: report COLO mode when COLO exited. > >> +# > >> +# @reason: describes the reason for the COLO exit. > >> +# > >> +# Since: 2.13 > > > > s/2.13/3.0/ > > > >> +# > >> +# Example: > >> +# > >> +# <- { "timestamp": {"seconds": 2032141960, "microseconds": 417172}, > >> +# "event": "COLO_EXIT", "data": {"mode": "primary", "reason": > "request" } } > >> +# > >> +## > >> +{ 'event': 'COLO_EXIT', > >> + 'data': {'mode': 'COLOMode', 'reason': 'COLOExitReason' } } > >> + > >> +## > >> +# @COLOExitReason: > >> +# > >> +# The reason for a COLO exit > >> +# > >> +# @none: no failover has ever happened, This can't occur in the > COLO_EXIT event, > > > > s/happened,/happened./ > > While there, wrap the line around column 70, please. > > >> +# only in the result of query-colo-status. > >> +# > >> +# @request: COLO exit is due to an external request > >> +# > >> +# @error: COLO exit is due to an internal error > >> +# > >> +# Since: 2.13 > > > > s/2.13/3.0/ > > > >> +## > >> +{ 'enum': 'COLOExitReason', > >> + 'data': [ 'none', 'request', 'error' ] } > >> + > >> ## > >> # @x-colo-lost-heartbeat: > >> # > >> > > With these touch-ups: > Reviewed-by: Markus Armbruster <armbru@redhat.com> > I will fixed the typo and addressed comments in next version. Thanks Markus and Eric. Thanks Zhang Chen
diff --git a/migration/colo.c b/migration/colo.c index c083d3696f..bedb677788 100644 --- a/migration/colo.c +++ b/migration/colo.c @@ -28,6 +28,7 @@ #include "net/colo-compare.h" #include "net/colo.h" #include "block/block.h" +#include "qapi/qapi-events-migration.h" static bool vmstate_loading; static Notifier packets_compare_notifier; @@ -514,6 +515,23 @@ out: qemu_fclose(fb); } + /* + * There are only two reasons we can go here, some error happened. + * Or the user triggered failover. + */ + switch (failover_get_state()) { + case FAILOVER_STATUS_NONE: + qapi_event_send_colo_exit(COLO_MODE_PRIMARY, + COLO_EXIT_REASON_ERROR, NULL); + break; + case FAILOVER_STATUS_REQUIRE: + qapi_event_send_colo_exit(COLO_MODE_PRIMARY, + COLO_EXIT_REASON_REQUEST, NULL); + break; + default: + abort(); + } + /* Hope this not to be too long to wait here */ qemu_sem_wait(&s->colo_exit_sem); qemu_sem_destroy(&s->colo_exit_sem); @@ -745,6 +763,19 @@ out: error_report_err(local_err); } + switch (failover_get_state()) { + case FAILOVER_STATUS_NONE: + qapi_event_send_colo_exit(COLO_MODE_SECONDARY, + COLO_EXIT_REASON_ERROR, NULL); + break; + case FAILOVER_STATUS_REQUIRE: + qapi_event_send_colo_exit(COLO_MODE_SECONDARY, + COLO_EXIT_REASON_REQUEST, NULL); + break; + default: + abort(); + } + if (fb) { qemu_fclose(fb); } diff --git a/qapi/migration.json b/qapi/migration.json index dc9cc85545..93136ce5a0 100644 --- a/qapi/migration.json +++ b/qapi/migration.json @@ -880,6 +880,44 @@ { 'enum': 'FailoverStatus', 'data': [ 'none', 'require', 'active', 'completed', 'relaunch' ] } +## +# @COLO_EXIT: +# +# Emitted when VM finishes COLO mode due to some errors happening or +# at the request of users. +# +# @mode: report COLO mode when COLO exited. +# +# @reason: describes the reason for the COLO exit. +# +# Since: 2.13 +# +# Example: +# +# <- { "timestamp": {"seconds": 2032141960, "microseconds": 417172}, +# "event": "COLO_EXIT", "data": {"mode": "primary", "reason": "request" } } +# +## +{ 'event': 'COLO_EXIT', + 'data': {'mode': 'COLOMode', 'reason': 'COLOExitReason' } } + +## +# @COLOExitReason: +# +# The reason for a COLO exit +# +# @none: no failover has ever happened, This can't occur in the COLO_EXIT event, +# only in the result of query-colo-status. +# +# @request: COLO exit is due to an external request +# +# @error: COLO exit is due to an internal error +# +# Since: 2.13 +## +{ 'enum': 'COLOExitReason', + 'data': [ 'none', 'request', 'error' ] } + ## # @x-colo-lost-heartbeat: #