)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":15054,"name":"wangxiyuan","email":"wangxiyuan1007@gmail.com","username":"wangxiyuan"},"change_message_id":"81945c46e389d086032e99bf62abae6f349a8230","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Changes behaviour when an image fails uploading"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Currently when a image fails being uploaded the task is left in the"},{"line_number":10,"context_line":"failed state (with the internal sever error message) and the image is"},{"line_number":11,"context_line":"left in the saving state. This should not be the case as uploading lead"},{"line_number":12,"context_line":"to an error. This makes sure the image is in the killed state and gives"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"fa69d971_84df570c","line":9,"range":{"start_line":9,"start_character":15,"end_line":9,"end_character":16},"updated":"2016-01-05 02:43:14.000000000","message":"an","commit_id":"8612b7f789a8a1b3d2f4b5f8447555ee53fa20b8"},{"author":{"_account_id":5202,"name":"Erno Kuvaja","email":"jokke@usr.fi","username":"jokke"},"change_message_id":"9471fbd71055c3ad6d8c1296c6e0a641a4d76a1a","unresolved":false,"context_lines":[{"line_number":11,"context_line":"left in the saving state. This should not be the case as uploading lead"},{"line_number":12,"context_line":"to an error. This makes sure the image is in the killed state and gives"},{"line_number":13,"context_line":"a decriptive error to why it happened."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: I15fbe9f0041407892144c0d26eadc4ed939e5abf"},{"line_number":16,"context_line":"Closes-Bug: 1487026"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"fa69d971_c133abf4","line":14,"updated":"2016-01-06 17:31:57.000000000","message":"I think APIImpact would be appropriate here.","commit_id":"19a2ce4218d904dea9c6e3ba87ee134ad98d2671"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"b8cbf6590cf40ed415b99234a8e161097fc81439","unresolved":false,"context_lines":[{"line_number":10,"context_line":"failed state (with the internal sever error message) and the image is"},{"line_number":11,"context_line":"left in the saving state. This should not be the case as uploading lead"},{"line_number":12,"context_line":"to an error. This makes sure the image is in the killed state and gives"},{"line_number":13,"context_line":"a decriptive error to why it happened."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"APIImpact"},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3afc51ec_f6c5273c","line":13,"range":{"start_line":13,"start_character":2,"end_line":13,"end_character":6},"updated":"2016-03-15 03:58:00.000000000","message":"s/decriptive/descriptive","commit_id":"8bb83e1df846e3981e65c8b2c41033c81e149e46"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"db314615195e51b55ae9b04eff20807440386de9","unresolved":false,"context_lines":[{"line_number":12,"context_line":"to an error. This makes sure the image is in the killed state and gives"},{"line_number":13,"context_line":"a decriptive error to why it happened."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"APIImpact"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I15fbe9f0041407892144c0d26eadc4ed939e5abf"},{"line_number":18,"context_line":"Closes-Bug: 1487026"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3afc51ec_e32c6f4c","line":15,"updated":"2016-03-14 13:47:14.000000000","message":"Why is APIImpact required?","commit_id":"8bb83e1df846e3981e65c8b2c41033c81e149e46"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"998bf3fb74467fc1a3c85e65882c0ed8ae4b2ab6","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Currently when an image fails being uploaded the task is left in the"},{"line_number":10,"context_line":"failed state (with the internal sever error message) and the image is"},{"line_number":11,"context_line":"left in the saving state. This should not be the case as uploading lead"},{"line_number":12,"context_line":"to an error. This makes sure the image is in the killed state and gives"},{"line_number":13,"context_line":"a descriptive error to why it happened."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"APIImpact"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1af94dfe_1a44ac72","line":12,"range":{"start_line":12,"start_character":49,"end_line":12,"end_character":55},"updated":"2016-03-15 14:19:37.000000000","message":"I think the part of this saying the image is \u0027killed\u0027 may be out of date.","commit_id":"f1794e15cd469a1b91f2e4fe37ff80e4b471024d"}],"glance/async/flows/base_import.py":[{"author":{"_account_id":6601,"name":"James Carey","email":"jecarey@yerac.com","username":"jecarey"},"change_message_id":"83d3e64a3eeb6083816bb1edca6d09935227632b","unresolved":false,"context_lines":[{"line_number":313,"context_line":"        except Exception as e:"},{"line_number":314,"context_line":"            image.status \u003d \u0027killed\u0027"},{"line_number":315,"context_line":"            self.image_repo.save(image)"},{"line_number":316,"context_line":"            raise exception.UploadException(str(e))"},{"line_number":317,"context_line":"        # NOTE(flaper87): We need to save the image again after the locations"},{"line_number":318,"context_line":"        # have been set in the image."},{"line_number":319,"context_line":"        self.image_repo.save(image)"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_fc9ebe61","line":316,"updated":"2015-08-20 18:27:57.000000000","message":"should use utils.exception_to_str(e) instead of str(e)","commit_id":"6b328d7ffe8054a5b86792256ae12e6e5a5689cf"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"47dc2032589becd5ee643a228103281ee3e7d6b8","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        try:"},{"line_number":311,"context_line":"            image_import.set_image_data(image,"},{"line_number":312,"context_line":"                                        file_path or self.uri, self.task_id)"},{"line_number":313,"context_line":"        except Exception as e:"},{"line_number":314,"context_line":"            image.status \u003d \u0027killed\u0027"},{"line_number":315,"context_line":"            self.image_repo.save(image)"},{"line_number":316,"context_line":"            raise exception.UploadException("}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_0a10fa55","line":313,"updated":"2015-11-19 17:51:15.000000000","message":"I think the exception should be logged here rather than doing it in the executor.","commit_id":"03334828e2ca8a7db2c43e0bf7fe46e1805225ae"},{"author":{"_account_id":6159,"name":"Flavio Percoco Premoli","display_name":"flaper87","email":"flavio.percoco@flyrlabs.com","username":"flaper87"},"change_message_id":"47dc2032589becd5ee643a228103281ee3e7d6b8","unresolved":false,"context_lines":[{"line_number":312,"context_line":"                                        file_path or self.uri, self.task_id)"},{"line_number":313,"context_line":"        except Exception as e:"},{"line_number":314,"context_line":"            image.status \u003d \u0027killed\u0027"},{"line_number":315,"context_line":"            self.image_repo.save(image)"},{"line_number":316,"context_line":"            raise exception.UploadException("},{"line_number":317,"context_line":"                encodeutils.exception_to_unicode(e))"},{"line_number":318,"context_line":"        # NOTE(flaper87): We need to save the image again after the locations"}],"source_content_type":"text/x-python","patch_set":3,"id":"ba8a016a_a57a3f86","line":315,"updated":"2015-11-19 17:51:15.000000000","message":"This should perhaps go to the `_CreateImage.revert` method as that\u0027s the task responsible for creating the image record. It should be called always before the upload task.\n\nThis is open to discussion as it\u0027s somewhat optimistic we\u0027ll get to the point of reverting the image creation without further failures","commit_id":"03334828e2ca8a7db2c43e0bf7fe46e1805225ae"},{"author":{"_account_id":7575,"name":"Sabari","email":"smurugesan@vmware.com","username":"sabari"},"change_message_id":"98511477953b038bf6c82f9b6cdbac6b096e68f9","unresolved":false,"context_lines":[{"line_number":70,"context_line":""},{"line_number":71,"context_line":"        LOG.debug(\"Task %(task_id)s created image %(image_id)s\" %"},{"line_number":72,"context_line":"                  {\u0027task_id\u0027: task.task_id, \u0027image_id\u0027: image.image_id})"},{"line_number":73,"context_line":"        self.image \u003d image"},{"line_number":74,"context_line":"        return image.image_id"},{"line_number":75,"context_line":""},{"line_number":76,"context_line":"    def revert(self, *args, **kwargs):"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_9001b13a","line":73,"updated":"2016-01-23 08:34:30.000000000","message":"Where do you use this ?","commit_id":"6948e3be1f41f66de1832a2f3bc2aed52d7a6396"},{"author":{"_account_id":7575,"name":"Sabari","email":"smurugesan@vmware.com","username":"sabari"},"change_message_id":"98511477953b038bf6c82f9b6cdbac6b096e68f9","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        # written, although at that point failures are (should be) unexpected,"},{"line_number":82,"context_line":"        # at least image-workflow wise."},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"        image_id \u003d getattr(kwargs, \u0027result\u0027, None)"},{"line_number":85,"context_line":"        if image_id is not None:"},{"line_number":86,"context_line":"            image \u003d self.image_repo.get(image_id)"},{"line_number":87,"context_line":"            image.status \u003d \u0027killed\u0027"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_90af7129","line":84,"updated":"2016-01-23 08:34:30.000000000","message":"You should check if result is an instance of failure.Failure.\n\n if isinstance(result, failure.Failure):\n #(may be log)\n return\n\nOtherwise, result has the image_id and you can skip the check below.","commit_id":"6948e3be1f41f66de1832a2f3bc2aed52d7a6396"},{"author":{"_account_id":7575,"name":"Sabari","email":"smurugesan@vmware.com","username":"sabari"},"change_message_id":"98511477953b038bf6c82f9b6cdbac6b096e68f9","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        image_id \u003d getattr(kwargs, \u0027result\u0027, None)"},{"line_number":85,"context_line":"        if image_id is not None:"},{"line_number":86,"context_line":"            image \u003d self.image_repo.get(image_id)"},{"line_number":87,"context_line":"            image.status \u003d \u0027killed\u0027"},{"line_number":88,"context_line":"            self.image_repo.save(image)"},{"line_number":89,"context_line":""},{"line_number":90,"context_line":""}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_b06ab5eb","line":87,"range":{"start_line":87,"start_character":25,"end_line":87,"end_character":26},"updated":"2016-01-23 08:34:30.000000000","message":"In v2 API, we don\u0027t have the killed state instead do a image.delete() \u0026 image.remove()\n\nthe delete marks the status as \u0027deleted\u0027 and removes the data from store, the db record is deleted when image_repo.remove() is called.","commit_id":"6948e3be1f41f66de1832a2f3bc2aed52d7a6396"},{"author":{"_account_id":7575,"name":"Sabari","email":"smurugesan@vmware.com","username":"sabari"},"change_message_id":"98511477953b038bf6c82f9b6cdbac6b096e68f9","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        try:"},{"line_number":317,"context_line":"            image_import.set_image_data(image,"},{"line_number":318,"context_line":"                                        file_path or self.uri, self.task_id)"},{"line_number":319,"context_line":"        except Exception as e:"},{"line_number":320,"context_line":"            msg \u003d (_(\u0027Uploading the image failed due to: %(exc)s\u0027) %"},{"line_number":321,"context_line":"                   {\u0027exc\u0027: encodeutils.exception_to_unicode(e)})"},{"line_number":322,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a68dd71_507c99b4","line":319,"updated":"2016-01-23 08:34:30.000000000","message":"Why do we need this ?","commit_id":"6948e3be1f41f66de1832a2f3bc2aed52d7a6396"},{"author":{"_account_id":17116,"name":"Niall Bunting","email":"niall.bunting@hpe.com","username":"NiallBunting"},"change_message_id":"430dac9856ec098dee2439b9028d1bc44caacc07","unresolved":false,"context_lines":[{"line_number":316,"context_line":"        try:"},{"line_number":317,"context_line":"            image_import.set_image_data(image,"},{"line_number":318,"context_line":"                                        file_path or self.uri, self.task_id)"},{"line_number":319,"context_line":"        except Exception as e:"},{"line_number":320,"context_line":"            msg \u003d (_(\u0027Uploading the image failed due to: %(exc)s\u0027) %"},{"line_number":321,"context_line":"                   {\u0027exc\u0027: encodeutils.exception_to_unicode(e)})"},{"line_number":322,"context_line":"            LOG.error(msg)"}],"source_content_type":"text/x-python","patch_set":7,"id":"9aed3d3a_ed3ed089","line":319,"in_reply_to":"9a68dd71_507c99b4","updated":"2016-02-29 17:24:07.000000000","message":"It catches various errors that can occur such as:\n\nURLError: \u003curlopen error [Errno -2] Name or service not known\u003e","commit_id":"6948e3be1f41f66de1832a2f3bc2aed52d7a6396"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"1ad09059e00c2ca7f0681fc4d504d92ba1085bdf","unresolved":false,"context_lines":[{"line_number":70,"context_line":"        return image.image_id"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"    def revert(self, *args, **kwargs):"},{"line_number":73,"context_line":"        # TODO(flaper87): Define the revert rules for images on failures."},{"line_number":74,"context_line":"        # Deleting the image may not be what we want since users could upload"},{"line_number":75,"context_line":"        # the image data in a separate step. However, it really depends on"},{"line_number":76,"context_line":"        # when the failure happened. I guess we should check if data has been"},{"line_number":77,"context_line":"        # written, although at that point failures are (should be) unexpected,"},{"line_number":78,"context_line":"        # at least image-workflow wise."},{"line_number":79,"context_line":"        result \u003d kwargs.get(\u0027result\u0027, None)"},{"line_number":80,"context_line":"        if result is not None:"},{"line_number":81,"context_line":"            if kwargs.get(\u0027flow_failures\u0027, None) is not None:"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_209a0715","line":78,"range":{"start_line":73,"start_character":8,"end_line":78,"end_character":39},"updated":"2016-03-21 16:07:41.000000000","message":"can we delete this comment?","commit_id":"c320145c9da262a71e518242a21c7392f0a7ea8c"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"1ad09059e00c2ca7f0681fc4d504d92ba1085bdf","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        if result is not None:"},{"line_number":81,"context_line":"            if kwargs.get(\u0027flow_failures\u0027, None) is not None:"},{"line_number":82,"context_line":"                image \u003d self.image_repo.get(result)"},{"line_number":83,"context_line":"                LOG.debug(_(\"Deleting image whilst reverting.\"))"},{"line_number":84,"context_line":"                image.delete()"},{"line_number":85,"context_line":"                self.image_repo.remove(image)"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_605fdf72","line":83,"range":{"start_line":83,"start_character":26,"end_line":83,"end_character":63},"updated":"2016-03-21 16:07:41.000000000","message":"no translation for log.debug ref: http://docs.openstack.org/developer/oslo.i18n/guidelines.html#log-translation","commit_id":"c320145c9da262a71e518242a21c7392f0a7ea8c"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"1ad09059e00c2ca7f0681fc4d504d92ba1085bdf","unresolved":false,"context_lines":[{"line_number":316,"context_line":"            image_import.set_image_data(image,"},{"line_number":317,"context_line":"                                        file_path or self.uri, self.task_id)"},{"line_number":318,"context_line":"        except IOError as e:"},{"line_number":319,"context_line":"            msg \u003d (_LE(\u0027Uploading the image failed due to: %(exc)s\u0027) %"},{"line_number":320,"context_line":"                   {\u0027exc\u0027: encodeutils.exception_to_unicode(e)})"},{"line_number":321,"context_line":"            LOG.error(msg)"},{"line_number":322,"context_line":"            raise exception.UploadException(message\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_f3b90b30","line":319,"range":{"start_line":319,"start_character":20,"end_line":319,"end_character":22},"updated":"2016-03-21 16:07:41.000000000","message":"this needs to be deleted: see example http://docs.openstack.org/developer/oslo.i18n/guidelines.html#choosing-a-marker-function","commit_id":"c320145c9da262a71e518242a21c7392f0a7ea8c"}],"glance/async/taskflow_executor.py":[{"author":{"_account_id":6601,"name":"James Carey","email":"jecarey@yerac.com","username":"jecarey"},"change_message_id":"83d3e64a3eeb6083816bb1edca6d09935227632b","unresolved":false,"context_lines":[{"line_number":126,"context_line":"                with llistener.DynamicLoggingListener(engine, log\u003dLOG):"},{"line_number":127,"context_line":"                    engine.run()"},{"line_number":128,"context_line":"        except exception.UploadException as exc:"},{"line_number":129,"context_line":"            task.fail(_(\u0027Uploading the image failed due to: %s\u0027) % str(exc))"},{"line_number":130,"context_line":"            self.task_repo.save(task)"},{"line_number":131,"context_line":"        except Exception as exc:"},{"line_number":132,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":1,"id":"fa1b9901_bcb926ce","line":129,"updated":"2015-08-20 18:27:57.000000000","message":"Should use utils.exception_to_str(exc) instead of str(exc)","commit_id":"6b328d7ffe8054a5b86792256ae12e6e5a5689cf"},{"author":{"_account_id":455,"name":"Stuart McLaren","email":"stuart.mclaren@hpe.com","username":"stuart-mclaren"},"change_message_id":"6aae66ca1e44462833b836f2ec6d6d7c09fcd06c","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            with llistener.DynamicLoggingListener(engine, log\u003dLOG):"},{"line_number":136,"context_line":"                engine.run()"},{"line_number":137,"context_line":"        except exception.UploadException as exc:"},{"line_number":138,"context_line":"            task.fail(exc.message)"},{"line_number":139,"context_line":"            self.task_repo.save(task)"},{"line_number":140,"context_line":"        except Exception as exc:"},{"line_number":141,"context_line":"            with excutils.save_and_reraise_exception():"}],"source_content_type":"text/x-python","patch_set":9,"id":"1af94dfe_a73485de","line":138,"range":{"start_line":138,"start_character":22,"end_line":138,"end_character":25},"updated":"2016-03-15 14:18:17.000000000","message":"Possibly need the dreaded (_ here?\n\n task.fail(_(exc.message))","commit_id":"f1794e15cd469a1b91f2e4fe37ff80e4b471024d"},{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"1ad09059e00c2ca7f0681fc4d504d92ba1085bdf","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                max_workers\u003dCONF.taskflow_executor.max_workers)"},{"line_number":135,"context_line":"            with llistener.DynamicLoggingListener(engine, log\u003dLOG):"},{"line_number":136,"context_line":"                engine.run()"},{"line_number":137,"context_line":"        except exception.UploadException as exc:"},{"line_number":138,"context_line":"            task.fail(encodeutils.exception_to_unicode(exc))"},{"line_number":139,"context_line":"            self.task_repo.save(task)"},{"line_number":140,"context_line":"        except Exception as exc:"},{"line_number":141,"context_line":"            with excutils.save_and_reraise_exception():"},{"line_number":142,"context_line":"                LOG.error(_LE(\u0027Failed to execute task %(task_id)s: %(exc)s\u0027) %"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_1368fff4","line":139,"range":{"start_line":137,"start_character":8,"end_line":139,"end_character":37},"updated":"2016-03-21 16:07:41.000000000","message":"this doesn\u0027t look like this is tested.","commit_id":"c320145c9da262a71e518242a21c7392f0a7ea8c"}],"glance/tests/unit/async/test_taskflow_executor.py":[{"author":{"_account_id":17123,"name":"Tom Cocozzello (tjcocozz)","email":"tjcocozz@us.ibm.com","username":"tcocozzello"},"change_message_id":"1ad09059e00c2ca7f0681fc4d504d92ba1085bdf","unresolved":false,"context_lines":[{"line_number":92,"context_line":""},{"line_number":93,"context_line":"    def test_task_fail_upload(self):"},{"line_number":94,"context_line":"        with mock.patch.object(image_import, \u0027set_image_data\u0027) as import_mock:"},{"line_number":95,"context_line":"            import_mock.side_effect \u003d Exception"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":"            self.task_repo.get.return_value \u003d self.task"},{"line_number":98,"context_line":"            self.executor.begin_processing(self.task.task_id)"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa0719c6_93740fd0","line":95,"range":{"start_line":95,"start_character":38,"end_line":95,"end_character":47},"updated":"2016-03-21 16:07:41.000000000","message":"shouldn\u0027t this be raising an `UploadException`","commit_id":"c320145c9da262a71e518242a21c7392f0a7ea8c"}]}
