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

Re: [Xen-devel] [PATCH 2/3] libxl_types.idl: use empty Struct for invalid domain type



On Thu, 2014-04-10 at 15:41 +0100, Wei Liu wrote:
> On Thu, Apr 10, 2014 at 03:24:46PM +0100, Ian Campbell wrote:
> > On Thu, 2014-04-10 at 14:00 +0100, Wei Liu wrote:
> > > On Thu, Apr 10, 2014 at 01:45:15PM +0100, Ian Campbell wrote:
> > > > On Thu, 2014-04-10 at 13:43 +0100, Wei Liu wrote:
> > > > > Using None makes gentypes.py generates a C function which generates
> > > > > nothing. Eventually the generated JSON string is malformed.
> > > > 
> > > > I'd prefer to fix the generator to not do this rather than muddying the
> > > > input description. How hard would it be?
> > > > 
> > > 
> > > It certainly yields a patch much larger than this one-liner. The way to
> > > fix generator is when parsing keyed-union we need to 1) get hold of the
> > > key, 2) get its "invalid" value, 3) skip code generation if key points
> > > to "invalid".
> > 
> > Can you point me to the generate code which wrong? What I'm seeing in
> > e.g. libxl_domain_build_info_gen_json is:
> >     s = yajl_gen_map_open(hand);
> >     ...
> 
> [ generate a map key called "u" ]
> 
> >     switch (p->type) {
> >     case LIBXL_DOMAIN_TYPE_HVM:
> >         s = yajl_gen_map_open(hand);
> >             ...
> >         s = yajl_gen_map_close(hand);
> >         if (s != yajl_gen_status_ok)
> >             goto out;
> >         break;
> >     case LIBXL_DOMAIN_TYPE_PV:
> >         s = yajl_gen_map_open(hand);
> >             ...
> >         s = yajl_gen_map_close(hand);
> >         if (s != yajl_gen_status_ok)
> >             goto out;
> >         break;
> >     case LIBXL_DOMAIN_TYPE_INVALID:
> >         break;
> 
> Here it doesn't generate value for map "u".
>    "u"(end of output) -- malformed JSON
> 
> With this change now it generate an empty map as the value of "u".
> 
>    "u": { } -- correct JSON
> 
> >     }
> >     s = yajl_gen_map_close(hand);
> > 
> > Does that produce invalid json somehow?
> > 
> > And if it did could we not detect the use of None with an explicit check
> 
> gentypes does that already. The result is not generating anything.

So make it generate something? That's just a map_open/map_close isn't
it?

> > in the generator somewhere rather than worrying about whether a given
> > enum value is valid or invalid? Relying on INVALID would be wrong
> 
> In the above example we need to skip generation of "u" if we encounter
> None or "INVALID". That's back referencing parent in recursive routines
> which requires more complex changes.

Which would be needed to push generating map "u" down into the switch?
OK to avoiding that then.

> 
> > anyway. It is in theory legitimate for a valid value to have no extra
> > data in the enum -- a bunch of the entries in libxl_event could be so
> > for example.
> > 
> > > We don't have definition in IDL for "invalid" value yet, so we need to
> > > add more code to get 2) working.
> > > 
> > > I only discovered this when I run testidl. There's no existing users of
> > > the generation function in libxl, so I think this fix is quite safe.
> > 
> > At least libxl_domain_config_gen_json is used (by xl).
> 
> But when you create a domain the domain type will not be "INVALID".
> That's why it doesn't fail I presume. I only discoverd this when running
> testidl.
> 
> What's the possible downside you see with this change?

It's a pointless empty struct specified in the idl which I'd rather
avoid.

Ian.


_______________________________________________
Xen-devel mailing list
Xen-devel@xxxxxxxxxxxxx
http://lists.xen.org/xen-devel


 


Rackspace

Lists.xenproject.org is hosted with RackSpace, monitoring our
servers 24x7x365 and backed by RackSpace's Fanatical Support®.