)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"b5fd27145de30c83d4017d2c2afdc88db938ff80","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix glance image-download error"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When use command \u0027glance image-download --file xxx.raw \u003cimage-id\u003e\u0027"},{"line_number":10,"context_line":"to download the image, it will fail with error code 500. It shows"},{"line_number":11,"context_line":"\"TypeError:\u0027ImageTarget\u0027 object does not support item assignment\""},{"line_number":12,"context_line":"in glance-api\u0027s log. This patch will fix it."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: I1a08baa465d3927b721678a5a7ab5f54304993d6"},{"line_number":15,"context_line":"Closes-Bug: #1686488"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":11,"id":"5f201791_dfdfaa63","line":12,"range":{"start_line":9,"start_character":0,"end_line":12,"end_character":44},"updated":"2017-06-28 12:41:57.000000000","message":"Its better to explain the real cause behind this issue. Something like,\n\nWhen instance snapshot of volume-backed instance is uploaded to glance, image size is set to 0 from nova. While downloading that snapshot using image-download call it tries to get the image size from the cache where it fails as image is instance of policy.ImageTarget and not a dictionary.\n\nAs per the current code image will always be object of policy.ImageTarget whether image size is 0 or not. Made changes to set image size to policy.ImageTarget using setattr method.","commit_id":"368dffbea28931532b22d57e1165623d81994930"}],"glance/api/middleware/cache.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"14dacd1042a02aece065c90b42718282cfbcf8cf","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        if not image_meta[\u0027size\u0027]:"},{"line_number":73,"context_line":"            # override image size metadata with the actual cached"},{"line_number":74,"context_line":"            # file size, see LP Bug #900959"},{"line_number":75,"context_line":"            if not isinstance(image_meta, policy.ImageTarget):"},{"line_number":76,"context_line":"                image_meta[\u0027size\u0027] \u003d self.cache.get_image_size("},{"line_number":77,"context_line":"                    image_meta[\u0027id\u0027])"},{"line_number":78,"context_line":"            else:"},{"line_number":79,"context_line":"                setattr(image_meta, \u0027size\u0027,"},{"line_number":80,"context_line":"                        self.cache.get_image_size(image_meta[\u0027id\u0027]))"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5f201791_4aad4899","line":78,"range":{"start_line":75,"start_character":12,"end_line":78,"end_character":17},"updated":"2017-06-27 10:56:42.000000000","message":"Whether image size is 0 or not image_meta will always be instance of policy.ImageTarget. So it will never come in the if condition which is dead code and safe to remove IMO.","commit_id":"5ba740162d87ba2fc3e364b54025d8e3d0801f99"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"89914705445162c840780ee6f153b8a69ef1ed78","unresolved":false,"context_lines":[{"line_number":72,"context_line":"        if not image_meta[\u0027size\u0027]:"},{"line_number":73,"context_line":"            # override image size metadata with the actual cached"},{"line_number":74,"context_line":"            # file size, see LP Bug #900959"},{"line_number":75,"context_line":"            if not isinstance(image_meta, policy.ImageTarget):"},{"line_number":76,"context_line":"                image_meta[\u0027size\u0027] \u003d self.cache.get_image_size("},{"line_number":77,"context_line":"                    image_meta[\u0027id\u0027])"},{"line_number":78,"context_line":"            else:"},{"line_number":79,"context_line":"                setattr(image_meta, \u0027size\u0027,"},{"line_number":80,"context_line":"                        self.cache.get_image_size(image_meta[\u0027id\u0027]))"},{"line_number":81,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"5f201791_45ec1b8e","line":78,"range":{"start_line":75,"start_character":12,"end_line":78,"end_character":17},"in_reply_to":"5f201791_4aad4899","updated":"2017-06-27 11:40:59.000000000","message":"Done, Thanks for your review!","commit_id":"5ba740162d87ba2fc3e364b54025d8e3d0801f99"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7629f50260b7af21e7c3373efd5e78a395d48091","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                image_meta[\u0027size\u0027] \u003d self.cache.get_image_size("},{"line_number":77,"context_line":"                    image_meta[\u0027id\u0027])"},{"line_number":78,"context_line":"            else:"},{"line_number":79,"context_line":"                setattr(image_meta, \u0027size\u0027,"},{"line_number":80,"context_line":"                        self.cache.get_image_size(image_meta[\u0027id\u0027]))"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @staticmethod"},{"line_number":83,"context_line":"    def _match_request(request):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_ff5333e1","line":80,"range":{"start_line":79,"start_character":16,"end_line":80,"end_character":68},"updated":"2017-07-10 20:54:33.000000000","message":"What advantage to we get out of using setattr here as opposed to\n\n image_meta.size \u003d self.cache.get_image_size(image_meta[\u0027id\u0027])\n\n?","commit_id":"329c5e1a778b3179731f620f7105a0b08c9008c7"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"6d14ed4461b32bb4e642c717f803cd4a4d944f59","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                image_meta[\u0027size\u0027] \u003d self.cache.get_image_size("},{"line_number":77,"context_line":"                    image_meta[\u0027id\u0027])"},{"line_number":78,"context_line":"            else:"},{"line_number":79,"context_line":"                setattr(image_meta, \u0027size\u0027,"},{"line_number":80,"context_line":"                        self.cache.get_image_size(image_meta[\u0027id\u0027]))"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @staticmethod"},{"line_number":83,"context_line":"    def _match_request(request):"}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_31fe7a38","line":80,"range":{"start_line":79,"start_character":16,"end_line":80,"end_character":68},"in_reply_to":"3f1d235d_ff5333e1","updated":"2017-07-11 03:15:31.000000000","message":"use image_meta.size instead\ndone","commit_id":"329c5e1a778b3179731f620f7105a0b08c9008c7"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f14dae10b87455af6ea34f844c140e2b7e23c8b0","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                image_meta[\u0027size\u0027] \u003d self.cache.get_image_size("},{"line_number":77,"context_line":"                    image_meta[\u0027id\u0027])"},{"line_number":78,"context_line":"            else:"},{"line_number":79,"context_line":"                image_meta.size \u003d self.cache.get_image_size("},{"line_number":80,"context_line":"                    image_meta[\u0027id\u0027])"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @staticmethod"},{"line_number":83,"context_line":"    def _match_request(request):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_246ce534","line":80,"range":{"start_line":79,"start_character":0,"end_line":80,"end_character":37},"updated":"2017-07-11 14:34:09.000000000","message":"Oh, wow, this actually isn\u0027t correct at all (either with .size or with setattr).  It should be:\n\n image_meta.target.size \u003d ...\n\nThe way ImageTarget is setup, the intent is for image_meta.size and image_meta[\u0027size\u0027] to be equivalent.  With this code as is, that\u0027s not the case.  See notes in the test case.","commit_id":"fb1a1d1690a4f1bca01233fd5a588382612fdeb1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"c7500df0aa30e234f0f5b920f380d322f226c7e5","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                image_meta[\u0027size\u0027] \u003d self.cache.get_image_size("},{"line_number":77,"context_line":"                    image_meta[\u0027id\u0027])"},{"line_number":78,"context_line":"            else:"},{"line_number":79,"context_line":"                image_meta.size \u003d self.cache.get_image_size("},{"line_number":80,"context_line":"                    image_meta[\u0027id\u0027])"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @staticmethod"},{"line_number":83,"context_line":"    def _match_request(request):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_7f9706ed","line":80,"range":{"start_line":79,"start_character":0,"end_line":80,"end_character":37},"in_reply_to":"3f1d235d_246ce534","updated":"2017-07-11 14:54:03.000000000","message":"Correction: image_meta.size is totally irrelevant; it\u0027s only ever referred to as image_meta[\u0027size\u0027].","commit_id":"fb1a1d1690a4f1bca01233fd5a588382612fdeb1"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"33322f417e1fa551ffd1d3536c8df34b3449e67f","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                image_meta[\u0027size\u0027] \u003d self.cache.get_image_size("},{"line_number":77,"context_line":"                    image_meta[\u0027id\u0027])"},{"line_number":78,"context_line":"            else:"},{"line_number":79,"context_line":"                image_meta.size \u003d self.cache.get_image_size("},{"line_number":80,"context_line":"                    image_meta[\u0027id\u0027])"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @staticmethod"},{"line_number":83,"context_line":"    def _match_request(request):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_baea4cd5","line":80,"range":{"start_line":79,"start_character":0,"end_line":80,"end_character":37},"in_reply_to":"3f1d235d_246ce534","updated":"2017-07-11 15:16:57.000000000","message":"I don\u0027t understand what you mean. Why should we use image_meta.target.size?\nDo you test that if use \u0027image_meta.target.size \u003d ...\u0027 the code could run correctly?\nI think you\u0027d better see the description of the bug.","commit_id":"fb1a1d1690a4f1bca01233fd5a588382612fdeb1"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"33322f417e1fa551ffd1d3536c8df34b3449e67f","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                image_meta[\u0027size\u0027] \u003d self.cache.get_image_size("},{"line_number":77,"context_line":"                    image_meta[\u0027id\u0027])"},{"line_number":78,"context_line":"            else:"},{"line_number":79,"context_line":"                image_meta.size \u003d self.cache.get_image_size("},{"line_number":80,"context_line":"                    image_meta[\u0027id\u0027])"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @staticmethod"},{"line_number":83,"context_line":"    def _match_request(request):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_3a9bdc66","line":80,"range":{"start_line":79,"start_character":0,"end_line":80,"end_character":37},"in_reply_to":"3f1d235d_7f9706ed","updated":"2017-07-11 15:16:57.000000000","message":"why image_meta.size is totally irrelevant? I have tested it, and with this fix, it works well.","commit_id":"fb1a1d1690a4f1bca01233fd5a588382612fdeb1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"198eec1e26915aaa5c5c4dabbaf03b481c82107d","unresolved":false,"context_lines":[{"line_number":76,"context_line":"                image_meta[\u0027size\u0027] \u003d self.cache.get_image_size("},{"line_number":77,"context_line":"                    image_meta[\u0027id\u0027])"},{"line_number":78,"context_line":"            else:"},{"line_number":79,"context_line":"                image_meta.size \u003d self.cache.get_image_size("},{"line_number":80,"context_line":"                    image_meta[\u0027id\u0027])"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"    @staticmethod"},{"line_number":83,"context_line":"    def _match_request(request):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_a02e9ea2","line":80,"range":{"start_line":79,"start_character":0,"end_line":80,"end_character":37},"in_reply_to":"3f1d235d_baea4cd5","updated":"2017-07-11 15:56:47.000000000","message":"Yes, I did a live test with this patch set as well, and it *seems* to work - in the sense that it no longer produces the 500 and stack trace.\n\nHowever, it\u0027s not actually setting the size attribute in the right place, so it is in fact regressing the bug mentioned in the comment on L74.\n\nIf you look through the code, nothing ever references image_meta.size -- it\u0027s only ever referred to as image_meta[\u0027size\u0027].  The fact that the test case is asserting on image_meta.size is only confirming that the code is setting image_meta.size, which it obviously is.  When in fact what we need is for image_meta[\u0027size\u0027] to get the expected value.  If you change the assertion to check image_meta[\u0027size\u0027], it breaks.","commit_id":"fb1a1d1690a4f1bca01233fd5a588382612fdeb1"}],"glance/tests/unit/test_cache_middleware.py":[{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"948066a7d6f02bbd64cdb6d3ceb10a97f3a93dbf","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        image_meta \u003d glance.api.policy.ImageTarget(image)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        cache_filter \u003d ProcessRequestTestCacheFilter()"},{"line_number":360,"context_line":"        self.stubs.Set(cache_filter.cache, \u0027get_image_size\u0027,"},{"line_number":361,"context_line":"                       fake_get_image_size)"},{"line_number":362,"context_line":"        cache_filter._verify_metadata(image_meta)"},{"line_number":363,"context_line":"        self.assertEqual(image_size, image_meta.size)"},{"line_number":364,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7f231b9d_3fc1d281","line":361,"range":{"start_line":360,"start_character":8,"end_line":361,"end_character":43},"updated":"2017-06-20 12:30:34.000000000","message":"its better to use, mock.patch rather than stubs because sometimes it leads to untraceable errors if it is not unset.\n\nReference: https://bugs.launchpad.net/glance/+bug/1582465/comments/5","commit_id":"a4de38a6c4efad8c366b469fb66adee2b7a51733"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"78a44be578a658f8bb7c3a3ae3694268423c7048","unresolved":false,"context_lines":[{"line_number":357,"context_line":"        image_meta \u003d glance.api.policy.ImageTarget(image)"},{"line_number":358,"context_line":""},{"line_number":359,"context_line":"        cache_filter \u003d ProcessRequestTestCacheFilter()"},{"line_number":360,"context_line":"        self.stubs.Set(cache_filter.cache, \u0027get_image_size\u0027,"},{"line_number":361,"context_line":"                       fake_get_image_size)"},{"line_number":362,"context_line":"        cache_filter._verify_metadata(image_meta)"},{"line_number":363,"context_line":"        self.assertEqual(image_size, image_meta.size)"},{"line_number":364,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"5f201791_954464b9","line":361,"range":{"start_line":360,"start_character":8,"end_line":361,"end_character":43},"in_reply_to":"7f231b9d_3fc1d281","updated":"2017-06-20 13:17:02.000000000","message":"Done","commit_id":"a4de38a6c4efad8c366b469fb66adee2b7a51733"},{"author":{"_account_id":9303,"name":"Abhishek Kekane","email":"akekane@redhat.com","username":"abhishekkekane"},"change_message_id":"13b589fba7c6e617a29126f96e37755bb6ae1e6e","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"from mock import mock"},{"line_number":16,"context_line":"from oslo_policy import policy"},{"line_number":17,"context_line":"# NOTE(jokke): simplified transition to py3, behaves like py2 xrange"},{"line_number":18,"context_line":"from six.moves import http_client as http"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_9bcc1c6b","line":15,"range":{"start_line":15,"start_character":1,"end_line":15,"end_character":21},"updated":"2017-06-23 19:48:56.000000000","message":"for consistency, just import mock is sufficient or eithr use from mock import patch and add with patch.object(.....","commit_id":"b1e748f5177d33f03dd7f07f985d2904e44947f4"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"c3c7f094cd95745094ad7ac97262a2947966e28a","unresolved":false,"context_lines":[{"line_number":12,"context_line":"#    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the"},{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":"from mock import mock"},{"line_number":16,"context_line":"from oslo_policy import policy"},{"line_number":17,"context_line":"# NOTE(jokke): simplified transition to py3, behaves like py2 xrange"},{"line_number":18,"context_line":"from six.moves import http_client as http"}],"source_content_type":"text/x-python","patch_set":8,"id":"5f201791_82cca96a","line":15,"range":{"start_line":15,"start_character":1,"end_line":15,"end_character":21},"in_reply_to":"5f201791_9bcc1c6b","updated":"2017-06-24 02:39:53.000000000","message":"Done","commit_id":"b1e748f5177d33f03dd7f07f985d2904e44947f4"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"7629f50260b7af21e7c3373efd5e78a395d48091","unresolved":false,"context_lines":[{"line_number":341,"context_line":"        cache_filter._verify_metadata(image_meta)"},{"line_number":342,"context_line":"        self.assertEqual(image_size, image_meta[\u0027size\u0027])"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    def test_verify_metadata_is_image_target_instance_with_zero_size(self):"},{"line_number":345,"context_line":"        \"\"\""},{"line_number":346,"context_line":"        Test verify_metadata updates metadata which is ImageTarget instance"},{"line_number":347,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_ffd9f321","line":344,"updated":"2017-07-10 20:54:33.000000000","message":"Hate to say it, but we should probably have a test for the other (v1) side of the conditional.","commit_id":"329c5e1a778b3179731f620f7105a0b08c9008c7"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"25b388e8ea8cb3532015cfa6721faea58c47fcd6","unresolved":false,"context_lines":[{"line_number":341,"context_line":"        cache_filter._verify_metadata(image_meta)"},{"line_number":342,"context_line":"        self.assertEqual(image_size, image_meta[\u0027size\u0027])"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    def test_verify_metadata_is_image_target_instance_with_zero_size(self):"},{"line_number":345,"context_line":"        \"\"\""},{"line_number":346,"context_line":"        Test verify_metadata updates metadata which is ImageTarget instance"},{"line_number":347,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_49025c71","line":344,"in_reply_to":"3f1d235d_11fdbe39","updated":"2017-07-11 14:22:50.000000000","message":"If that was indeed testing the code path with a regular dict, it should have failed with PS13, no?\n\n[Later] Yeah, so I tried it out, and as I think you discovered for this new test case, the self.stubs.Set isn\u0027t doing the right setup, and test_verify_metadata_zero_size isn\u0027t actually hitting the code path.  When I swapped in the patch.object context manager as you\u0027ve done here, I was able to confirm that PS13 breaks, and PS14 passes.  So test_verify_metadata_zero_size should be thus updated.","commit_id":"329c5e1a778b3179731f620f7105a0b08c9008c7"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"6d14ed4461b32bb4e642c717f803cd4a4d944f59","unresolved":false,"context_lines":[{"line_number":341,"context_line":"        cache_filter._verify_metadata(image_meta)"},{"line_number":342,"context_line":"        self.assertEqual(image_size, image_meta[\u0027size\u0027])"},{"line_number":343,"context_line":""},{"line_number":344,"context_line":"    def test_verify_metadata_is_image_target_instance_with_zero_size(self):"},{"line_number":345,"context_line":"        \"\"\""},{"line_number":346,"context_line":"        Test verify_metadata updates metadata which is ImageTarget instance"},{"line_number":347,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":13,"id":"3f1d235d_11fdbe39","line":344,"in_reply_to":"3f1d235d_ffd9f321","updated":"2017-07-11 03:15:31.000000000","message":"Done\nThere is already a test for v1.\ndef test_verify_metadata_zero_size","commit_id":"329c5e1a778b3179731f620f7105a0b08c9008c7"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"f14dae10b87455af6ea34f844c140e2b7e23c8b0","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                          \u0027get_image_size\u0027,"},{"line_number":362,"context_line":"                          fake_get_image_size):"},{"line_number":363,"context_line":"            cache_filter._verify_metadata(image_meta)"},{"line_number":364,"context_line":"            self.assertEqual(image_size, image_meta.size)"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    def test_v2_process_request_response_headers(self):"},{"line_number":367,"context_line":"        def dummy_img_iterator():"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_645bfd86","line":364,"range":{"start_line":364,"start_character":41,"end_line":364,"end_character":56},"updated":"2017-07-11 14:34:09.000000000","message":"We should be able to do this assertion with image_meta[\u0027size\u0027] as well and have it pass.\n\nBut that\u0027s not the case, due to the bug noted in cache.py.","commit_id":"fb1a1d1690a4f1bca01233fd5a588382612fdeb1"},{"author":{"_account_id":21224,"name":"jiaopengju","email":"jiaopengju_yewu@cmss.chinamobile.com","username":"jiaopengju"},"change_message_id":"33322f417e1fa551ffd1d3536c8df34b3449e67f","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                          \u0027get_image_size\u0027,"},{"line_number":362,"context_line":"                          fake_get_image_size):"},{"line_number":363,"context_line":"            cache_filter._verify_metadata(image_meta)"},{"line_number":364,"context_line":"            self.assertEqual(image_size, image_meta.size)"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    def test_v2_process_request_response_headers(self):"},{"line_number":367,"context_line":"        def dummy_img_iterator():"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_ba424caa","line":364,"range":{"start_line":364,"start_character":41,"end_line":364,"end_character":56},"in_reply_to":"3f1d235d_645bfd86","updated":"2017-07-11 15:16:57.000000000","message":"The reason why I add this test case is that \u0027iamge_meta\u0027 is dict  or ImageTarget sometimes. What should we do to make the image_meta[\u0027size\u0027] test case pass? Just convert ImageTarget to dict?","commit_id":"fb1a1d1690a4f1bca01233fd5a588382612fdeb1"},{"author":{"_account_id":14070,"name":"Eric Fried","email":"openstack@fried.cc","username":"efried"},"change_message_id":"198eec1e26915aaa5c5c4dabbaf03b481c82107d","unresolved":false,"context_lines":[{"line_number":361,"context_line":"                          \u0027get_image_size\u0027,"},{"line_number":362,"context_line":"                          fake_get_image_size):"},{"line_number":363,"context_line":"            cache_filter._verify_metadata(image_meta)"},{"line_number":364,"context_line":"            self.assertEqual(image_size, image_meta.size)"},{"line_number":365,"context_line":""},{"line_number":366,"context_line":"    def test_v2_process_request_response_headers(self):"},{"line_number":367,"context_line":"        def dummy_img_iterator():"}],"source_content_type":"text/x-python","patch_set":14,"id":"3f1d235d_a33588dc","line":364,"range":{"start_line":364,"start_character":41,"end_line":364,"end_character":56},"in_reply_to":"3f1d235d_ba424caa","updated":"2017-07-11 15:56:47.000000000","message":"I think in fact the test_verify_metadata_zero_size test case is broken - because it should have failed with PS13 and it didn\u0027t.\n\nWe should be able to run the core of this test the exact same way, with two different kinds of image_meta, and have it pass identically.","commit_id":"fb1a1d1690a4f1bca01233fd5a588382612fdeb1"}]}
