Unverified Commit fec90f5f authored by copilot-swe-agent[bot]'s avatar copilot-swe-agent[bot] Committed by GitHub
Browse files

Suppress qemu.qmp EOF log message during container shutdown

Set the qemu.qmp logger to WARNING level as soon as a termination
signal (SIGINT/SIGTERM) is received or a POWERDOWN/SHUTDOWN QMP event
is detected, rather than only around the disconnect() call which
happens too late to suppress the reader task's "end-of-file" message.

Also add SIGTERM handling so container shutdown (which sends SIGTERM)
is handled gracefully.
parent 52c52ab5
Loading
Loading
Loading
Loading
+45.3 KiB

File added.

No diff preview for this file type.

+7 −9
Original line number Diff line number Diff line
@@ -338,9 +338,9 @@ class BalloonMonitor:
            self._inotify_fd = -1

    def _handle_sigint(self) -> None:
        log.debug("Received SIGINT, terminating.")
        log.debug("Received termination signal, shutting down.")
        logging.getLogger("qemu.qmp").setLevel(logging.WARNING)
        self._stop.set()
        self._loop.remove_signal_handler(signal.SIGINT)

    def _get_qmp(self) -> QMPClient:
        if self.qmp is None:
@@ -376,6 +376,7 @@ class BalloonMonitor:
            async for event in self._get_qmp().events:
                if event["event"] in ("POWERDOWN", "SHUTDOWN"):
                    log.debug("Received %s event, terminating.", event["event"])
                    logging.getLogger("qemu.qmp").setLevel(logging.WARNING)
                    self._stop.set()
                    return
                if event["event"] == "BALLOON_CHANGE" and "data" in event:
@@ -658,6 +659,7 @@ class BalloonMonitor:

        self._loop = asyncio.get_running_loop()
        self._loop.add_signal_handler(signal.SIGINT, self._handle_sigint)
        self._loop.add_signal_handler(signal.SIGTERM, self._handle_sigint)

        await self._qmp_connect()
        self.max_mem = await qmp_get_max_mem(self._get_qmp())
@@ -692,16 +694,12 @@ class BalloonMonitor:
        finally:
            self._teardown_cgroup_watch()
            self._loop.remove_signal_handler(signal.SIGINT)
            self._loop.remove_signal_handler(signal.SIGTERM)
            if self.event_task:
                self.event_task.cancel()
            if self.qmp:
                qmp_logger = logging.getLogger("qemu.qmp")
                prev_level = qmp_logger.level
                qmp_logger.setLevel(logging.WARNING)
                try:
                logging.getLogger("qemu.qmp").setLevel(logging.WARNING)
                await self.qmp.disconnect()
                finally:
                    qmp_logger.setLevel(prev_level)

# ==========================================================
# Main Execution