qemu-devel
[Top][All Lists]
Advanced

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

Re: [Qemu-devel] [PATCH V17 07/10] libqblock: libqblock API design and t


From: Stefan Hajnoczi
Subject: Re: [Qemu-devel] [PATCH V17 07/10] libqblock: libqblock API design and type defines
Date: Tue, 5 Feb 2013 13:39:48 +0100
User-agent: Mutt/1.5.21 (2010-09-15)

On Tue, Feb 05, 2013 at 10:56:09AM +0100, Paolo Bonzini wrote:
> Il 01/02/2013 10:32, Stefan Hajnoczi ha scritto:
> >>> What is the relationship between QBlockImage and its context?  Can I
> >>> have two contexts A and B like this:
> >>>
> >>> qb_image_ref(ctx_a, &qbi);
> >>> qb_image_unref(ctx_b, &qbi);
> >>>
> >>> Is this okay?
> >>>
> >>   it should be OK if block layer is thread safe in the future,
> >> a thread should own a context. But caller may need to make sure
> >> every context should call ref/unref as pairs.
> > 
> > Hmm...I still don't understand the relationship between QBlockImage and
> > a context.  Is it safe to use a QBlockImage with context B if it was
> > created with context A?  This should be documented.
> 
> No, it shouldn't.

I guess you mean "It is not safe to use a QBlockImage with context B if
it was created with context A" rather than "No, it shouldn't be
documented"? :)

> > Kevin: Does the block layer do short reads/writes?
> 
> No, it doesn't.

Great, then we can use int return values where 0 means success and
-errno is used for errors.  No need to return the number of bytes from
the read/write functions.

> 
> >>>> +/**
> >>>> + * qb_formattype2str: translate libqblock format enum type to a string.
> >>>> + *
> >>>> + * return a pointer to the string, or NULL if type is not supported, and
> >>>> + *  returned pointer must NOT be freed.
> >>>> + *
> >>>> + * @fmt: the format enum type.
> >>>> + */
> >>>> +QEMU_DLL_PUBLIC
> >>>> +const char *qb_formattype2str(QBlockFormat fmt_type);
> >>>
> >>> Why does the QBlockFormat enum exist?  Is there an issue with using 
> >>> strings?
> >>>
> >>   These fmt/enum code will always exist in an application to handler
> >> different format, the choice is whether libqblock handle it for
> >> the application. This is more a choice, my idea do it for user. What
> >> is your idea?
> > 
> > Always use the strings ("qcow2", "raw", etc).  strcmp() on a 4 or 5-byte
> > string is very cheap and eliminates the need to convert between strings
> > and enums.  Dropping the enum also means one less thing to update when a
> > new image format is added.
> 
> Hmm, I've never seen discriminated records with strings.  When working
> on the API with Wenchao, I tried to give it a QAPI flavor.

My thinking is that converting back and forth between string and enum is
a chore.  If we can reduce boilerplate the library becomes more pleasant
to use.

I guess it's nice to keep the structs QAPI compatible in case we want to
convert to QAPI later.

Stefan



reply via email to

[Prev in Thread] Current Thread [Next in Thread]