On Wed, Oct 6, 2021 at 6:14 AM Paolo Bonzini <pbonz...@redhat.com> wrote:
> On 23/09/21 02:49, John Snow wrote: > > Based-on: <20210915162955.333025-1-js...@redhat.com> > > [PATCH v4 00/27] python: introduce Asynchronous QMP package > > GitLab: > https://gitlab.com/jsnow/qemu/-/commits/python-aqmp-iotest-wrapper > > CI: https://gitlab.com/jsnow/qemu/-/pipelines/375637927 > > > > Hiya, > > > > This series continues where the first AQMP series left off and adds a > > synchronous 'legacy' wrapper around the new AQMP interface, then drops > > it straight into iotests to prove that AQMP is functional and totally > > cool and fine. The disruption and churn to iotests is extremely minimal. > > (There's actually a net negative SLOC in tests/qemu-iotests.) > > > > In the event that a regression happens and I am not physically proximate > > to inflict damage upon, one may set the QEMU_PYTHON_LEGACY_QMP variable > > to any non-empty string as it pleases you to engage the QMP machinery > > you are used to. > > > > I'd like to try and get this committed early in the 6.2 development > > cycle to give ample time to smooth over any possible regressions. I've > > tested it locally and via gitlab CI, across Python versions 3.6 through > > 3.10, and "worksforme". If something bad happens, we can revert the > > actual switch-flip very trivially. > > > > Layout: > > > > Patches 1-7: ./python/qemu/aqmp changes that serve as pre-requisites. > > Patches 8-12: other ./python changes that ease the transition. > > Patches 13-14: iotest changes to support the new QMP backend. > > Patches 15-17: Make the switch. > > > > V2: > > > > 001/17:[----] [--] 'python/aqmp: add greeting property to QMPClient' > > 002/17:[----] [--] 'python/aqmp: add .empty() method to EventListener' > > 003/17:[----] [--] 'python/aqmp: Return cleared events from > EventListener.clear()' > > 004/17:[0007] [FC] 'python/aqmp: add send_fd_scm' > > 005/17:[down] 'python/aqmp: Add dict conversion method to Greeting > object' > > 006/17:[down] 'python/aqmp: Reduce severity of EOFError-caused loop > terminations' > > 007/17:[down] 'python/aqmp: Disable logging messages by default' > > > > 008/17:[0002] [FC] 'python/qmp: clear events on get_events() call' > > 009/17:[----] [--] 'python/qmp: add send_fd_scm directly to > QEMUMonitorProtocol' > > 010/17:[----] [--] 'python, iotests: remove socket_scm_helper' > > 011/17:[0013] [FC] 'python/machine: remove has_quit argument' > > 012/17:[down] 'python/machine: Handle QMP errors on close more > meticulously' > > > > 013/17:[0009] [FC] 'iotests: Accommodate async QMP Exception classes' > > 014/17:[down] 'iotests: Conditionally silence certain AQMP errors' > > > > 015/17:[0016] [FC] 'python/aqmp: Create sync QMP wrapper for iotests' > > 016/17:[0002] [FC] 'python/aqmp: Remove scary message' > > 017/17:[----] [--] 'python, iotests: replace qmp with aqmp' > > > > - Rebased on jsnow/python, which was recently rebased on origin/master. > > - Make aqmp's send_fd_scm method bark if the socket isn't AF_UNIX (Hanna) > > - Uh... modify send_fd_scm so it doesn't break when Python 3.11 comes > out ... > > See the commit message for more detail. > > - Drop the "python/aqmp: Create MessageModel and StandaloneModel class" > > patch and replace with a far simpler method that just adds an > > _asdict() method. > > - Add patches 06 and 07 to change how the AQMP library handles logging. > > - Adjust docstring in patch 08 (Hanna) > > - Rename "_has_quit" attribute to "_quid_issued" (Hanna) > > - Renamed patch 12, simplified the logic in _soft_shutdown a tiny bit. > > - Fixed bad exception handling logic in 13 (Hanna) > > - Introduce a helper in patch 14 to silence log output when it's > unwanted. > > - Small addition of _get_greeting() helper in patch 15, coinciding with > the > > new patch 05 here. > > - Contextual changes in 16. > > > > John Snow (17): > > python/aqmp: add greeting property to QMPClient > > python/aqmp: add .empty() method to EventListener > > python/aqmp: Return cleared events from EventListener.clear() > > python/aqmp: add send_fd_scm > > python/aqmp: Add dict conversion method to Greeting object > > python/aqmp: Reduce severity of EOFError-caused loop terminations > > python/aqmp: Disable logging messages by default > > python/qmp: clear events on get_events() call > > python/qmp: add send_fd_scm directly to QEMUMonitorProtocol > > python, iotests: remove socket_scm_helper > > python/machine: remove has_quit argument > > python/machine: Handle QMP errors on close more meticulously > > iotests: Accommodate async QMP Exception classes > > iotests: Conditionally silence certain AQMP errors > > python/aqmp: Create sync QMP wrapper for iotests > > python/aqmp: Remove scary message > > python, iotests: replace qmp with aqmp > > > > tests/qemu-iotests/socket_scm_helper.c | 136 ---------------------- > > python/qemu/aqmp/__init__.py | 14 +-- > > python/qemu/aqmp/events.py | 15 ++- > > python/qemu/aqmp/legacy.py | 135 +++++++++++++++++++++ > > python/qemu/aqmp/models.py | 13 +++ > > python/qemu/aqmp/protocol.py | 7 +- > > python/qemu/aqmp/qmp_client.py | 27 +++++ > > python/qemu/machine/machine.py | 133 +++++++++++---------- > > python/qemu/machine/qtest.py | 2 - > > python/qemu/qmp/__init__.py | 27 +++-- > > python/qemu/qmp/qmp_shell.py | 1 - > > scripts/simplebench/bench_block_job.py | 3 +- > > tests/Makefile.include | 1 - > > tests/meson.build | 4 - > > tests/qemu-iotests/040 | 7 +- > > tests/qemu-iotests/218 | 2 +- > > tests/qemu-iotests/255 | 2 +- > > tests/qemu-iotests/iotests.py | 23 +++- > > tests/qemu-iotests/meson.build | 5 - > > tests/qemu-iotests/testenv.py | 8 +- > > tests/qemu-iotests/tests/mirror-top-perms | 12 +- > > 21 files changed, 315 insertions(+), 262 deletions(-) > > delete mode 100644 tests/qemu-iotests/socket_scm_helper.c > > create mode 100644 python/qemu/aqmp/legacy.py > > delete mode 100644 tests/qemu-iotests/meson.build > > > > Reviewed-by: Paolo Bonzini <pbonz...@redhat.com> > > apart from the name nit in patch 15. I would really like this to go in > and get rid of socket_scm_helper.c! > > Paolo > > Got a thumbs up from Hanna on IRC to stage patches 1-10 myself. I'll leave patches 11-17 for further scrutiny. so, patches 1-10: staged to my Python branch. https://gitlab.com/jsnow/qemu/-/commits/python thanks! --js