Hello,
I've been looking at source code related to persistent reservation
and got confused a little bit about managed persistent reservation
disks.
For disk configured with 'managed=yes' as the following,
<reservations managed='yes'>
<source type='unix'
path='/var/lib/libvirt/qemu/domain-7-brml10g19-iscsi-rese/pr-helper0.sock'
mode='client'/>
</reservations>
libvirt is responsible for starting a pr-helper program with a specific associated socket file. The following source code shows that there is only one pr-helper and socket file associated with the managed disks for one VM.
const char *
qemuDomainGetManagedPRAlias(void)
{
return "pr-helper0";
}
char *
qemuDomainGetManagedPRSocketPath(qemuDomainObjPrivate *priv)
{
return g_strdup_printf("%s/%s.sock", priv->libDir,
qemuDomainGetManagedPRAlias());
}
So if the VM is booted with multiple disks configured with
'managed=yes' for reservation, I suppose these multiple disks
share the this managed pr-helper and socket file. However, per the
qemu document, https://www.qemu.org/docs/master/interop/pr-helper.html
"It is invalid to send multiple
commands
concurrently on the same socket. It is however possible to
connect multiple
sockets to the helper and send multiple commands to the helper
for one or more
file descriptors."
Due to this limitation above, only
one persistent reservation disk is allowed as managed in theory.
However, libvirt doesn't throw out any error or warning when the
VM is booted up with multiple managed persistent reservation
disks. I am wondering if I've missed something here?
For unmanaged persistent reservation disks, libvirt doesn't start the pr-helper program for them. It is user's responsibility to start this program with customized socket file per disk, but the complexity increases with numbers of persistent reservation disks, especially in the case of hotplug/hotunplog. Is there any plan to support multiple managed persistent reservation disks with separate pr-helper/socket file?
Any suggestions/clarifications are greatly appreciated.
Thanks
Annie