All of lore.kernel.org
 help / color / mirror / Atom feed
From: Juan Quintela <quintela@redhat.com>
To: Anthony Liguori <anthony@codemonkey.ws>
Cc: qemu-devel@nongnu.org
Subject: [Qemu-devel] Re: [PATCH 18/28] migration: convert current_migration from pointer to struct
Date: Wed, 23 Feb 2011 23:50:24 +0100	[thread overview]
Message-ID: <m3ipwa2wnj.fsf@trasno.org> (raw)
In-Reply-To: <4D658804.5040509@codemonkey.ws> (Anthony Liguori's message of "Wed, 23 Feb 2011 16:19:48 -0600")

Anthony Liguori <anthony@codemonkey.ws> wrote:
> On 02/23/2011 03:47 PM, Juan Quintela wrote:
>> This cleans up a lot the code as we don't have to check anymore if
>> the variable is NULL or not.
>>
>> Signed-off-by: Juan Quintela<quintela@redhat.com>
>>    
>
> Yeah, but now you have to check for MIG_STATE_NONE.  I don't think
> this is an improvement.

We can:
a- remove max_throttle global (now we always have this variable to have
   fields in).
b- transitioning to ACTIVE state is a normal transition (if you look,
   you will see that it is the only case where  we call the migration
   notifier without an explicit change in state.
c- We remove all the cases of:
   if (current_migration)
      foo(current_migration)

Notice that we don't check against MIG_STATE_NONE in the whole patch.

Later, Juan.

> Regards,
>
> Anthony Liguori
>
>> ---
>>   migration.c |  121 ++++++++++++++++++++++++-----------------------------------
>>   1 files changed, 49 insertions(+), 72 deletions(-)
>>
>> diff --git a/migration.c b/migration.c
>> index 593adee..f8c6d09 100644
>> --- a/migration.c
>> +++ b/migration.c
>> @@ -34,7 +34,9 @@
>>   /* Migration speed throttling */
>>   static int64_t max_throttle = (32<<  20);
>>
>> -static MigrationState *current_migration;
>> +static MigrationState current_migration = {
>> +    .state = MIG_STATE_NONE,
>> +};
>>
>>   static NotifierList migration_state_notifiers =
>>       NOTIFIER_LIST_INITIALIZER(migration_state_notifiers);
>> @@ -135,37 +137,34 @@ void do_info_migrate(Monitor *mon, QObject **ret_data)
>>   {
>>       QDict *qdict;
>>
>> -    if (current_migration) {
>> -
>> -        switch (current_migration->state) {
>> -        case MIG_STATE_NONE:
>> -            /* no migration has happened ever */
>> -            break;
>> -        case MIG_STATE_ACTIVE:
>> -            qdict = qdict_new();
>> -            qdict_put(qdict, "status", qstring_from_str("active"));
>> -
>> -            migrate_put_status(qdict, "ram", ram_bytes_transferred(),
>> -                               ram_bytes_remaining(), ram_bytes_total());
>> -
>> -            if (blk_mig_active()) {
>> -                migrate_put_status(qdict, "disk", blk_mig_bytes_transferred(),
>> -                                   blk_mig_bytes_remaining(),
>> -                                   blk_mig_bytes_total());
>> -            }
>> -
>> -            *ret_data = QOBJECT(qdict);
>> -            break;
>> -        case MIG_STATE_COMPLETED:
>> -            *ret_data = qobject_from_jsonf("{ 'status': 'completed' }");
>> -            break;
>> -        case MIG_STATE_ERROR:
>> -            *ret_data = qobject_from_jsonf("{ 'status': 'failed' }");
>> -            break;
>> -        case MIG_STATE_CANCELLED:
>> -            *ret_data = qobject_from_jsonf("{ 'status': 'cancelled' }");
>> -            break;
>> +    switch (current_migration.state) {
>> +    case MIG_STATE_NONE:
>> +        /* no migration has happened ever */
>> +        break;
>> +    case MIG_STATE_ACTIVE:
>> +        qdict = qdict_new();
>> +        qdict_put(qdict, "status", qstring_from_str("active"));
>> +
>> +        migrate_put_status(qdict, "ram", ram_bytes_transferred(),
>> +                           ram_bytes_remaining(), ram_bytes_total());
>> +
>> +        if (blk_mig_active()) {
>> +            migrate_put_status(qdict, "disk", blk_mig_bytes_transferred(),
>> +                               blk_mig_bytes_remaining(),
>> +                               blk_mig_bytes_total());
>>           }
>> +
>> +        *ret_data = QOBJECT(qdict);
>> +        break;
>> +    case MIG_STATE_COMPLETED:
>> +        *ret_data = qobject_from_jsonf("{ 'status': 'completed' }");
>> +        break;
>> +    case MIG_STATE_ERROR:
>> +        *ret_data = qobject_from_jsonf("{ 'status': 'failed' }");
>> +        break;
>> +    case MIG_STATE_CANCELLED:
>> +        *ret_data = qobject_from_jsonf("{ 'status': 'cancelled' }");
>> +        break;
>>       }
>>   }
>>
>> @@ -344,11 +343,7 @@ void remove_migration_state_change_notifier(Notifier *notify)
>>
>>   int get_migration_state(void)
>>   {
>> -    if (current_migration) {
>> -        return current_migration->state;
>> -    } else {
>> -        return MIG_STATE_ERROR;
>> -    }
>> +    return current_migration.state;
>>   }
>>
>>   void migrate_fd_connect(MigrationState *s)
>> @@ -374,28 +369,22 @@ void migrate_fd_connect(MigrationState *s)
>>       migrate_fd_put_ready(s);
>>   }
>>
>> -static MigrationState *migrate_create_state(Monitor *mon,
>> -                                            int64_t bandwidth_limit,
>> -                                            int detach, int blk, int inc)
>> +static void migrate_init_state(Monitor *mon, int64_t bandwidth_limit,
>> +                               int detach, int blk, int inc)
>>   {
>> -    MigrationState *s = qemu_mallocz(sizeof(*s));
>> -
>> -    s->blk = blk;
>> -    s->shared = inc;
>> -    s->mon = NULL;
>> -    s->bandwidth_limit = bandwidth_limit;
>> -    s->state = MIG_STATE_NONE;
>> +    current_migration.blk = blk;
>> +    current_migration.shared = inc;
>> +    current_migration.mon = NULL;
>> +    current_migration.bandwidth_limit = bandwidth_limit;
>> +    current_migration.state = MIG_STATE_NONE;
>>
>>       if (!detach) {
>> -        migrate_fd_monitor_suspend(s, mon);
>> +        migrate_fd_monitor_suspend(&current_migration, mon);
>>       }
>> -
>> -    return s;
>>   }
>>
>>   int do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data)
>>   {
>> -    MigrationState *s = NULL;
>>       const char *p;
>>       int detach = qdict_get_try_bool(qdict, "detach", 0);
>>       int blk = qdict_get_try_bool(qdict, "blk", 0);
>> @@ -403,8 +392,7 @@ int do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data)
>>       const char *uri = qdict_get_str(qdict, "uri");
>>       int ret;
>>
>> -    if (current_migration&&
>> -        current_migration->state == MIG_STATE_ACTIVE) {
>> +    if (current_migration.state == MIG_STATE_ACTIVE) {
>>           monitor_printf(mon, "migration already in progress\n");
>>           return -1;
>>       }
>> @@ -413,43 +401,35 @@ int do_migrate(Monitor *mon, const QDict *qdict, QObject **ret_data)
>>           return -1;
>>       }
>>
>> -    s = migrate_create_state(mon, max_throttle, detach, blk, inc);
>> +    migrate_init_state(mon, max_throttle, detach, blk, inc);
>>
>>       if (strstart(uri, "tcp:",&p)) {
>> -        ret = tcp_start_outgoing_migration(s, p);
>> +        ret = tcp_start_outgoing_migration(&current_migration, p);
>>   #if !defined(WIN32)
>>       } else if (strstart(uri, "exec:",&p)) {
>> -        ret = exec_start_outgoing_migration(s, p);
>> +        ret = exec_start_outgoing_migration(&current_migration, p);
>>       } else if (strstart(uri, "unix:",&p)) {
>> -        ret = unix_start_outgoing_migration(s, p);
>> +        ret = unix_start_outgoing_migration(&current_migration, p);
>>       } else if (strstart(uri, "fd:",&p)) {
>> -        ret = fd_start_outgoing_migration(s, p);
>> +        ret = fd_start_outgoing_migration(&current_migration, p);
>>   #endif
>>       } else {
>>           monitor_printf(mon, "unknown migration protocol: %s\n", uri);
>> -        ret  = -EINVAL;
>> -        goto free_migrate_state;
>> +        return -EINVAL;
>>       }
>>
>>       if (ret<  0) {
>>           monitor_printf(mon, "migration failed\n");
>> -        goto free_migrate_state;
>> +        return ret;
>>       }
>>
>> -    qemu_free(current_migration);
>> -    current_migration = s;
>>       notifier_list_notify(&migration_state_notifiers);
>>       return 0;
>> -free_migrate_state:
>> -    qemu_free(s);
>> -    return -1;
>>   }
>>
>>   int do_migrate_cancel(Monitor *mon, const QDict *qdict, QObject **ret_data)
>>   {
>> -    if (current_migration) {
>> -        migrate_fd_cancel(current_migration);
>> -    }
>> +    migrate_fd_cancel(&current_migration);
>>       return 0;
>>   }
>>
>> @@ -463,10 +443,7 @@ int do_migrate_set_speed(Monitor *mon, const QDict *qdict, QObject **ret_data)
>>       }
>>       max_throttle = d;
>>
>> -    if (current_migration) {
>> -        qemu_file_set_rate_limit(current_migration->file, max_throttle);
>> -    }
>> -
>> +    qemu_file_set_rate_limit(current_migration.file, max_throttle);
>>       return 0;
>>   }
>>
>>    

  reply	other threads:[~2011-02-23 22:56 UTC|newest]

