)]}'
{"ironic/conductor/manager.py":[{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"60117ba3289a89c2964d20f43fea3223965f5389","unresolved":false,"context_lines":[{"line_number":2853,"context_line":""},{"line_number":2854,"context_line":"    def handle_failure(e, task, logmsg, errmsg, traceback\u003dFalse):"},{"line_number":2855,"context_line":"        args \u003d {\u0027node\u0027: task.node.uuid, \u0027err\u0027: e}"},{"line_number":2856,"context_line":"        LOG.error(logmsg, args, exc_info\u003dtraceback)"},{"line_number":2857,"context_line":"        # NOTE(deva): there is no need to clear conductor_affinity"},{"line_number":2858,"context_line":"        task.process_event(\u0027fail\u0027)"},{"line_number":2859,"context_line":"        node.last_error \u003d errmsg % e"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_de75a2cc","line":2856,"updated":"2018-01-08 16:52:12.000000000","message":"Could we do:\n\n # If not an IronicException add exception information to the\n # logging message\n traceback \u003d not isinstance(e, exception.IronicException)\n LOG.error(logmsg, args, exc_info\u003dtraceback)","commit_id":"2b5849b49e24f310b7cf7f7c2e9a8b14f11da2a7"},{"author":{"_account_id":10239,"name":"Dmitry Tantsur","email":"dtantsur@protonmail.com","username":"dtantsur"},"change_message_id":"337e1d278632323ee800fefe10adc43e13a923ef","unresolved":false,"context_lines":[{"line_number":2853,"context_line":""},{"line_number":2854,"context_line":"    def handle_failure(e, task, logmsg, errmsg, traceback\u003dFalse):"},{"line_number":2855,"context_line":"        args \u003d {\u0027node\u0027: task.node.uuid, \u0027err\u0027: e}"},{"line_number":2856,"context_line":"        LOG.error(logmsg, args, exc_info\u003dtraceback)"},{"line_number":2857,"context_line":"        # NOTE(deva): there is no need to clear conductor_affinity"},{"line_number":2858,"context_line":"        task.process_event(\u0027fail\u0027)"},{"line_number":2859,"context_line":"        node.last_error \u003d errmsg % e"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f96bb07_baf92c81","line":2856,"in_reply_to":"9f91af0f_991654f1","updated":"2018-01-12 10:11:39.000000000","message":"Yeah, I\u0027d slightly prefer different error messages for expected things like MissingParameters and unexpected crashes with e.g. TypeError (which is what I had)","commit_id":"2b5849b49e24f310b7cf7f7c2e9a8b14f11da2a7"},{"author":{"_account_id":14760,"name":"John L. Villalovos","email":"openstack.org@sodarock.com","username":"jlvillal"},"change_message_id":"ec58afd933bb37ef5c7efe69ad96a8b894cabfba","unresolved":false,"context_lines":[{"line_number":2853,"context_line":""},{"line_number":2854,"context_line":"    def handle_failure(e, task, logmsg, errmsg, traceback\u003dFalse):"},{"line_number":2855,"context_line":"        args \u003d {\u0027node\u0027: task.node.uuid, \u0027err\u0027: e}"},{"line_number":2856,"context_line":"        LOG.error(logmsg, args, exc_info\u003dtraceback)"},{"line_number":2857,"context_line":"        # NOTE(deva): there is no need to clear conductor_affinity"},{"line_number":2858,"context_line":"        task.process_event(\u0027fail\u0027)"},{"line_number":2859,"context_line":"        node.last_error \u003d errmsg % e"}],"source_content_type":"text/x-python","patch_set":1,"id":"9f91af0f_991654f1","line":2856,"in_reply_to":"9f91af0f_de75a2cc","updated":"2018-01-08 17:00:47.000000000","message":"Hmmm. Now I notice the messages are a tad different. So maybe not.","commit_id":"2b5849b49e24f310b7cf7f7c2e9a8b14f11da2a7"}],"ironic/tests/unit/conductor/test_manager.py":[{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ab8dbb371b4d60a8f3c94dff08573a511c3d8583","unresolved":false,"context_lines":[{"line_number":1474,"context_line":"        self.assertEqual(states.ACTIVE, node.target_provision_state)"},{"line_number":1475,"context_line":"        self.assertIsNotNone(node.last_error)"},{"line_number":1476,"context_line":"        self.assertTrue(mock_prepare.called)"},{"line_number":1477,"context_line":"        self.assertFalse(mock_deploy.called)"},{"line_number":1478,"context_line":""},{"line_number":1479,"context_line":"    @mock.patch(\u0027ironic.drivers.modules.fake.FakeDeploy.deploy\u0027)"},{"line_number":1480,"context_line":"    def test__do_node_deploy_driver_raises_error(self, mock_deploy):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa0c359_ed45bc71","line":1477,"updated":"2018-02-06 22:00:34.000000000","message":"except for the exception returned from mock_prepare, I don\u0027t see any diff between this and the test above it.\n\nI\u0027m not sure what we\u0027re trying to test. I guess we could check that LOG.error() got called with exc_info \u003d True? Or that \u0027Exception\u0027 is in node.last_error?","commit_id":"2b5849b49e24f310b7cf7f7c2e9a8b14f11da2a7"},{"author":{"_account_id":6618,"name":"Ruby Loo","email":"opensrloo@gmail.com","username":"rloo"},"change_message_id":"ab8dbb371b4d60a8f3c94dff08573a511c3d8583","unresolved":false,"context_lines":[{"line_number":1518,"context_line":"        #             is deleted."},{"line_number":1519,"context_line":"        self.assertEqual(states.ACTIVE, node.target_provision_state)"},{"line_number":1520,"context_line":"        self.assertIsNotNone(node.last_error)"},{"line_number":1521,"context_line":"        mock_deploy.assert_called_once_with(mock.ANY)"},{"line_number":1522,"context_line":""},{"line_number":1523,"context_line":"    @mock.patch.object(manager, \u0027_store_configdrive\u0027)"},{"line_number":1524,"context_line":"    @mock.patch(\u0027ironic.drivers.modules.fake.FakeDeploy.deploy\u0027)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3fa0c359_cd5c804d","line":1521,"updated":"2018-02-06 22:00:34.000000000","message":"ditto","commit_id":"2b5849b49e24f310b7cf7f7c2e9a8b14f11da2a7"}]}
