)]}'
{"glance/quota/__init__.py":[{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"ca819e71d445ca7b2bca11b758f1a147418f83f9","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        if self.image.size:"},{"line_number":285,"context_line":"            image_size \u003d self.image.size * len(value)"},{"line_number":286,"context_line":"        else:"},{"line_number":287,"context_line":"            image_size \u003d glance.store.get_size_from_backend("},{"line_number":288,"context_line":"                            self.context, value[0][\u0027url\u0027]) * len(value)"},{"line_number":289,"context_line":"        glance.api.common.check_quota("},{"line_number":290,"context_line":"            self.context, image_size, self.db_api,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9pmQ%3D","line":287,"updated":"2013-12-09 10:00:49.000000000","message":"I prefer do a loop at here, if we can\u0027t get the image\u0027s size successful on a particular location (currently it\u0027s first one) then we can try next one. if all of them are failed, then IMHO we can see its size (var \u0027image_size\u0027) to zero.\n\nbtw, as a common code i think it\u0027s not a good idea if we always assume \"value\" list has item (not empty).\n\nrelated to this also: https://bugs.launchpad.net/glance/+bug/1255556","commit_id":"daa0e7b3a7e8117dbadd498c8edbeb653999f218"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"d2f29d2b7401710616092db13006ff7dd8fd3764","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        if self.image.size:"},{"line_number":285,"context_line":"            image_size \u003d self.image.size * len(value)"},{"line_number":286,"context_line":"        else:"},{"line_number":287,"context_line":"            image_size \u003d glance.store.get_size_from_backend("},{"line_number":288,"context_line":"                            self.context, value[0][\u0027url\u0027]) * len(value)"},{"line_number":289,"context_line":"        glance.api.common.check_quota("},{"line_number":290,"context_line":"            self.context, image_size, self.db_api,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9oeE%3D","line":287,"in_reply_to":"AAAATn%2F9oo0%3D","updated":"2013-12-09 14:18:16.000000000","message":"1. OK, cool.\n\n2. Sure, i\u0027m fine.\n\n3. Actually before put this point here, I have checked that code, under the current replace-patch implementation, it has used \"del\" operation, but I think we\u0027d better don\u0027t make the code dependency at this hierarchical-design (api controller vs. quota-location-proxy) base on the code context, this is also the reason  I use word \"common code\" in above comments. we\u0027d better don\u0027t  dependent on client code, to assume \"value\" list is not empty IMO.","commit_id":"daa0e7b3a7e8117dbadd498c8edbeb653999f218"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"8f58684d27be20c5e59be747a711598ceb20b071","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        if self.image.size:"},{"line_number":285,"context_line":"            image_size \u003d self.image.size * len(value)"},{"line_number":286,"context_line":"        else:"},{"line_number":287,"context_line":"            image_size \u003d glance.store.get_size_from_backend("},{"line_number":288,"context_line":"                            self.context, value[0][\u0027url\u0027]) * len(value)"},{"line_number":289,"context_line":"        glance.api.common.check_quota("},{"line_number":290,"context_line":"            self.context, image_size, self.db_api,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9oiA%3D","line":287,"in_reply_to":"AAAATn%2F9oo0%3D","updated":"2013-12-09 14:08:47.000000000","message":"s/more than 1/more than 0","commit_id":"daa0e7b3a7e8117dbadd498c8edbeb653999f218"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"c0406b71e6fef149cf637bdd79fec7f7503b9ce0","unresolved":false,"context_lines":[{"line_number":284,"context_line":"        if self.image.size:"},{"line_number":285,"context_line":"            image_size \u003d self.image.size * len(value)"},{"line_number":286,"context_line":"        else:"},{"line_number":287,"context_line":"            image_size \u003d glance.store.get_size_from_backend("},{"line_number":288,"context_line":"                            self.context, value[0][\u0027url\u0027]) * len(value)"},{"line_number":289,"context_line":"        glance.api.common.check_quota("},{"line_number":290,"context_line":"            self.context, image_size, self.db_api,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAATn%2F9oo0%3D","line":287,"in_reply_to":"AAAATn%2F9pmQ%3D","updated":"2013-12-09 13:48:39.000000000","message":"zhiyan, thanks for the reviewing. It makes sense to using a loop to try more to get the image size.\n\nBut I still prefer to set the var \u0027image_size\u0027 to None, since None means the image size is not known, see https://github.com/openstack/glance/blob/master/glance/api/common.py#L126\n\nBesides, at here we can always assume the length is more than 1, see https://github.com/openstack/glance/blob/master/glance/api/v2/images.py#L220","commit_id":"daa0e7b3a7e8117dbadd498c8edbeb653999f218"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"30014df06d308ca638f1b74b27dfd2e38bde753d","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        return self.locations.__getitem__(*args, **kwargs)"},{"line_number":209,"context_line":""},{"line_number":210,"context_line":"    def _check_quota(self, count):"},{"line_number":211,"context_line":"        glance.api.common.check_quota("},{"line_number":212,"context_line":"            self.context, self.image.size * count, self.db_api)"},{"line_number":213,"context_line":""},{"line_number":214,"context_line":"    def append(self, object):"}],"source_content_type":"text/x-python","patch_set":4,"id":"AAAATn%2F9kx0%3D","line":211,"updated":"2013-12-10 02:55:48.000000000","message":"We also need do such checking at here since this can be called by the request from https://github.com/openstack/glance/blob/master/glance/api/v2/images.py#L243","commit_id":"45e316a5e6d847b2d07d336039f453c5666620fd"},{"author":{"_account_id":6549,"name":"Zhi Yan Liu","email":"lzy.dev@gmail.com","username":"lzy-dev"},"change_message_id":"e763b14ccc1637c04bfcd65cb0748bedcadc84e9","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                                              maximum\u003dCONF.image_tag_quota)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"def _cal_required_size(context, image, locations, overwrite_image_size\u003dTrue):"},{"line_number":49,"context_line":"    required_size \u003d None"},{"line_number":50,"context_line":"    if image.size:"},{"line_number":51,"context_line":"        required_size \u003d image.size * len(locations)"}],"source_content_type":"text/x-python","patch_set":7,"id":"AAAATn%2F9SB0%3D","line":48,"updated":"2013-12-13 03:45:34.000000000","message":"Under your plan/design, when and where you will using this helper with overwrite_image_size\u003dFalse? thanks. I\u0027m thinking should we always not to change image\u0027s size value in this quota handling layer.","commit_id":"084a442e68bb191c6228df4eb4ecca258c6c7060"},{"author":{"_account_id":616,"name":"Mark Washenberger","email":"mark.washenberger@markwash.net","username":"markwash"},"change_message_id":"4faac08cf2662ae4df0c404abda87e8b1b692bcf","unresolved":false,"context_lines":[{"line_number":45,"context_line":"                                              maximum\u003dCONF.image_tag_quota)"},{"line_number":46,"context_line":""},{"line_number":47,"context_line":""},{"line_number":48,"context_line":"def _cal_required_size(context, image, locations):"},{"line_number":49,"context_line":"    required_size \u003d None"},{"line_number":50,"context_line":"    if image.size:"},{"line_number":51,"context_line":"        required_size \u003d image.size * len(locations)"}],"source_content_type":"text/x-python","patch_set":8,"id":"AAAATn%2F9An4%3D","line":48,"updated":"2013-12-17 18:54:02.000000000","message":"Is \"cal\" short for \"calculate\" ? If so, maybe we could make it \"calc\".","commit_id":"bae938d4f10e3934e1cb3862e80a202d3355eeb1"}],"glance/tests/unit/test_quota.py":[{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"bec34ee3695a75401c682aeadf49f8a283f14d1e","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import mox"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from glance.common import exception"},{"line_number":20,"context_line":"from glance.openstack.common import uuidutils"},{"line_number":21,"context_line":"import glance.quota"},{"line_number":22,"context_line":"import glance.store"},{"line_number":23,"context_line":"from glance.tests.unit import utils as unit_test_utils"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F8%2FWo%3D","line":20,"updated":"2013-12-18 00:38:04.000000000","message":"you might want to use uuid instead of uuidutils.\nSee bug https://bugs.launchpad.net/nova/+bug/1253497\nI am currently working on the review: https://review.openstack.org/#/c/60643/","commit_id":"a82d4ec7010b01eb353191193283390cc4a2b696"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"cebc0a8d9c72500292109e3c5cc01a793125b083","unresolved":false,"context_lines":[{"line_number":17,"context_line":"import mox"},{"line_number":18,"context_line":""},{"line_number":19,"context_line":"from glance.common import exception"},{"line_number":20,"context_line":"from glance.openstack.common import uuidutils"},{"line_number":21,"context_line":"import glance.quota"},{"line_number":22,"context_line":"import glance.store"},{"line_number":23,"context_line":"from glance.tests.unit import utils as unit_test_utils"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F8%2FSs%3D","line":20,"in_reply_to":"AAAATn%2F8%2FWo%3D","updated":"2013-12-18 01:02:04.000000000","message":"Thanks for poking me. Will fix it in next PS.","commit_id":"a82d4ec7010b01eb353191193283390cc4a2b696"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"bec34ee3695a75401c682aeadf49f8a283f14d1e","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        self.assertEqual([{\u0027url\u0027: \u0027file:///fake.img.tar.gz\u0027, \u0027metadata\u0027: {}}],"},{"line_number":287,"context_line":"                         image.locations)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def test_iadd_location_for_queued_image(self):"},{"line_number":290,"context_line":"        context \u003d FakeContext()"},{"line_number":291,"context_line":"        db_api \u003d unit_test_utils.FakeDB()"},{"line_number":292,"context_line":"        base_image \u003d FakeImage()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F8%2FWk%3D","line":289,"updated":"2013-12-18 00:38:04.000000000","message":"typo: test_add_location_for_queued_image(self):","commit_id":"a82d4ec7010b01eb353191193283390cc4a2b696"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"cebc0a8d9c72500292109e3c5cc01a793125b083","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        self.assertEqual([{\u0027url\u0027: \u0027file:///fake.img.tar.gz\u0027, \u0027metadata\u0027: {}}],"},{"line_number":287,"context_line":"                         image.locations)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def test_iadd_location_for_queued_image(self):"},{"line_number":290,"context_line":"        context \u003d FakeContext()"},{"line_number":291,"context_line":"        db_api \u003d unit_test_utils.FakeDB()"},{"line_number":292,"context_line":"        base_image \u003d FakeImage()"}],"source_content_type":"text/x-python","patch_set":9,"id":"AAAATn%2F8%2FSg%3D","line":289,"in_reply_to":"AAAATn%2F8%2FWk%3D","updated":"2013-12-18 01:02:04.000000000","message":"It\u0027s for __iadd__ method.","commit_id":"a82d4ec7010b01eb353191193283390cc4a2b696"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"0804d0dff41061e389264e17f3aac19f50a64991","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        self.assertEqual([{\u0027url\u0027: \u0027file:///fake.img.tar.gz\u0027, \u0027metadata\u0027: {}}],"},{"line_number":287,"context_line":"                         image.locations)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def test_iadd_location_for_queued_image(self):"},{"line_number":290,"context_line":"        context \u003d FakeContext()"},{"line_number":291,"context_line":"        db_api \u003d unit_test_utils.FakeDB()"},{"line_number":292,"context_line":"        base_image \u003d FakeImage()"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F8%2FDw%3D","line":289,"updated":"2013-12-18 02:47:18.000000000","message":"iadd?","commit_id":"ad755f98437bb129aad9de663260d6cc04340e42"},{"author":{"_account_id":8759,"name":"Arnaud Legendre","email":"arnaudleg@gmail.com","username":"arnaud"},"change_message_id":"12a35a8404cc1ddaf3c93d16433c9fe4a2fad657","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        self.assertEqual([{\u0027url\u0027: \u0027file:///fake.img.tar.gz\u0027, \u0027metadata\u0027: {}}],"},{"line_number":287,"context_line":"                         image.locations)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def test_iadd_location_for_queued_image(self):"},{"line_number":290,"context_line":"        context \u003d FakeContext()"},{"line_number":291,"context_line":"        db_api \u003d unit_test_utils.FakeDB()"},{"line_number":292,"context_line":"        base_image \u003d FakeImage()"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F8%2FCw%3D","line":289,"in_reply_to":"AAAATn%2F8%2FDU%3D","updated":"2013-12-18 02:55:09.000000000","message":"got it.","commit_id":"ad755f98437bb129aad9de663260d6cc04340e42"},{"author":{"_account_id":6484,"name":"Feilong Wang","email":"hustemb@gmail.com","username":"flwang"},"change_message_id":"6ca761efb476cae0f67c8285c33e9119a85a9630","unresolved":false,"context_lines":[{"line_number":286,"context_line":"        self.assertEqual([{\u0027url\u0027: \u0027file:///fake.img.tar.gz\u0027, \u0027metadata\u0027: {}}],"},{"line_number":287,"context_line":"                         image.locations)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"    def test_iadd_location_for_queued_image(self):"},{"line_number":290,"context_line":"        context \u003d FakeContext()"},{"line_number":291,"context_line":"        db_api \u003d unit_test_utils.FakeDB()"},{"line_number":292,"context_line":"        base_image \u003d FakeImage()"}],"source_content_type":"text/x-python","patch_set":11,"id":"AAAATn%2F8%2FDU%3D","line":289,"in_reply_to":"AAAATn%2F8%2FDw%3D","updated":"2013-12-18 02:52:48.000000000","message":"Pls see my previous comments.","commit_id":"ad755f98437bb129aad9de663260d6cc04340e42"}]}
