Skip to contentSkip to conversation

migration/colo.c: Fix compilation issue when disable replication

PATCH Superseded Zhang Chen 2 participants 6 messages Oct 24, 2018 – Nov 1, 2018

v1 of 2 Superseded Latest is v2 →

lore
Share & tools
lore

Zhang Chen

author
#0 lore raw

PATCH 1/1 migration/colo.c: Fix compilation issue when disable replication

This compilation issue will occur when user use --disable-replication to config Qemu.

---
 migration/colo.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)
migration/colo.c +17 -1
index 956ac236b7..b81e6ec5bb 100644
@@ -59,6 +59,8 @@ static bool colo_runstate_is_stopped(void)
 
 static void secondary_vm_do_failover(void)
 {
+/* COLO needs enable block-replication */
+#ifdef CONFIG_REPLICATION
     int old_state;
     MigrationIncomingState *mis = migration_incoming_get_current();
     Error *local_err = NULL;
@@ -121,10 +123,14 @@ static void secondary_vm_do_failover(void)
     if (mis->migration_incoming_co) {
         qemu_coroutine_enter(mis->migration_incoming_co);
     }
+#else
+    abort();
+#endif
 }
 
 static void primary_vm_do_failover(void)
 {
+#ifdef CONFIG_REPLICATION
     MigrationState *s = migrate_get_current();
     int old_state;
     Error *local_err = NULL;
@@ -165,6 +171,9 @@ static void primary_vm_do_failover(void)
 
     /* Notify COLO thread that failover work is finished */
     qemu_sem_post(&s->colo_exit_sem);
+#else
+    abort();
+#endif
 }
 
 COLOMode get_colo_mode(void)
@@ -373,6 +382,7 @@ static int colo_do_checkpoint_transaction(MigrationState *s,
                                           QIOChannelBuffer *bioc,
                                           QEMUFile *fb)
 {
+#ifdef CONFIG_REPLICATION
     Error *local_err = NULL;
     int ret = -1;
 
@@ -483,6 +493,9 @@ out:
         error_report_err(local_err);
     }
     return ret;
+#else
+    abort();
+#endif
 }
 
 static void colo_compare_notify_checkpoint(Notifier *notifier, void *data)
@@ -790,13 +803,16 @@ void *colo_process_incoming_thread(void *opaque)
             qemu_mutex_unlock_iothread();
             goto out;
         }
+#ifdef CONFIG_REPLICATION
         /* discard colo disk buffer */
         replication_do_checkpoint_all(&local_err);
         if (local_err) {
             qemu_mutex_unlock_iothread();
             goto out;
         }
-
+#else
+        abort();
+#endif
         /* Notify all filters of all NIC to do checkpoint */
         colo_notify_filters_event(COLO_EVENT_CHECKPOINT, &local_err);
 
Signature · 1 line
2.17.GIT
Reviewed-by on v1 1/1
#1 lore raw
Quoted 5 lines · * Zhang Chen ([email protected]) wrote:

This compilation issue will occur when user use --disable-replication to config Qemu.

OK; do we need to add a check to migrate_caps_check to stop you enabling colo in this case?

Quoted 81 lines
---
 migration/colo.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)
migration/colo.c +17 -1
index 956ac236b7..b81e6ec5bb 100644
@@ -59,6 +59,8 @@ static bool colo_runstate_is_stopped(void)
 
 static void secondary_vm_do_failover(void)
 {
+/* COLO needs enable block-replication */
+#ifdef CONFIG_REPLICATION
     int old_state;
     MigrationIncomingState *mis = migration_incoming_get_current();
     Error *local_err = NULL;
@@ -121,10 +123,14 @@ static void secondary_vm_do_failover(void)
     if (mis->migration_incoming_co) {
         qemu_coroutine_enter(mis->migration_incoming_co);
     }
+#else
+    abort();
+#endif
 }
 
 static void primary_vm_do_failover(void)
 {
+#ifdef CONFIG_REPLICATION
     MigrationState *s = migrate_get_current();
     int old_state;
     Error *local_err = NULL;
@@ -165,6 +171,9 @@ static void primary_vm_do_failover(void)
 
     /* Notify COLO thread that failover work is finished */
     qemu_sem_post(&s->colo_exit_sem);
+#else
+    abort();
+#endif
 }
 
 COLOMode get_colo_mode(void)
@@ -373,6 +382,7 @@ static int colo_do_checkpoint_transaction(MigrationState *s,
                                           QIOChannelBuffer *bioc,
                                           QEMUFile *fb)
 {
+#ifdef CONFIG_REPLICATION
     Error *local_err = NULL;
     int ret = -1;
 
@@ -483,6 +493,9 @@ out:
         error_report_err(local_err);
     }
     return ret;
