)]}'
{"nova/quota.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"b2066b0ff59d26743252c8d9dd88d2fb6ff27e68","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        allowed[\u0027volumes\u0027] \u003d min(allowed[\u0027volumes\u0027],"},{"line_number":159,"context_line":"                                 int(allowed[\u0027gigabytes\u0027] // size))"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    return (overs, usages, quotas, allowed)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"def allowed_floating_ips(context, requested_floating_ips):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAKH%2F%2F%2FO4%3D","line":161,"updated":"2012-07-05 17:52:32.000000000","message":"returning such a large positional tuple seems weird to me. What about returning a dictionary or some other structure instead.","commit_id":"7a5475a66881759bff9fbe60194b81ea123f235f"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e19a706b1fce96862e4070338efb3f9fba4459b2","unresolved":false,"context_lines":[{"line_number":158,"context_line":"        allowed[\u0027volumes\u0027] \u003d min(allowed[\u0027volumes\u0027],"},{"line_number":159,"context_line":"                                 int(allowed[\u0027gigabytes\u0027] // size))"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    return (overs, usages, quotas, allowed)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"def allowed_floating_ips(context, requested_floating_ips):"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAKH%2F%2F%2FD0%3D","line":161,"in_reply_to":"AAAAKH%2F%2F%2FO4%3D","updated":"2012-07-05 20:26:22.000000000","message":"Done","commit_id":"7a5475a66881759bff9fbe60194b81ea123f235f"}],"nova/tests/test_volume.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"1f973ee095cda133a672185a8f13d9d6dbbc883e","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                             \u0027description\u0027)"},{"line_number":102,"context_line":"            self.fail(\u0027expected QuotaError\u0027)"},{"line_number":103,"context_line":"        except exception.QuotaError as qe:"},{"line_number":104,"context_line":"            self.assertTrue(str(qe).endswith(\u0027code\u003d%s\u0027 % expected))"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def test_create_volumes_over_quota(self):"},{"line_number":107,"context_line":"        self._do_test_create_over_quota(\u0027volumes\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAKH%2F%2F%2BmQ%3D","line":104,"updated":"2012-07-06 14:17:00.000000000","message":"This should really be an assertRaises check instead. You can do the code check with the pattern here once you switch to assertRaises - http://docs.python.org/library/unittest.html#unittest.TestCase.assertRaises","commit_id":"5803988a1640e4bb18f8f8f2823a1201d695bf0d"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"3019e5f1845b8ebffbb6b305f9799392bb93eb3f","unresolved":false,"context_lines":[{"line_number":101,"context_line":"                             \u0027description\u0027)"},{"line_number":102,"context_line":"            self.fail(\u0027expected QuotaError\u0027)"},{"line_number":103,"context_line":"        except exception.QuotaError as qe:"},{"line_number":104,"context_line":"            self.assertTrue(str(qe).endswith(\u0027code\u003d%s\u0027 % expected))"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def test_create_volumes_over_quota(self):"},{"line_number":107,"context_line":"        self._do_test_create_over_quota(\u0027volumes\u0027,"}],"source_content_type":"text/x-python","patch_set":2,"id":"AAAAKH%2F%2F%2Bkc%3D","line":104,"in_reply_to":"AAAAKH%2F%2F%2BmQ%3D","updated":"2012-07-06 14:47:58.000000000","message":"Good shout, done!","commit_id":"5803988a1640e4bb18f8f8f2823a1201d695bf0d"}],"nova/volume/api.py":[{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"b2066b0ff59d26743252c8d9dd88d2fb6ff27e68","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        else:"},{"line_number":81,"context_line":"            snapshot_id \u003d None"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        (overs, usages, quotas, allowed) \u003d quota.allowed_volumes(context,"},{"line_number":84,"context_line":"                                                                 1,"},{"line_number":85,"context_line":"                                                                 size)"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAKH%2F%2F%2FO0%3D","line":83,"updated":"2012-07-05 17:52:32.000000000","message":"this becomes extremely awkward because the returned tupple is so large","commit_id":"7a5475a66881759bff9fbe60194b81ea123f235f"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e19a706b1fce96862e4070338efb3f9fba4459b2","unresolved":false,"context_lines":[{"line_number":80,"context_line":"        else:"},{"line_number":81,"context_line":"            snapshot_id \u003d None"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"        (overs, usages, quotas, allowed) \u003d quota.allowed_volumes(context,"},{"line_number":84,"context_line":"                                                                 1,"},{"line_number":85,"context_line":"                                                                 size)"},{"line_number":86,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAKH%2F%2F%2FDw%3D","line":83,"in_reply_to":"AAAAKH%2F%2F%2FO0%3D","updated":"2012-07-05 20:26:22.000000000","message":"This should be addressed by returning a dict in patch set 2.","commit_id":"7a5475a66881759bff9fbe60194b81ea123f235f"},{"author":{"_account_id":2750,"name":"Sean Dague","email":"sean@dague.net","username":"sdague"},"change_message_id":"b2066b0ff59d26743252c8d9dd88d2fb6ff27e68","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                LOG.warn(_(\"Quota exceeded for %(pid)s, tried to create \""},{"line_number":99,"context_line":"                           \"volume (%(consumed)d volumes already consumed)\")"},{"line_number":100,"context_line":"                           % locals())"},{"line_number":101,"context_line":"                code \u003d \"VolumeLimitExceeded\""},{"line_number":102,"context_line":"            raise exception.QuotaError(code\u003dcode)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        if availability_zone is None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAKH%2F%2F%2FOk%3D","line":101,"updated":"2012-07-05 17:52:32.000000000","message":"the whole logic here seems kind of convoluted because of the data returned from allowed_volumes.","commit_id":"7a5475a66881759bff9fbe60194b81ea123f235f"},{"author":{"_account_id":2284,"name":"Eoghan Glynn","email":"eglynn@redhat.com","username":"eglynn"},"change_message_id":"e19a706b1fce96862e4070338efb3f9fba4459b2","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                LOG.warn(_(\"Quota exceeded for %(pid)s, tried to create \""},{"line_number":99,"context_line":"                           \"volume (%(consumed)d volumes already consumed)\")"},{"line_number":100,"context_line":"                           % locals())"},{"line_number":101,"context_line":"                code \u003d \"VolumeLimitExceeded\""},{"line_number":102,"context_line":"            raise exception.QuotaError(code\u003dcode)"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        if availability_zone is None:"}],"source_content_type":"text/x-python","patch_set":1,"id":"AAAAKH%2F%2F%2FDo%3D","line":101,"in_reply_to":"AAAAKH%2F%2F%2FOk%3D","updated":"2012-07-05 20:26:22.000000000","message":"The logic is intended to follow the structure of the corresponding fix on master:\n\n  https://review.openstack.org/9317\n\n(where the usages, quota, overs are wrapped in the OverQuota exception - the quota logic has been significantly re-worked since Essex, so this was a non-trivial backport).","commit_id":"7a5475a66881759bff9fbe60194b81ea123f235f"}]}
