From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mailman by lists.gnu.org with tmda-scanned (Exim 4.43) id 1NHjPg-0006Jk-Uf for qemu-devel@nongnu.org; Mon, 07 Dec 2009 14:38:29 -0500 Received: from exim by lists.gnu.org with spam-scanned (Exim 4.43) id 1NHjPc-0006DP-73 for qemu-devel@nongnu.org; Mon, 07 Dec 2009 14:38:28 -0500 Received: from [199.232.76.173] (port=42779 helo=monty-python.gnu.org) by lists.gnu.org with esmtp (Exim 4.43) id 1NHjPb-0006DD-Un for qemu-devel@nongnu.org; Mon, 07 Dec 2009 14:38:23 -0500 Received: from mail-fx0-f219.google.com ([209.85.220.219]:40702) by monty-python.gnu.org with esmtp (Exim 4.60) (envelope-from ) id 1NHjPb-00038r-2D for qemu-devel@nongnu.org; Mon, 07 Dec 2009 14:38:23 -0500 Received: by fxm19 with SMTP id 19so4833872fxm.17 for ; Mon, 07 Dec 2009 11:38:21 -0800 (PST) Message-ID: <4B1D59A8.5040703@codemonkey.ws> Date: Mon, 07 Dec 2009 13:38:16 -0600 From: Anthony Liguori MIME-Version: 1.0 Subject: Re: [Qemu-devel] [PATCH 12/17] migration: Convert do_info_migrate() to QObject References: <1259946695-15784-1-git-send-email-lcapitulino@redhat.com> <1259946695-15784-13-git-send-email-lcapitulino@redhat.com> In-Reply-To: <1259946695-15784-13-git-send-email-lcapitulino@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit List-Id: qemu-devel.nongnu.org List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Luiz Capitulino Cc: aliguori@us.ibm.com, qemu-devel@nongnu.org Luiz Capitulino wrote: > Return a QDict, which may contain more two QDicts, depending on > the type of migration we're performing. > > IMPORTANT: as a QInt stores a int64_t integer, RAM values are going > to be stored as int64_t and not as uint64_t as they are today. If > this is a problem QInt will have to be changed. > > This commit should not change user output. > > Signed-off-by: Luiz Capitulino > --- > migration.c | 118 +++++++++++++++++++++++++++++++++++++++++++++++++++------- > migration.h | 4 +- > monitor.c | 3 +- > 3 files changed, 108 insertions(+), 17 deletions(-) > > diff --git a/migration.c b/migration.c > index d6a3e26..bfaa2db 100644 > --- a/migration.c > +++ b/migration.c > @@ -19,6 +19,7 @@ > #include "block.h" > #include "qemu_socket.h" > #include "block-migration.h" > +#include "qemu-objects.h" > > //#define DEBUG_MIGRATION > > @@ -163,37 +164,124 @@ void do_migrate_set_downtime(Monitor *mon, const QDict *qdict) > max_downtime = (uint64_t)d; > } > > -void do_info_migrate(Monitor *mon) > +static void migrate_print_status(Monitor *mon, const char *name, > + const QDict *status_dict) > { > + QDict *qdict; > + > + qdict = qobject_to_qdict(qdict_get(status_dict, name)); > + > + monitor_printf(mon, "transferred %s: %" PRIu64 " kbytes\n", name, > + qdict_get_int(qdict, "transferred") >> 10); > + monitor_printf(mon, "remaining %s: %" PRIu64 " kbytes\n", name, > + qdict_get_int(qdict, "remaining") >> 10); > + monitor_printf(mon, "total %s: %" PRIu64 " kbytes\n", name, > + qdict_get_int(qdict, "total") >> 10); > +} > + > +void do_info_migrate_print(Monitor *mon, const QObject *data) > +{ > + QDict *qdict; > + > + qdict = qobject_to_qdict(data); > + > + monitor_printf(mon, "Migration status: %s\n", > + qdict_get_str(qdict, "status")); > + > + if (qdict_haskey(qdict, "ram")) { > + migrate_print_status(mon, "ram", qdict); > + } > + > + if (qdict_haskey(qdict, "disk")) { > + migrate_print_status(mon, "disk", qdict); > + } > +} > + > +static void migrate_put_status(QDict *qdict, const char *name, > + uint64_t trans, uint64_t rem, uint64_t total) > +{ > + QObject *obj; > + > + obj = qobject_from_jsonf("{ 'transferred': %" PRId64 ", " > + "'remaining': %" PRId64 ", " > + "'total': %" PRId64 " }", trans >> 10, > + rem >> 10, total >> 10); > + assert(obj != NULL); > + > + qdict_put_obj(qdict, name, obj); > +} > + > +/** > + * do_info_migrate(): Migration status > + * > + * Return a QDict. If migration is active there will be another > + * QDict with RAM migration status and if block migration is active > + * another one with block migration status. > + * > + * The main QDict contains the following: > + * > + * - "status": migration status > + * - "ram": only present if "status" is "active", it is a QDict with the > + * following RAM information (in bytes): > The implementation in migrate_put_status disagrees with your documentation. Regards, Anthony Liguori