)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f6019d416241ec07a162694c0ebee6571c06aba3","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch adds full traceback to ExceptionPayload in versioned"},{"line_number":10,"context_line":"notifications."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"The instance-action REST API has already provide the traceback to the"},{"line_number":13,"context_line":"user (to the admin by default) and the notifications are also admin only"},{"line_number":14,"context_line":"things as they are emitted to the message bus by default. So it is assumed"},{"line_number":15,"context_line":"that security is not a bigger concern for the notification than for the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"5f7c97a3_22019907","line":12,"updated":"2018-06-15 15:47:46.000000000","message":"the traceback is also in the fault information for an instance if you\u0027re an admin, just FYI:\n\nhttps://github.com/openstack/nova/blob/bfeea18358da7fb2d224df452114a335b3ff7a8a/nova/api/openstack/compute/views/servers.py#L341","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e83ab569fd3d55dcaf6c503c6481eb4eeb42c085","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This patch adds full traceback to ExceptionPayload in versioned"},{"line_number":10,"context_line":"notifications."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"The instance-action REST API has already provide the traceback to the"},{"line_number":13,"context_line":"user (to the admin by default) and the notifications are also admin only"},{"line_number":14,"context_line":"things as they are emitted to the message bus by default. So it is assumed"},{"line_number":15,"context_line":"that security is not a bigger concern for the notification than for the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"5f7c97a3_5cdfac37","line":12,"in_reply_to":"5f7c97a3_22019907","updated":"2018-06-19 01:55:02.000000000","message":"Done","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"}],"doc/notification_samples/instance-create-error.json":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"41447dd254dfa15548411961488e7b84c79b846e","unresolved":false,"context_lines":[{"line_number":9,"context_line":"                    \"exception_message\": \"The created instance\u0027s disk would be too small.\","},{"line_number":10,"context_line":"                    \"function_name\": \"_build_resources\","},{"line_number":11,"context_line":"                    \"module_name\": \"nova.tests.functional.notification_sample_tests.test_instance\","},{"line_number":12,"context_line":"                    \"traceback\": \"Traceback (most recent call last):\\n  File \\\"nova/compute/manager.py\\\", line ...\""},{"line_number":13,"context_line":"                },"},{"line_number":14,"context_line":"                \"nova_object.name\": \"ExceptionPayload\","},{"line_number":15,"context_line":"                \"nova_object.namespace\": \"nova\","}],"source_content_type":"application/json","patch_set":6,"id":"5f7c97a3_1a88c66e","line":12,"updated":"2018-06-13 10:17:14.000000000","message":"Thanks. I think this is the most useful compromise we can make here.","commit_id":"87cbcb72669d29c975d518e011e2444e3e7ea0b5"}],"nova/compute/manager.py":[{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"235f2b340169413b2abc10b26b1e81e9965418d1","unresolved":false,"context_lines":[{"line_number":5357,"context_line":"                                                      bdm[\u0027attachment_id\u0027])"},{"line_number":5358,"context_line":"                else:"},{"line_number":5359,"context_line":"                    self.volume_api.unreserve_volume(context, bdm.volume_id)"},{"line_number":5360,"context_line":"                tb \u003dtraceback.format_exc()"},{"line_number":5361,"context_line":"                compute_utils.notify_about_volume_attach_detach("},{"line_number":5362,"context_line":"                    context, instance, self.host,"},{"line_number":5363,"context_line":"                    action\u003dfields.NotificationAction.VOLUME_ATTACH,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_c13a6ce4","line":5360,"range":{"start_line":5360,"start_character":19,"end_line":5360,"end_character":21},"updated":"2018-06-13 01:50:14.000000000","message":"oops","commit_id":"f04b93fcbd6cdcc36e88ed3e90aff6b2d197ad8c"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"1054b158d5cef81c901b79b9e03039ab7766fd7e","unresolved":false,"context_lines":[{"line_number":5357,"context_line":"                                                      bdm[\u0027attachment_id\u0027])"},{"line_number":5358,"context_line":"                else:"},{"line_number":5359,"context_line":"                    self.volume_api.unreserve_volume(context, bdm.volume_id)"},{"line_number":5360,"context_line":"                tb \u003dtraceback.format_exc()"},{"line_number":5361,"context_line":"                compute_utils.notify_about_volume_attach_detach("},{"line_number":5362,"context_line":"                    context, instance, self.host,"},{"line_number":5363,"context_line":"                    action\u003dfields.NotificationAction.VOLUME_ATTACH,"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_a4c89ea7","line":5360,"range":{"start_line":5360,"start_character":19,"end_line":5360,"end_character":21},"in_reply_to":"5f7c97a3_c13a6ce4","updated":"2018-06-13 02:25:26.000000000","message":"Done","commit_id":"f04b93fcbd6cdcc36e88ed3e90aff6b2d197ad8c"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"235f2b340169413b2abc10b26b1e81e9965418d1","unresolved":false,"context_lines":[{"line_number":5564,"context_line":"                compute_utils.notify_about_volume_swap("},{"line_number":5565,"context_line":"                    context, instance, self.host,"},{"line_number":5566,"context_line":"                    fields.NotificationPhase.ERROR,"},{"line_number":5567,"context_line":"                    old_volume_id, new_volume_id, ex, tb)"},{"line_number":5568,"context_line":"                if new_cinfo:"},{"line_number":5569,"context_line":"                    msg \u003d (\"Failed to swap volume %(old_volume_id)s \""},{"line_number":5570,"context_line":"                           \"for %(new_volume_id)s\")"}],"source_content_type":"text/x-python","patch_set":5,"id":"5f7c97a3_24b56e32","line":5567,"range":{"start_line":5567,"start_character":53,"end_line":5567,"end_character":56},"updated":"2018-06-13 01:50:14.000000000","message":"nit: After see [1] I know you want to keep same with ex, but I still prefer keep same with others， use kwargs style, that is ``tb\u003dtb``, and also change ex to ``exception\u003dex``. \n\n[1] https://review.openstack.org/#/c/564092/5/nova/compute/utils.py@508\n[2] https://review.openstack.org/#/c/554159/9/nova/api/openstack/compute/flavors.py@60","commit_id":"f04b93fcbd6cdcc36e88ed3e90aff6b2d197ad8c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"41447dd254dfa15548411961488e7b84c79b846e","unresolved":false,"context_lines":[{"line_number":4212,"context_line":"                    exc_info\u003dsys.exc_info())"},{"line_number":4213,"context_line":"            self._notify_about_instance_usage(context, instance,"},{"line_number":4214,"context_line":"                    \u0027resize.error\u0027, fault\u003derror)"},{"line_number":4215,"context_line":"            tb \u003d traceback.format_exc()"},{"line_number":4216,"context_line":"            compute_utils.notify_about_instance_action("},{"line_number":4217,"context_line":"                context, instance, self.host,"},{"line_number":4218,"context_line":"                action\u003dfields.NotificationAction.RESIZE,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_dd400809","line":4215,"updated":"2018-06-13 10:17:14.000000000","message":"We already have the exc_info available at L4212 but it think that your solution is nicer.","commit_id":"87cbcb72669d29c975d518e011e2444e3e7ea0b5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f6019d416241ec07a162694c0ebee6571c06aba3","unresolved":false,"context_lines":[{"line_number":4178,"context_line":"                    context, instance, self.host,"},{"line_number":4179,"context_line":"                    fields.NotificationPhase.END, instance_type)"},{"line_number":4180,"context_line":""},{"line_number":4181,"context_line":"    def _reschedule_resize_or_reraise(self, context, image, instance, exc_info,"},{"line_number":4182,"context_line":"            instance_type, request_spec, filter_properties, host_list):"},{"line_number":4183,"context_line":"        \"\"\"Try to re-schedule the resize or re-raise the original error to"},{"line_number":4184,"context_line":"        error out the instance."}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_a57133ab","line":4181,"range":{"start_line":4181,"start_character":70,"end_line":4181,"end_character":78},"updated":"2018-06-15 15:47:46.000000000","message":"Shouldn\u0027t we be using this in here?","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"c7f06e430a6151d3e29ef1c3cfe4d02ebb1a7440","unresolved":false,"context_lines":[{"line_number":4178,"context_line":"                    context, instance, self.host,"},{"line_number":4179,"context_line":"                    fields.NotificationPhase.END, instance_type)"},{"line_number":4180,"context_line":""},{"line_number":4181,"context_line":"    def _reschedule_resize_or_reraise(self, context, image, instance, exc_info,"},{"line_number":4182,"context_line":"            instance_type, request_spec, filter_properties, host_list):"},{"line_number":4183,"context_line":"        \"\"\"Try to re-schedule the resize or re-raise the original error to"},{"line_number":4184,"context_line":"        error out the instance."}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_e515eb9c","line":4181,"range":{"start_line":4181,"start_character":70,"end_line":4181,"end_character":78},"in_reply_to":"5f7c97a3_a57133ab","updated":"2018-06-15 15:54:29.000000000","message":"Isn\u0027t that what we\u0027re already doing on https://review.openstack.org/#/c/564092/13/nova/compute/manager.py@4229","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac60f67a2290eb26af9000390e6184e59b12aa01","unresolved":false,"context_lines":[{"line_number":4178,"context_line":"                    context, instance, self.host,"},{"line_number":4179,"context_line":"                    fields.NotificationPhase.END, instance_type)"},{"line_number":4180,"context_line":""},{"line_number":4181,"context_line":"    def _reschedule_resize_or_reraise(self, context, image, instance, exc_info,"},{"line_number":4182,"context_line":"            instance_type, request_spec, filter_properties, host_list):"},{"line_number":4183,"context_line":"        \"\"\"Try to re-schedule the resize or re-raise the original error to"},{"line_number":4184,"context_line":"        error out the instance."}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_85951735","line":4181,"range":{"start_line":4181,"start_character":70,"end_line":4181,"end_character":78},"in_reply_to":"5f7c97a3_a57133ab","updated":"2018-06-15 15:54:13.000000000","message":"we could but I don\u0027t feel we lose much if we just keep the patter and use traceback.format_exc()","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"1efc25ebedbcfd48941d9c56c6adbe91e443157f","unresolved":false,"context_lines":[{"line_number":4178,"context_line":"                    context, instance, self.host,"},{"line_number":4179,"context_line":"                    fields.NotificationPhase.END, instance_type)"},{"line_number":4180,"context_line":""},{"line_number":4181,"context_line":"    def _reschedule_resize_or_reraise(self, context, image, instance, exc_info,"},{"line_number":4182,"context_line":"            instance_type, request_spec, filter_properties, host_list):"},{"line_number":4183,"context_line":"        \"\"\"Try to re-schedule the resize or re-raise the original error to"},{"line_number":4184,"context_line":"        error out the instance."}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_fa9b18c5","line":4181,"range":{"start_line":4181,"start_character":70,"end_line":4181,"end_character":78},"in_reply_to":"5f7c97a3_c5ec6f94","updated":"2018-06-19 03:53:16.000000000","message":"Done","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"da35787f6ccf3c9fed74db700e103334c9b11b57","unresolved":false,"context_lines":[{"line_number":4178,"context_line":"                    context, instance, self.host,"},{"line_number":4179,"context_line":"                    fields.NotificationPhase.END, instance_type)"},{"line_number":4180,"context_line":""},{"line_number":4181,"context_line":"    def _reschedule_resize_or_reraise(self, context, image, instance, exc_info,"},{"line_number":4182,"context_line":"            instance_type, request_spec, filter_properties, host_list):"},{"line_number":4183,"context_line":"        \"\"\"Try to re-schedule the resize or re-raise the original error to"},{"line_number":4184,"context_line":"        error out the instance."}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_c5ec6f94","line":4181,"range":{"start_line":4181,"start_character":70,"end_line":4181,"end_character":78},"in_reply_to":"5f7c97a3_e515eb9c","updated":"2018-06-15 15:56:36.000000000","message":"@Stephen: you are right. I suggest to respin this to implement Matt\u0027s suggestion in the functional test (and to fix my English in the reno) so at the same time Kevin can fix this up as well.","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b0169980302e1e120b992cf6dc39cd37a553d482","unresolved":false,"context_lines":[{"line_number":4213,"context_line":"                context, instance, self.host,"},{"line_number":4214,"context_line":"                action\u003dfields.NotificationAction.RESIZE,"},{"line_number":4215,"context_line":"                phase\u003dfields.NotificationPhase.ERROR,"},{"line_number":4216,"context_line":"                exception\u003derror, tb\u003dtraceback.format_tb(exc_info[2])[0])"},{"line_number":4217,"context_line":"        if rescheduled:"},{"line_number":4218,"context_line":"            self._log_original_error(exc_info, instance_uuid)"},{"line_number":4219,"context_line":"            compute_utils.add_instance_fault_from_exc(context,"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_0e37b14d","line":4216,"updated":"2018-06-19 08:29:03.000000000","message":"This is not the same as the format_exc():\n\nPython 2.7.12 (default, Dec  4 2017, 14:50:18) \n[GCC 5.4.0 20160609] on linux2\nType \"help\", \"copyright\", \"credits\" or \"license\" for more information.\n\u003e\u003e\u003e import traceback\n\u003e\u003e\u003e import sys\n\u003e\u003e\u003e def f():\n...     try:\n...         raise ValueError(\u0027!!!\u0027)\n...     except ValueError as e:\n...         exc_info \u003d sys.exc_info()\n...         print(\u00270\u0027, traceback.format_tb(exc_info[2])[0])\n...         print(\u00271\u0027, traceback.format_exc())\n... \n\u003e\u003e\u003e f()\n(\u00270\u0027, \u0027  File \"\u003cstdin\u003e\", line 3, in f\\n\u0027)\n(\u00271\u0027, \u0027Traceback (most recent call last):\\n  File \"\u003cstdin\u003e\", line 3, in f\\nValueError: !!!\\n\u0027)\n\u003e\u003e\u003e \n\nI think you need traceback.format_exception(*exc_info) to get the same thing as you would get from format_exc()","commit_id":"4a5e81abc78f14b438f75b1f4e0d1854d2bd1393"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"f0b638abb801179af1e30f651c4612cc3009c530","unresolved":false,"context_lines":[{"line_number":4213,"context_line":"                context, instance, self.host,"},{"line_number":4214,"context_line":"                action\u003dfields.NotificationAction.RESIZE,"},{"line_number":4215,"context_line":"                phase\u003dfields.NotificationPhase.ERROR,"},{"line_number":4216,"context_line":"                exception\u003derror, tb\u003dtraceback.format_tb(exc_info[2])[0])"},{"line_number":4217,"context_line":"        if rescheduled:"},{"line_number":4218,"context_line":"            self._log_original_error(exc_info, instance_uuid)"},{"line_number":4219,"context_line":"            compute_utils.add_instance_fault_from_exc(context,"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_ae8f9dcb","line":4216,"in_reply_to":"5f7c97a3_0e37b14d","updated":"2018-06-19 08:33:09.000000000","message":"Hmm, thanks, I did some tests but it seems I still got it wrong.","commit_id":"4a5e81abc78f14b438f75b1f4e0d1854d2bd1393"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"bd3b7644c35ed09dbc43b2394aa296966d912afb","unresolved":false,"context_lines":[{"line_number":4213,"context_line":"                context, instance, self.host,"},{"line_number":4214,"context_line":"                action\u003dfields.NotificationAction.RESIZE,"},{"line_number":4215,"context_line":"                phase\u003dfields.NotificationPhase.ERROR,"},{"line_number":4216,"context_line":"                exception\u003derror, tb\u003dtraceback.format_tb(exc_info[2])[0])"},{"line_number":4217,"context_line":"        if rescheduled:"},{"line_number":4218,"context_line":"            self._log_original_error(exc_info, instance_uuid)"},{"line_number":4219,"context_line":"            compute_utils.add_instance_fault_from_exc(context,"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_f1381ad5","line":4216,"in_reply_to":"5f7c97a3_ae8f9dcb","updated":"2018-06-19 08:42:00.000000000","message":"Seems should be \u0027,\u0027.join(traceback.format_exception(*exc_info))","commit_id":"4a5e81abc78f14b438f75b1f4e0d1854d2bd1393"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2cf62e418f4b13b7947e769cbc4416dd850edc9d","unresolved":false,"context_lines":[{"line_number":4213,"context_line":"                context, instance, self.host,"},{"line_number":4214,"context_line":"                action\u003dfields.NotificationAction.RESIZE,"},{"line_number":4215,"context_line":"                phase\u003dfields.NotificationPhase.ERROR,"},{"line_number":4216,"context_line":"                exception\u003derror, tb\u003dtraceback.format_tb(exc_info[2])[0])"},{"line_number":4217,"context_line":"        if rescheduled:"},{"line_number":4218,"context_line":"            self._log_original_error(exc_info, instance_uuid)"},{"line_number":4219,"context_line":"            compute_utils.add_instance_fault_from_exc(context,"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_91d2065b","line":4216,"in_reply_to":"5f7c97a3_f1381ad5","updated":"2018-06-19 08:49:39.000000000","message":"You are right. My bad sorry.","commit_id":"4a5e81abc78f14b438f75b1f4e0d1854d2bd1393"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b0169980302e1e120b992cf6dc39cd37a553d482","unresolved":false,"context_lines":[{"line_number":4225,"context_line":"                action\u003dfields.NotificationAction.RESIZE,"},{"line_number":4226,"context_line":"                phase\u003dfields.NotificationPhase.ERROR,"},{"line_number":4227,"context_line":"                exception\u003dexc_info[1],"},{"line_number":4228,"context_line":"                tb\u003dtraceback.format_tb(exc_info[2])[0])"},{"line_number":4229,"context_line":"        else:"},{"line_number":4230,"context_line":"            # not re-scheduling"},{"line_number":4231,"context_line":"            six.reraise(*exc_info)"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_6e1185af","line":4228,"updated":"2018-06-19 08:29:03.000000000","message":"ditto","commit_id":"4a5e81abc78f14b438f75b1f4e0d1854d2bd1393"}],"nova/compute/utils.py":[{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"6b73f0e352ae4054e57086292b0ef747b6eae6bf","unresolved":false,"context_lines":[{"line_number":364,"context_line":"    :param bdms: BlockDeviceMappingList object for the instance. If it is not"},{"line_number":365,"context_line":"                provided then we will load it from the db if so configured"},{"line_number":366,"context_line":"    \"\"\""},{"line_number":367,"context_line":"    fault, priority \u003d _get_fault_and_priority_from_exc(exception)"},{"line_number":368,"context_line":"    payload \u003d instance_notification.InstanceActionPayload("},{"line_number":369,"context_line":"            context\u003dcontext,"},{"line_number":370,"context_line":"            instance\u003dinstance,"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_d6f80b4b","line":367,"range":{"start_line":367,"start_character":22,"end_line":367,"end_character":65},"updated":"2018-06-12 07:55:40.000000000","message":"Some notify methods like this, also need add traceback field.","commit_id":"48e88fb5d0dc4c455fa228b3c5c4a5b01460274b"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f6019d416241ec07a162694c0ebee6571c06aba3","unresolved":false,"context_lines":[{"line_number":724,"context_line":""},{"line_number":725,"context_line":"@rpc.if_notifications_enabled"},{"line_number":726,"context_line":"def notify_about_instance_rebuild(context, instance, host, phase\u003dNone,"},{"line_number":727,"context_line":"                                  exception\u003dNone, bdms\u003dNone, tb\u003dNone):"},{"line_number":728,"context_line":"    \"\"\"Send versioned notification about instance rebuild"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"    :param instance: the instance which the action performed on"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_85ef571c","line":727,"range":{"start_line":727,"start_character":61,"end_line":727,"end_character":63},"updated":"2018-06-15 15:47:46.000000000","message":"nit: add this param to the docstring like you did above","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e83ab569fd3d55dcaf6c503c6481eb4eeb42c085","unresolved":false,"context_lines":[{"line_number":724,"context_line":""},{"line_number":725,"context_line":"@rpc.if_notifications_enabled"},{"line_number":726,"context_line":"def notify_about_instance_rebuild(context, instance, host, phase\u003dNone,"},{"line_number":727,"context_line":"                                  exception\u003dNone, bdms\u003dNone, tb\u003dNone):"},{"line_number":728,"context_line":"    \"\"\"Send versioned notification about instance rebuild"},{"line_number":729,"context_line":""},{"line_number":730,"context_line":"    :param instance: the instance which the action performed on"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_fcff98a8","line":727,"range":{"start_line":727,"start_character":61,"end_line":727,"end_character":63},"in_reply_to":"5f7c97a3_85ef571c","updated":"2018-06-19 01:55:02.000000000","message":"Done","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"}],"nova/notifications/objects/exception.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"da0ba4714f09d9051f4446b327204fe2f2460df6","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self.traceback \u003d traceback"},{"line_number":42,"context_line":""},{"line_number":43,"context_line":"    @classmethod"},{"line_number":44,"context_line":"    def from_exception(cls, fault):"},{"line_number":45,"context_line":"        trace \u003d inspect.trace()[-1]"},{"line_number":46,"context_line":"        # TODO(gibi): apply strutils.mask_password on exception_message and"},{"line_number":47,"context_line":"        # consider emitting the exception_message only if the safe flag is"}],"source_content_type":"text/x-python","patch_set":1,"id":"5f7c97a3_63b94a77","line":44,"updated":"2018-05-29 10:21:28.000000000","message":"Do we still need this method?","commit_id":"fa0aba2f79bf6ba58b14ee1b1bd0c22795c23183"},{"author":{"_account_id":20722,"name":"Yikun Jiang","email":"yikunkero@gmail.com","username":"yikunkero"},"change_message_id":"6b73f0e352ae4054e57086292b0ef747b6eae6bf","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        self.function_name \u003d function_name"},{"line_number":39,"context_line":"        self.exception \u003d exception"},{"line_number":40,"context_line":"        self.exception_message \u003d exception_message"},{"line_number":41,"context_line":"        if traceback:"},{"line_number":42,"context_line":"            self.traceback \u003d traceback"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @classmethod"},{"line_number":45,"context_line":"    def from_exc_and_traceback(cls, fault, traceback\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_f64c2740","line":42,"range":{"start_line":41,"start_character":0,"end_line":42,"end_character":38},"updated":"2018-06-12 07:55:40.000000000","message":"After we add traceback in all method, it seems traceback can\u0027t be None. \n\nIn addition, even we have a empty traceback, after format_exc will transfer to an string like:\n\n\u003e\u003e\u003e import traceback\n\u003e\u003e\u003e traceback.format_exc()\n\u0027None\\n\u0027","commit_id":"48e88fb5d0dc4c455fa228b3c5c4a5b01460274b"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"72d89777692ee1344d0c32e5479694be48b1caa3","unresolved":false,"context_lines":[{"line_number":38,"context_line":"        self.function_name \u003d function_name"},{"line_number":39,"context_line":"        self.exception \u003d exception"},{"line_number":40,"context_line":"        self.exception_message \u003d exception_message"},{"line_number":41,"context_line":"        if traceback:"},{"line_number":42,"context_line":"            self.traceback \u003d traceback"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"    @classmethod"},{"line_number":45,"context_line":"    def from_exc_and_traceback(cls, fault, traceback\u003dNone):"}],"source_content_type":"text/x-python","patch_set":4,"id":"5f7c97a3_f62667cb","line":42,"range":{"start_line":41,"start_character":0,"end_line":42,"end_character":38},"in_reply_to":"5f7c97a3_f64c2740","updated":"2018-06-12 07:56:49.000000000","message":"I think I might have make this complicated, I will have another test.","commit_id":"48e88fb5d0dc4c455fa228b3c5c4a5b01460274b"}],"nova/tests/functional/notification_sample_tests/test_exception_notification.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"41447dd254dfa15548411961488e7b84c79b846e","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                          self.admin_api.api_post, \u0027os-aggregates\u0027, post)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"        self.assertEqual(4, len(fake_notifier.VERSIONED_NOTIFICATIONS))"},{"line_number":37,"context_line":"        traceback \u003d fake_notifier.VERSIONED_NOTIFICATIONS[3]["},{"line_number":38,"context_line":"            \u0027payload\u0027][\u0027nova_object.data\u0027][\u0027traceback\u0027]"},{"line_number":39,"context_line":"        self.assertIn(\u0027AggregateNameExists\u0027, traceback)"},{"line_number":40,"context_line":"        any_tb \u003d notification_sample_base.NotificationSampleTestBase.ANY"},{"line_number":41,"context_line":"        self._verify_notification("},{"line_number":42,"context_line":"            \u0027compute-exception\u0027,"},{"line_number":43,"context_line":"            replacements\u003d{"},{"line_number":44,"context_line":"                \u0027traceback\u0027: any_tb},"},{"line_number":45,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[3])"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_fda144aa","line":44,"range":{"start_line":37,"start_character":0,"end_line":44,"end_character":37},"updated":"2018-06-13 10:17:14.000000000","message":"+1: good compromise","commit_id":"87cbcb72669d29c975d518e011e2444e3e7ea0b5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"48259de19c660a4198318b5067f9ed6c7c11d5a7","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self._verify_notification("},{"line_number":42,"context_line":"            \u0027compute-exception\u0027,"},{"line_number":43,"context_line":"            replacements\u003d{"},{"line_number":44,"context_line":"                \u0027traceback\u0027: any_tb},"},{"line_number":45,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[3])"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_a62aa62c","line":44,"range":{"start_line":44,"start_character":29,"end_line":44,"end_character":35},"updated":"2018-06-15 08:13:30.000000000","message":"you can simply say self.ANY as notification_sample_base.NotificationSampleTestBase is the base class.","commit_id":"993fbb4e55c02fb0ebe249664b2fe0e1c2d4c046"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"475cbbdb5ffcb6fa0267c6b2e0088f6e8949773c","unresolved":false,"context_lines":[{"line_number":41,"context_line":"        self._verify_notification("},{"line_number":42,"context_line":"            \u0027compute-exception\u0027,"},{"line_number":43,"context_line":"            replacements\u003d{"},{"line_number":44,"context_line":"                \u0027traceback\u0027: any_tb},"},{"line_number":45,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[3])"}],"source_content_type":"text/x-python","patch_set":9,"id":"5f7c97a3_a69dc66d","line":44,"range":{"start_line":44,"start_character":29,"end_line":44,"end_character":35},"in_reply_to":"5f7c97a3_a62aa62c","updated":"2018-06-15 08:15:14.000000000","message":"ah, I may have forgot this one.","commit_id":"993fbb4e55c02fb0ebe249664b2fe0e1c2d4c046"}],"nova/tests/functional/notification_sample_tests/test_instance.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"e510796e4d0009e1a03d2182d1c680e7258bcb9a","unresolved":false,"context_lines":[{"line_number":382,"context_line":"                \u0027reservation_id\u0027: server[\u0027reservation_id\u0027],"},{"line_number":383,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":384,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[0])"},{"line_number":385,"context_line":"        self._verify_notification("},{"line_number":386,"context_line":"            \u0027instance-create-error\u0027,"},{"line_number":387,"context_line":"            replacements\u003d{"},{"line_number":388,"context_line":"                \u0027reservation_id\u0027: server[\u0027reservation_id\u0027],"},{"line_number":389,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":390,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1],"},{"line_number":391,"context_line":"            customized_replacement_callback\u003dself._remove_traceback_callback)"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"    def test_instance_exists_usage_audit(self):"},{"line_number":394,"context_line":"        # TODO(xavvior): Should create a functional test for the"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_41407306","line":391,"range":{"start_line":385,"start_character":0,"end_line":391,"end_character":76},"updated":"2018-06-14 12:45:27.000000000","message":"_verify_notification() already support replacement on deeper level of the payload. To replace just the traceback field of the Fault object in the payload you can say\n\n        self._verify_notification(\n            \u0027instance-create-error\u0027,\n            replacements\u003d{\n                \u0027reservation_id\u0027: server[\u0027reservation_id\u0027],\n                \u0027uuid\u0027: server[\u0027id\u0027],\n                \u0027fault.traceback\u0027: self.ANY},\n            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1])\n\nSee the function doc in https://github.com/openstack/nova/blob/master/nova/tests/functional/notification_sample_tests/notification_sample_base.py#L128\n\nSo I suggest to drop the callback and use the above replacement instead.","commit_id":"c22b24b8b486a78777d603d244e2db65b9f5234c"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"475cbbdb5ffcb6fa0267c6b2e0088f6e8949773c","unresolved":false,"context_lines":[{"line_number":382,"context_line":"                \u0027reservation_id\u0027: server[\u0027reservation_id\u0027],"},{"line_number":383,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":384,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[0])"},{"line_number":385,"context_line":"        self._verify_notification("},{"line_number":386,"context_line":"            \u0027instance-create-error\u0027,"},{"line_number":387,"context_line":"            replacements\u003d{"},{"line_number":388,"context_line":"                \u0027reservation_id\u0027: server[\u0027reservation_id\u0027],"},{"line_number":389,"context_line":"                \u0027uuid\u0027: server[\u0027id\u0027]},"},{"line_number":390,"context_line":"            actual\u003dfake_notifier.VERSIONED_NOTIFICATIONS[1],"},{"line_number":391,"context_line":"            customized_replacement_callback\u003dself._remove_traceback_callback)"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"    def test_instance_exists_usage_audit(self):"},{"line_number":394,"context_line":"        # TODO(xavvior): Should create a functional test for the"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f7c97a3_54b7c5f6","line":391,"range":{"start_line":385,"start_character":0,"end_line":391,"end_character":76},"in_reply_to":"5f7c97a3_41407306","updated":"2018-06-15 08:15:14.000000000","message":"Done","commit_id":"c22b24b8b486a78777d603d244e2db65b9f5234c"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"41447dd254dfa15548411961488e7b84c79b846e","unresolved":false,"context_lines":[{"line_number":429,"context_line":"                          action\u003d\u0027volume_attach\u0027, phase\u003d\u0027error\u0027,"},{"line_number":430,"context_line":"                          volume_id\u003duuids.volume_id,"},{"line_number":431,"context_line":"                          exception\u003dexpected_exception,"},{"line_number":432,"context_line":"                          tb\u003dmock.ANY),"},{"line_number":433,"context_line":"            ])"},{"line_number":434,"context_line":"            mock_event.assert_called_once_with("},{"line_number":435,"context_line":"                self.context, \u0027compute_attach_volume\u0027, CONF.host,"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_fd2b84e7","line":432,"range":{"start_line":432,"start_character":26,"end_line":432,"end_character":37},"updated":"2018-06-13 10:17:14.000000000","message":"that is a bit weak assert but I don\u0027t think we should make too much effort to look into the traceback string. The functional tests has nice asserts for the traceback so I\u0027m OK to have ANY here.","commit_id":"87cbcb72669d29c975d518e011e2444e3e7ea0b5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b0169980302e1e120b992cf6dc39cd37a553d482","unresolved":false,"context_lines":[{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":8,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":9,"context_line":"#    a copy of the License attest_reschedule_fails_with_exception"},{"line_number":10,"context_line":"#"},{"line_number":11,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":12,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_2e806dbf","line":9,"range":{"start_line":9,"start_character":27,"end_line":9,"end_character":65},"updated":"2018-06-19 08:29:03.000000000","message":"bad copy-paste","commit_id":"4a5e81abc78f14b438f75b1f4e0d1854d2bd1393"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"f0b638abb801179af1e30f651c4612cc3009c530","unresolved":false,"context_lines":[{"line_number":6,"context_line":"#"},{"line_number":7,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":8,"context_line":"#    not use this file except in compliance with the License. You may obtain"},{"line_number":9,"context_line":"#    a copy of the License attest_reschedule_fails_with_exception"},{"line_number":10,"context_line":"#"},{"line_number":11,"context_line":"#         http://www.apache.org/licenses/LICENSE-2.0"},{"line_number":12,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":15,"id":"5f7c97a3_0efc913d","line":9,"range":{"start_line":9,"start_character":27,"end_line":9,"end_character":65},"in_reply_to":"5f7c97a3_2e806dbf","updated":"2018-06-19 08:33:09.000000000","message":"Ah, yes this must be a fat finger thing :)","commit_id":"4a5e81abc78f14b438f75b1f4e0d1854d2bd1393"}],"nova/tests/unit/compute/test_compute_mgr.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f6019d416241ec07a162694c0ebee6571c06aba3","unresolved":false,"context_lines":[{"line_number":2031,"context_line":"                self.compute.host,"},{"line_number":2032,"context_line":"                fields.NotificationPhase.ERROR,"},{"line_number":2033,"context_line":"                uuids.old_volume, uuids.new_volume,"},{"line_number":2034,"context_line":"                test.MatchType(expected_exception), mock.ANY)"},{"line_number":2035,"context_line":"        else:"},{"line_number":2036,"context_line":"            self.compute.swap_volume(self.context, uuids.old_volume,"},{"line_number":2037,"context_line":"                                     uuids.new_volume, instance1, None)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_4547ff1f","line":2034,"range":{"start_line":2034,"start_character":52,"end_line":2034,"end_character":60},"updated":"2018-06-15 15:47:46.000000000","message":"nit: we could use test.MatchType(six.string_types)\n\nBut that gets a bit annoying in all of the places you\u0027d have to do that","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac60f67a2290eb26af9000390e6184e59b12aa01","unresolved":false,"context_lines":[{"line_number":2031,"context_line":"                self.compute.host,"},{"line_number":2032,"context_line":"                fields.NotificationPhase.ERROR,"},{"line_number":2033,"context_line":"                uuids.old_volume, uuids.new_volume,"},{"line_number":2034,"context_line":"                test.MatchType(expected_exception), mock.ANY)"},{"line_number":2035,"context_line":"        else:"},{"line_number":2036,"context_line":"            self.compute.swap_volume(self.context, uuids.old_volume,"},{"line_number":2037,"context_line":"                                     uuids.new_volume, instance1, None)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_c5022f73","line":2034,"range":{"start_line":2034,"start_character":52,"end_line":2034,"end_character":60},"in_reply_to":"5f7c97a3_4547ff1f","updated":"2018-06-15 15:54:13.000000000","message":"Yeah. I\u0027m fine with ANY here as the functional test nicely assert that we really get the actual traceback.","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"}],"nova/tests/unit/compute/test_compute_utils.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"41447dd254dfa15548411961488e7b84c79b846e","unresolved":false,"context_lines":[{"line_number":778,"context_line":"                         exception_payload[\u0027function_name\u0027])"},{"line_number":779,"context_line":"        self.assertEqual(\u0027nova.tests.unit.compute.test_compute_utils\u0027,"},{"line_number":780,"context_line":"                         exception_payload[\u0027module_name\u0027])"},{"line_number":781,"context_line":"        self.assertIn(\u0027Volume swap error.\u0027, exception_payload[\u0027traceback\u0027])"},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"    def test_notify_about_instance_rescue_action(self):"},{"line_number":784,"context_line":"        instance \u003d create_instance(self.context)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_bd0aec75","line":781,"updated":"2018-06-13 10:17:14.000000000","message":"++","commit_id":"87cbcb72669d29c975d518e011e2444e3e7ea0b5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f6019d416241ec07a162694c0ebee6571c06aba3","unresolved":false,"context_lines":[{"line_number":778,"context_line":"                         exception_payload[\u0027function_name\u0027])"},{"line_number":779,"context_line":"        self.assertEqual(\u0027nova.tests.unit.compute.test_compute_utils\u0027,"},{"line_number":780,"context_line":"                         exception_payload[\u0027module_name\u0027])"},{"line_number":781,"context_line":"        self.assertIn(\u0027Volume swap error.\u0027, exception_payload[\u0027traceback\u0027])"},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"    def test_notify_about_instance_rescue_action(self):"},{"line_number":784,"context_line":"        instance \u003d create_instance(self.context)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_25fc43b4","line":781,"range":{"start_line":781,"start_character":23,"end_line":781,"end_character":41},"updated":"2018-06-15 15:47:46.000000000","message":"Wouldn\u0027t this be more interesting if test_notify_about_volume_swap_with_error was being checked since that\u0027s part of the traceback, not just the exception message itself.","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e83ab569fd3d55dcaf6c503c6481eb4eeb42c085","unresolved":false,"context_lines":[{"line_number":778,"context_line":"                         exception_payload[\u0027function_name\u0027])"},{"line_number":779,"context_line":"        self.assertEqual(\u0027nova.tests.unit.compute.test_compute_utils\u0027,"},{"line_number":780,"context_line":"                         exception_payload[\u0027module_name\u0027])"},{"line_number":781,"context_line":"        self.assertIn(\u0027Volume swap error.\u0027, exception_payload[\u0027traceback\u0027])"},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"    def test_notify_about_instance_rescue_action(self):"},{"line_number":784,"context_line":"        instance \u003d create_instance(self.context)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_dc2e5c41","line":781,"range":{"start_line":781,"start_character":23,"end_line":781,"end_character":41},"in_reply_to":"5f7c97a3_25fc43b4","updated":"2018-06-19 01:55:02.000000000","message":"Done","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac60f67a2290eb26af9000390e6184e59b12aa01","unresolved":false,"context_lines":[{"line_number":778,"context_line":"                         exception_payload[\u0027function_name\u0027])"},{"line_number":779,"context_line":"        self.assertEqual(\u0027nova.tests.unit.compute.test_compute_utils\u0027,"},{"line_number":780,"context_line":"                         exception_payload[\u0027module_name\u0027])"},{"line_number":781,"context_line":"        self.assertIn(\u0027Volume swap error.\u0027, exception_payload[\u0027traceback\u0027])"},{"line_number":782,"context_line":""},{"line_number":783,"context_line":"    def test_notify_about_instance_rescue_action(self):"},{"line_number":784,"context_line":"        instance \u003d create_instance(self.context)"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_05f02791","line":781,"range":{"start_line":781,"start_character":23,"end_line":781,"end_character":41},"in_reply_to":"5f7c97a3_25fc43b4","updated":"2018-06-15 15:54:13.000000000","message":"Good point!","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"}],"nova/tests/unit/test_exception.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"41447dd254dfa15548411961488e7b84c79b846e","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        self.assertEqual(\u0027bad_function_exception\u0027, payload[\u0027function_name\u0027])"},{"line_number":113,"context_line":"        self.assertEqual(\u0027nova.tests.unit.test_exception\u0027,"},{"line_number":114,"context_line":"                         payload[\u0027module_name\u0027])"},{"line_number":115,"context_line":"        self.assertIn(\u0027traceback\u0027, payload)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @mock.patch(\u0027nova.rpc.NOTIFIER\u0027)"},{"line_number":118,"context_line":"    @mock.patch(\u0027nova.notifications.objects.exception.\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_b8951a34","line":115,"updated":"2018-06-13 10:17:14.000000000","message":"here you can easily make an assert that the TestingException is in the payload[\u0027traceback\u0027]","commit_id":"87cbcb72669d29c975d518e011e2444e3e7ea0b5"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"1bbb397594352712eac3b72921949af50cce5ce5","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        self.assertEqual(\u0027bad_function_exception\u0027, payload[\u0027function_name\u0027])"},{"line_number":113,"context_line":"        self.assertEqual(\u0027nova.tests.unit.test_exception\u0027,"},{"line_number":114,"context_line":"                         payload[\u0027module_name\u0027])"},{"line_number":115,"context_line":"        self.assertIn(\u0027traceback\u0027, payload)"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @mock.patch(\u0027nova.rpc.NOTIFIER\u0027)"},{"line_number":118,"context_line":"    @mock.patch(\u0027nova.notifications.objects.exception.\u0027"}],"source_content_type":"text/x-python","patch_set":6,"id":"5f7c97a3_ff3b65cd","line":115,"in_reply_to":"5f7c97a3_b8951a34","updated":"2018-06-14 01:49:24.000000000","message":"Done","commit_id":"87cbcb72669d29c975d518e011e2444e3e7ea0b5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f6019d416241ec07a162694c0ebee6571c06aba3","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        self.assertEqual(\u0027bad_function_exception\u0027, payload[\u0027function_name\u0027])"},{"line_number":113,"context_line":"        self.assertEqual(\u0027nova.tests.unit.test_exception\u0027,"},{"line_number":114,"context_line":"                         payload[\u0027module_name\u0027])"},{"line_number":115,"context_line":"        self.assertIn(\u0027TestingException\u0027, payload[\u0027traceback\u0027])"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @mock.patch(\u0027nova.rpc.NOTIFIER\u0027)"},{"line_number":118,"context_line":"    @mock.patch(\u0027nova.notifications.objects.exception.\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_a5de133c","line":115,"range":{"start_line":115,"start_character":23,"end_line":115,"end_character":39},"updated":"2018-06-15 15:47:46.000000000","message":"Again, wouldn\u0027t this be more interesting if we found \"bad_function_exception\" in the traceback?","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e83ab569fd3d55dcaf6c503c6481eb4eeb42c085","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        self.assertEqual(\u0027bad_function_exception\u0027, payload[\u0027function_name\u0027])"},{"line_number":113,"context_line":"        self.assertEqual(\u0027nova.tests.unit.test_exception\u0027,"},{"line_number":114,"context_line":"                         payload[\u0027module_name\u0027])"},{"line_number":115,"context_line":"        self.assertIn(\u0027TestingException\u0027, payload[\u0027traceback\u0027])"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @mock.patch(\u0027nova.rpc.NOTIFIER\u0027)"},{"line_number":118,"context_line":"    @mock.patch(\u0027nova.notifications.objects.exception.\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_7c25c85b","line":115,"range":{"start_line":115,"start_character":23,"end_line":115,"end_character":39},"in_reply_to":"5f7c97a3_a5de133c","updated":"2018-06-19 01:55:02.000000000","message":"Done","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac60f67a2290eb26af9000390e6184e59b12aa01","unresolved":false,"context_lines":[{"line_number":112,"context_line":"        self.assertEqual(\u0027bad_function_exception\u0027, payload[\u0027function_name\u0027])"},{"line_number":113,"context_line":"        self.assertEqual(\u0027nova.tests.unit.test_exception\u0027,"},{"line_number":114,"context_line":"                         payload[\u0027module_name\u0027])"},{"line_number":115,"context_line":"        self.assertIn(\u0027TestingException\u0027, payload[\u0027traceback\u0027])"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"    @mock.patch(\u0027nova.rpc.NOTIFIER\u0027)"},{"line_number":118,"context_line":"    @mock.patch(\u0027nova.notifications.objects.exception.\u0027"}],"source_content_type":"text/x-python","patch_set":13,"id":"5f7c97a3_a5361351","line":115,"range":{"start_line":115,"start_character":23,"end_line":115,"end_character":39},"in_reply_to":"5f7c97a3_a5de133c","updated":"2018-06-15 15:54:13.000000000","message":"Good point.","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"}],"releasenotes/notes/add-full-traceback-to-exceptionpayload-06cf8d55d2918eab.yaml":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7e2a47c9be81c4424a6f9b20ef3c7ade97e8b7ba","unresolved":false,"context_lines":[{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Traceback field has been added to ExceptionPayload"},{"line_number":5,"context_line":"    in object version 1.1."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"5f7c97a3_78a66712","line":5,"updated":"2018-06-15 13:15:08.000000000","message":"A new traceback field has been added to each versioned instance notification. In an error notification this field contains the full traceback string of the exception caused the error notification.","commit_id":"70c3f0d45788e0a3ef6c2b7d59dbf542bafc4bfa"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9488a0e2db5003410390f6423a707b11d073544f","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    `notification dev ref`_ for the sample file of ``instance.create.error``"},{"line_number":8,"context_line":"    as an example."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    .. _notification dev ref: https://docs.openstack.org/developer/nova/notifications.html#existing-versioned-notifications"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"5f7c97a3_cfb48ed7","line":10,"range":{"start_line":10,"start_character":30,"end_line":10,"end_character":123},"updated":"2018-06-15 14:37:41.000000000","message":"This URL is no longer valid but it does redirect to the following:\n\n  https://docs.openstack.org/nova/latest/reference/notifications.html#existing-versioned-notifications\n\nI\u0027d use the versioned variant of this, personally\n\n  https://docs.openstack.org/nova/queens/reference/notifications.html#existing-versioned-notifications","commit_id":"96972658f099b237e6a6f2d2e1192decbc869bfa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"16b7d0086c33616a516436fec210025a826c90df","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    `notification dev ref`_ for the sample file of ``instance.create.error``"},{"line_number":8,"context_line":"    as an example."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    .. _notification dev ref: https://docs.openstack.org/developer/nova/notifications.html#existing-versioned-notifications"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"5f7c97a3_22de79da","line":10,"range":{"start_line":10,"start_character":30,"end_line":10,"end_character":123},"in_reply_to":"5f7c97a3_2270b908","updated":"2018-06-15 15:24:56.000000000","message":"Done","commit_id":"96972658f099b237e6a6f2d2e1192decbc869bfa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"e90246e8a84bc1e053d0e4124d215c3e64ead85a","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    `notification dev ref`_ for the sample file of ``instance.create.error``"},{"line_number":8,"context_line":"    as an example."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    .. _notification dev ref: https://docs.openstack.org/developer/nova/notifications.html#existing-versioned-notifications"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"5f7c97a3_2270b908","line":10,"range":{"start_line":10,"start_character":30,"end_line":10,"end_character":123},"in_reply_to":"5f7c97a3_820aed76","updated":"2018-06-15 15:23:53.000000000","message":"If we break a link to latest in the future, we screwed up redirects and we should fix that, but I link to latest in the docs from stuff all the time, since it\u0027s the latest information which is usually the most useful.","commit_id":"96972658f099b237e6a6f2d2e1192decbc869bfa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9a059988045a2f60a77ed6019c468c742f53468b","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    `notification dev ref`_ for the sample file of ``instance.create.error``"},{"line_number":8,"context_line":"    as an example."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    .. _notification dev ref: https://docs.openstack.org/developer/nova/notifications.html#existing-versioned-notifications"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"5f7c97a3_e2de410f","line":10,"range":{"start_line":10,"start_character":30,"end_line":10,"end_character":123},"in_reply_to":"5f7c97a3_cfb48ed7","updated":"2018-06-15 15:19:51.000000000","message":"But the Queens devref will not show the new traceback field that is added by the current patch. We would need to point this link to the Rocky version of the devref but that does not exists yet. What can we do?","commit_id":"96972658f099b237e6a6f2d2e1192decbc869bfa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"3bcc71a97f11d298d8e619292b504fdf57c1fe4c","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    `notification dev ref`_ for the sample file of ``instance.create.error``"},{"line_number":8,"context_line":"    as an example."},{"line_number":9,"context_line":""},{"line_number":10,"context_line":"    .. _notification dev ref: https://docs.openstack.org/developer/nova/notifications.html#existing-versioned-notifications"}],"source_content_type":"text/x-yaml","patch_set":12,"id":"5f7c97a3_820aed76","line":10,"range":{"start_line":10,"start_character":30,"end_line":10,"end_character":123},"in_reply_to":"5f7c97a3_e2de410f","updated":"2018-06-15 15:21:44.000000000","message":"Link to this:\n\nhttps://docs.openstack.org/nova/latest/reference/notifications.html#versioned-notification-samples","commit_id":"96972658f099b237e6a6f2d2e1192decbc869bfa"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f6019d416241ec07a162694c0ebee6571c06aba3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new traceback field has been added to each versioned instance"},{"line_number":5,"context_line":"    notification. In an error notification this field contains the full"},{"line_number":6,"context_line":"    traceback string of the exception caused the error notification. See the"},{"line_number":7,"context_line":"    `notification dev ref`_ for the sample file of ``instance.create.error``"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"5f7c97a3_25ea03d8","line":4,"range":{"start_line":4,"start_character":10,"end_line":4,"end_character":19},"updated":"2018-06-15 15:47:46.000000000","message":"``traceback``","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e83ab569fd3d55dcaf6c503c6481eb4eeb42c085","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new traceback field has been added to each versioned instance"},{"line_number":5,"context_line":"    notification. In an error notification this field contains the full"},{"line_number":6,"context_line":"    traceback string of the exception caused the error notification. See the"},{"line_number":7,"context_line":"    `notification dev ref`_ for the sample file of ``instance.create.error``"}],"source_content_type":"text/x-yaml","patch_set":13,"id":"5f7c97a3_fc18f81e","line":4,"range":{"start_line":4,"start_character":10,"end_line":4,"end_character":19},"in_reply_to":"5f7c97a3_25ea03d8","updated":"2018-06-19 01:55:02.000000000","message":"Done","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"f6019d416241ec07a162694c0ebee6571c06aba3","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new traceback field has been added to each versioned instance"},{"line_number":5,"context_line":"    notification. In an error notification this field contains the full"},{"line_number":6,"context_line":"    traceback string of the exception caused the error notification. See the"},{"line_number":7,"context_line":"    `notification dev ref`_ for the sample file of ``instance.create.error``"},{"line_number":8,"context_line":"    as an example."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":13,"id":"5f7c97a3_a5b7f3f5","line":6,"range":{"start_line":6,"start_character":38,"end_line":6,"end_character":44},"updated":"2018-06-15 15:47:46.000000000","message":"which caused","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"e83ab569fd3d55dcaf6c503c6481eb4eeb42c085","unresolved":false,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    A new traceback field has been added to each versioned instance"},{"line_number":5,"context_line":"    notification. In an error notification this field contains the full"},{"line_number":6,"context_line":"    traceback string of the exception caused the error notification. See the"},{"line_number":7,"context_line":"    `notification dev ref`_ for the sample file of ``instance.create.error``"},{"line_number":8,"context_line":"    as an example."},{"line_number":9,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":13,"id":"5f7c97a3_1c14d4e8","line":6,"range":{"start_line":6,"start_character":38,"end_line":6,"end_character":44},"in_reply_to":"5f7c97a3_a5b7f3f5","updated":"2018-06-19 01:55:02.000000000","message":"Done","commit_id":"d2352e38ccd5c65b6eeedfcde07e23e105ad3d40"}]}
