)]}'
{"nova/compute/manager.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"15e01793a8121bd9b13a408dbc31b0d30bb75544","unresolved":false,"context_lines":[{"line_number":1745,"context_line":"                    LOG.exception(\u0027Instance failed network setup \u0027"},{"line_number":1746,"context_line":"                                  \u0027after %(attempts)d attempt(s)\u0027,"},{"line_number":1747,"context_line":"                                  log_info)"},{"line_number":1748,"context_line":"                    raise e from None"},{"line_number":1749,"context_line":"                LOG.warning(\u0027Instance failed network setup \u0027"},{"line_number":1750,"context_line":"                            \u0027(attempt %(attempt)d of %(attempts)d)\u0027,"},{"line_number":1751,"context_line":"                            log_info, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff570b3c_c0c33588","line":1748,"range":{"start_line":1748,"start_character":27,"end_line":1748,"end_character":37},"updated":"2020-05-19 13:45:19.000000000","message":"I don\u0027t think we actually need this since we\u0027re not raising a different exception here. This would be necessary if we were doing e.g.\n\n  raise NewException(\u0027foo\u0027)\n\nand didn\u0027t want to include any context from the original exception. However, I don\u0027t think that\u0027s the case here. Consider:\n\n    def foo():\n        try:\n            x \u003d 5 / 0\n            print(x)\n        except Exception:\n            raise Exception(\u0027This failed\u0027)\n    foo()\n\nwhich raises:\n\n    Traceback (most recent call last):\n      File \"test.py\", line 3, in foo\n        x \u003d 5 / 0\n    ZeroDivisionError: division by zero\n\n    During handling of the above exception, another exception occurred:\n\n    Traceback (most recent call last):\n      File \"test.py\", line 9, in \u003cmodule\u003e\n        foo()\n      File \"test.py\", line 6, in foo\n        raise Exception(\u0027This failed\u0027)\n    Exception: This failed\n\nwhereas if we use \u0027raise from None\u0027, we see:\n\n    Traceback (most recent call last):\n      File \"test.py\", line 9, in \u003cmodule\u003e\n        foo()\n      File \"test.py\", line 6, in foo\n        raise Exception(\u0027This failed\u0027) from None\n    Exception: This failed","commit_id":"df6830d4369c074d10816b83a77ad589bf36a959"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"8d11dc3c9e067542b1e2684c63c2e42fd7acc2d5","unresolved":false,"context_lines":[{"line_number":1745,"context_line":"                    LOG.exception(\u0027Instance failed network setup \u0027"},{"line_number":1746,"context_line":"                                  \u0027after %(attempts)d attempt(s)\u0027,"},{"line_number":1747,"context_line":"                                  log_info)"},{"line_number":1748,"context_line":"                    raise e from None"},{"line_number":1749,"context_line":"                LOG.warning(\u0027Instance failed network setup \u0027"},{"line_number":1750,"context_line":"                            \u0027(attempt %(attempt)d of %(attempts)d)\u0027,"},{"line_number":1751,"context_line":"                            log_info, instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff570b3c_0253403a","line":1748,"range":{"start_line":1748,"start_character":27,"end_line":1748,"end_character":37},"in_reply_to":"ff570b3c_c0c33588","updated":"2020-05-21 11:37:54.000000000","message":"Done","commit_id":"df6830d4369c074d10816b83a77ad589bf36a959"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"15e01793a8121bd9b13a408dbc31b0d30bb75544","unresolved":false,"context_lines":[{"line_number":2946,"context_line":"                                \u0027due to %(exc)s\u0027,"},{"line_number":2947,"context_line":"                                {\u0027volume_id\u0027: bdm.volume_id, \u0027exc\u0027: exc})"},{"line_number":2948,"context_line":"        if original_exception is not None and raise_exc:"},{"line_number":2949,"context_line":"            raise original_exception from None"},{"line_number":2950,"context_line":""},{"line_number":2951,"context_line":"    @hooks.add_hook(\"delete_instance\")"},{"line_number":2952,"context_line":"    def _delete_instance(self, context, instance, bdms):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff570b3c_e06ab9b0","line":2949,"range":{"start_line":2949,"start_character":36,"end_line":2949,"end_character":46},"updated":"2020-05-19 13:45:19.000000000","message":"Ditto","commit_id":"df6830d4369c074d10816b83a77ad589bf36a959"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"8d11dc3c9e067542b1e2684c63c2e42fd7acc2d5","unresolved":false,"context_lines":[{"line_number":2946,"context_line":"                                \u0027due to %(exc)s\u0027,"},{"line_number":2947,"context_line":"                                {\u0027volume_id\u0027: bdm.volume_id, \u0027exc\u0027: exc})"},{"line_number":2948,"context_line":"        if original_exception is not None and raise_exc:"},{"line_number":2949,"context_line":"            raise original_exception from None"},{"line_number":2950,"context_line":""},{"line_number":2951,"context_line":"    @hooks.add_hook(\"delete_instance\")"},{"line_number":2952,"context_line":"    def _delete_instance(self, context, instance, bdms):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff570b3c_4236d804","line":2949,"range":{"start_line":2949,"start_character":36,"end_line":2949,"end_character":46},"in_reply_to":"ff570b3c_e06ab9b0","updated":"2020-05-21 11:37:54.000000000","message":"Done","commit_id":"df6830d4369c074d10816b83a77ad589bf36a959"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"15e01793a8121bd9b13a408dbc31b0d30bb75544","unresolved":false,"context_lines":[{"line_number":5344,"context_line":"                tb\u003d\u0027,\u0027.join(traceback.format_exception(*exc_info)))"},{"line_number":5345,"context_line":"        else:"},{"line_number":5346,"context_line":"            # not re-scheduling"},{"line_number":5347,"context_line":"            utils.reraise(*exc_info)"},{"line_number":5348,"context_line":""},{"line_number":5349,"context_line":"    @messaging.expected_exceptions(exception.MigrationPreCheckError)"},{"line_number":5350,"context_line":"    @wrap_exception()"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff570b3c_607a29f1","line":5347,"updated":"2020-05-19 13:45:19.000000000","message":"Can we inline this function here? (same comment later)","commit_id":"df6830d4369c074d10816b83a77ad589bf36a959"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"8d11dc3c9e067542b1e2684c63c2e42fd7acc2d5","unresolved":false,"context_lines":[{"line_number":5344,"context_line":"                tb\u003d\u0027,\u0027.join(traceback.format_exception(*exc_info)))"},{"line_number":5345,"context_line":"        else:"},{"line_number":5346,"context_line":"            # not re-scheduling"},{"line_number":5347,"context_line":"            utils.reraise(*exc_info)"},{"line_number":5348,"context_line":""},{"line_number":5349,"context_line":"    @messaging.expected_exceptions(exception.MigrationPreCheckError)"},{"line_number":5350,"context_line":"    @wrap_exception()"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff570b3c_850aba1c","line":5347,"in_reply_to":"ff570b3c_607a29f1","updated":"2020-05-21 11:37:54.000000000","message":"Done","commit_id":"df6830d4369c074d10816b83a77ad589bf36a959"}],"nova/network/security_group_api.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5d4965b02f423365b17630febb780296577ab415","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            raise exception.SecurityGroupNotFound(six.text_type(e))"},{"line_number":79,"context_line":"        else:"},{"line_number":80,"context_line":"            LOG.error(\u0027Neutron Error: %s\u0027, e)"},{"line_number":81,"context_line":"            utils.reraise(*exc_info)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"def parse_cidr(cidr):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff570b3c_848a11bc","line":81,"range":{"start_line":81,"start_character":12,"end_line":81,"end_character":36},"updated":"2020-05-18 08:57:46.000000000","message":"I\u0027m not sure what the reraise function gives us. Why can\u0027t we simply do:\n\n  raise e\n\nor\n\n  raise e from None\n\nif we don\u0027t want the context.","commit_id":"25180ce819f53231e48b27bc1c9288cadf53dc6d"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"4ce31ecc253e0ce8b8dbe61205c6401defb0d48e","unresolved":false,"context_lines":[{"line_number":78,"context_line":"            raise exception.SecurityGroupNotFound(six.text_type(e))"},{"line_number":79,"context_line":"        else:"},{"line_number":80,"context_line":"            LOG.error(\u0027Neutron Error: %s\u0027, e)"},{"line_number":81,"context_line":"            utils.reraise(*exc_info)"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"def parse_cidr(cidr):"}],"source_content_type":"text/x-python","patch_set":5,"id":"ff570b3c_94b867e5","line":81,"range":{"start_line":81,"start_character":12,"end_line":81,"end_character":36},"in_reply_to":"ff570b3c_848a11bc","updated":"2020-05-19 11:06:51.000000000","message":"Done","commit_id":"25180ce819f53231e48b27bc1c9288cadf53dc6d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5d4965b02f423365b17630febb780296577ab415","unresolved":false,"context_lines":[{"line_number":250,"context_line":"            raise exc.HTTPBadRequest()"},{"line_number":251,"context_line":"        elif e.status_code \u003d\u003d 409:"},{"line_number":252,"context_line":"            raise exception.SecurityGroupLimitExceeded(six.text_type(e))"},{"line_number":253,"context_line":"        utils.reraise(*exc_info)"},{"line_number":254,"context_line":"    return _convert_to_nova_security_group_format(security_group)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ff570b3c_c49089f0","line":253,"range":{"start_line":253,"start_character":0,"end_line":253,"end_character":32},"updated":"2020-05-18 08:57:46.000000000","message":"ditto (and so on below)","commit_id":"25180ce819f53231e48b27bc1c9288cadf53dc6d"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"4ce31ecc253e0ce8b8dbe61205c6401defb0d48e","unresolved":false,"context_lines":[{"line_number":250,"context_line":"            raise exc.HTTPBadRequest()"},{"line_number":251,"context_line":"        elif e.status_code \u003d\u003d 409:"},{"line_number":252,"context_line":"            raise exception.SecurityGroupLimitExceeded(six.text_type(e))"},{"line_number":253,"context_line":"        utils.reraise(*exc_info)"},{"line_number":254,"context_line":"    return _convert_to_nova_security_group_format(security_group)"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ff570b3c_f4d0c321","line":253,"range":{"start_line":253,"start_character":0,"end_line":253,"end_character":32},"in_reply_to":"ff570b3c_c49089f0","updated":"2020-05-19 11:06:51.000000000","message":"Done","commit_id":"25180ce819f53231e48b27bc1c9288cadf53dc6d"}],"nova/test.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"3728793a46a9f786bd0a52d5bd5b203736c6bba4","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    def _wrap_log_exception(self):"},{"line_number":138,"context_line":"        exc_info \u003d sys.exc_info()"},{"line_number":139,"context_line":"        NovaExceptionReraiseFormatError.real_log_exception(self)"},{"line_number":140,"context_line":"        utils.reraise(*exc_info)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"# NOTE(melwitt) This needs to be done at import time in order to also catch"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff570b3c_8aecbe8f","line":140,"range":{"start_line":140,"start_character":8,"end_line":140,"end_character":32},"updated":"2020-05-19 12:39:05.000000000","message":"It looks like there\u0027s only one caller for this now. Can we inline it here?","commit_id":"df6830d4369c074d10816b83a77ad589bf36a959"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"8d11dc3c9e067542b1e2684c63c2e42fd7acc2d5","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    def _wrap_log_exception(self):"},{"line_number":138,"context_line":"        exc_info \u003d sys.exc_info()"},{"line_number":139,"context_line":"        NovaExceptionReraiseFormatError.real_log_exception(self)"},{"line_number":140,"context_line":"        utils.reraise(*exc_info)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"# NOTE(melwitt) This needs to be done at import time in order to also catch"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff570b3c_6578468f","line":140,"range":{"start_line":140,"start_character":8,"end_line":140,"end_character":32},"in_reply_to":"ff570b3c_40d9e554","updated":"2020-05-21 11:37:54.000000000","message":"Done","commit_id":"df6830d4369c074d10816b83a77ad589bf36a959"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"15e01793a8121bd9b13a408dbc31b0d30bb75544","unresolved":false,"context_lines":[{"line_number":137,"context_line":"    def _wrap_log_exception(self):"},{"line_number":138,"context_line":"        exc_info \u003d sys.exc_info()"},{"line_number":139,"context_line":"        NovaExceptionReraiseFormatError.real_log_exception(self)"},{"line_number":140,"context_line":"        utils.reraise(*exc_info)"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":""},{"line_number":143,"context_line":"# NOTE(melwitt) This needs to be done at import time in order to also catch"}],"source_content_type":"text/x-python","patch_set":6,"id":"ff570b3c_40d9e554","line":140,"range":{"start_line":140,"start_character":8,"end_line":140,"end_character":32},"in_reply_to":"ff570b3c_8aecbe8f","updated":"2020-05-19 13:45:19.000000000","message":"Actually, there are two. I think it would still make sense to inline the function in those two places though","commit_id":"df6830d4369c074d10816b83a77ad589bf36a959"}],"nova/utils.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5d4965b02f423365b17630febb780296577ab415","unresolved":false,"context_lines":[{"line_number":590,"context_line":""},{"line_number":591,"context_line":"        @functools.wraps(func)"},{"line_number":592,"context_line":"        def wrapper(*args, **kwargs):"},{"line_number":593,"context_line":"            try:"},{"line_number":594,"context_line":"                return func(*args, **kwargs)"},{"line_number":595,"context_line":"            except messaging.ExpectedException as e:"},{"line_number":596,"context_line":"                reraise(*e.exc_info)"},{"line_number":597,"context_line":"        return wrapper"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"ff570b3c_c42c09ae","line":596,"range":{"start_line":593,"start_character":0,"end_line":596,"end_character":36},"updated":"2020-05-18 08:57:46.000000000","message":"I actually don\u0027t understand this entire block :) Why are we wrapping the exception only to reraise whatever we catch? Maybe I\u0027ve misunderstood what reraise is doing","commit_id":"25180ce819f53231e48b27bc1c9288cadf53dc6d"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"15e01793a8121bd9b13a408dbc31b0d30bb75544","unresolved":false,"context_lines":[{"line_number":593,"context_line":"            try:"},{"line_number":594,"context_line":"                return func(*args, **kwargs)"},{"line_number":595,"context_line":"            except messaging.ExpectedException as e:"},{"line_number":596,"context_line":"                raise e.exc_info[1]"},{"line_number":597,"context_line":"        return wrapper"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ff570b3c_a0b3a109","line":596,"updated":"2020-05-19 13:45:19.000000000","message":"I still don\u0027t understand this. Could you add a comment here explaining what we\u0027re doing? :)\n\nLater: Ah, so we\u0027re using this when we want to test functions that are decorated with the \u0027wrap_exception\u0027 decorator from \u0027nova.compute.manager\u0027. I guess that means this is effectively unwrapping that wrapper? If so, two comments on that: a) It would be nice to have these comments here, and b) this really belongs in \u0027nova.test\u0027, not \u0027nova.utils\u0027 (though that\u0027s a separate change)","commit_id":"df6830d4369c074d10816b83a77ad589bf36a959"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"8d11dc3c9e067542b1e2684c63c2e42fd7acc2d5","unresolved":false,"context_lines":[{"line_number":593,"context_line":"            try:"},{"line_number":594,"context_line":"                return func(*args, **kwargs)"},{"line_number":595,"context_line":"            except messaging.ExpectedException as e:"},{"line_number":596,"context_line":"                raise e.exc_info[1]"},{"line_number":597,"context_line":"        return wrapper"},{"line_number":598,"context_line":""},{"line_number":599,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"ff570b3c_c5d95283","line":596,"in_reply_to":"ff570b3c_a0b3a109","updated":"2020-05-21 11:37:54.000000000","message":"IMO, it should be done in another patch.\nThis patch just replaces \u0027six\u0027 functions.","commit_id":"df6830d4369c074d10816b83a77ad589bf36a959"}]}