Thread overview: 41+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-02-23 21:47 [Qemu-devel] [PATCH v2 00/28] Refactor and cleanup migration code Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 01/28] migration: Make *start_outgoing_migration return FdMigrationState Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 02/28] migration: Use FdMigrationState instead of MigrationState when possible Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 03/28] migration: Fold MigrationState into FdMigrationState Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 04/28] migration: Rename FdMigrationState MigrationState Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 05/28] migration: Refactor MigrationState creation Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 06/28] migration: Make all posible migration functions static Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 07/28] migration: move migrate_create_state to do_migrate Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 08/28] migration: Check that migration is active before cancel it Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 09/28] migration: Introduce MIG_STATE_NONE Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 10/28] migration: Refactor and simplify error checking in migrate_fd_put_ready Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 11/28] migration: Introduce migrate_fd_completed() for consistenncy Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 12/28] migration: Our release callback was just free Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 13/28] migration: Remove get_status() accessor Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 14/28] migration: Remove migration cancel() callback Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 15/28] migration: Move exported functions to the end of the file Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 16/28] migration: use global variable directly Juan Quintela
2011-02-23 22:18   ` Anthony Liguori
2011-02-23 22:46     ` [Qemu-devel] " Juan Quintela
2011-02-23 23:04       ` Anthony Liguori
2011-02-23 23:07         ` Juan Quintela
2011-02-24  7:09         ` Markus Armbruster
2011-02-24  7:58           ` Paolo Bonzini
2011-02-23 21:47 ` [Qemu-devel] [PATCH 17/28] migration: another case of global variable assigned to local one Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 18/28] migration: convert current_migration from pointer to struct Juan Quintela
2011-02-23 22:19   ` Anthony Liguori
2011-02-23 22:50     ` Juan Quintela [this message]
2011-02-23 21:47 ` [Qemu-devel] [PATCH 19/28] migration: Use bandwidth_limit directly Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 20/28] migration: Export a function that tells if the migration has finished correctly Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 21/28] migration: Make state definitions local Juan Quintela
2011-02-24  4:12   ` Yoshiaki Tamura
2011-02-24  9:01     ` [Qemu-devel] " Juan Quintela
2011-02-24  9:16       ` Yoshiaki Tamura
2011-02-23 21:47 ` [Qemu-devel] [PATCH 22/28] savevm: avoid qemu_savevm_state_iteate() to return 1 when qemu file has error Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 23/28] migration: add error handling to migrate_fd_put_notify() Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 24/28] migration: Don't use callback on file defining it Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 25/28] migration: propagate error correctly Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 26/28] migration: qemu_savevm_iterate has three return values Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 27/28] migration: If there is one error, it makes no sense to continue Juan Quintela
2011-02-23 21:47 ` [Qemu-devel] [PATCH 28/28] migration: make migration-{tcp, unix} consistent Juan Quintela
2011-04-02  7:54 ` [Qemu-devel] [PATCH v2 00/28] Refactor and cleanup migration code Yoshiaki Tamura

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=m3ipwa2wnj.fsf@trasno.org \
    --to=quintela@redhat.com \
    --cc=anthony@codemonkey.ws \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.