qemu-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: [Qemu-devel] [PATCH COLO-Frame v18 17/34] COLO failover: Introduce s


From: Hailiang Zhang
Subject: Re: [Qemu-devel] [PATCH COLO-Frame v18 17/34] COLO failover: Introduce state to record failover process
Date: Wed, 10 Aug 2016 12:07:35 +0800
User-agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:38.0) Gecko/20100101 Thunderbird/38.5.1

On 2016/8/9 17:17, Dr. David Alan Gilbert wrote:
* zhanghailiang (address@hidden) wrote:

+        error_report("Unkown error for failover, old_state=%d", old_state);

  Tiny typo; 'Unknown'.
Don't bother reposting just for that, we can fix it later; or fix it if
you have to repost anyway.


OK, thanks.

Dave

+        return;
+    }
      /*TODO: Do failover work */
  }

  void failover_request_active(Error **errp)
  {
+   if (failover_set_state(FAILOVER_STATUS_NONE, FAILOVER_STATUS_REQUEST)
+         != FAILOVER_STATUS_NONE) {
+        error_setg(errp, "COLO failover is already actived");
+        return;
+    }
      failover_bh = qemu_bh_new(colo_failover_bh, NULL);
      qemu_bh_schedule(failover_bh);
  }

+void failover_init_state(void)
+{
+    failover_state = FAILOVER_STATUS_NONE;
+}
+
+int failover_set_state(int old_state, int new_state)
+{
+    int old;
+
+    old = atomic_cmpxchg(&failover_state, old_state, new_state);
+    if (old == old_state) {
+        trace_colo_failover_set_state(new_state);
+    }
+    return old;
+}
+
+int failover_get_state(void)
+{
+    return atomic_read(&failover_state);
+}
+
  void qmp_x_colo_lost_heartbeat(Error **errp)
  {
      if (get_colo_mode() == COLO_MODE_UNKNOWN) {
diff --git a/migration/colo.c b/migration/colo.c
index b445279..9afc527 100644
--- a/migration/colo.c
+++ b/migration/colo.c
@@ -232,6 +232,8 @@ static void colo_process_checkpoint(MigrationState *s)
      Error *local_err = NULL;
      int ret;

+    failover_init_state();
+
      s->rp_state.from_dst_file = qemu_file_get_return_path(s->to_dst_file);
      if (!s->rp_state.from_dst_file) {
          error_report("Open QEMUFile from_dst_file failed");
@@ -331,6 +333,8 @@ void *colo_process_incoming_thread(void *opaque)
      migrate_set_state(&mis->state, MIGRATION_STATUS_ACTIVE,
                        MIGRATION_STATUS_COLO);

+    failover_init_state();
+
      mis->to_src_file = qemu_file_get_return_path(mis->from_src_file);
      if (!mis->to_src_file) {
          error_report("colo incoming thread: Open QEMUFile to_src_file 
failed");
diff --git a/migration/trace-events b/migration/trace-events
index 82dc7a0..d9f44ba 100644
--- a/migration/trace-events
+++ b/migration/trace-events
@@ -214,3 +214,4 @@ migration_tls_incoming_handshake_complete(void) ""
  colo_vm_state_change(const char *old, const char *new) "Change '%s' => '%s'"
  colo_send_message(const char *msg) "Send '%s' message"
  colo_receive_message(const char *msg) "Receive '%s' message"
+colo_failover_set_state(int new_state) "new state %d"
--
1.8.3.1


--
Dr. David Alan Gilbert / address@hidden / Manchester, UK

.





reply via email to

[Prev in Thread] Current Thread [Next in Thread]