+#else
+    abort();
+#endif
 }
 
 static void colo_compare_notify_checkpoint(Notifier *notifier, void *data)
@@ -790,13 +803,16 @@ void *colo_process_incoming_thread(void *opaque)
             qemu_mutex_unlock_iothread();
             goto out;
         }
+#ifdef CONFIG_REPLICATION
         /* discard colo disk buffer */
         replication_do_checkpoint_all(&local_err);
         if (local_err) {
             qemu_mutex_unlock_iothread();
             goto out;
         }
-
+#else
+        abort();
+#endif
         /* Notify all filters of all NIC to do checkpoint */
         colo_notify_filters_event(COLO_EVENT_CHECKPOINT, &local_err);
 
Signature · 1 line
2.17.GIT

--
Dr. David Alan Gilbert / [email protected] / Manchester, UK

author
#2 lore raw
Quoted 11 lines · Dr. David Alan Gilbert
Quoted 5 lines · * Zhang Chen ([email protected]) wrote:

This compilation issue will occur when user use --disable-replication to config Qemu.

OK; do we need to add a check to migrate_caps_check to stop you enabling colo in this case?

Make sense, I will send another patch latter.

Thanks
Zhang Chen

Quoted 89 lines

migration/colo.c static int

Quoted 43 lines
---
 migration/colo.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)
migration/colo.c +9 -0
index 956ac236b7..b81e6ec5bb 100644
@@ -59,6 +59,8 @@ static bool colo_runstate_is_stopped(void)
 
 static void secondary_vm_do_failover(void)
 {
+/* COLO needs enable block-replication */
+#ifdef CONFIG_REPLICATION
     int old_state;
     MigrationIncomingState *mis = migration_incoming_get_current();
     Error *local_err = NULL;
@@ -121,10 +123,14 @@ static void secondary_vm_do_failover(void)
     if (mis->migration_incoming_co) {
         qemu_coroutine_enter(mis->migration_incoming_co);
     }
+#else
+    abort();
+#endif
 }
 
 static void primary_vm_do_failover(void)
 {
+#ifdef CONFIG_REPLICATION
     MigrationState *s = migrate_get_current();
     int old_state;
     Error *local_err = NULL;
@@ -165,6 +171,9 @@ static void primary_vm_do_failover(void)
 
     /* Notify COLO thread that failover work is finished */
     qemu_sem_post(&s->colo_exit_sem);
+#else
+    abort();
+#endif
 }
 
 COLOMode get_colo_mode(void)
@@ -373,6 +382,7 @@ static int

colo_do_checkpoint_transaction(MigrationState *s,

Quoted 8 lines
migration/colo.c +1 -0
                                           QIOChannelBuffer *bioc,
                                           QEMUFile *fb)
 {
+#ifdef CONFIG_REPLICATION
     Error *local_err = NULL;
     int ret = -1;
 

migration/colo.c out: · line 501

Quoted 9 lines
migration/colo.c +3 -0
@@ -483,6 +493,9 @@ out:
         error_report_err(local_err);
     }
     return ret;
+#else
+    abort();
+#endif
 }
 
 static void colo_compare_notify_checkpoint(Notifier *notifier, void

*data)

Quoted 19 lines
migration/colo.c +4 -2
@@ -790,13 +803,16 @@ void *colo_process_incoming_thread(void *opaque)
             qemu_mutex_unlock_iothread();
             goto out;
         }
+#ifdef CONFIG_REPLICATION
         /* discard colo disk buffer */
         replication_do_checkpoint_all(&local_err);
         if (local_err) {
             qemu_mutex_unlock_iothread();
             goto out;
         }
-
+#else
+        abort();
+#endif
         /* Notify all filters of all NIC to do checkpoint */
         colo_notify_filters_event(COLO_EVENT_CHECKPOINT, &local_err);
 
--
Quoted 2 lines

2.17.GIT

--
Dr. David Alan Gilbert / [email protected] / Manchester, UK

#3 lore raw
In reply to Zhang Chen
Quoted 5 lines · * Zhang Chen ([email protected]) wrote:

This compilation issue will occur when user use --disable-replication to config Qemu.

Queued.

Quoted 81 lines
---
 migration/colo.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)
