)]}'
{"nova/api/openstack/compute/rescue.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5d2d45977a2985f585d9ba557b36c80f22e59e1b","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                                                                  \u0027rescue\u0027, id)"},{"line_number":71,"context_line":"        except exception.InvalidVolume as volume_error:"},{"line_number":72,"context_line":"            raise exc.HTTPConflict(explanation\u003dvolume_error.format_message())"},{"line_number":73,"context_line":"        except (exception.InstanceNotRescuable,"},{"line_number":74,"context_line":"                exception.UnsupportedRescueImage,"},{"line_number":75,"context_line":"                ) as non_rescuable:"},{"line_number":76,"context_line":"            raise exc.HTTPBadRequest("},{"line_number":77,"context_line":"                explanation\u003dnon_rescuable.format_message())"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_e300cb04","line":75,"range":{"start_line":73,"start_character":0,"end_line":75,"end_character":35},"updated":"2020-05-21 15:13:49.000000000","message":"style nit:\n\nThis would (IMO) read way nicer as:\n\n  except (\n      exception.InstanceNotRescuable,\n      exception.UnsupportedRescueImage,\n  ) as non_rescuable:","commit_id":"751704d9bd25dfa110386c34e626e174b9df42fd"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"637daffc28e39ae7d0300c16b7f0cd438b4c4092","unresolved":false,"context_lines":[{"line_number":70,"context_line":"                                                                  \u0027rescue\u0027, id)"},{"line_number":71,"context_line":"        except exception.InvalidVolume as volume_error:"},{"line_number":72,"context_line":"            raise exc.HTTPConflict(explanation\u003dvolume_error.format_message())"},{"line_number":73,"context_line":"        except (exception.InstanceNotRescuable,"},{"line_number":74,"context_line":"                exception.UnsupportedRescueImage,"},{"line_number":75,"context_line":"                ) as non_rescuable:"},{"line_number":76,"context_line":"            raise exc.HTTPBadRequest("},{"line_number":77,"context_line":"                explanation\u003dnon_rescuable.format_message())"},{"line_number":78,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_46a385b2","line":75,"range":{"start_line":73,"start_character":0,"end_line":75,"end_character":35},"in_reply_to":"ff570b3c_e300cb04","updated":"2020-05-21 15:23:10.000000000","message":"Done","commit_id":"751704d9bd25dfa110386c34e626e174b9df42fd"}],"nova/compute/api.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5d2d45977a2985f585d9ba557b36c80f22e59e1b","unresolved":false,"context_lines":[{"line_number":4210,"context_line":"        # using a volume snapshot so fail here before we cast to the compute."},{"line_number":4211,"context_line":"        if rescue_image_ref:"},{"line_number":4212,"context_line":"            image_meta \u003d image_meta_obj.ImageMeta.from_image_ref("},{"line_number":4213,"context_line":"                context, self.image_api, rescue_image_ref)"},{"line_number":4214,"context_line":"            if image_meta.properties.get(\u0027img_block_device_mapping\u0027):"},{"line_number":4215,"context_line":"                raise exception.UnsupportedRescueImage("},{"line_number":4216,"context_line":"                    image\u003drescue_image_ref)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_06beadfd","line":4213,"range":{"start_line":4213,"start_character":41,"end_line":4213,"end_character":57},"updated":"2020-05-21 15:13:49.000000000","message":"Nothing has validated this yet. While there\u0027s no explicit error handling in the \u0027_get_rescue_image\u0027 compute manager method, the caller, \u0027rescue_instance\u0027, is decorated with \u0027wrap_exception\u0027 and \u0027wrap_instance_fault\u0027 to do some kind of error handling. I don\u0027t know what exactly will happen though. Do we need to handle possible glance exceptions here?","commit_id":"751704d9bd25dfa110386c34e626e174b9df42fd"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"637daffc28e39ae7d0300c16b7f0cd438b4c4092","unresolved":false,"context_lines":[{"line_number":4210,"context_line":"        # using a volume snapshot so fail here before we cast to the compute."},{"line_number":4211,"context_line":"        if rescue_image_ref:"},{"line_number":4212,"context_line":"            image_meta \u003d image_meta_obj.ImageMeta.from_image_ref("},{"line_number":4213,"context_line":"                context, self.image_api, rescue_image_ref)"},{"line_number":4214,"context_line":"            if image_meta.properties.get(\u0027img_block_device_mapping\u0027):"},{"line_number":4215,"context_line":"                raise exception.UnsupportedRescueImage("},{"line_number":4216,"context_line":"                    image\u003drescue_image_ref)"}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_669a0962","line":4213,"range":{"start_line":4213,"start_character":41,"end_line":4213,"end_character":57},"in_reply_to":"ff570b3c_06beadfd","updated":"2020-05-21 15:23:10.000000000","message":"Yeah I\u0027ll raise UnsupportedRescueImage here also if this fails.","commit_id":"751704d9bd25dfa110386c34e626e174b9df42fd"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"260a3005a148eb54d0a3aca5e81ea385ce8e97db","unresolved":false,"context_lines":[{"line_number":4225,"context_line":"                            \"snapshot image with img_block_device_mapping \""},{"line_number":4226,"context_line":"                            \"image properties set\")"},{"line_number":4227,"context_line":"                raise exception.UnsupportedRescueImage("},{"line_number":4228,"context_line":"                    image\u003drescue_image_ref)"},{"line_number":4229,"context_line":""},{"line_number":4230,"context_line":"        bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":4231,"context_line":"                    context, instance.uuid)"}],"source_content_type":"text/x-python","patch_set":3,"id":"ff570b3c_b0214950","line":4228,"updated":"2020-06-02 12:57:11.000000000","message":"Maybe I am being super picky, but could we test this second, as this requires that we call out to Glance. It is probably best we first rule out all the volume backed instances, where we don\u0027t need to talk to glance first?","commit_id":"9e3e0594033f981848bb7e0f9ab417f06d51990d"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"41f4d576d1f2fb1ab0e6d06059e645b1abbb98d8","unresolved":false,"context_lines":[{"line_number":4225,"context_line":"                            \"snapshot image with img_block_device_mapping \""},{"line_number":4226,"context_line":"                            \"image properties set\")"},{"line_number":4227,"context_line":"                raise exception.UnsupportedRescueImage("},{"line_number":4228,"context_line":"                    image\u003drescue_image_ref)"},{"line_number":4229,"context_line":""},{"line_number":4230,"context_line":"        bdms \u003d objects.BlockDeviceMappingList.get_by_instance_uuid("},{"line_number":4231,"context_line":"                    context, instance.uuid)"}],"source_content_type":"text/x-python","patch_set":3,"id":"bf51134e_ee37924c","line":4228,"in_reply_to":"ff570b3c_b0214950","updated":"2020-07-08 13:23:50.000000000","message":"Sorry John missed your feedback while I was out.\n\nI\u0027m not sure I follow, this check isn\u0027t dependant on the instance being boot from volume. This check is specifically against the image being provided for the rescue attempt and ensuring it is not a volume snapshot.","commit_id":"9e3e0594033f981848bb7e0f9ab417f06d51990d"}],"nova/tests/unit/api/openstack/compute/test_rescue.py":[{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"5d2d45977a2985f585d9ba557b36c80f22e59e1b","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    @mock.patch.object(compute.api.API, \"rescue\")"},{"line_number":144,"context_line":"    def test_rescue_raises_unsupported_image(self, mock_rescue):"},{"line_number":145,"context_line":"        mock_rescue.side_effect \u003d \\"},{"line_number":146,"context_line":"            exception.UnsupportedRescueImage(image\u003d\u0027fake\u0027)"},{"line_number":147,"context_line":"        body \u003d dict(rescue\u003dNone)"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_86559dfc","line":145,"range":{"start_line":145,"start_character":34,"end_line":145,"end_character":35},"updated":"2020-05-21 15:13:49.000000000","message":"eew :(","commit_id":"751704d9bd25dfa110386c34e626e174b9df42fd"},{"author":{"_account_id":10135,"name":"Lee Yarwood","display_name":"Lee Yarwood","email":"lyarwood@redhat.com","username":"lyarwood"},"change_message_id":"637daffc28e39ae7d0300c16b7f0cd438b4c4092","unresolved":false,"context_lines":[{"line_number":142,"context_line":""},{"line_number":143,"context_line":"    @mock.patch.object(compute.api.API, \"rescue\")"},{"line_number":144,"context_line":"    def test_rescue_raises_unsupported_image(self, mock_rescue):"},{"line_number":145,"context_line":"        mock_rescue.side_effect \u003d \\"},{"line_number":146,"context_line":"            exception.UnsupportedRescueImage(image\u003d\u0027fake\u0027)"},{"line_number":147,"context_line":"        body \u003d dict(rescue\u003dNone)"},{"line_number":148,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ff570b3c_66acc99e","line":145,"range":{"start_line":145,"start_character":34,"end_line":145,"end_character":35},"in_reply_to":"ff570b3c_86559dfc","updated":"2020-05-21 15:23:10.000000000","message":"I\u0027ll move it up into the decorator.","commit_id":"751704d9bd25dfa110386c34e626e174b9df42fd"}]}
