)]}'
{"ironic/drivers/modules/console_utils.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5b6f9e4d6fa334be0139b0e6d704d83bfc9aa7cc","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    :param node_uuid: the uuid for the node."},{"line_number":120,"context_line":"    :param port: the terminal port for the node."},{"line_number":121,"context_line":"    :param console_cmd: the shell command that gets the cosnole."},{"line_number":122,"context_line":"    :raises: ConsoleSubprocessFailed when invoking the subprocess failed."},{"line_number":123,"context_line":"    \"\"\""},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_daea8dd7","line":121,"updated":"2014-06-25 08:55:29.000000000","message":"docstring needs update\n\n:raises: FailedToStopConsole","commit_id":"35dea6a62a364c486866612d5377af53655555f7"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"7fe408aecb5074160e2147a7ba3f99500e66bf13","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    :param node_uuid: the uuid for the node."},{"line_number":120,"context_line":"    :param port: the terminal port for the node."},{"line_number":121,"context_line":"    :param console_cmd: the shell command that gets the cosnole."},{"line_number":122,"context_line":"    :raises: ConsoleSubprocessFailed when invoking the subprocess failed."},{"line_number":123,"context_line":"    \"\"\""},{"line_number":124,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_e9bbfbe1","line":121,"in_reply_to":"1ae5cdf2_daea8dd7","updated":"2014-06-25 19:54:33.000000000","message":"Done","commit_id":"35dea6a62a364c486866612d5377af53655555f7"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5b6f9e4d6fa334be0139b0e6d704d83bfc9aa7cc","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            processutils.UnknownArgumentError):"},{"line_number":137,"context_line":"        error \u003d _(\"Failed to kill the old console process %(pid)s before \""},{"line_number":138,"context_line":"                  \"starting a new shellinabox console.\") % {\u0027pid\u0027: console_pid}"},{"line_number":139,"context_line":"        LOG.warning(error)"},{"line_number":140,"context_line":"        raise exception.FailedToStopConsole(error\u003derror)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    # put together the command and arguments for invoking the console"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_1aa315b2","line":139,"updated":"2014-06-25 08:55:29.000000000","message":"I think it\u0027s now an error log since we are breaking the flow of the operation.","commit_id":"35dea6a62a364c486866612d5377af53655555f7"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"7fe408aecb5074160e2147a7ba3f99500e66bf13","unresolved":false,"context_lines":[{"line_number":136,"context_line":"            processutils.UnknownArgumentError):"},{"line_number":137,"context_line":"        error \u003d _(\"Failed to kill the old console process %(pid)s before \""},{"line_number":138,"context_line":"                  \"starting a new shellinabox console.\") % {\u0027pid\u0027: console_pid}"},{"line_number":139,"context_line":"        LOG.warning(error)"},{"line_number":140,"context_line":"        raise exception.FailedToStopConsole(error\u003derror)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    # put together the command and arguments for invoking the console"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_09b3c70a","line":139,"in_reply_to":"1ae5cdf2_1aa315b2","updated":"2014-06-25 19:54:33.000000000","message":"Done","commit_id":"35dea6a62a364c486866612d5377af53655555f7"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"5b6f9e4d6fa334be0139b0e6d704d83bfc9aa7cc","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                % node_uuid)"},{"line_number":216,"context_line":"    else:"},{"line_number":217,"context_line":"        # Allow exitcode 99 (RC_UNAUTHORIZED)"},{"line_number":218,"context_line":"        utils.execute(\u0027kill\u0027, str(console_pid),"},{"line_number":219,"context_line":"                      check_exit_code\u003d[0, 99])"},{"line_number":220,"context_line":"    finally:"},{"line_number":221,"context_line":"        utils.unlink_without_raise(_get_console_pid_file(node_uuid))"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_5a9bdd65","line":218,"updated":"2014-06-25 08:55:29.000000000","message":"This also should handle the same exceptions and raise FailedToStopConsole?","commit_id":"35dea6a62a364c486866612d5377af53655555f7"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"7fe408aecb5074160e2147a7ba3f99500e66bf13","unresolved":false,"context_lines":[{"line_number":215,"context_line":"                % node_uuid)"},{"line_number":216,"context_line":"    else:"},{"line_number":217,"context_line":"        # Allow exitcode 99 (RC_UNAUTHORIZED)"},{"line_number":218,"context_line":"        utils.execute(\u0027kill\u0027, str(console_pid),"},{"line_number":219,"context_line":"                      check_exit_code\u003d[0, 99])"},{"line_number":220,"context_line":"    finally:"},{"line_number":221,"context_line":"        utils.unlink_without_raise(_get_console_pid_file(node_uuid))"}],"source_content_type":"text/x-python","patch_set":1,"id":"1ae5cdf2_49ccef8a","line":218,"in_reply_to":"1ae5cdf2_5a9bdd65","updated":"2014-06-25 19:54:33.000000000","message":"Done. Thanks for the catch.","commit_id":"35dea6a62a364c486866612d5377af53655555f7"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"71b555c5e15d3218013b3da72e00c9747ab7ed57","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    except (processutils.ProcessExecutionError,"},{"line_number":215,"context_line":"            processutils.UnknownArgumentError):"},{"line_number":216,"context_line":"        error \u003d _(\"Failed to kill the console subprocess %(pid)s.\") \\"},{"line_number":217,"context_line":"                % {\u0027pid\u0027: console_pid}"},{"line_number":218,"context_line":"        LOG.error(error)"},{"line_number":219,"context_line":"        raise exception.FailedToStopConsole(error\u003derror)"},{"line_number":220,"context_line":"    finally:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_19bf48ac","line":217,"updated":"2014-06-27 10:19:35.000000000","message":"cosmetic nit: (_(\"Failed ...\") % {\u0027pid\u0027})\n\nAvoid using \u0027\\\u0027","commit_id":"a132f31f08cc622ab1cc9f2f8277457045cdd7ca"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"270769d405d765470332aadf7c348cb5af070d63","unresolved":false,"context_lines":[{"line_number":214,"context_line":"    except (processutils.ProcessExecutionError,"},{"line_number":215,"context_line":"            processutils.UnknownArgumentError):"},{"line_number":216,"context_line":"        error \u003d _(\"Failed to kill the console subprocess %(pid)s.\") \\"},{"line_number":217,"context_line":"                % {\u0027pid\u0027: console_pid}"},{"line_number":218,"context_line":"        LOG.error(error)"},{"line_number":219,"context_line":"        raise exception.FailedToStopConsole(error\u003derror)"},{"line_number":220,"context_line":"    finally:"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_b263c6a9","line":217,"in_reply_to":"1ae5cdf2_19bf48ac","updated":"2014-06-27 14:14:22.000000000","message":"Done","commit_id":"a132f31f08cc622ab1cc9f2f8277457045cdd7ca"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9316b3976b6509a23612f08559750ec00ccb2c4a","unresolved":false,"context_lines":[{"line_number":118,"context_line":""},{"line_number":119,"context_line":"    :param node_uuid: the uuid for the node."},{"line_number":120,"context_line":"    :param port: the terminal port for the node."},{"line_number":121,"context_line":"    :param console_cmd: the shell command that gets the cosnole."},{"line_number":122,"context_line":"    :raises: FailedToStopConsole when deleting the old console subprocess"},{"line_number":123,"context_line":"            for the node fails."},{"line_number":124,"context_line":"    :raises: ConsoleSubprocessFailed when invoking the subprocess fails."}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_312474ae","line":121,"updated":"2014-07-10 21:34:34.000000000","message":"if you do another patch, maybe you can fix this typo: \u0027cosnole\u0027 -\u003e \u0027console\u0027","commit_id":"d9bdb84e687ebc0089cedb1953ce631558585ca1"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9316b3976b6509a23612f08559750ec00ccb2c4a","unresolved":false,"context_lines":[{"line_number":126,"context_line":""},{"line_number":127,"context_line":"    # make sure that the old console for this node is stopped"},{"line_number":128,"context_line":"    # and the files are cleared"},{"line_number":129,"context_line":"    stop_shellinabox_console(node_uuid)"},{"line_number":130,"context_line":""},{"line_number":131,"context_line":"    # put together the command and arguments for invoking the console"},{"line_number":132,"context_line":"    pid_file \u003d _get_console_pid_file(node_uuid)"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_d1b6d8db","line":129,"updated":"2014-07-10 21:34:34.000000000","message":"Calling this doesn\u0027t seem to unlink/clear the files. Or does it? Ie, I don\u0027t see \u0027utils.unlink_without_raise(pid_file)\u0027 being made in stop_shellinabox_console(), yet it was in the original code.","commit_id":"d9bdb84e687ebc0089cedb1953ce631558585ca1"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"9316b3976b6509a23612f08559750ec00ccb2c4a","unresolved":false,"context_lines":[{"line_number":211,"context_line":"                % node_uuid)"},{"line_number":212,"context_line":"    except (processutils.ProcessExecutionError,"},{"line_number":213,"context_line":"            processutils.UnknownArgumentError):"},{"line_number":214,"context_line":"        error \u003d _(\"Failed to kill the console subprocess %s.\") % console_pid"},{"line_number":215,"context_line":"        LOG.error(error)"},{"line_number":216,"context_line":"        raise exception.FailedToStopConsole(error\u003derror)"},{"line_number":217,"context_line":"    finally:"}],"source_content_type":"text/x-python","patch_set":5,"id":"baada198_11de903f","line":214,"updated":"2014-07-10 21:34:34.000000000","message":"Would be good to add the node UUID to the msg.\n\nMight there be anything informative in the exception that might also be worth logging?","commit_id":"d9bdb84e687ebc0089cedb1953ce631558585ca1"}],"ironic/tests/drivers/test_console_utils.py":[{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"71b555c5e15d3218013b3da72e00c9747ab7ed57","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def setUp(self):"},{"line_number":48,"context_line":"        super(ConsoleUtilsTestCase, self).setUp()"},{"line_number":49,"context_line":"        self.context \u003d context.get_admin_context()"},{"line_number":50,"context_line":"        INFO_DICT[\u0027ipmi_terminal_port\u0027] \u003d 4201"},{"line_number":51,"context_line":"        self.node \u003d obj_utils.get_test_node("},{"line_number":52,"context_line":"                self.context,"},{"line_number":53,"context_line":"                driver\u003d\u0027fake_ipmitool\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_39dde4dd","line":50,"updated":"2014-06-27 10:19:35.000000000","message":"I think we could add this to the db_utils.get_test_ipmi_info() directly so we don\u0027t have to tweak that dict for every test run (setUp)","commit_id":"a132f31f08cc622ab1cc9f2f8277457045cdd7ca"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"270769d405d765470332aadf7c348cb5af070d63","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    def setUp(self):"},{"line_number":48,"context_line":"        super(ConsoleUtilsTestCase, self).setUp()"},{"line_number":49,"context_line":"        self.context \u003d context.get_admin_context()"},{"line_number":50,"context_line":"        INFO_DICT[\u0027ipmi_terminal_port\u0027] \u003d 4201"},{"line_number":51,"context_line":"        self.node \u003d obj_utils.get_test_node("},{"line_number":52,"context_line":"                self.context,"},{"line_number":53,"context_line":"                driver\u003d\u0027fake_ipmitool\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_5220c248","line":50,"in_reply_to":"1ae5cdf2_39dde4dd","updated":"2014-06-27 14:14:22.000000000","message":"good idea, done.","commit_id":"a132f31f08cc622ab1cc9f2f8277457045cdd7ca"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"71b555c5e15d3218013b3da72e00c9747ab7ed57","unresolved":false,"context_lines":[{"line_number":160,"context_line":"    @mock.patch.object(console_utils, \u0027stop_shellinabox_console\u0027,"},{"line_number":161,"context_line":"                       autospec\u003dTrue)"},{"line_number":162,"context_line":"    def test_start_shellinabox_console_fail(self, mock_stop, mock_popen):"},{"line_number":163,"context_line":"        mock_stop.return_value \u003d None"},{"line_number":164,"context_line":"        mock_popen.return_value.poll.return_value \u003d 1"},{"line_number":165,"context_line":"        mock_popen.return_value.communicate.return_value \u003d (\u0027output\u0027, \u0027error\u0027)"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_391884cc","line":163,"updated":"2014-06-27 10:19:35.000000000","message":"this line is not needed","commit_id":"a132f31f08cc622ab1cc9f2f8277457045cdd7ca"},{"author":{"_account_id":7589,"name":"linggao","email":"linggao@us.ibm.com","username":"linggao"},"change_message_id":"270769d405d765470332aadf7c348cb5af070d63","unresolved":false,"context_lines":[{"line_number":160,"context_line":"    @mock.patch.object(console_utils, \u0027stop_shellinabox_console\u0027,"},{"line_number":161,"context_line":"                       autospec\u003dTrue)"},{"line_number":162,"context_line":"    def test_start_shellinabox_console_fail(self, mock_stop, mock_popen):"},{"line_number":163,"context_line":"        mock_stop.return_value \u003d None"},{"line_number":164,"context_line":"        mock_popen.return_value.poll.return_value \u003d 1"},{"line_number":165,"context_line":"        mock_popen.return_value.communicate.return_value \u003d (\u0027output\u0027, \u0027error\u0027)"},{"line_number":166,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"1ae5cdf2_52f9a2c6","line":163,"in_reply_to":"1ae5cdf2_391884cc","updated":"2014-06-27 14:14:22.000000000","message":"Done","commit_id":"a132f31f08cc622ab1cc9f2f8277457045cdd7ca"}]}