migration/colo.c +17 -1
index 956ac236b7..b81e6ec5bb 100644
@@ -59,6 +59,8 @@ static bool colo_runstate_is_stopped(void)
 
 static void secondary_vm_do_failover(void)
 {
+/* COLO needs enable block-replication */
+#ifdef CONFIG_REPLICATION
     int old_state;
     MigrationIncomingState *mis = migration_incoming_get_current();
     Error *local_err = NULL;
@@ -121,10 +123,14 @@ static void secondary_vm_do_failover(void)
     if (mis->migration_incoming_co) {
         qemu_coroutine_enter(mis->migration_incoming_co);
     }
+#else
+    abort();
+#endif
 }
 
 static void primary_vm_do_failover(void)
 {
+#ifdef CONFIG_REPLICATION
     MigrationState *s = migrate_get_current();
     int old_state;
     Error *local_err = NULL;
@@ -165,6 +171,9 @@ static void primary_vm_do_failover(void)
 
     /* Notify COLO thread that failover work is finished */
     qemu_sem_post(&s->colo_exit_sem);
+#else
+    abort();
+#endif
 }
 
 COLOMode get_colo_mode(void)
@@ -373,6 +382,7 @@ static int colo_do_checkpoint_transaction(MigrationState *s,
                                           QIOChannelBuffer *bioc,
                                           QEMUFile *fb)
 {
+#ifdef CONFIG_REPLICATION
     Error *local_err = NULL;
     int ret = -1;
 
@@ -483,6 +493,9 @@ out:
         error_report_err(local_err);
     }
     return ret;
+#else
+    abort();
+#endif
 }
 
 static void colo_compare_notify_checkpoint(Notifier *notifier, void *data)
@@ -790,13 +803,16 @@ void *colo_process_incoming_thread(void *opaque)
             qemu_mutex_unlock_iothread();
             goto out;
         }
+#ifdef CONFIG_REPLICATION
         /* discard colo disk buffer */
         replication_do_checkpoint_all(&local_err);
         if (local_err) {
             qemu_mutex_unlock_iothread();
             goto out;
         }
-
+#else
+        abort();
+#endif
         /* Notify all filters of all NIC to do checkpoint */
         colo_notify_filters_event(COLO_EVENT_CHECKPOINT, &local_err);
 
Signature · 1 line
2.17.GIT

--
Dr. David Alan Gilbert / [email protected] / Manchester, UK

#4 lore raw
Quoted 8 lines · * Dr. David Alan Gilbert ([email protected]) wrote:
Quoted 5 lines · * Zhang Chen ([email protected]) wrote:

This compilation issue will occur when user use --disable-replication to config Qemu.

Queued.

Unqueued; this still isn't building for me with replication disabled; I'm hitting one problem where the compiler is complaining that colo_send_message_value is unused, and then I'm hitting a bunch of link time errors.

This needs a few more fixes first.

Dave

Quoted 78 lines
Quoted 78 lines
---
 migration/colo.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)
migration/colo.c +17 -1
index 956ac236b7..b81e6ec5bb 100644
@@ -59,6 +59,8 @@ static bool colo_runstate_is_stopped(void)
 
 static void secondary_vm_do_failover(void)
 {
+/* COLO needs enable block-replication */
+#ifdef CONFIG_REPLICATION
     int old_state;
     MigrationIncomingState *mis = migration_incoming_get_current();
     Error *local_err = NULL;
@@ -121,10 +123,14 @@ static void secondary_vm_do_failover(void)
     if (mis->migration_incoming_co) {
         qemu_coroutine_enter(mis->migration_incoming_co);
     }
+#else
+    abort();
+#endif
 }
 
 static void primary_vm_do_failover(void)
 {
+#ifdef CONFIG_REPLICATION
     MigrationState *s = migrate_get_current();
     int old_state;
     Error *local_err = NULL;
@@ -165,6 +171,9 @@ static void primary_vm_do_failover(void)
 
     /* Notify COLO thread that failover work is finished */
     qemu_sem_post(&s->colo_exit_sem);
+#else
+    abort();
+#endif
 }
 
 COLOMode get_colo_mode(void)
@@ -373,6 +382,7 @@ static int colo_do_checkpoint_transaction(MigrationState *s,
                                           QIOChannelBuffer *bioc,
                                           QEMUFile *fb)
 {
+#ifdef CONFIG_REPLICATION
     Error *local_err = NULL;
     int ret = -1;
 
@@ -483,6 +493,9 @@ out:
         error_report_err(local_err);
     }
     return ret;
+#else
+    abort();
+#endif
 }
 
 static void colo_compare_notify_checkpoint(Notifier *notifier, void *data)
@@ -790,13 +803,16 @@ void *colo_process_incoming_thread(void *opaque)
             qemu_mutex_unlock_iothread();
             goto out;
         }
