[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH COLO-Frame v11 25/39] COLO: implement default failov
From: |
zhanghailiang |
Subject: |
[Qemu-devel] [PATCH COLO-Frame v11 25/39] COLO: implement default failover treatment |
Date: |
Tue, 24 Nov 2015 17:25:35 +0800 |
If we detect some error in colo, we will wait for some time,
hoping users also detect it. If users don't issue failover command.
We will go into default failover procedure, which the PVM will takeover
work while SVM is exit in default.
Signed-off-by: zhanghailiang <address@hidden>
Signed-off-by: Li Zhijian <address@hidden>
---
migration/colo.c | 46 ++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 46 insertions(+)
diff --git a/migration/colo.c b/migration/colo.c
index f31e957..1e6d3dd 100644
--- a/migration/colo.c
+++ b/migration/colo.c
@@ -19,6 +19,14 @@
#include "qemu/sockets.h"
#include "migration/failover.h"
+/*
+ * The delay time before qemu begin the procedure of default failover
treatment.
+ * Unit: ms
+ * Fix me: This value should be able to change by command
+ * 'migrate-set-parameters'
+ */
+#define DEFAULT_FAILOVER_DELAY 2000
+
/* colo buffer */
#define COLO_BUFFER_BASE_SIZE (4 * 1024 * 1024)
@@ -264,6 +272,7 @@ static void colo_process_checkpoint(MigrationState *s)
{
QEMUSizedBuffer *buffer = NULL;
int64_t current_time, checkpoint_time = qemu_clock_get_ms(QEMU_CLOCK_HOST);
+ int64_t error_time;
int ret = 0;
uint64_t value;
@@ -322,8 +331,25 @@ static void colo_process_checkpoint(MigrationState *s)
}
out:
+ current_time = error_time = qemu_clock_get_ms(QEMU_CLOCK_HOST);
if (ret < 0) {
error_report("%s: %s", __func__, strerror(-ret));
+ /* Give users time to get involved in this verdict */
+ while (current_time - error_time <= DEFAULT_FAILOVER_DELAY) {
+ if (failover_request_is_active()) {
+ error_report("Primary VM will take over work");
+ break;
+ }
+ usleep(100 * 1000);
+ current_time = qemu_clock_get_ms(QEMU_CLOCK_HOST);
+ }
+
+ qemu_mutex_lock_iothread();
+ if (!failover_request_is_active()) {
+ error_report("Primary VM will take over work in default");
+ failover_request_active(NULL);
+ }
+ qemu_mutex_unlock_iothread();
}
qsb_free(buffer);
@@ -384,6 +410,7 @@ void *colo_process_incoming_thread(void *opaque)
QEMUFile *fb = NULL;
QEMUSizedBuffer *buffer = NULL; /* Cache incoming device state */
uint64_t total_size;
+ int64_t error_time, current_time;
int ret = 0;
uint64_t value;
@@ -499,9 +526,28 @@ void *colo_process_incoming_thread(void *opaque)
}
out:
+ current_time = error_time = qemu_clock_get_ms(QEMU_CLOCK_HOST);
if (ret < 0) {
error_report("colo incoming thread will exit, detect error: %s",
strerror(-ret));
+ /* Give users time to get involved in this verdict */
+ while (current_time - error_time <= DEFAULT_FAILOVER_DELAY) {
+ if (failover_request_is_active()) {
+ error_report("Secondary VM will take over work");
+ break;
+ }
+ usleep(100 * 1000);
+ current_time = qemu_clock_get_ms(QEMU_CLOCK_HOST);
+ }
+ /* check flag again*/
+ if (!failover_request_is_active()) {
+ /*
+ * We assume that Primary VM is still alive according to
+ * heartbeat, just kill Secondary VM
+ */
+ error_report("SVM is going to exit in default!");
+ exit(1);
+ }
}
if (fb) {
--
1.8.3.1
- Re: [Qemu-devel] [PATCH COLO-Frame v11 09/39] COLO/migration: Create a new communication path from destination to source, (continued)
- [Qemu-devel] [PATCH COLO-Frame v11 12/39] QEMUSizedBuffer: Introduce two help functions for qsb, zhanghailiang, 2015/11/24
- [Qemu-devel] [PATCH COLO-Frame v11 11/39] COLO: Add a new RunState RUN_STATE_COLO, zhanghailiang, 2015/11/24
- [Qemu-devel] [PATCH COLO-Frame v11 14/39] ram: Split host_from_stream_offset() into two helper functions, zhanghailiang, 2015/11/24
- [Qemu-devel] [PATCH COLO-Frame v11 23/39] COLO: Implement failover work for Primary VM, zhanghailiang, 2015/11/24
- [Qemu-devel] [PATCH COLO-Frame v11 25/39] COLO: implement default failover treatment,
zhanghailiang <=
- [Qemu-devel] [PATCH COLO-Frame v11 34/39] net/filter-buffer: Add default filter-buffer for each netdev, zhanghailiang, 2015/11/24
- [Qemu-devel] [PATCH COLO-Frame v11 26/39] qmp event: Add event notification for COLO error, zhanghailiang, 2015/11/24
- [Qemu-devel] [PATCH COLO-Frame v11 01/39] configure: Add parameter for configure to enable/disable COLO support, zhanghailiang, 2015/11/24
- [Qemu-devel] [PATCH COLO-Frame v11 08/39] migration: Rename the'file' member of MigrationState, zhanghailiang, 2015/11/24
- [Qemu-devel] [PATCH COLO-Frame v11 03/39] COLO: migrate colo related info to secondary node, zhanghailiang, 2015/11/24