On Wed, Oct 15, 2025, 3:11 AM Thomas Huth <[email protected]> wrote:
> On 16/09/2025 18.23, John Snow wrote: > > The client name is mutable, so the logging name should also change to > > reflect it when it changes. > > > > Signed-off-by: John Snow <[email protected]> > > cherry picked from commit > python-qemu-qmp@e10b73c633ce138ba30bc8beccd2ab31989eaf3d > > Reviewed-by: Daniel P. Berrangé <[email protected]> > > --- > > python/qemu/qmp/protocol.py | 24 ++++++++++++++++++++---- > > 1 file changed, 20 insertions(+), 4 deletions(-) > > Hi John, > > there is a regression when running "scripts/device-crash-test -q": It now > prints: > > ERROR: Negotiation failed: EOFError > ERROR: Failed to establish session: EOFError > > all the time. See also for example: > > https://gitlab.com/qemu-project/qemu/-/jobs/11715477453#L145 > > Bisecting the issue pointed me to this patch here. Could you please have a > look? > > Thanks, > Thomas > > > > diff --git a/python/qemu/qmp/protocol.py b/python/qemu/qmp/protocol.py > > index 86e588881b7..ec4762c567b 100644 > > --- a/python/qemu/qmp/protocol.py > > +++ b/python/qemu/qmp/protocol.py > > @@ -217,10 +217,8 @@ class AsyncProtocol(Generic[T]): > > # ------------------------- > > > > def __init__(self, name: Optional[str] = None) -> None: > > - #: The nickname for this connection, if any. > > - self.name: Optional[str] = name > > - if self.name is not None: > > - self.logger = self.logger.getChild(self.name) > > + self._name: Optional[str] > > + self.name = name > > > > # stream I/O > > self._reader: Optional[StreamReader] = None > > @@ -257,6 +255,24 @@ def __repr__(self) -> str: > > tokens.append(f"runstate={self.runstate.name}") > > return f"<{cls_name} {' '.join(tokens)}>" > > > > + @property > > + def name(self) -> Optional[str]: > > + """ > > + The nickname for this connection, if any. > > + > > + This name is used for differentiating instances in debug output. > > + """ > > + return self._name > > + > > + @name.setter > > + def name(self, name: Optional[str]) -> None: > > + logger = logging.getLogger(__name__) > > + if name: > > + self.logger = logger.getChild(name) > > + else: > > + self.logger = logger > > + self._name = name > > + > > @property # @upper_half > > def runstate(self) -> Runstate: > > """The current `Runstate` of the connection.""" > ... odd that it's this patch. I will have a look and issue a fix shortly. Thanks for the report.
