[Libguestfs] [PATCH nbdkit 5/5] vddk: Implement parallel thread model

Richard W.M. Jones rjones at redhat.com
Thu Oct 28 11:39:03 UTC 2021


On Wed, Oct 27, 2021 at 07:42:31PM +0200, Laszlo Ersek wrote:
> On 10/27/21 14:21, Richard W.M. Jones wrote:
> > +/* Queue of asynchronous commands sent to the background thread. */
> > +enum command_type { GET_SIZE, READ, WRITE, FLUSH, CAN_EXTENTS, EXTENTS, STOP };
> 
> (1) Shouldn't we use a common prefix for these enum constants?

If we get a conflict with a header then yes.  For example I was
disappointed a while back to see that I couldn't create a local
variable called (IIRC) "socket" (or maybe "connect") - which is
ridiculous!  If it's a symbol that needs to be namespaced (eg. it's
part of a public API) then absolutely required.  But the rest of the
time ... I'm not that bothered, saves typing.

> > +  /* Add the command to the command queue. */
> > +  {
> > +    ACQUIRE_LOCK_FOR_CURRENT_SCOPE (&h->commands_lock);
> > +    r = command_queue_append (&h->commands, cmd);
> > +    if (r == 0)
> > +      pthread_cond_signal (&h->commands_cond);
> > +  }
> 
> (*shudder* -- the automatic releasing of the mutex, upon exiting the
> scope, combined with the explicit signaling of the associated condvar,
> is terrible to read. Functionally it is correct, though.)

It's a bit awkward in this particular case, but I think this automatic
releasing of mutexes in general is *great*.  In many cases you put the
macro at the top of the function, fire and forget.  No need to
painfully clean up on every exit path.

Of course it does require a C extension ...

> (4) This could be slightly optimized by restricting the condvar signal
> to "queue size is now exactly 1 (i.e., it was empty)".

I think there's a possible race with that, but let me think about it.

> (11a) The switch statement is enormous. Each branch should have a
> dedicated helper function.

Yup, I did that change already, makes it a lot easier to follow :-)

I'll follow up on the rest in the v2 patch.

Thanks,

Rich.

-- 
Richard Jones, Virtualization Group, Red Hat http://people.redhat.com/~rjones
Read my programming and virtualization blog: http://rwmj.wordpress.com
virt-top is 'top' for virtual machines.  Tiny program with many
powerful monitoring features, net stats, disk stats, logging, etc.
http://people.redhat.com/~rjones/virt-top




More information about the Libguestfs mailing list