On Mon, Jun 4, 2018 at 2:36 PM, Jason Wang <jasowang@redhat.com> wrote:
>
>
> On 2018年06月03日 13:05, Zhang Chen wrote:
>
>> It's a good idea to use notifier to notify COLO frame of
>> inconsistent packets comparing.
>>
>> Signed-off-by: Zhang Chen <zhangckid@gmail.com>
>> Signed-off-by: zhanghailiang <zhang.zhanghailiang@huawei.com>
>> ---
>> net/colo-compare.c | 32 +++++++++++++++++++++++++-------
>> net/colo-compare.h | 2 ++
>> 2 files changed, 27 insertions(+), 7 deletions(-)
>>
>> diff --git a/net/colo-compare.c b/net/colo-compare.c
>> index 7ff3ae8904..05061cd1c4 100644
>> --- a/net/colo-compare.c
>> +++ b/net/colo-compare.c
>> @@ -29,6 +29,7 @@
>> #include "sysemu/iothread.h"
>> #include "net/colo-compare.h"
>> #include "migration/colo.h"
>> +#include "migration/migration.h"
>> #define TYPE_COLO_COMPARE "colo-compare"
>> #define COLO_COMPARE(obj) \
>> @@ -37,6 +38,9 @@
>> static QTAILQ_HEAD(, CompareState) net_compares =
>> QTAILQ_HEAD_INITIALIZER(net_compares);
>> +static NotifierList colo_compare_notifiers =
>> + NOTIFIER_LIST_INITIALIZER(colo_compare_notifiers);
>> +
>> #define COMPARE_READ_LEN_MAX NET_BUFSIZE
>> #define MAX_QUEUE_SIZE 1024
>> @@ -561,8 +565,24 @@ static int colo_old_packet_check_one(Packet *pkt,
>> int64_t *check_time)
>> }
>> }
>> +static void colo_compare_inconsistent_notify(void)
>> +{
>>
>
> Not good at English but inconsistency sounds better here.
>
>
Sorry, I'm not good at English too...
I will change to "inconsistency" in next version.
Thanks
Zhang Chen
> Thanks
>
>
> + notifier_list_notify(&colo_compare_notifiers,
>> + migrate_get_current());
>> +}
>> +
>> +void colo_compare_register_notifier(Notifier *notify)
>> +{
>> + notifier_list_add(&colo_compare_notifiers, notify);
>> +}
>> +
>> +void colo_compare_unregister_notifier(Notifier *notify)
>> +{
>> + notifier_remove(notify);
>> +}
>> +
>> static int colo_old_packet_check_one_conn(Connection *conn,
>> - void *user_data)
>> + void *user_data)
>> {
>> GList *result = NULL;
>> int64_t check_time = REGULAR_PACKET_CHECK_MS;
>> @@ -573,10 +593,7 @@ static int colo_old_packet_check_one_conn(Connection
>> *conn,
>> if (result) {
>> /* Do checkpoint will flush old packet */
>> - /*
>> - * TODO: Notify colo frame to do checkpoint.
>> - * colo_compare_inconsistent_notify();
>> - */
>> + colo_compare_inconsistent_notify();
>> return 0;
>> }
>> @@ -620,11 +637,12 @@ static void colo_compare_packet(CompareState *s,
>> Connection *conn,
>> /*
>> * If one packet arrive late, the secondary_list or
>> * primary_list will be empty, so we can't compare it
>> - * until next comparison.
>> + * until next comparison. If the packets in the list are
>> + * timeout, it will trigger a checkpoint request.
>> */
>> trace_colo_compare_main("packet different");
>> g_queue_push_head(&conn->primary_list, pkt);
>> - /* TODO: colo_notify_checkpoint();*/
>> + colo_compare_inconsistent_notify();
>> break;
>> }
>> }
>> diff --git a/net/colo-compare.h b/net/colo-compare.h
>> index 1b1ce76aea..22ddd512e2 100644
>> --- a/net/colo-compare.h
>> +++ b/net/colo-compare.h
>> @@ -18,5 +18,7 @@
>> #define QEMU_COLO_COMPARE_H
>> void colo_notify_compares_event(void *opaque, int event, Error
>> **errp);
>> +void colo_compare_register_notifier(Notifier *notify);
>> +void colo_compare_unregister_notifier(Notifier *notify);
>> #endif /* QEMU_COLO_COMPARE_H */
>>
>
>