)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"0b6064a3ebe4f1e09d808fbd9f4cbbbde46914d2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"000a75bc_6426b28e","updated":"2025-11-03 16:41:08.000000000","message":"Some minor comments.","commit_id":"8d7b7267425693d8ce5ae6c7fe7a15b8da57cc1c"}],"ironic/console/container/systemd.py":[{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"0b6064a3ebe4f1e09d808fbd9f4cbbbde46914d2","unresolved":true,"context_lines":[{"line_number":146,"context_line":"                    \u0027journalctl\u0027, \u0027--user\u0027, \u0027--no-pager\u0027, \u0027-u\u0027, unit,"},{"line_number":147,"context_line":"                    check_exit_code\u003dFalse)"},{"line_number":148,"context_line":"                LOG.error(out)"},{"line_number":149,"context_line":"            except Exception:"},{"line_number":150,"context_line":"                pass"},{"line_number":151,"context_line":"            raise exception.ConsoleContainerError(provider\u003d\u0027systemd\u0027, reason\u003de)"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"b3bb554b_b4f50f5a","line":149,"updated":"2025-11-03 16:41:08.000000000","message":"Can we catch the exceptions that `utils.execute` raises instead of the generic `Exception`? I don\u0027t think `LOG.error` can raise.","commit_id":"8d7b7267425693d8ce5ae6c7fe7a15b8da57cc1c"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"3bbcb13a532dca93a1190ad647f7661e1da5e1dc","unresolved":true,"context_lines":[{"line_number":146,"context_line":"                    \u0027journalctl\u0027, \u0027--user\u0027, \u0027--no-pager\u0027, \u0027-u\u0027, unit,"},{"line_number":147,"context_line":"                    check_exit_code\u003dFalse)"},{"line_number":148,"context_line":"                LOG.error(out)"},{"line_number":149,"context_line":"            except Exception:"},{"line_number":150,"context_line":"                pass"},{"line_number":151,"context_line":"            raise exception.ConsoleContainerError(provider\u003d\u0027systemd\u0027, reason\u003de)"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"0470118d_79cb9733","line":149,"in_reply_to":"99999a82_b7336a82","updated":"2025-11-04 22:06:46.000000000","message":"We\u0027re already in an error path here and I\u0027d prefer to remove any chance of something else being raised here","commit_id":"8d7b7267425693d8ce5ae6c7fe7a15b8da57cc1c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"cc7b558c1923609d32e62bd0b35694adbcd69a23","unresolved":true,"context_lines":[{"line_number":146,"context_line":"                    \u0027journalctl\u0027, \u0027--user\u0027, \u0027--no-pager\u0027, \u0027-u\u0027, unit,"},{"line_number":147,"context_line":"                    check_exit_code\u003dFalse)"},{"line_number":148,"context_line":"                LOG.error(out)"},{"line_number":149,"context_line":"            except Exception:"},{"line_number":150,"context_line":"                pass"},{"line_number":151,"context_line":"            raise exception.ConsoleContainerError(provider\u003d\u0027systemd\u0027, reason\u003de)"},{"line_number":152,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"99999a82_b7336a82","line":149,"in_reply_to":"b3bb554b_b4f50f5a","updated":"2025-11-03 21:58:09.000000000","message":"so, tl;dr is Exception might be okay here since ironic/common/utils.py method execute ends up logging if there is a FileNotFoundError or ProcessExecutionError... \n\nAt worst maybe a note?","commit_id":"8d7b7267425693d8ce5ae6c7fe7a15b8da57cc1c"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"0b6064a3ebe4f1e09d808fbd9f4cbbbde46914d2","unresolved":true,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def _wait_for_listen(self, host, port):"},{"line_number":287,"context_line":"        \"\"\"Blocks until VNC port is returning data\"\"\""},{"line_number":288,"context_line":"        length \u003d 12"},{"line_number":289,"context_line":"        for i in range(10):"},{"line_number":290,"context_line":"            try:"},{"line_number":291,"context_line":"                # open a TCP socket using host and port and request 12 bytes of"}],"source_content_type":"text/x-python","patch_set":7,"id":"83331406_9fd36fdc","line":288,"updated":"2025-11-03 16:41:08.000000000","message":"Why 12? Is this the standard `HELO` for VNC?","commit_id":"8d7b7267425693d8ce5ae6c7fe7a15b8da57cc1c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"cc7b558c1923609d32e62bd0b35694adbcd69a23","unresolved":true,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def _wait_for_listen(self, host, port):"},{"line_number":287,"context_line":"        \"\"\"Blocks until VNC port is returning data\"\"\""},{"line_number":288,"context_line":"        length \u003d 12"},{"line_number":289,"context_line":"        for i in range(10):"},{"line_number":290,"context_line":"            try:"},{"line_number":291,"context_line":"                # open a TCP socket using host and port and request 12 bytes of"}],"source_content_type":"text/x-python","patch_set":7,"id":"9f6bb717_79ac4770","line":288,"in_reply_to":"83331406_9fd36fdc","updated":"2025-11-03 21:58:09.000000000","message":"Its the standard header length for the protocol.\nhttps://web.mit.edu/cdsdev/src/rfbproto.pdf\nSearch for 5.1.1\n\nHey Steve, might be worthwhile to put a note in.","commit_id":"8d7b7267425693d8ce5ae6c7fe7a15b8da57cc1c"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"3bbcb13a532dca93a1190ad647f7661e1da5e1dc","unresolved":false,"context_lines":[{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def _wait_for_listen(self, host, port):"},{"line_number":287,"context_line":"        \"\"\"Blocks until VNC port is returning data\"\"\""},{"line_number":288,"context_line":"        length \u003d 12"},{"line_number":289,"context_line":"        for i in range(10):"},{"line_number":290,"context_line":"            try:"},{"line_number":291,"context_line":"                # open a TCP socket using host and port and request 12 bytes of"}],"source_content_type":"text/x-python","patch_set":7,"id":"bf5b6067_d7b44ad6","line":288,"in_reply_to":"9f6bb717_79ac4770","updated":"2025-11-04 22:06:46.000000000","message":"I\u0027ll just reference this constant directly https://opendev.org/openstack/ironic/src/commit/d9fc0686308c8d955eaa714962e41b8688b331c0/ironic/console/rfb/auth.py#L18","commit_id":"8d7b7267425693d8ce5ae6c7fe7a15b8da57cc1c"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"0b6064a3ebe4f1e09d808fbd9f4cbbbde46914d2","unresolved":true,"context_lines":[{"line_number":286,"context_line":"    def _wait_for_listen(self, host, port):"},{"line_number":287,"context_line":"        \"\"\"Blocks until VNC port is returning data\"\"\""},{"line_number":288,"context_line":"        length \u003d 12"},{"line_number":289,"context_line":"        for i in range(10):"},{"line_number":290,"context_line":"            try:"},{"line_number":291,"context_line":"                # open a TCP socket using host and port and request 12 bytes of"},{"line_number":292,"context_line":"                # data. This will either fail to connect, or return zero bytes"}],"source_content_type":"text/x-python","patch_set":7,"id":"7e1549ee_5adf2017","line":289,"updated":"2025-11-03 16:41:08.000000000","message":"We should probably make this configurable with a sensible default.","commit_id":"8d7b7267425693d8ce5ae6c7fe7a15b8da57cc1c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"cc7b558c1923609d32e62bd0b35694adbcd69a23","unresolved":true,"context_lines":[{"line_number":286,"context_line":"    def _wait_for_listen(self, host, port):"},{"line_number":287,"context_line":"        \"\"\"Blocks until VNC port is returning data\"\"\""},{"line_number":288,"context_line":"        length \u003d 12"},{"line_number":289,"context_line":"        for i in range(10):"},{"line_number":290,"context_line":"            try:"},{"line_number":291,"context_line":"                # open a TCP socket using host and port and request 12 bytes of"},{"line_number":292,"context_line":"                # data. This will either fail to connect, or return zero bytes"}],"source_content_type":"text/x-python","patch_set":7,"id":"f99eaf96_3e404630","line":289,"in_reply_to":"7e1549ee_5adf2017","updated":"2025-11-03 21:58:09.000000000","message":"Yeah, could be useful I guess.","commit_id":"8d7b7267425693d8ce5ae6c7fe7a15b8da57cc1c"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"3bbcb13a532dca93a1190ad647f7661e1da5e1dc","unresolved":false,"context_lines":[{"line_number":286,"context_line":"    def _wait_for_listen(self, host, port):"},{"line_number":287,"context_line":"        \"\"\"Blocks until VNC port is returning data\"\"\""},{"line_number":288,"context_line":"        length \u003d 12"},{"line_number":289,"context_line":"        for i in range(10):"},{"line_number":290,"context_line":"            try:"},{"line_number":291,"context_line":"                # open a TCP socket using host and port and request 12 bytes of"},{"line_number":292,"context_line":"                # data. This will either fail to connect, or return zero bytes"}],"source_content_type":"text/x-python","patch_set":7,"id":"24c2a1b3_ec824fb2","line":289,"in_reply_to":"f99eaf96_3e404630","updated":"2025-11-04 22:06:46.000000000","message":"Done","commit_id":"8d7b7267425693d8ce5ae6c7fe7a15b8da57cc1c"},{"author":{"_account_id":14228,"name":"Clif Houck","email":"me@clifhouck.com","username":"clif_h"},"change_message_id":"0b6064a3ebe4f1e09d808fbd9f4cbbbde46914d2","unresolved":true,"context_lines":[{"line_number":299,"context_line":"                    LOG.debug(\"Expected %s bytes, got %s\", length, len(b))"},{"line_number":300,"context_line":"            except Exception:"},{"line_number":301,"context_line":"                pass"},{"line_number":302,"context_line":"            time.sleep(1)"},{"line_number":303,"context_line":"        reason \u003d f\"RFB data not returned by {host}:{port}\""},{"line_number":304,"context_line":"        raise exception.ConsoleContainerError("},{"line_number":305,"context_line":"            provider\u003d\u0027systemd\u0027, reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":7,"id":"138c84d9_64ef1f4e","line":302,"updated":"2025-11-03 16:41:08.000000000","message":"We should probably make this configurable with a sensible default.","commit_id":"8d7b7267425693d8ce5ae6c7fe7a15b8da57cc1c"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"cc7b558c1923609d32e62bd0b35694adbcd69a23","unresolved":true,"context_lines":[{"line_number":299,"context_line":"                    LOG.debug(\"Expected %s bytes, got %s\", length, len(b))"},{"line_number":300,"context_line":"            except Exception:"},{"line_number":301,"context_line":"                pass"},{"line_number":302,"context_line":"            time.sleep(1)"},{"line_number":303,"context_line":"        reason \u003d f\"RFB data not returned by {host}:{port}\""},{"line_number":304,"context_line":"        raise exception.ConsoleContainerError("},{"line_number":305,"context_line":"            provider\u003d\u0027systemd\u0027, reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":7,"id":"4a29f84a_e324e923","line":302,"in_reply_to":"138c84d9_64ef1f4e","updated":"2025-11-03 21:58:09.000000000","message":"Eh, in theory this should be local, so we\u0027re just pending on the process to exec and stand up the remote socket. I guess follow-up  would be good for me.","commit_id":"8d7b7267425693d8ce5ae6c7fe7a15b8da57cc1c"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"3bbcb13a532dca93a1190ad647f7661e1da5e1dc","unresolved":true,"context_lines":[{"line_number":299,"context_line":"                    LOG.debug(\"Expected %s bytes, got %s\", length, len(b))"},{"line_number":300,"context_line":"            except Exception:"},{"line_number":301,"context_line":"                pass"},{"line_number":302,"context_line":"            time.sleep(1)"},{"line_number":303,"context_line":"        reason \u003d f\"RFB data not returned by {host}:{port}\""},{"line_number":304,"context_line":"        raise exception.ConsoleContainerError("},{"line_number":305,"context_line":"            provider\u003d\u0027systemd\u0027, reason\u003dreason)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f9e4c54_b5210051","line":302,"in_reply_to":"4a29f84a_e324e923","updated":"2025-11-04 22:06:46.000000000","message":"systemctl start blocks until the container is running, so this really is just waiting for the running x11vnc process to expose a socket and respond","commit_id":"8d7b7267425693d8ce5ae6c7fe7a15b8da57cc1c"}]}
