All of lore.kernel.org
 help / color / mirror / Atom feed
From: Eduardo Habkost <ehabkost@redhat.com>
To: Peter Xu <peterx@redhat.com>
Cc: qemu-devel@nongnu.org, Laurent Vivier <lvivier@redhat.com>,
	Markus Armbruster <armbru@redhat.com>,
	Juan Quintela <quintela@redhat.com>,
	"Dr . David Alan Gilbert" <dgilbert@redhat.com>
Subject: Re: [Qemu-devel] [PATCH v2 07/11] migration: check global params for validity
Date: Mon, 17 Jul 2017 23:33:55 -0300	[thread overview]
Message-ID: <20170718023355.GA8345@localhost.localdomain> (raw)
In-Reply-To: <20170718015606.GA27284@pxdev.xzpeter.org>

On Tue, Jul 18, 2017 at 09:56:06AM +0800, Peter Xu wrote:
> On Mon, Jul 17, 2017 at 03:25:05PM -0300, Eduardo Habkost wrote:
> > On Mon, Jul 17, 2017 at 04:26:07PM +0800, Peter Xu wrote:
> > > Adding validity check for the migration parameters passed in via global
> > > properties.
> > > 
> > > Signed-off-by: Peter Xu <peterx@redhat.com>
> > > ---
> > >  migration/migration.c | 34 ++++++++++++++++++++++++++++++++++
> > >  1 file changed, 34 insertions(+)
> > > 
> > > diff --git a/migration/migration.c b/migration/migration.c
> > > index 8c65054..5a7f22c 100644
> > > --- a/migration/migration.c
> > > +++ b/migration/migration.c
> > > @@ -2109,6 +2109,39 @@ static void migration_instance_init(Object *obj)
> > >      ms->parameters.tls_hostname = g_strdup("");
> > >  }
> > >  
> > > +static void migration_instance_post_init(Object *obj)
> > > +{
> > > +    MigrationState *ms = (MigrationState *)obj;
> > > +    Error *err = NULL;
> > > +    MigrationParameters params = {
> > > +        .has_compress_level = true,
> > > +        .compress_level = ms->parameters.compress_level,
> > > +        .has_compress_threads = true,
> > > +        .compress_threads = ms->parameters.compress_threads,
> > > +        .has_decompress_threads = true,
> > > +        .decompress_threads = ms->parameters.decompress_threads,
> > > +        .has_cpu_throttle_initial = true,
> > > +        .cpu_throttle_initial = ms->parameters.cpu_throttle_initial,
> > > +        .has_cpu_throttle_increment = true,
> > > +        .cpu_throttle_increment = ms->parameters.cpu_throttle_increment,
> > > +        .has_max_bandwidth = true,
> > > +        .max_bandwidth = ms->parameters.max_bandwidth,
> > > +        .has_downtime_limit = true,
> > > +        .downtime_limit = ms->parameters.downtime_limit,
> > > +        .has_x_checkpoint_delay = true,
> > > +        .x_checkpoint_delay = ms->parameters.x_checkpoint_delay,
> > > +        .has_block_incremental = true,
> > > +        .block_incremental = ms->parameters.block_incremental,
> > > +    };
> > > +
> > > +    /* We have applied all the migration properties... */
> > > +
> > > +    if (!migrate_params_check(&params, &err)) {
> > 
> > Why not just:
> >   if (!migrate_params_check(&ms->parameters, &err))
> > ?
> > 
> > If the ms->parameters.has_* fields are not set to true anywhere,
> > we can set them to true in instance_init.
> 
> Sure.
> 
> > 
> > (This would also also us to use QAPI_CLONE in
> > qmp_query_migrate_parameters() instead of manually copying each
> > field.
> > 
> > 
> > > +        error_report_err(err);
> > > +        exit(1);
> > > +    }
> > > +}
> > 
> > On real devices, this is normally done on realize (which has
> > proper error reporting).  We never realize the TYPE_MIGRATION
> > object because it's not a real device, though.
> 
> Hmm...
> 
> > 
> > Doing error checks on post_init feels fragile, as the only way
> > errors can be handled is triggering exit(1) in the middle of an
> > object_new() call.
> > 
> > As we have only one place where the TYPE_MIGRATION object is
> > created, I suggest calling migrate_params_check() inside
> > migration_object_init().
> 
> ... How about I just provide a realize() for it? Then I can drop the
> QOM patch 4, also, I can keep the checks along with the object itself.

qdev does lots of other stuff at realize time (e.g. it adds the
device to the device tree), and I don't think we want to trigger
that.

-- 
Eduardo

  reply	other threads:[~2017-07-18  2:34 UTC|newest]

Thread overview: 36+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-07-17  8:26 [Qemu-devel] [PATCH v2 00/11] migration: export cap/params to qdev props Peter Xu
2017-07-17  8:26 ` [Qemu-devel] [PATCH v2 01/11] qdev: provide DEFINE_PROP_INT64() Peter Xu
2017-07-17  8:30   ` Marcel Apfelbaum
2017-07-17 16:24   ` Juan Quintela
2017-07-17 16:30   ` Eric Blake
2017-07-18  1:25     ` Peter Xu
2017-07-17 17:49   ` Eduardo Habkost
2017-07-17  8:26 ` [Qemu-devel] [PATCH v2 02/11] migration: export parameters to props Peter Xu
2017-07-17 16:30   ` Juan Quintela
2017-07-17  8:26 ` [Qemu-devel] [PATCH v2 03/11] migration: export capabilities " Peter Xu
2017-07-17 16:58   ` Juan Quintela
2017-07-18  1:34     ` Peter Xu
2017-07-17 17:52   ` Eduardo Habkost
2017-07-18  1:00     ` Peter Xu
2017-07-17  8:26 ` [Qemu-devel] [PATCH v2 04/11] qom: call parent first on post_init() Peter Xu
2017-07-17 18:02   ` Eduardo Habkost
2017-07-17  8:26 ` [Qemu-devel] [PATCH v2 05/11] migration: introduce migrate_params_check() Peter Xu
2017-07-17 17:04   ` Juan Quintela
2017-07-17  8:26 ` [Qemu-devel] [PATCH v2 06/11] migration: provide migrate_params_apply() Peter Xu
2017-07-17 19:01   ` Juan Quintela
2017-07-17  8:26 ` [Qemu-devel] [PATCH v2 07/11] migration: check global params for validity Peter Xu
2017-07-17 17:50   ` Juan Quintela
2017-07-17 18:25   ` Eduardo Habkost
2017-07-18  1:56     ` Peter Xu
2017-07-18  2:33       ` Eduardo Habkost [this message]
2017-07-18  2:41         ` Peter Xu
2017-07-17  8:26 ` [Qemu-devel] [PATCH v2 08/11] migration: remove check against colo support Peter Xu
2017-07-17 17:07   ` Juan Quintela
2017-07-18  7:13   ` Zhang Chen
2017-07-17  8:26 ` [Qemu-devel] [PATCH v2 09/11] migration: provide migrate_caps_check() Peter Xu
2017-07-17 19:03   ` Juan Quintela
2017-07-17  8:26 ` [Qemu-devel] [PATCH v2 10/11] migration: provide migrate_cap_add() Peter Xu
2017-07-17 17:14   ` Juan Quintela
2017-07-18  3:10     ` Peter Xu
2017-07-17  8:26 ` [Qemu-devel] [PATCH v2 11/11] migration: check global caps for validity Peter Xu
2017-07-17 19:48   ` Juan Quintela

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=20170718023355.GA8345@localhost.localdomain \
    --to=ehabkost@redhat.com \
    --cc=armbru@redhat.com \
    --cc=dgilbert@redhat.com \
    --cc=lvivier@redhat.com \
    --cc=peterx@redhat.com \
    --cc=qemu-devel@nongnu.org \
    --cc=quintela@redhat.com \
    /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.