[Libguestfs] [nbdkit PATCH 1/2] plugins: Add .thread_model callback

Eric Blake eblake at redhat.com
Mon May 20 14:18:10 UTC 2019


On 5/20/19 8:36 AM, Richard W.M. Jones wrote:
> On Mon, May 20, 2019 at 07:30:31AM -0500, Eric Blake wrote:
>> +=head2 C<.thread_model>
>> +
>> + int thread_model (void)
>> +
>> +This optional callback is called after all the configuration has been
>> +passed to the plugin.  It can be used to force a stricter thread model
>> +based on configuration, compared to C<THREAD_MODEL>.  See L</THREADS>
>> +below for details.  Attempts to request a looser (more parallel) model
>> +are silently ignored.
>> +
>> +If there is an error, C<.thread_model> should call C<nbdkit_error>
>> +with an error message and return C<-1>.
> 
> Two comments:
> 
> (1) Do we have an opportunity to change the way the thread model is
> specified to allow future expansion.  This might involve returning
> something other than the simple int, or could be that we specify
> different constants to be returned by this call.
> 
> (Actually while making that point I think I've talked myself out of
> it.  But probably we should do this in the V3 API, so a note can be
> added to that effect at the end of the TODO file.)

So far, we've come up with two potential models to add: VDDK's model
where only the main thread is used but where parallel connections can
still be made (that is slightly different than SERIALIZE_ALL_REQUESTS,
not sure where it would lie conceptually between existing models), and a
model that allows parallel requests from a single connection but delays
responses to be in order (perhaps named SERIALIZE_RESPONSES,
conceptually lies between SERIALIZE_REQUESTS and PARALLEL).

We could add a utility helper function that, when given two constants,
returns -1/0/1 depending on whether the first parameter is
stricter/equal/looser than the second, to at least ease any out-of-order
defined integer values back into a hierarchical scheme.  I also wonder
if we need a utility function for a plugin to learn which threading
model ACTUALLY got selected, usable during .open or later (if the plugin
supports PARALLEL but is run with a filter that forces
SERIALIZE_ALL_REQUESTS, the plugin might be able to optimize out the use
of a mutex).

> 
> (2) Shouldn't it be an error if the thread model returns a more
> parallel thread model than the constant?

I thought about that, but my initial idea was to instead just declare
that attempts at a more parallel model are just silently ignored (with
at most a debug message visible during -fv).

> 
> Anyway patch series generally looks fine to me.
> 
> Rich.
> 

-- 
Eric Blake, Principal Software Engineer
Red Hat, Inc.           +1-919-301-3226
Virtualization:  qemu.org | libvirt.org

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 488 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libguestfs/attachments/20190520/a1c54fde/attachment.sig>


More information about the Libguestfs mailing list