Skip to contentSkip to conversation

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

PATCH In review Zhang Chen 5 participants 11 messages Nov 1, 2018 – Nov 21, 2018 Networking

lore
Share & tools
lore

Zhang Chen

author
#0 lore raw

PATCH v2 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 | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)
migration/colo.c +27 -1
index 956ac236b7..fcff04c78c 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)
@@ -415,11 +424,16 @@ static int colo_do_checkpoint_transaction(MigrationState *s,
     /* Disable block migration */
     migrate_set_block_enabled(false, &local_err);
     qemu_mutex_lock_iothread();
+
+#ifdef CONFIG_REPLICATION
     replication_do_checkpoint_all(&local_err);
     if (local_err) {
         qemu_mutex_unlock_iothread();
         goto out;
     }
+#else
+        abort();
+#endif
 
     colo_send_message(s->to_dst_file, COLO_MESSAGE_VMSTATE_SEND, &local_err);
     if (local_err) {
@@ -523,11 +537,15 @@ static void colo_process_checkpoint(MigrationState *s)
     object_unref(OBJECT(bioc));
 
     qemu_mutex_lock_iothread();
+#ifdef CONFIG_REPLICATION
     replication_start_all(REPLICATION_MODE_PRIMARY, &local_err);
     if (local_err) {
         qemu_mutex_unlock_iothread();
         goto out;
     }
+#else
+        abort();
+#endif
 
     vm_start();
     qemu_mutex_unlock_iothread();
@@ -690,11 +708,15 @@ void *colo_process_incoming_thread(void *opaque)
     object_unref(OBJECT(bioc));
 
     qemu_mutex_lock_iothread();
+#ifdef CONFIG_REPLICATION
     replication_start_all(REPLICATION_MODE_SECONDARY, &local_err);
     if (local_err) {
         qemu_mutex_unlock_iothread();
         goto out;
     }
+#else
+        abort();
+#endif
     vm_start();
     trace_colo_vm_state_change("stop", "run");
     qemu_mutex_unlock_iothread();
@@ -785,18 +807,22 @@ void *colo_process_incoming_thread(void *opaque)
             goto out;
         }
 
+#ifdef CONFIG_REPLICATION
         replication_get_error_all(&local_err);
         if (local_err) {
             qemu_mutex_unlock_iothread();
             goto out;
         }
+
         /* 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.1
Tested-by on v2 1/1
#1 lore raw
Quoted 8 lines · Zhang Chen

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

---
 migration/colo.c | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)

Thanks, this fixes the compilation problem with --disable-replication for me:

BTW, if colo can't be used without CONFIG_REPLICATION, would it make sense to disable the related objects (for the "--object" parameter) in an additional patch, too? Something like this (untested):

net/Makefile.objs +1 -1
@@ -10,7 +10,7 @@ common-obj-$(CONFIG_NETMAP) += netmap.o
 common-obj-y += filter.o
 common-obj-y += filter-buffer.o
 common-obj-y += filter-mirror.o
-common-obj-y += colo-compare.o
+common-obj-$(CONFIG_REPLICATION) += colo-compare.o
 common-obj-y += colo.o
 common-obj-y += filter-rewriter.o
 common-obj-y += filter-replay.o

Thomas

author
#2 lore raw
Quoted 10 lines · Thomas Huth
Quoted 8 lines · Zhang Chen

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

---
 migration/colo.c | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)
Quoted 9 lines

Thanks, this fixes the compilation problem with --disable-replication for me:

BTW, if colo can't be used without CONFIG_REPLICATION, would it make sense to disable the related objects (for the "--object" parameter) in an additional patch, too? Something like this (untested):

Hi Thomas,

Yes, you are right. current COLO project need work with replication, but in the future we will develop COLO shared disk mode,
In this mode COLO-compare maybe not depend on replication. So I think we can keep the independence of the two modules.

Thanks
Zhang Chen

Quoted 16 lines
net/Makefile.objs +1 -1
@@ -10,7 +10,7 @@ common-obj-$(CONFIG_NETMAP) += netmap.o
 common-obj-y += filter.o
 common-obj-y += filter-buffer.o
 common-obj-y += filter-mirror.o
-common-obj-y += colo-compare.o
+common-obj-$(CONFIG_REPLICATION) += colo-compare.o
 common-obj-y += colo.o
 common-obj-y += filter-rewriter.o
 common-obj-y += filter-replay.o

Thomas

#3 lore raw
In reply to Zhang Chen
Quoted 5 lines · Zhang Chen

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

Hi,

How's the status of this patch? Are we gonna merge it for 3.1?

I just posted a similar one without knowing this (until Dave pointed it out). IMHO it can be a good candidate for 3.1.

Thanks,

Quoted 119 lines
---
 migration/colo.c | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)
migration/colo.c +27 -1
index 956ac236b7..fcff04c78c 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)
@@ -415,11 +424,16 @@ static int colo_do_checkpoint_transaction(MigrationState *s,
     /* Disable block migration */
     migrate_set_block_enabled(false, &local_err);
     qemu_mutex_lock_iothread();
+
+#ifdef CONFIG_REPLICATION
     replication_do_checkpoint_all(&local_err);
     if (local_err) {
         qemu_mutex_unlock_iothread();
         goto out;
     }
+#else
+        abort();
+#endif
 
     colo_send_message(s->to_dst_file, COLO_MESSAGE_VMSTATE_SEND, &local_err);
     if (local_err) {
@@ -523,11 +537,15 @@ static void colo_process_checkpoint(MigrationState *s)
     object_unref(OBJECT(bioc));
 
     qemu_mutex_lock_iothread();
+#ifdef CONFIG_REPLICATION
     replication_start_all(REPLICATION_MODE_PRIMARY, &local_err);
     if (local_err) {
         qemu_mutex_unlock_iothread();
         goto out;
     }
+#else
+        abort();
+#endif
 
     vm_start();
     qemu_mutex_unlock_iothread();
@@ -690,11 +708,15 @@ void *colo_process_incoming_thread(void *opaque)
     object_unref(OBJECT(bioc));
 
     qemu_mutex_lock_iothread();
+#ifdef CONFIG_REPLICATION
     replication_start_all(REPLICATION_MODE_SECONDARY, &local_err);
     if (local_err) {
         qemu_mutex_unlock_iothread();
         goto out;
     }
+#else
+        abort();
+#endif
     vm_start();
     trace_colo_vm_state_change("stop", "run");
     qemu_mutex_unlock_iothread();
@@ -785,18 +807,22 @@ void *colo_process_incoming_thread(void *opaque)
             goto out;
         }
 
+#ifdef CONFIG_REPLICATION
         replication_get_error_all(&local_err);
         if (local_err) {
             qemu_mutex_unlock_iothread();
             goto out;
         }
+
         /* 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.1

Regards,

Signature · 1 line
Peter Xu
#4 lore raw
Quoted 7 lines · Peter Xu
Quoted 5 lines · Zhang Chen

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

Quoted 6 lines

Hi,

How's the status of this patch? Are we gonna merge it for 3.1?

I just posted a similar one without knowing this (until Dave pointed it out). IMHO it can be a good candidate for 3.1.

Maybe Peter Maydell could apply this directly to the repo as a built fix?

And maybe one of our docker wizards could add a test to check compilation with everything disabled a la:

./configure --enable-werror --disable-tcg --disable-slirp \
--disable-libxml2 --disable-capstone --disable-live-block-migration \
--disable-glusterfs --disable-replication --disable-coroutine-pool \
--disable-smartcard --disable-guest-agent --disable-curses \
--disable-curl --disable-tpm --disable-qom-cast-debug \
--disable-spice --disable-vhost-vsock --disable-vhost-net \
--disable-vhost-crypto --disable-vhost-user

?

I don't use docker (yet), but I've had this in my gitlab ci patch, that's how I noticed this problem (see
https://www.mail-archive.com/[email protected]/msg559990.html)

Thomas

Quoted 123 lines
Quoted 120 lines
---
 migration/colo.c | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)
migration/colo.c +27 -1
index 956ac236b7..fcff04c78c 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)
@@ -415,11 +424,16 @@ static int colo_do_checkpoint_transaction(MigrationState *s,
     /* Disable block migration */
     migrate_set_block_enabled(false, &local_err);
     qemu_mutex_lock_iothread();
+
+#ifdef CONFIG_REPLICATION
     replication_do_checkpoint_all(&local_err);
     if (local_err) {
         qemu_mutex_unlock_iothread();
         goto out;
     }
+#else
+        abort();
+#endif
 
     colo_send_message(s->to_dst_file, COLO_MESSAGE_VMSTATE_SEND, &local_err);
     if (local_err) {
@@ -523,11 +537,15 @@ static void colo_process_checkpoint(MigrationState *s)
     object_unref(OBJECT(bioc));
 
     qemu_mutex_lock_iothread();
+#ifdef CONFIG_REPLICATION
     replication_start_all(REPLICATION_MODE_PRIMARY, &local_err);
     if (local_err) {
         qemu_mutex_unlock_iothread();
         goto out;
     }
+#else
+        abort();
+#endif
 
     vm_start();
     qemu_mutex_unlock_iothread();
@@ -690,11 +708,15 @@ void *colo_process_incoming_thread(void *opaque)
     object_unref(OBJECT(bioc));
 
     qemu_mutex_lock_iothread();
+#ifdef CONFIG_REPLICATION
     replication_start_all(REPLICATION_MODE_SECONDARY, &local_err);
     if (local_err) {
         qemu_mutex_unlock_iothread();
         goto out;
     }
+#else
+        abort();
+#endif
     vm_start();
     trace_colo_vm_state_change("stop", "run");
     qemu_mutex_unlock_iothread();
@@ -785,18 +807,22 @@ void *colo_process_incoming_thread(void *opaque)
             goto out;
         }
 
+#ifdef CONFIG_REPLICATION
         replication_get_error_all(&local_err);
         if (local_err) {
             qemu_mutex_unlock_iothread();
             goto out;
         }
+
         /* 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.1

Regards,

#5 lore raw
Quoted 8 lines · Thomas Huth
Quoted 7 lines · Peter Xu
Quoted 5 lines · Zhang Chen

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

Quoted 8 lines
Quoted 6 lines

Hi,

How's the status of this patch? Are we gonna merge it for 3.1?

I just posted a similar one without knowing this (until Dave pointed it out). IMHO it can be a good candidate for 3.1.

Maybe Peter Maydell could apply this directly to the repo as a built fix?

I'd rather it just went through the migration tree, really... it isn't actually breaking any of our travis jobs or other CI.

thanks
-- PMM

author
#6 lore raw
Quoted 13 lines · Peter Maydell
Quoted 12 lines · Thomas Huth
Quoted 11 lines · Peter Xu
Quoted 5 lines · Zhang Chen

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

Hi,

How's the status of this patch? Are we gonna merge it for 3.1?

Quoted 9 lines
Quoted 4 lines
Quoted 2 lines

I just posted a similar one without knowing this (until Dave pointed it out). IMHO it can be a good candidate for 3.1.

Maybe Peter Maydell could apply this directly to the repo as a built fix?

I'd rather it just went through the migration tree, really... it isn't actually breaking any of our travis jobs or other CI.

Hi Dave,

What do you think about peter's comments?

Thanks
Zhang Chen

Quoted 3 lines

thanks
-- PMM

#7 lore raw
Quoted 21 lines · Zhang Chen
Quoted 18 lines · Peter Maydell
Quoted 16 lines · Thomas Huth
Quoted 7 lines · Peter Xu
Quoted 5 lines · Zhang Chen

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

Quoted 6 lines

Hi,

How's the status of this patch? Are we gonna merge it for 3.1?

I just posted a similar one without knowing this (until Dave pointed it out). IMHO it can be a good candidate for 3.1.

Maybe Peter Maydell could apply this directly to the repo as a built fix?

Quoted 7 lines
Quoted 4 lines

I'd rather it just went through the migration tree, really... it isn't actually breaking any of our travis jobs or other CI.

Hi Dave,

What do you think about peter's comments?

AFAIK Juan has queued the v2 of the patch into the next migration pull, so it'll reach 3.1 soon if nothing goes wrong. Thanks,

Signature · 1 line
Peter Xu
#8 lore raw
In reply to Zhang Chen
Quoted 21 lines · * Zhang Chen ([email protected]) wrote:
Quoted 18 lines · Peter Maydell
Quoted 16 lines · Thomas Huth
Quoted 7 lines · Peter Xu
Quoted 5 lines · Zhang Chen

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

Quoted 6 lines

Hi,

How's the status of this patch? Are we gonna merge it for 3.1?

I just posted a similar one without knowing this (until Dave pointed it out). IMHO it can be a good candidate for 3.1.

Maybe Peter Maydell could apply this directly to the repo as a built fix?

Quoted 7 lines
Quoted 4 lines

I'd rather it just went through the migration tree, really... it isn't actually breaking any of our travis jobs or other CI.

Hi Dave,

What do you think about peter's comments?

Yep, that's fine, as Peter Xu says, Juan's picking it up for the next one so we should be OK.

Dave

Quoted 7 lines

Thanks
Zhang Chen

Quoted 3 lines

thanks
-- PMM

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

author
#9 lore raw
Quoted 28 lines · On Sat, Nov 17, 2018, 2:29 AM Dr. David Alan Gilbert <[email protected] wrote:
Quoted 7 lines · * Zhang Chen ([email protected]) wrote:
Quoted 4 lines · Peter Maydell
Quoted 3 lines · Thomas Huth
Quoted 2 lines · Peter Xu
Quoted 1 line · Zhang Chen

This compilation issue will occur when user use

--disable-replication

Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
Quoted 5 lines
Quoted 4 lines

to config Qemu.

Quoted 8 lines
Quoted 8 lines
Quoted 8 lines
Quoted 6 lines

Hi,

How's the status of this patch? Are we gonna merge it for 3.1?

I just posted a similar one without knowing this (until Dave pointed it out). IMHO it can be a good candidate for 3.1.

Maybe Peter Maydell could apply this directly to the repo as a built

fix?

Quoted 5 lines
Quoted 5 lines

I'd rather it just went through the migration tree, really... it isn't actually breaking any of our travis jobs or other CI.

Quoted 9 lines
Quoted 3 lines

Hi Dave,

What do you think about peter's comments?

Yep, that's fine, as Peter Xu says, Juan's picking it up for the next one so we should be OK.

OK~ Thanks Peter Xu and Dave.

Zhang Chen

Quoted 12 lines

Dave

Quoted 7 lines

Thanks
Zhang Chen

Quoted 3 lines

thanks
-- PMM

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

#10 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 119 lines
---
 migration/colo.c | 28 +++++++++++++++++++++++++++-
 1 file changed, 27 insertions(+), 1 deletion(-)
migration/colo.c +27 -1
index 956ac236b7..fcff04c78c 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)
@@ -415,11 +424,16 @@ static int colo_do_checkpoint_transaction(MigrationState *s,
     /* Disable block migration */
     migrate_set_block_enabled(false, &local_err);
     qemu_mutex_lock_iothread();
+
+#ifdef CONFIG_REPLICATION
     replication_do_checkpoint_all(&local_err);
     if (local_err) {
         qemu_mutex_unlock_iothread();
         goto out;
     }
+#else
+        abort();
+#endif
 
     colo_send_message(s->to_dst_file, COLO_MESSAGE_VMSTATE_SEND, &local_err);
     if (local_err) {
@@ -523,11 +537,15 @@ static void colo_process_checkpoint(MigrationState *s)
     object_unref(OBJECT(bioc));
 
     qemu_mutex_lock_iothread();
+#ifdef CONFIG_REPLICATION
     replication_start_all(REPLICATION_MODE_PRIMARY, &local_err);
     if (local_err) {
         qemu_mutex_unlock_iothread();
         goto out;
     }
+#else
+        abort();
+#endif
 
     vm_start();
     qemu_mutex_unlock_iothread();
@@ -690,11 +708,15 @@ void *colo_process_incoming_thread(void *opaque)
     object_unref(OBJECT(bioc));
 
     qemu_mutex_lock_iothread();
+#ifdef CONFIG_REPLICATION
     replication_start_all(REPLICATION_MODE_SECONDARY, &local_err);
     if (local_err) {
         qemu_mutex_unlock_iothread();
         goto out;
     }
+#else
+        abort();
+#endif
     vm_start();
     trace_colo_vm_state_change("stop", "run");
     qemu_mutex_unlock_iothread();
@@ -785,18 +807,22 @@ void *colo_process_incoming_thread(void *opaque)
             goto out;
         }
 
+#ifdef CONFIG_REPLICATION
         replication_get_error_all(&local_err);
         if (local_err) {
             qemu_mutex_unlock_iothread();
             goto out;
         }
+
         /* 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.1

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