)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"418a67ee43812c60c2972b80bfdc38123b24a062","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Rajesh Tailor \u003crajesh.tailor@nttdata.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-12-07 23:24:33 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Handle non-exist URL, create-image with location"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"glance doesn\u0027t catch NotFound exception when --location parameter"},{"line_number":10,"context_line":"is used with non-exist http store URL."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1a930d6b_35fa9075","line":7,"updated":"2015-01-23 22:29:39.000000000","message":"What do you think about rewording this a bit to be something like \"Handle location URLs that 404 in create-image\"","commit_id":"1d37153face1280628daa5db5973f17a3035560e"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"d0ac0dd8cf76e496dc6ce86d0ac9111d538e0f99","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Rajesh Tailor \u003crajesh.tailor@nttdata.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-12-07 23:24:33 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Handle non-exist URL, create-image with location"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"glance doesn\u0027t catch NotFound exception when --location parameter"},{"line_number":10,"context_line":"is used with non-exist http store URL."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"1a930d6b_f357e9c7","line":7,"in_reply_to":"1a930d6b_35fa9075","updated":"2015-01-27 14:12:56.000000000","message":"Done","commit_id":"1d37153face1280628daa5db5973f17a3035560e"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"c1c918f7fa52c365616eb32f9c916bac5a648b1d","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Rajesh Tailor \u003crajesh.tailor@nttdata.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-02-02 01:54:38 -0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Handle location URLs that 404 in create-image"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"glance doesn\u0027t catch NotFound exception when --location parameter"},{"line_number":10,"context_line":"is used with non-exist http store URL."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da86d52c_9576d1d5","line":7,"updated":"2015-02-04 15:57:37.000000000","message":"Title is odd. Let it be like \"Raise an appropriate exception if store location\u0027s not found\" or something.","commit_id":"6377faa31601185f8b815731ec53635ceb54bdf6"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"c1c918f7fa52c365616eb32f9c916bac5a648b1d","unresolved":false,"context_lines":[{"line_number":7,"context_line":"Handle location URLs that 404 in create-image"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"glance doesn\u0027t catch NotFound exception when --location parameter"},{"line_number":10,"context_line":"is used with non-exist http store URL."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"If the URL returns HTTP 404, glance is just ignoring it and returns"},{"line_number":13,"context_line":"image-size as zero."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da86d52c_263fc189","line":10,"updated":"2015-02-04 15:57:37.000000000","message":"Nit: \"Glance\" with capital G","commit_id":"6377faa31601185f8b815731ec53635ceb54bdf6"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"c1c918f7fa52c365616eb32f9c916bac5a648b1d","unresolved":false,"context_lines":[{"line_number":12,"context_line":"If the URL returns HTTP 404, glance is just ignoring it and returns"},{"line_number":13,"context_line":"image-size as zero."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"while getting the image-size caught NotFound exception as well"},{"line_number":16,"context_line":"if location parameter is specified."},{"line_number":17,"context_line":""},{"line_number":18,"context_line":"Change-Id: I9ffad7666c6e64c007c9938684903aed44e60151"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da86d52c_063abd98","line":15,"updated":"2015-02-04 15:57:37.000000000","message":"ditto \"While\"","commit_id":"6377faa31601185f8b815731ec53635ceb54bdf6"}],"glance/api/v1/images.py":[{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"4d9338adf3cf44014f59e4f45646d8eae87a55dc","unresolved":false,"context_lines":[{"line_number":722,"context_line":"            return (image_meta.get(\u0027size\u0027, 0) or"},{"line_number":723,"context_line":"                    store.get_size_from_backend(location, context\u003dcontext))"},{"line_number":724,"context_line":"        except store.NotFound as e:"},{"line_number":725,"context_line":"            LOG.debug(e)"},{"line_number":726,"context_line":"            raise HTTPNotFound(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":727,"context_line":"        except store.BadStoreUri as e:"},{"line_number":728,"context_line":"            LOG.debug(e)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_2a1a18cc","line":725,"updated":"2015-01-26 05:25:22.000000000","message":"Prefer to use: LOG.debug(utils.exception_to_str(e))","commit_id":"1d37153face1280628daa5db5973f17a3035560e"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"d0ac0dd8cf76e496dc6ce86d0ac9111d538e0f99","unresolved":false,"context_lines":[{"line_number":722,"context_line":"            return (image_meta.get(\u0027size\u0027, 0) or"},{"line_number":723,"context_line":"                    store.get_size_from_backend(location, context\u003dcontext))"},{"line_number":724,"context_line":"        except store.NotFound as e:"},{"line_number":725,"context_line":"            LOG.debug(e)"},{"line_number":726,"context_line":"            raise HTTPNotFound(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":727,"context_line":"        except store.BadStoreUri as e:"},{"line_number":728,"context_line":"            LOG.debug(e)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_3375f163","line":725,"in_reply_to":"1a930d6b_2a1a18cc","updated":"2015-01-27 14:12:56.000000000","message":"Done","commit_id":"1d37153face1280628daa5db5973f17a3035560e"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"4d9338adf3cf44014f59e4f45646d8eae87a55dc","unresolved":false,"context_lines":[{"line_number":725,"context_line":"            LOG.debug(e)"},{"line_number":726,"context_line":"            raise HTTPNotFound(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":727,"context_line":"        except store.BadStoreUri as e:"},{"line_number":728,"context_line":"            LOG.debug(e)"},{"line_number":729,"context_line":"            raise HTTPBadRequest(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"    def _handle_source(self, req, image_id, image_meta, image_data):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_4a0be47c","line":728,"updated":"2015-01-26 05:25:22.000000000","message":"ditto","commit_id":"1d37153face1280628daa5db5973f17a3035560e"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"d0ac0dd8cf76e496dc6ce86d0ac9111d538e0f99","unresolved":false,"context_lines":[{"line_number":725,"context_line":"            LOG.debug(e)"},{"line_number":726,"context_line":"            raise HTTPNotFound(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":727,"context_line":"        except store.BadStoreUri as e:"},{"line_number":728,"context_line":"            LOG.debug(e)"},{"line_number":729,"context_line":"            raise HTTPBadRequest(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":730,"context_line":""},{"line_number":731,"context_line":"    def _handle_source(self, req, image_id, image_meta, image_data):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_736bf984","line":728,"in_reply_to":"1a930d6b_4a0be47c","updated":"2015-01-27 14:12:56.000000000","message":"Done","commit_id":"1d37153face1280628daa5db5973f17a3035560e"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"86fd730b6f41cb1992fe1b2ba9d685fafaacbd99","unresolved":false,"context_lines":[{"line_number":416,"context_line":"    @staticmethod"},{"line_number":417,"context_line":"    def _validate_source(source, req):"},{"line_number":418,"context_line":"        \"\"\""},{"line_number":419,"context_line":"        To validate if external sources (as specified via the location"},{"line_number":420,"context_line":"        or copy-from headers) are supported. Otherwise we reject"},{"line_number":421,"context_line":"        with 400 \"Bad Request\"."},{"line_number":422,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_3124040c","line":419,"updated":"2015-01-27 16:33:23.000000000","message":"Remove \"To\" and capitalize the \"V\" in \"validate\" please","commit_id":"f8a34735b492e1f84fd2fc4a0aa701a42fa76d81"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"77ee3f097c098c53ec036a5b4816a255985174f5","unresolved":false,"context_lines":[{"line_number":416,"context_line":"    @staticmethod"},{"line_number":417,"context_line":"    def _validate_source(source, req):"},{"line_number":418,"context_line":"        \"\"\""},{"line_number":419,"context_line":"        To validate if external sources (as specified via the location"},{"line_number":420,"context_line":"        or copy-from headers) are supported. Otherwise we reject"},{"line_number":421,"context_line":"        with 400 \"Bad Request\"."},{"line_number":422,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa81d914_0ff969e9","line":419,"in_reply_to":"1a930d6b_3124040c","updated":"2015-01-28 11:43:08.000000000","message":"This change is not related to this bug, i need to submit separate patch for this.","commit_id":"f8a34735b492e1f84fd2fc4a0aa701a42fa76d81"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"88b188c94a4fc44db008576db172f6b51923f452","unresolved":false,"context_lines":[{"line_number":416,"context_line":"    @staticmethod"},{"line_number":417,"context_line":"    def _validate_source(source, req):"},{"line_number":418,"context_line":"        \"\"\""},{"line_number":419,"context_line":"        To validate if external sources (as specified via the location"},{"line_number":420,"context_line":"        or copy-from headers) are supported. Otherwise we reject"},{"line_number":421,"context_line":"        with 400 \"Bad Request\"."},{"line_number":422,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa81d914_7472ae7d","line":419,"in_reply_to":"fa81d914_0ff969e9","updated":"2015-01-28 16:14:35.000000000","message":"Sorry about this. I was comparing patchsets 2 and 3. This was added between those so I mistook them for your changes. Comparing back to base shows they\u0027re not in fact your changes. Disregard this entirely","commit_id":"f8a34735b492e1f84fd2fc4a0aa701a42fa76d81"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"86fd730b6f41cb1992fe1b2ba9d685fafaacbd99","unresolved":false,"context_lines":[{"line_number":424,"context_line":"            if store_utils.validate_external_location(source):"},{"line_number":425,"context_line":"                return source"},{"line_number":426,"context_line":"            else:"},{"line_number":427,"context_line":"                msg \u003d _(\"External source are not supported: \u0027%s\u0027\") % source"},{"line_number":428,"context_line":"                LOG.warn(msg)"},{"line_number":429,"context_line":"                raise HTTPBadRequest(explanation\u003dmsg,"},{"line_number":430,"context_line":"                                     request\u003dreq,"}],"source_content_type":"text/x-python","patch_set":3,"id":"1a930d6b_511fd0b6","line":427,"updated":"2015-01-27 16:33:23.000000000","message":"Either:\n\n    External sources are\n\nOr:\n\n    External source is\n\nI\u0027d prefer the first","commit_id":"f8a34735b492e1f84fd2fc4a0aa701a42fa76d81"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"77ee3f097c098c53ec036a5b4816a255985174f5","unresolved":false,"context_lines":[{"line_number":424,"context_line":"            if store_utils.validate_external_location(source):"},{"line_number":425,"context_line":"                return source"},{"line_number":426,"context_line":"            else:"},{"line_number":427,"context_line":"                msg \u003d _(\"External source are not supported: \u0027%s\u0027\") % source"},{"line_number":428,"context_line":"                LOG.warn(msg)"},{"line_number":429,"context_line":"                raise HTTPBadRequest(explanation\u003dmsg,"},{"line_number":430,"context_line":"                                     request\u003dreq,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa81d914_4fda8179","line":427,"in_reply_to":"1a930d6b_511fd0b6","updated":"2015-01-28 11:43:08.000000000","message":"This change is not related to this bug, i need to submit separate patch for this.","commit_id":"f8a34735b492e1f84fd2fc4a0aa701a42fa76d81"},{"author":{"_account_id":7487,"name":"hzrandd","email":"82433422@qq.com","username":"hzrandd"},"change_message_id":"535a9d205a511cbd2cd4ece36787d4e75b38b564","unresolved":false,"context_lines":[{"line_number":424,"context_line":"            if store_utils.validate_external_location(source):"},{"line_number":425,"context_line":"                return source"},{"line_number":426,"context_line":"            else:"},{"line_number":427,"context_line":"                msg \u003d _(\"External source are not supported: \u0027%s\u0027\") % source"},{"line_number":428,"context_line":"                LOG.warn(msg)"},{"line_number":429,"context_line":"                raise HTTPBadRequest(explanation\u003dmsg,"},{"line_number":430,"context_line":"                                     request\u003dreq,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa81d914_baf4ebcf","line":427,"in_reply_to":"fa81d914_4fda8179","updated":"2015-01-29 07:14:34.000000000","message":"hzrandd\n\nDear, please look at: https://review.openstack.org/#/c/151129/\n\nand then you can do what you want.","commit_id":"f8a34735b492e1f84fd2fc4a0aa701a42fa76d81"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"0edc274c0e76a92ffe8703e44a38e9d6ffbdd631","unresolved":false,"context_lines":[{"line_number":716,"context_line":"                    store.get_size_from_backend(location, context\u003dcontext))"},{"line_number":717,"context_line":"        except store.NotFound as e:"},{"line_number":718,"context_line":"            LOG.debug(utils.exception_to_str(e))"},{"line_number":719,"context_line":"            raise HTTPNotFound(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":720,"context_line":"        except store.BadStoreUri as e:"},{"line_number":721,"context_line":"            LOG.debug(utils.exception_to_str(e))"},{"line_number":722,"context_line":"            raise HTTPBadRequest(explanation\u003de.msg, content_type\u003d\"text/plain\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_54905fec","line":719,"updated":"2015-02-01 23:15:23.000000000","message":"I don\u0027t think it\u0027s a good idea to raise the default message of NotFound exception. Because the default message of NotFound is \"Image %(image)s not found\", and we always use it for error when get/delete/update operations, in other words, the \"Image\" in the message is talking about image in Glance instead of the image file in the location. So I would suggest reword the message at here to avoid confusing for the end user.","commit_id":"f8a34735b492e1f84fd2fc4a0aa701a42fa76d81"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"65cc45101194ac47b278d63e3b2340f4e7f7cc96","unresolved":false,"context_lines":[{"line_number":716,"context_line":"                    store.get_size_from_backend(location, context\u003dcontext))"},{"line_number":717,"context_line":"        except store.NotFound as e:"},{"line_number":718,"context_line":"            LOG.debug(utils.exception_to_str(e))"},{"line_number":719,"context_line":"            raise HTTPNotFound(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":720,"context_line":"        except store.BadStoreUri as e:"},{"line_number":721,"context_line":"            LOG.debug(utils.exception_to_str(e))"},{"line_number":722,"context_line":"            raise HTTPBadRequest(explanation\u003de.msg, content_type\u003d\"text/plain\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_1d697e25","line":719,"in_reply_to":"da86d52c_0e95e63f","updated":"2015-02-02 21:11:40.000000000","message":"Cool, thanks for the clarification.","commit_id":"f8a34735b492e1f84fd2fc4a0aa701a42fa76d81"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"2567032aa73dee9543426ee007ff681ea5b0f6e7","unresolved":false,"context_lines":[{"line_number":716,"context_line":"                    store.get_size_from_backend(location, context\u003dcontext))"},{"line_number":717,"context_line":"        except store.NotFound as e:"},{"line_number":718,"context_line":"            LOG.debug(utils.exception_to_str(e))"},{"line_number":719,"context_line":"            raise HTTPNotFound(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":720,"context_line":"        except store.BadStoreUri as e:"},{"line_number":721,"context_line":"            LOG.debug(utils.exception_to_str(e))"},{"line_number":722,"context_line":"            raise HTTPBadRequest(explanation\u003de.msg, content_type\u003d\"text/plain\")"}],"source_content_type":"text/x-python","patch_set":3,"id":"da86d52c_0e95e63f","line":719,"in_reply_to":"da86d52c_54905fec","updated":"2015-02-02 09:51:22.000000000","message":"Hi Fei,\n\nHere the default message of NotFound is not getting logged.\nWe will get \"HTTP datastore could not find image at URI.\" message for NotFound exception in this case, which is raised from glance_store/_drivers/http.py module.\n\nplease refer: https://github.com/openstack/glance_store/blob/master/glance_store/_drivers/http.py#L183","commit_id":"f8a34735b492e1f84fd2fc4a0aa701a42fa76d81"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"d792ceec5f8af0a3094645aaa22fcc8e9d6a2fff","unresolved":false,"context_lines":[{"line_number":715,"context_line":"            return (image_meta.get(\u0027size\u0027, 0) or"},{"line_number":716,"context_line":"                    store.get_size_from_backend(location, context\u003dcontext))"},{"line_number":717,"context_line":"        except store.NotFound as e:"},{"line_number":718,"context_line":"            LOG.debug(utils.exception_to_str(e))"},{"line_number":719,"context_line":"            raise HTTPNotFound(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":720,"context_line":"        except store.BadStoreUri as e:"},{"line_number":721,"context_line":"            LOG.debug(utils.exception_to_str(e))"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_15093a95","line":718,"updated":"2015-02-23 20:25:40.000000000","message":"why not use LOG.exception ?","commit_id":"6875d85db3017dcca61c8470ba2f085b858b48ff"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"3e544544057088c524366825f2520b479e1c229e","unresolved":false,"context_lines":[{"line_number":715,"context_line":"            return (image_meta.get(\u0027size\u0027, 0) or"},{"line_number":716,"context_line":"                    store.get_size_from_backend(location, context\u003dcontext))"},{"line_number":717,"context_line":"        except store.NotFound as e:"},{"line_number":718,"context_line":"            LOG.debug(utils.exception_to_str(e))"},{"line_number":719,"context_line":"            raise HTTPNotFound(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":720,"context_line":"        except store.BadStoreUri as e:"},{"line_number":721,"context_line":"            LOG.debug(utils.exception_to_str(e))"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_cd99cb20","line":718,"in_reply_to":"ba7be1f8_15093a95","updated":"2015-02-24 07:05:31.000000000","message":"Hi Nikhil,\n\nThis exception is generated only when user tries to create-image using non-existent location url.\n\nIf we replace debug with exception, in that case the log file might be flooded with exception log messages if malicious user\nkeeps on trying image-create using non-existent location url. Administrator can disable debug log messages but not exception log messages.","commit_id":"6875d85db3017dcca61c8470ba2f085b858b48ff"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"5fc084e1e39188f57c8b0a00431d45de037db284","unresolved":false,"context_lines":[{"line_number":715,"context_line":"            return (image_meta.get(\u0027size\u0027, 0) or"},{"line_number":716,"context_line":"                    store.get_size_from_backend(location, context\u003dcontext))"},{"line_number":717,"context_line":"        except store.NotFound as e:"},{"line_number":718,"context_line":"            LOG.debug(utils.exception_to_str(e))"},{"line_number":719,"context_line":"            raise HTTPNotFound(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":720,"context_line":"        except store.BadStoreUri as e:"},{"line_number":721,"context_line":"            LOG.debug(utils.exception_to_str(e))"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_8fea2b0d","line":718,"in_reply_to":"ba7be1f8_6671a40b","updated":"2015-03-03 16:59:12.000000000","message":"We should add a not here then because otherwise, the new openstack logging guidelines will be implemented here by someone and these will be updated.\n\nNote, that isn\u0027t to say I agree with the reasoning, just that to prevent this for changing (if it is really considered a valid reason) we should add comments to that effect.","commit_id":"6875d85db3017dcca61c8470ba2f085b858b48ff"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"6cf0774849c8ec6373bc6a66ac59ddd4bba00b06","unresolved":false,"context_lines":[{"line_number":715,"context_line":"            return (image_meta.get(\u0027size\u0027, 0) or"},{"line_number":716,"context_line":"                    store.get_size_from_backend(location, context\u003dcontext))"},{"line_number":717,"context_line":"        except store.NotFound as e:"},{"line_number":718,"context_line":"            LOG.debug(utils.exception_to_str(e))"},{"line_number":719,"context_line":"            raise HTTPNotFound(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":720,"context_line":"        except store.BadStoreUri as e:"},{"line_number":721,"context_line":"            LOG.debug(utils.exception_to_str(e))"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a80dd14_2d79f993","line":718,"in_reply_to":"ba7be1f8_8fea2b0d","updated":"2015-03-04 06:23:15.000000000","message":"Done","commit_id":"6875d85db3017dcca61c8470ba2f085b858b48ff"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"6e1ec2181198d2ff9fe0fbaf7fd2205c343bcc87","unresolved":false,"context_lines":[{"line_number":715,"context_line":"            return (image_meta.get(\u0027size\u0027, 0) or"},{"line_number":716,"context_line":"                    store.get_size_from_backend(location, context\u003dcontext))"},{"line_number":717,"context_line":"        except store.NotFound as e:"},{"line_number":718,"context_line":"            LOG.debug(utils.exception_to_str(e))"},{"line_number":719,"context_line":"            raise HTTPNotFound(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":720,"context_line":"        except store.BadStoreUri as e:"},{"line_number":721,"context_line":"            LOG.debug(utils.exception_to_str(e))"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_6671a40b","line":718,"in_reply_to":"ba7be1f8_cd99cb20","updated":"2015-03-03 16:24:37.000000000","message":"OK, thanks for the clarification. Makes sense.\n\nIn the interest of this becoming a clutter and for avoiding augmenting of logs, debug sounds like a good approach.","commit_id":"6875d85db3017dcca61c8470ba2f085b858b48ff"},{"author":{"_account_id":2537,"name":"Nikhil Komawar","email":"nik.komawar@gmail.com","username":"nikhil-komawar"},"change_message_id":"d792ceec5f8af0a3094645aaa22fcc8e9d6a2fff","unresolved":false,"context_lines":[{"line_number":718,"context_line":"            LOG.debug(utils.exception_to_str(e))"},{"line_number":719,"context_line":"            raise HTTPNotFound(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":720,"context_line":"        except store.BadStoreUri as e:"},{"line_number":721,"context_line":"            LOG.debug(utils.exception_to_str(e))"},{"line_number":722,"context_line":"            raise HTTPBadRequest(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":723,"context_line":""},{"line_number":724,"context_line":"    def _handle_source(self, req, image_id, image_meta, image_data):"}],"source_content_type":"text/x-python","patch_set":6,"id":"ba7be1f8_b5f30e9d","line":721,"updated":"2015-02-23 20:25:40.000000000","message":"ditto","commit_id":"6875d85db3017dcca61c8470ba2f085b858b48ff"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"90ce8677493d1b2d81183c470bc13f31e4d87f49","unresolved":false,"context_lines":[{"line_number":728,"context_line":"            LOG.debug(utils.exception_to_str(e))"},{"line_number":729,"context_line":"            raise HTTPNotFound(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":730,"context_line":"        except store.BadStoreUri as e:"},{"line_number":731,"context_line":"            # NOTE(rajesht): The exception is logged as debug message because"},{"line_number":732,"context_line":"            # the image is located at third-party server and it has nothing to"},{"line_number":733,"context_line":"            # do with glance. If log.exception is used here, in that case the"},{"line_number":734,"context_line":"            # log file might be flooded with exception log messages if"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_db254a5d","line":731,"updated":"2015-03-11 10:32:31.000000000","message":"I\u0027m Ok with the code change, but not really comfortable with the duplicated NOTE. At least, I never see this kind of dup comments in other places. How about remove this or just say \u0027See above note of store.NotFound\u0027.","commit_id":"3e1081d0039eb47097fc7abe03cb07b5e1a92709"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"eea3a7d1fa7ba66ecc1e9f071476d42d73a5237d","unresolved":false,"context_lines":[{"line_number":728,"context_line":"            LOG.debug(utils.exception_to_str(e))"},{"line_number":729,"context_line":"            raise HTTPNotFound(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":730,"context_line":"        except store.BadStoreUri as e:"},{"line_number":731,"context_line":"            # NOTE(rajesht): The exception is logged as debug message because"},{"line_number":732,"context_line":"            # the image is located at third-party server and it has nothing to"},{"line_number":733,"context_line":"            # do with glance. If log.exception is used here, in that case the"},{"line_number":734,"context_line":"            # log file might be flooded with exception log messages if"}],"source_content_type":"text/x-python","patch_set":8,"id":"9a80dd14_18360304","line":731,"in_reply_to":"9a80dd14_db254a5d","updated":"2015-03-11 12:03:23.000000000","message":"Done","commit_id":"3e1081d0039eb47097fc7abe03cb07b5e1a92709"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"b606123018d0a692d353bdca4848719350811485","unresolved":false,"context_lines":[{"line_number":726,"context_line":"            # malicious user keeps on trying image-create using non-existent"},{"line_number":727,"context_line":"            # location url. Used log.debug because administrator can"},{"line_number":728,"context_line":"            # disable debug logs."},{"line_number":729,"context_line":"            LOG.debug(utils.exception_to_str(e))"},{"line_number":730,"context_line":"            raise HTTPNotFound(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":731,"context_line":"        except store.BadStoreUri as e:"},{"line_number":732,"context_line":"            # NOTE(rajesht): See above note of store.NotFound"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a80dd14_a77e4668","line":729,"updated":"2015-03-13 11:31:18.000000000","message":"nit: is there an useless tab?","commit_id":"cfa55973d9089f030585f304121f1425a8e1f356"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"cdc7b52de06f6d6ffe5467ce877da5e43cd741a1","unresolved":false,"context_lines":[{"line_number":726,"context_line":"            # malicious user keeps on trying image-create using non-existent"},{"line_number":727,"context_line":"            # location url. Used log.debug because administrator can"},{"line_number":728,"context_line":"            # disable debug logs."},{"line_number":729,"context_line":"            LOG.debug(utils.exception_to_str(e))"},{"line_number":730,"context_line":"            raise HTTPNotFound(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":731,"context_line":"        except store.BadStoreUri as e:"},{"line_number":732,"context_line":"            # NOTE(rajesht): See above note of store.NotFound"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a80dd14_61423eac","line":729,"in_reply_to":"9a80dd14_422738b6","updated":"2015-03-16 05:49:10.000000000","message":"Oh, it looks better in my PC chrome, I\u0027m interested in why I can see a useless indent in my iOS edition..","commit_id":"cfa55973d9089f030585f304121f1425a8e1f356"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"427b12713ffff742b1aa4c8dec1bd69cdf9f447c","unresolved":false,"context_lines":[{"line_number":726,"context_line":"            # malicious user keeps on trying image-create using non-existent"},{"line_number":727,"context_line":"            # location url. Used log.debug because administrator can"},{"line_number":728,"context_line":"            # disable debug logs."},{"line_number":729,"context_line":"            LOG.debug(utils.exception_to_str(e))"},{"line_number":730,"context_line":"            raise HTTPNotFound(explanation\u003de.msg, content_type\u003d\"text/plain\")"},{"line_number":731,"context_line":"        except store.BadStoreUri as e:"},{"line_number":732,"context_line":"            # NOTE(rajesht): See above note of store.NotFound"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a80dd14_422738b6","line":729,"in_reply_to":"9a80dd14_a77e4668","updated":"2015-03-13 11:50:46.000000000","message":"No, I don\u0027t think so.","commit_id":"cfa55973d9089f030585f304121f1425a8e1f356"}],"glance/tests/functional/v1/test_copy_to_file.py":[{"author":{"_account_id":8158,"name":"Hemanth Makkapati","email":"makstacker+osgerrit@gmail.com","username":"hemanth.makkapati"},"change_message_id":"1e651f1c7e5b28084844b377012893f9e75d4d6e","unresolved":false,"context_lines":[{"line_number":217,"context_line":""},{"line_number":218,"context_line":"    @skip_if_disabled"},{"line_number":219,"context_line":"    def test_copy_from_http_exists(self):"},{"line_number":220,"context_line":"        self._do_test_copy_from_http()"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"    @skip_if_disabled"},{"line_number":223,"context_line":"    def test_copy_from_http_nonexistent_raises_NotFound(self):"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_3d9bd0ca","line":220,"updated":"2014-12-08 03:10:10.000000000","message":"Since \u0027_do_test_copy_from_http\u0027 is now used only from this test case, why don\u0027t we get rid of it and move the test code in here?","commit_id":"798844d30b9329cc862577f342cfb4f4f5d8e18a"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"9c297fa2593347ffb92bae3d80da5f0f744886b5","unresolved":false,"context_lines":[{"line_number":228,"context_line":"                   \u0027X-Image-Meta-container_format\u0027: \u0027ovf\u0027,"},{"line_number":229,"context_line":"                   \u0027X-Image-Meta-Is-Public\u0027: \u0027True\u0027,"},{"line_number":230,"context_line":"                   \u0027X-Glance-API-Copy-From\u0027: copy_from}"},{"line_number":231,"context_line":"        path \u003d \"http://%s:%d/v1/images\" % (\"127.0.0.1\", self.api_port)"},{"line_number":232,"context_line":"        http \u003d httplib2.Http()"},{"line_number":233,"context_line":"        response, content \u003d http.request(path, \u0027POST\u0027, headers\u003dheaders)"},{"line_number":234,"context_line":"        self.assertEqual(404, response.status, content)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_18761b3f","line":231,"updated":"2014-12-08 10:46:40.000000000","message":"I\u0027d move url-forming to a separate class method (like it is done in v2/test_images.py, for example).\n\ndef _url(self, path):                                                        \n    return \u0027http://127.0.0.1:%d%s\u0027 % (self.api_port, path)","commit_id":"1d37153face1280628daa5db5973f17a3035560e"},{"author":{"_account_id":11356,"name":"Louis Taylor","email":"louis@kragniz.eu","username":"kragniz"},"change_message_id":"4790e0cc0b919385841527fa7d32f64c59e527ed","unresolved":false,"context_lines":[{"line_number":228,"context_line":"                   \u0027X-Image-Meta-container_format\u0027: \u0027ovf\u0027,"},{"line_number":229,"context_line":"                   \u0027X-Image-Meta-Is-Public\u0027: \u0027True\u0027,"},{"line_number":230,"context_line":"                   \u0027X-Glance-API-Copy-From\u0027: copy_from}"},{"line_number":231,"context_line":"        path \u003d \"http://%s:%d/v1/images\" % (\"127.0.0.1\", self.api_port)"},{"line_number":232,"context_line":"        http \u003d httplib2.Http()"},{"line_number":233,"context_line":"        response, content \u003d http.request(path, \u0027POST\u0027, headers\u003dheaders)"},{"line_number":234,"context_line":"        self.assertEqual(404, response.status, content)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_331778ef","line":231,"in_reply_to":"3a961159_18761b3f","updated":"2014-12-08 11:21:06.000000000","message":"I don\u0027t think that is necessary, since that would involve refactoring the rest of the url construction in this class. Because this is v1 code, adding that noise isn\u0027t worth the extra code cleanliness.","commit_id":"1d37153face1280628daa5db5973f17a3035560e"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"62a744294d74b7dcde3ad5d07ad52364702a743a","unresolved":false,"context_lines":[{"line_number":228,"context_line":"                   \u0027X-Image-Meta-container_format\u0027: \u0027ovf\u0027,"},{"line_number":229,"context_line":"                   \u0027X-Image-Meta-Is-Public\u0027: \u0027True\u0027,"},{"line_number":230,"context_line":"                   \u0027X-Glance-API-Copy-From\u0027: copy_from}"},{"line_number":231,"context_line":"        path \u003d \"http://%s:%d/v1/images\" % (\"127.0.0.1\", self.api_port)"},{"line_number":232,"context_line":"        http \u003d httplib2.Http()"},{"line_number":233,"context_line":"        response, content \u003d http.request(path, \u0027POST\u0027, headers\u003dheaders)"},{"line_number":234,"context_line":"        self.assertEqual(404, response.status, content)"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_e5b527ce","line":231,"in_reply_to":"3a961159_331778ef","updated":"2014-12-08 11:58:23.000000000","message":"Gosh, I\u0027m making the same mistake again by trying to refactor v1 code. Thanks, Louis, you are right.","commit_id":"1d37153face1280628daa5db5973f17a3035560e"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"418a67ee43812c60c2972b80bfdc38123b24a062","unresolved":false,"context_lines":[{"line_number":228,"context_line":"                   \u0027X-Image-Meta-container_format\u0027: \u0027ovf\u0027,"},{"line_number":229,"context_line":"                   \u0027X-Image-Meta-Is-Public\u0027: \u0027True\u0027,"},{"line_number":230,"context_line":"                   \u0027X-Glance-API-Copy-From\u0027: copy_from}"},{"line_number":231,"context_line":"        path \u003d \"http://%s:%d/v1/images\" % (\"127.0.0.1\", self.api_port)"},{"line_number":232,"context_line":"        http \u003d httplib2.Http()"},{"line_number":233,"context_line":"        response, content \u003d http.request(path, \u0027POST\u0027, headers\u003dheaders)"},{"line_number":234,"context_line":"        self.assertEqual(404, response.status, content)"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_b59760eb","line":231,"in_reply_to":"3a961159_e5b527ce","updated":"2015-01-23 22:29:39.000000000","message":"v1 tests aren\u0027t necessarily out of the question for helpful refactors like this. \u003dP","commit_id":"1d37153face1280628daa5db5973f17a3035560e"},{"author":{"_account_id":13717,"name":"Inessa Vasilevskaya","email":"ivasilevskaya@mirantis.com","username":"ivasilevskaya"},"change_message_id":"9c297fa2593347ffb92bae3d80da5f0f744886b5","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        expected \u003d \u0027HTTP datastore could not find image at URI.\u0027"},{"line_number":237,"context_line":"        msg \u003d \u0027expected \"%s\" in \"%s\"\u0027 % (expected, content)"},{"line_number":238,"context_line":"        self.assertTrue(expected in content, msg)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    @skip_if_disabled"},{"line_number":241,"context_line":"    def test_copy_from_file(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a961159_d8d013fa","line":238,"updated":"2014-12-08 10:46:40.000000000","message":"the code will be easier to read if you use self.assertIn","commit_id":"1d37153face1280628daa5db5973f17a3035560e"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"d0ac0dd8cf76e496dc6ce86d0ac9111d538e0f99","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        expected \u003d \u0027HTTP datastore could not find image at URI.\u0027"},{"line_number":237,"context_line":"        msg \u003d \u0027expected \"%s\" in \"%s\"\u0027 % (expected, content)"},{"line_number":238,"context_line":"        self.assertTrue(expected in content, msg)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    @skip_if_disabled"},{"line_number":241,"context_line":"    def test_copy_from_file(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_b30801db","line":238,"in_reply_to":"1a930d6b_3528d0e1","updated":"2015-01-27 14:12:56.000000000","message":"Done","commit_id":"1d37153face1280628daa5db5973f17a3035560e"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"418a67ee43812c60c2972b80bfdc38123b24a062","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        expected \u003d \u0027HTTP datastore could not find image at URI.\u0027"},{"line_number":237,"context_line":"        msg \u003d \u0027expected \"%s\" in \"%s\"\u0027 % (expected, content)"},{"line_number":238,"context_line":"        self.assertTrue(expected in content, msg)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    @skip_if_disabled"},{"line_number":241,"context_line":"    def test_copy_from_file(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_3528d0e1","line":238,"in_reply_to":"3a961159_d8d013fa","updated":"2015-01-23 22:29:39.000000000","message":"+1 for using assertIn","commit_id":"1d37153face1280628daa5db5973f17a3035560e"},{"author":{"_account_id":10795,"name":"Rajesh Tailor","email":"tailor.rajesh88@gmail.com","username":"rajeshtailor"},"change_message_id":"d0ac0dd8cf76e496dc6ce86d0ac9111d538e0f99","unresolved":false,"context_lines":[{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        expected \u003d \u0027HTTP datastore could not find image at URI.\u0027"},{"line_number":237,"context_line":"        msg \u003d \u0027expected \"%s\" in \"%s\"\u0027 % (expected, content)"},{"line_number":238,"context_line":"        self.assertTrue(expected in content, msg)"},{"line_number":239,"context_line":""},{"line_number":240,"context_line":"    @skip_if_disabled"},{"line_number":241,"context_line":"    def test_copy_from_file(self):"}],"source_content_type":"text/x-python","patch_set":2,"id":"1a930d6b_9366a5b9","line":238,"in_reply_to":"3a961159_d8d013fa","updated":"2015-01-27 14:12:56.000000000","message":"Done","commit_id":"1d37153face1280628daa5db5973f17a3035560e"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"c1c918f7fa52c365616eb32f9c916bac5a648b1d","unresolved":false,"context_lines":[{"line_number":212,"context_line":"        self.stop_servers()"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    @skip_if_disabled"},{"line_number":215,"context_line":"    def test_copy_from_http_nonexistent_raises_NotFound(self):"},{"line_number":216,"context_line":"        self.cleanup()"},{"line_number":217,"context_line":""},{"line_number":218,"context_line":"        self.start_servers(**self.__dict__.copy())"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_553e188d","line":215,"updated":"2015-02-04 15:57:37.000000000","message":"\"_raises_NotFound\" is not necessary in the title. You need to succinctly describe what is happening in the test, not the result.","commit_id":"6377faa31601185f8b815731ec53635ceb54bdf6"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"c1c918f7fa52c365616eb32f9c916bac5a648b1d","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        self.assertEqual(404, response.status, content)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        expected \u003d \u0027HTTP datastore could not find image at URI.\u0027"},{"line_number":237,"context_line":"        self.assertIn(expected, content)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    @skip_if_disabled"},{"line_number":240,"context_line":"    def test_copy_from_file(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_f51aac6d","line":237,"updated":"2015-02-04 15:57:37.000000000","message":"You have to stop the servers after execution.\n\nself.stop_servers()","commit_id":"6377faa31601185f8b815731ec53635ceb54bdf6"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"b63ac4920dc5ce71b84740245b3525ab92b0fe5b","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        self.assertEqual(404, response.status, content)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        expected \u003d \u0027HTTP datastore could not find image at URI.\u0027"},{"line_number":237,"context_line":"        self.assertIn(expected, content)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    @skip_if_disabled"},{"line_number":240,"context_line":"    def test_copy_from_file(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_192f4ef8","line":237,"in_reply_to":"da86d52c_ad3fe0b2","updated":"2015-02-05 15:00:12.000000000","message":"Yeah, I just saw it. My  idea was that it\u0027s done in current implementation in method _do_test_copy_from_http on the line 220. So, both tests test_copy_from_http_exists and test_copy_from_http_nonexistent execute it.\n\nIn this commit it\u0027s executed only once in test_copy_from_http_exists. Which means that we have to add stopping servers in the second test to maintain the old behavior or to remove it from the first one.\n\nI think it\u0027s fine to execute it here too.","commit_id":"6377faa31601185f8b815731ec53635ceb54bdf6"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"0037d2250a36a5b01d5dc2edee21b8f7e547c74f","unresolved":false,"context_lines":[{"line_number":234,"context_line":"        self.assertEqual(404, response.status, content)"},{"line_number":235,"context_line":""},{"line_number":236,"context_line":"        expected \u003d \u0027HTTP datastore could not find image at URI.\u0027"},{"line_number":237,"context_line":"        self.assertIn(expected, content)"},{"line_number":238,"context_line":""},{"line_number":239,"context_line":"    @skip_if_disabled"},{"line_number":240,"context_line":"    def test_copy_from_file(self):"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_ad3fe0b2","line":237,"in_reply_to":"da86d52c_f51aac6d","updated":"2015-02-05 13:02:44.000000000","message":"No you don\u0027t. Lots of tests do, but the functional base test case stops them in the tearDown method.","commit_id":"6377faa31601185f8b815731ec53635ceb54bdf6"}],"glance/tests/unit/v1/test_api.py":[{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"c1c918f7fa52c365616eb32f9c916bac5a648b1d","unresolved":false,"context_lines":[{"line_number":963,"context_line":"            res \u003d req.get_response(self.api)"},{"line_number":964,"context_line":"            self.assertEqual(201, res.status_int)"},{"line_number":965,"context_line":""},{"line_number":966,"context_line":"    def test_add_copy_from_upload_image_http_nonexist_raises_NotFound(self):"},{"line_number":967,"context_line":"        rules \u003d {\"add_image\": \u0027@\u0027, \"copy_from\": \u0027@\u0027, \"upload_image\": \u0027@\u0027}"},{"line_number":968,"context_line":"        self.set_policy_rules(rules)"},{"line_number":969,"context_line":"        fixture_headers \u003d {\u0027x-image-meta-store\u0027: \u0027file\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_7897913a","line":966,"updated":"2015-02-04 15:57:37.000000000","message":"\"_raises_NotFound\" here too. I would prefer just \"test_upload_image_http_nonexistent\"","commit_id":"6377faa31601185f8b815731ec53635ceb54bdf6"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"c1c918f7fa52c365616eb32f9c916bac5a648b1d","unresolved":false,"context_lines":[{"line_number":968,"context_line":"        self.set_policy_rules(rules)"},{"line_number":969,"context_line":"        fixture_headers \u003d {\u0027x-image-meta-store\u0027: \u0027file\u0027,"},{"line_number":970,"context_line":"                           \u0027x-image-meta-disk-format\u0027: \u0027vhd\u0027,"},{"line_number":971,"context_line":"                           \u0027x-glance-api-copy-from\u0027: \u0027http://glance.com/i.ovf\u0027,"},{"line_number":972,"context_line":"                           \u0027x-image-meta-container-format\u0027: \u0027ovf\u0027,"},{"line_number":973,"context_line":"                           \u0027x-image-meta-name\u0027: \u0027fake image #F\u0027}"},{"line_number":974,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_38919947","line":971,"updated":"2015-02-04 15:57:37.000000000","message":"glance.com is not good here, since it\u0027s going to be a dating website. Use example.com as usual.","commit_id":"6377faa31601185f8b815731ec53635ceb54bdf6"},{"author":{"_account_id":11391,"name":"Mikhail Fedosin","email":"mfedosin@redhat.com","username":"fedosinme"},"change_message_id":"c1c918f7fa52c365616eb32f9c916bac5a648b1d","unresolved":false,"context_lines":[{"line_number":1087,"context_line":"        res \u003d req.get_response(self.api)"},{"line_number":1088,"context_line":"        self.assertEqual(400, res.status_int)"},{"line_number":1089,"context_line":""},{"line_number":1090,"context_line":"    def test_create_image_with_non_exist_location_url(self):"},{"line_number":1091,"context_line":"        \"\"\""},{"line_number":1092,"context_line":"        Tests create-image from non-exist location url"},{"line_number":1093,"context_line":"        raises NotFound exception"}],"source_content_type":"text/x-python","patch_set":4,"id":"da86d52c_780a317a","line":1090,"updated":"2015-02-04 15:57:37.000000000","message":"nonexistent instead of non exist","commit_id":"6377faa31601185f8b815731ec53635ceb54bdf6"},{"author":{"_account_id":12000,"name":"Ian Cordasco","email":"sigmavirus24@gmail.com","username":"sigmavirus24"},"change_message_id":"3d7452c67d50513ef33a638e0c169ececd69b22a","unresolved":false,"context_lines":[{"line_number":971,"context_line":"        fixture_headers \u003d {\u0027x-image-meta-store\u0027: \u0027file\u0027,"},{"line_number":972,"context_line":"                           \u0027x-image-meta-disk-format\u0027: \u0027vhd\u0027,"},{"line_number":973,"context_line":"                           \u0027x-glance-api-copy-from\u0027:"},{"line_number":974,"context_line":"                               \u0027http://example.com/i.ovf\u0027,"},{"line_number":975,"context_line":"                           \u0027x-image-meta-container-format\u0027: \u0027ovf\u0027,"},{"line_number":976,"context_line":"                           \u0027x-image-meta-name\u0027: \u0027fake image #F\u0027}"},{"line_number":977,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"da86d52c_c37fa015","line":974,"updated":"2015-02-11 18:52:05.000000000","message":"So example.com isn\u0027t going to work because it always returns 200.\n\nWe could use https://httpbin.org/status/404","commit_id":"64f2fad40efbf99d113ee906ffda8fe821b1b70e"}]}