+#ifdef CONFIG_REPLICATION
         /* discard colo disk buffer */
         replication_do_checkpoint_all(&local_err);
         if (local_err) {
             qemu_mutex_unlock_iothread();
             goto out;
         }
-
+#else
+        abort();
+#endif
         /* Notify all filters of all NIC to do checkpoint */
         colo_notify_filters_event(COLO_EVENT_CHECKPOINT, &local_err);
 
Quoted 5 lines
Quoted 3 lines
Signature · 1 line
2.17.GIT

--
Dr. David Alan Gilbert / [email protected] / Manchester, UK

--
Dr. David Alan Gilbert / [email protected] / Manchester, UK

author
#5 lore raw
Quoted 8 lines · Dr. David Alan Gilbert
Quoted 7 lines · * Dr. David Alan Gilbert ([email protected]) wrote:
Quoted 5 lines · * Zhang Chen ([email protected]) wrote:

This compilation issue will occur when user use --disable-replication to config Qemu.

Quoted 9 lines
Quoted 1 line

Queued.

Unqueued; this still isn't building for me with replication disabled; I'm hitting one problem where the compiler is complaining that colo_send_message_value is unused, and then I'm hitting a bunch of link time errors.

This needs a few more fixes first.

Sorry, my test machine's gcc version(5.4.0) is too old to catch this error. I will fix it and send the V2 patch.

Thanks
Zhang Chen

Quoted 91 lines

Dave

Quoted 41 lines
Quoted 41 lines
---
 migration/colo.c | 18 +++++++++++++++++-
 1 file changed, 17 insertions(+), 1 deletion(-)
migration/colo.c +9 -0
index 956ac236b7..b81e6ec5bb 100644
@@ -59,6 +59,8 @@ static bool colo_runstate_is_stopped(void)
 
 static void secondary_vm_do_failover(void)
 {
+/* COLO needs enable block-replication */
+#ifdef CONFIG_REPLICATION
     int old_state;
     MigrationIncomingState *mis = migration_incoming_get_current();
     Error *local_err = NULL;
@@ -121,10 +123,14 @@ static void secondary_vm_do_failover(void)
     if (mis->migration_incoming_co) {
         qemu_coroutine_enter(mis->migration_incoming_co);
     }
+#else
+    abort();
+#endif
 }
 
 static void primary_vm_do_failover(void)
 {
+#ifdef CONFIG_REPLICATION
     MigrationState *s = migrate_get_current();
     int old_state;
     Error *local_err = NULL;
@@ -165,6 +171,9 @@ static void primary_vm_do_failover(void)
 
     /* Notify COLO thread that failover work is finished */
     qemu_sem_post(&s->colo_exit_sem);
+#else
+    abort();
+#endif
 }
 
Quoted 2 lines

migration/colo.c static int

Quoted 2 lines
migration/colo.c +0 -0
 COLOMode get_colo_mode(void)
@@ -373,6 +382,7 @@ static int

colo_do_checkpoint_transaction(MigrationState *s,

Quoted 16 lines
Quoted 16 lines
migration/colo.c +4 -0
                                           QIOChannelBuffer *bioc,
                                           QEMUFile *fb)
 {
+#ifdef CONFIG_REPLICATION
     Error *local_err = NULL;
     int ret = -1;
 
@@ -483,6 +493,9 @@ out:
         error_report_err(local_err);
     }
     return ret;
+#else
+    abort();
+#endif
 }
 
Quoted 1 line

migration/colo.c out: · line 501

Quoted 1 line
migration/colo.c +0 -0
 static void colo_compare_notify_checkpoint(Notifier *notifier, void

*data)

Quoted 18 lines
Quoted 18 lines
migration/colo.c +4 -1
@@ -790,13 +803,16 @@ void *colo_process_incoming_thread(void *opaque)
             qemu_mutex_unlock_iothread();
             goto out;
         }
+#ifdef CONFIG_REPLICATION
         /* discard colo disk buffer */
         replication_do_checkpoint_all(&local_err);
         if (local_err) {
             qemu_mutex_unlock_iothread();
             goto out;
         }
-
+#else
+        abort();
+#endif
         /* Notify all filters of all NIC to do checkpoint */
         colo_notify_filters_event(COLO_EVENT_CHECKPOINT, &local_err);
 
Quoted 5 lines
Quoted 3 lines

--
2.17.GIT

--
Dr. David Alan Gilbert / [email protected] / Manchester, UK

--
Dr. David Alan Gilbert / [email protected] / Manchester, UK