[libvirt] [PATCH v2 9/9] cpu-baseline command for virsh

Daniel Veillard veillard at redhat.com
Fri Feb 12 12:50:12 UTC 2010


On Fri, Feb 12, 2010 at 11:05:54AM +0000, Daniel P. Berrange wrote:
> On Thu, Feb 11, 2010 at 09:37:58PM +0100, Daniel Veillard wrote:
> > On Thu, Feb 11, 2010 at 08:49:54PM +0100, Jiri Denemark wrote:
> > > > > +    if (virFileReadAll(from, VIRSH_MAX_XML_FILE, &buffer) < 0)
> > > > > +        return FALSE;
> > > > > +
> > > > > +    p = buffer;
> > > > > +    while ((p = strstr(p, "<cpu>"))) {
> > > > > +        list = vshRealloc(ctl, list, sizeof(char *) * (count + 1));
> > > > > +        list[count++] = p;
> > > > > +
> > > > > +        if ((p = strstr(p, "</cpu>"))) {
> > > > > +            p += strlen("</cpu>");
> > > > > +            if (*p != '\0') {
> > > > > +                *p = '\0';
> > > > > +                p++;
> > > > > +            }
> > > > > +        }
> > > > > +    }
> > > > 
> > > >   Aye aye aye ...  I understand what you're trying to do but I think
> > > > this is a bit weird  ... I think we should be able to come with an
> > > > alternative, cleaner based on parsing the content as an XML well
> > > > balanced fragment and then reserialize all cpu elements found.
> > > >   Your scheme would explode for example if we tried to add a <cpu>
> > > > element as one possible child of <cpu> or if we added attributes to
> > > > <cpu>, it's too fragile. I can think the other parts can be commited
> > > > independantly anyway.
> > > 
> > > Yeah, it's ugly but I wanted to avoid the complexity of parsing XML and
> > > formating back to a string. And I still don't think it is a good idea. Maybe I
> > 
> >   Not that hard. The harder is to get libvirt to accept something like a
> > concatenation
> > 
> > ----------------
> > <cpu>
> >   ...
> > </cpu>
> > <cpu>
> >   ...
> > </cpu>
> > ----------------
> > 
> > But I know how to do it (nut never pretend it's XML :-)
> 
> Isn't there anyway to get the XML parser to stop processing input once it
> has parsed one complete document, without consuming the rest of the data
> in the file. eg

  No,

  http://www.w3.org/TR/REC-xml/#NT-document

  [1]       document       ::=       prolog  element  Misc*

  Misc* means the XML parser has to continue feeding it's input
until being told that's over. XML is not suitable for concatenation

> > <cpu>
> >   ...
> > </cpu>
> 
> Make it stop here ^^^
> 
> Then, invoke it again to parse the next document in the file
> 
> > <cpu>
> >   ...
> > </cpu>
> 
> And so on.... 

  there is a workaround, parsing as a well balanced chunk,
  http://xmlsoft.org/html/libxml-parser.html#xmlParseBalancedChunkMemory

I will provide a revised version of patch 9 once the 8 others patches
are applied.

Daniel

-- 
Daniel Veillard      | libxml Gnome XML XSLT toolkit  http://xmlsoft.org/
daniel at veillard.com  | Rpmfind RPM search engine http://rpmfind.net/
http://veillard.com/ | virtualization library  http://libvirt.org/




More information about the libvir-list mailing list