On Wed, Oct 08, 2025 at 12:35:48PM +0100, Daniel P. Berrangé wrote:
> The recent set of regressions identified in the LUKS block driver
> re-inforced that despite having a hugely useful set of I/O tests,
> our CI coverage is still letting through too many bugs.
>
> This series expands the meson suites / make targets for running
> I/O tests for more drivers, and then creates a CI job for each.
>
> While the first three patches are functionally usable as is, the
> last patch for gitlab is very much an RFC. A test pipeline
>
> https://gitlab.com/berrange/qemu/-/pipelines/2085907042
>
> shows passes for qcow2, qed, vmdk & vpc, but failures for luks,
> nbd and raw.
>
> The luks failures all have patchs floating around pending merge.
>
> The nbd failures are problems with non-deterministic output
> ordering, or warnings from python deprecations that need
> addressing.
>
> The raw failures are problems with python deprecations, and
> insufficient permissions checks wrt device mapper acess.
The raw / nbd deprecations are:
/usr/lib64/python3.9/asyncio/trsock.py:20: DeprecationWarning: Using sendmsg() method on sockets returned from get_extra_info('socket') will be prohibited in asyncio 3.9. Please report your use case to bugs.python.org.
warnings.warn(
DeprecationWarning: Enable tracemalloc to get the object allocation traceback
This comes from send_fd_scm in qmp_client.py where it does
sock = self._writer.transport.get_extra_info('socket')
if sock.family != socket.AF_UNIX:
raise QMPError("Sending file descriptors requires a UNIX socket.")
if not hasattr(sock, 'sendmsg'):
# We need to void the warranty sticker.
# Access to sendmsg is scheduled for removal in Python 3.11.
# Find the real backing socket to use it anyway.
sock = sock._sock # pylint: disable=protected-access
sock.sendmsg(
[b' '],
[(socket.SOL_SOCKET, socket.SCM_RIGHTS, struct.pack('@i', fd))]
)
As that comment says, the 'sendmsg' method has been removed
from the TransportSock object returned by 'get_extra_info',
with asyncio offering no replacement. The code above grabs
the private sock._sock handle, which is rather gross, but
we lack better options.
The problem in CI is that I picked CentOS 9 which has py 3.9
which still has the 'sendmsg' method. On newer distros
'sendmsg' is gone, so we grab the private sock._sock and
so dno't see a deprecation message.
IMHO we need to revert this previous change, so we avoid
calling the deprecated method at all:
commit a57cb3e23d5ac918a69d0aab918470ff0b429ff9
Author: John Snow <jsnow@redhat.com>
Date: Thu Nov 18 15:46:20 2021 -0500
python/aqmp: fix send_fd_scm for python 3.6.x
3.6 doesn't play keepaway with the socket object, so we don't need to go
fishing for it on this version. In fact, so long as 'sendmsg' is still
available, it's probably preferable to just use that method and only go
fishing for forbidden details when we absolutely have to.
Reported-by: Thomas Huth <thuth@redhat.com>
Signed-off-by: John Snow <jsnow@redhat.com>
Reviewed-by: Willian Rampazzo <willianr@redhat.com>
Message-id: 20211118204620.1897674-8-jsnow@redhat.com
Signed-off-by: John Snow <jsnow@redhat.com>
diff --git a/python/qemu/aqmp/qmp_client.py b/python/qemu/aqmp/qmp_client.py
index f987da02eb..8105e29fa8 100644
--- a/python/qemu/aqmp/qmp_client.py
+++ b/python/qemu/aqmp/qmp_client.py
@@ -639,9 +639,12 @@ def send_fd_scm(self, fd: int) -> None:
if sock.family != socket.AF_UNIX:
raise AQMPError("Sending file descriptors requires a UNIX socket.")
- # Void the warranty sticker.
- # Access to sendmsg in asyncio is scheduled for removal in Python 3.11.
- sock = sock._sock # pylint: disable=protected-access
+ if not hasattr(sock, 'sendmsg'):
+ # We need to void the warranty sticker.
+ # Access to sendmsg is scheduled for removal in Python 3.11.
+ # Find the real backing socket to use it anyway.
+ sock = sock._sock # pylint: disable=protected-access
+
The need for 3.6 compat no longer exists since we bumped
min python, so that justification for that original
commit is now obsolete.
With regards,
Daniel
--
|: https://berrange.com -o- https://www.flickr.com/photos/dberrange :|
|: https://libvirt.org -o- https://fstop138.berrange.com :|
|: https://entangle-photo.org -o- https://www.instagram.com/dberrange :|