)]}'
{"nova/compute/manager.py":[{"author":{"_account_id":2271,"name":"Michael Still","email":"mikal@stillhq.com","username":"mikalstill"},"change_message_id":"346e490186134f7a980f925986bb89c83a0eb617","unresolved":false,"context_lines":[{"line_number":3145,"context_line":"                try:"},{"line_number":3146,"context_line":"                    self.image_api.delete(context, image_id)"},{"line_number":3147,"context_line":"                except exception.ImageNotFound:"},{"line_number":3148,"context_line":"                    LOG.warning(_LW(\"Failed to find image %(image_id)s to \""},{"line_number":3149,"context_line":"                                    \"delete\"), {\u0027image_id\u0027: image_id},"},{"line_number":3150,"context_line":"                                instance\u003dinstance)"},{"line_number":3151,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"da6895a0_321de20f","line":3148,"updated":"2016-10-25 12:40:11.000000000","message":"Should this really be a warning? I would think warning means we expect an admin to pay attention, whereas this would be a relatively unexciting error message. I\u0027d think info or debug was a better choice.","commit_id":"efaa361a3f52dc666dd1a3de54fb36aef1187f25"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"81da591b2fec96af2f250fe377e74b1ee1ced041","unresolved":false,"context_lines":[{"line_number":3145,"context_line":"                try:"},{"line_number":3146,"context_line":"                    self.image_api.delete(context, image_id)"},{"line_number":3147,"context_line":"                except exception.ImageNotFound:"},{"line_number":3148,"context_line":"                    LOG.info(_LW(\"Failed to find image %(image_id)s to \""},{"line_number":3149,"context_line":"                                 \"delete\"), {\u0027image_id\u0027: image_id},"},{"line_number":3150,"context_line":"                             instance\u003dinstance)"},{"line_number":3151,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"da6895a0_1caf1082","line":3148,"range":{"start_line":3148,"start_character":29,"end_line":3148,"end_character":32},"updated":"2016-10-25 14:17:33.000000000","message":"It should be \u0027_LI\u0027 when the log level is \u0027info\u0027.","commit_id":"be3b194ba7da999b5fd83419a5a3be6eaf3654bf"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"97db9ab00d0c2f30b9ad8e8267a4223c233b66b2","unresolved":false,"context_lines":[{"line_number":3354,"context_line":""},{"line_number":3355,"context_line":"        mock_get_all_images.return_value \u003d fake_images"},{"line_number":3356,"context_line":""},{"line_number":3357,"context_line":"        def fake_image_delete(self, context, image_id):"},{"line_number":3358,"context_line":"            # Raise ImageNotFound exception assuming that image_id_2 is"},{"line_number":3359,"context_line":"            # already deleted."},{"line_number":3360,"context_line":"            if image_id \u003d\u003d uuids.image_id_2:"},{"line_number":3361,"context_line":"                raise exception.ImageNotFound(image_id\u003dimage_id)"},{"line_number":3362,"context_line":""},{"line_number":3363,"context_line":"        with mock.patch.object(image_api.API, \u0027delete\u0027,"},{"line_number":3364,"context_line":"                               fake_image_delete):"}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_0d21e5fb","line":3361,"range":{"start_line":3357,"start_character":8,"end_line":3361,"end_character":64},"updated":"2016-12-01 19:24:57.000000000","message":"FYI: Another way to do this would be to have mocked \u0027nova.image.api.API.delete\u0027 at the top and set its side_effect \u003d [None, ImageNotFound, None] to simulate the exception being raised for image_id_2. That way you don\u0027t have to write a fake image delete function.","commit_id":"92aeea080177b671ea51640f940bac4c0336e293"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"97db9ab00d0c2f30b9ad8e8267a4223c233b66b2","unresolved":false,"context_lines":[{"line_number":3366,"context_line":"                                         backup_type\u003d\u0027daily\u0027,"},{"line_number":3367,"context_line":"                                         rotation\u003d1)"},{"line_number":3368,"context_line":""},{"line_number":3369,"context_line":"            mock_LOG.info.assert_called_once_with("},{"line_number":3370,"context_line":"                    \u0027Failed to find image %(image_id)s to delete\u0027,"},{"line_number":3371,"context_line":"                    {\u0027image_id\u0027: uuids.image_id_2}, instance\u003dinstance)"},{"line_number":3372,"context_line":""},{"line_number":3373,"context_line":"    def test_console_output(self):"},{"line_number":3374,"context_line":"        # Make sure we can get console output from instance."}],"source_content_type":"text/x-python","patch_set":5,"id":"3a71b18c_8de8957e","line":3371,"range":{"start_line":3369,"start_character":12,"end_line":3371,"end_character":70},"updated":"2016-12-01 19:24:57.000000000","message":"This isn\u0027t really necessary, instead I would assert that mock delete was called three times (since the bug is that it would fail to delete remaining images when ImageNotFound was raised in the middle of the loop).\n\nI think I have to -1 because this test isn\u0027t verifying that the third image gets deleted after the second raises ImageNotFound.","commit_id":"92aeea080177b671ea51640f940bac4c0336e293"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"08ca75b3524684d61563c2741e16b7e67951e4c9","unresolved":false,"context_lines":[{"line_number":3350,"context_line":"                           \u0027image_type\u0027: \u0027backup\u0027,"},{"line_number":3351,"context_line":"                           \u0027backup_type\u0027: \u0027daily\u0027,"},{"line_number":3352,"context_line":"                           \u0027instance_uuid\u0027: instance_uuid},"},{"line_number":3353,"context_line":"        },"},{"line_number":3354,"context_line":"        {"},{"line_number":3355,"context_line":"            \u0027id\u0027: uuids.image_id_4,"},{"line_number":3356,"context_line":"            \u0027name\u0027: \u0027fake_name_4\u0027,"},{"line_number":3357,"context_line":"            \u0027status\u0027: \u0027active\u0027,"},{"line_number":3358,"context_line":"            \u0027properties\u0027: {\u0027kernel_id\u0027: uuids.kernel_id_4,"},{"line_number":3359,"context_line":"                           \u0027ramdisk_id\u0027: uuids.ramdisk_id_4,"},{"line_number":3360,"context_line":"                           \u0027image_type\u0027: \u0027backup\u0027,"},{"line_number":3361,"context_line":"                           \u0027backup_type\u0027: \u0027daily\u0027,"},{"line_number":3362,"context_line":"                           \u0027instance_uuid\u0027: instance_uuid},"},{"line_number":3363,"context_line":"        }]"},{"line_number":3364,"context_line":""},{"line_number":3365,"context_line":"        mock_get_all_images.return_value \u003d fake_images"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_cb7964fe","line":3362,"range":{"start_line":3353,"start_character":0,"end_line":3362,"end_character":59},"updated":"2016-12-02 16:10:32.000000000","message":"Sorry, I didn\u0027t mean to make you add this. I was thinking the call count would be 3 total, but because of rotation\u003d1, it would be 2.","commit_id":"6100e520920acf41eb7fb08eee528959ce0553ee"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"08ca75b3524684d61563c2741e16b7e67951e4c9","unresolved":false,"context_lines":[{"line_number":3365,"context_line":"        mock_get_all_images.return_value \u003d fake_images"},{"line_number":3366,"context_line":""},{"line_number":3367,"context_line":"        mock_delete.side_effect \u003d (None,"},{"line_number":3368,"context_line":"            exception.ImageNotFound(image_id\u003duuids.image_id_3), None)"},{"line_number":3369,"context_line":""},{"line_number":3370,"context_line":"        self.compute._rotate_backups(self.context, instance\u003dinstance,"},{"line_number":3371,"context_line":"                                     backup_type\u003d\u0027daily\u0027,"}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_cbc7a410","line":3368,"range":{"start_line":3368,"start_character":51,"end_line":3368,"end_character":61},"updated":"2016-12-02 16:10:32.000000000","message":"You can make this image_id_2 as you originally had","commit_id":"6100e520920acf41eb7fb08eee528959ce0553ee"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"08ca75b3524684d61563c2741e16b7e67951e4c9","unresolved":false,"context_lines":[{"line_number":3370,"context_line":"        self.compute._rotate_backups(self.context, instance\u003dinstance,"},{"line_number":3371,"context_line":"                                     backup_type\u003d\u0027daily\u0027,"},{"line_number":3372,"context_line":"                                     rotation\u003d1)"},{"line_number":3373,"context_line":"        self.assertTrue(3, mock_delete.called)"},{"line_number":3374,"context_line":""},{"line_number":3375,"context_line":"    def test_console_output(self):"},{"line_number":3376,"context_line":"        # Make sure we can get console output from instance."}],"source_content_type":"text/x-python","patch_set":6,"id":"3a71b18c_4bdc74e4","line":3373,"range":{"start_line":3373,"start_character":8,"end_line":3373,"end_character":46},"updated":"2016-12-02 16:10:32.000000000","message":"-1 mock_delete.called is a True/False value, it\u0027s not the call count. So assertTrue(N, mock_delete.called) would be True no matter how many times it was called, as long as it was called at least once.\n\nInstead, you need to use the call_count property:\n\n self.assertEqual(2, mock_delete.call_count)","commit_id":"6100e520920acf41eb7fb08eee528959ce0553ee"}]}
