)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":7198,"name":"Jay Bryant","email":"jungleboyj@electronicjungle.net","username":"jsbryant"},"change_message_id":"4742ac97ea811ca9f094d3dad9ddc4f6a7c6687d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Do valid check on quota class hard_limit value"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Cinder quota class hard_limit’s value should larger than -1(-1 is a flag"},{"line_number":10,"context_line":"value for unlimited)."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Closes-bug: #1245360"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"AAAATn%2F%2FpYE%3D","line":9,"updated":"2013-10-30 22:55:40.000000000","message":"Fix typos  \u0027value should be larger\u0027 and space after -1 .","commit_id":"a83032c6dbf12ff6dbc321168b94abd0829c560e"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"6dd219f8d57be2ff1d693b08168d25f92de8b1e8","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Do valid check on quota class hard_limit value"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"1.Cinder quota class hard_limit’s value should larger than -1(-1 is a flag"},{"line_number":10,"context_line":"value for unlimited)."},{"line_number":11,"context_line":"2.Add unit tests for quota class."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":5,"id":"AAAATn%2F%2Fn0s%3D","line":9,"updated":"2013-10-31 09:52:47.000000000","message":"Add space: -1 (-1","commit_id":"2d29a5aa62dafb7e6bde630b4960acc57a081627"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"2439fb47d6943d6611c6d6904ac513a5af2b35c9","unresolved":false,"context_lines":[{"line_number":11,"context_line":"1）Reference to cinder/cinder/api/contrib/quotas.py, project\u0027s quota hard"},{"line_number":12,"context_line":"limit value is larger than -1. In cinder quota module, four table"},{"line_number":13,"context_line":"associate with quota and it\u0027s hiberarchy relationship is quota_classes --\u003e"},{"line_number":14,"context_line":"quotas --\u003e quota_usages\u0026\u0026reservations.Quotas resource hard limit value is"},{"line_number":15,"context_line":"part of the quota_classes related resource\u0027s hard limit."},{"line_number":16,"context_line":"2）In Linux system, resource limit value is larger than 0 (using"},{"line_number":17,"context_line":"\"unlimited\" string to represent unlimited)."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"AAAATn%2F%2FQo8%3D","line":14,"updated":"2013-11-12 04:44:31.000000000","message":"please add a space before \u0026 after \u0027\u0026\u0026\u0027 to make it more readable.","commit_id":"82da7bcdf505c75a0fe7ad7abaf758220d527455"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"ecc55a9b83f63d9988aa57d413eb8ca1a556e13f","unresolved":false,"context_lines":[{"line_number":11,"context_line":"1）Reference to cinder/cinder/api/contrib/quotas.py, project\u0027s quota hard"},{"line_number":12,"context_line":"limit value is larger than -1. In cinder quota module, four table"},{"line_number":13,"context_line":"associate with quota and it\u0027s hiberarchy relationship is quota_classes --\u003e"},{"line_number":14,"context_line":"quotas --\u003e quota_usages\u0026\u0026reservations.Quotas resource hard limit value is"},{"line_number":15,"context_line":"part of the quota_classes related resource\u0027s hard limit."},{"line_number":16,"context_line":"2）In Linux system, resource limit value is larger than 0 (using"},{"line_number":17,"context_line":"\"unlimited\" string to represent unlimited)."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"AAAATn%2F%2FQVA%3D","line":14,"in_reply_to":"AAAATn%2F%2FQo8%3D","updated":"2013-11-12 07:22:14.000000000","message":"I think all of this text can be deleted - 1) and 2)","commit_id":"82da7bcdf505c75a0fe7ad7abaf758220d527455"},{"author":{"_account_id":8874,"name":"ling-yun","email":"YunlingZeng@hotmail.com","username":"ling-yun"},"change_message_id":"a1978b327bc50e8f1faec5e64e6cc7010e0a7e2a","unresolved":false,"context_lines":[{"line_number":11,"context_line":"1）Reference to cinder/cinder/api/contrib/quotas.py, project\u0027s quota hard"},{"line_number":12,"context_line":"limit value is larger than -1. In cinder quota module, four table"},{"line_number":13,"context_line":"associate with quota and it\u0027s hiberarchy relationship is quota_classes --\u003e"},{"line_number":14,"context_line":"quotas --\u003e quota_usages\u0026\u0026reservations.Quotas resource hard limit value is"},{"line_number":15,"context_line":"part of the quota_classes related resource\u0027s hard limit."},{"line_number":16,"context_line":"2）In Linux system, resource limit value is larger than 0 (using"},{"line_number":17,"context_line":"\"unlimited\" string to represent unlimited)."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"AAAATn%2F%2FQcw%3D","line":14,"in_reply_to":"AAAATn%2F%2FQo8%3D","updated":"2013-11-12 07:30:41.000000000","message":"Thanks. Will modify it in the next patch.","commit_id":"82da7bcdf505c75a0fe7ad7abaf758220d527455"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"2439fb47d6943d6611c6d6904ac513a5af2b35c9","unresolved":false,"context_lines":[{"line_number":14,"context_line":"quotas --\u003e quota_usages\u0026\u0026reservations.Quotas resource hard limit value is"},{"line_number":15,"context_line":"part of the quota_classes related resource\u0027s hard limit."},{"line_number":16,"context_line":"2）In Linux system, resource limit value is larger than 0 (using"},{"line_number":17,"context_line":"\"unlimited\" string to represent unlimited)."},{"line_number":18,"context_line":"2.Add unit tests for quota class."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Closes-bug: #1245360"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"AAAATn%2F%2FQpE%3D","line":17,"updated":"2013-11-12 04:44:31.000000000","message":"Are you suggesting that we should change \u0027-1\u0027 to \u0027unlimited\u0027 string for unlimited value or something else?","commit_id":"82da7bcdf505c75a0fe7ad7abaf758220d527455"},{"author":{"_account_id":8874,"name":"ling-yun","email":"YunlingZeng@hotmail.com","username":"ling-yun"},"change_message_id":"a1978b327bc50e8f1faec5e64e6cc7010e0a7e2a","unresolved":false,"context_lines":[{"line_number":14,"context_line":"quotas --\u003e quota_usages\u0026\u0026reservations.Quotas resource hard limit value is"},{"line_number":15,"context_line":"part of the quota_classes related resource\u0027s hard limit."},{"line_number":16,"context_line":"2）In Linux system, resource limit value is larger than 0 (using"},{"line_number":17,"context_line":"\"unlimited\" string to represent unlimited)."},{"line_number":18,"context_line":"2.Add unit tests for quota class."},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"Closes-bug: #1245360"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"AAAATn%2F%2FQbE%3D","line":17,"in_reply_to":"AAAATn%2F%2FQpE%3D","updated":"2013-11-12 07:30:41.000000000","message":"No.Here i quote linux\u0027s hard limit value to prove the rational of using -1 to represent the flag value for unlimited.","commit_id":"82da7bcdf505c75a0fe7ad7abaf758220d527455"}],"cinder/api/contrib/quota_classes.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"6dd219f8d57be2ff1d693b08168d25f92de8b1e8","unresolved":false,"context_lines":[{"line_number":71,"context_line":"        for key in body[\u0027quota_class_set\u0027].keys():"},{"line_number":72,"context_line":"            if key in QUOTAS:"},{"line_number":73,"context_line":"                self._validate_quota_class_limit(body[\u0027quota_class_set\u0027][key])"},{"line_number":74,"context_line":"                value \u003d int(body[\u0027quota_class_set\u0027][key])"},{"line_number":75,"context_line":"                try:"},{"line_number":76,"context_line":"                    db.quota_class_update(context, quota_class, key, value)"},{"line_number":77,"context_line":"                except exception.QuotaClassNotFound:"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2Fn00%3D","line":74,"updated":"2013-10-31 09:52:47.000000000","message":"Lines 73 and 74 should be reversed - first convert to int, then perform the checks.  In my opinion the code should be:\n\ntry:\n    value \u003d int(body[\u0027quota_class_set\u0027][key])\nexcept ValueError:\n    msg \u003d _(\"Quota class limit must be specified as an integer value.\")\n    raise webob.exc.HTTPBadRequest(explanation\u003dmsg)\n\nif value \u003c -1:\n    msg \u003d _(\"Quota class limit must be -1 or greater.\")\n    raise webob.exc.HTTPBadRequest(explanation\u003dmsg)","commit_id":"2d29a5aa62dafb7e6bde630b4960acc57a081627"},{"author":{"_account_id":8289,"name":"huangtianhua","email":"tiantian223@163.com","username":"huangtianhua"},"change_message_id":"85217421406074ad2c04c3eeb1f74934c3bbc0fb","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":69,"context_line":"        authorize(context)"},{"line_number":70,"context_line":"        quota_class \u003d id"},{"line_number":71,"context_line":"        for key in body[\u0027quota_class_set\u0027].keys():"},{"line_number":72,"context_line":"            if key in QUOTAS:"},{"line_number":73,"context_line":"                try:"},{"line_number":74,"context_line":"                    value \u003d int(body[\u0027quota_class_set\u0027][key])"}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F%2FXCk%3D","line":71,"updated":"2013-11-08 08:38:33.000000000","message":"Catch a KeyError here to check whether the para \"quota_class_set\" is in request body and to transfer to HTTPBadRequest error.\nPerhaps you can modify this in a new patch.","commit_id":"e0671982a7a7f8ebc1f9bad6f6ef953062a788ef"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"2439fb47d6943d6611c6d6904ac513a5af2b35c9","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":69,"context_line":"        authorize(context)"},{"line_number":70,"context_line":"        quota_class \u003d id"},{"line_number":71,"context_line":"        for key in body[\u0027quota_class_set\u0027].keys():"},{"line_number":72,"context_line":"            if key in QUOTAS:"},{"line_number":73,"context_line":"                try:"},{"line_number":74,"context_line":"                    value \u003d int(body[\u0027quota_class_set\u0027][key])"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F%2FQpk%3D","line":71,"updated":"2013-11-12 04:44:31.000000000","message":"add a body validation here for \u0027quota_class_set\u0027 here, please.","commit_id":"82da7bcdf505c75a0fe7ad7abaf758220d527455"},{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"ecc55a9b83f63d9988aa57d413eb8ca1a556e13f","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":69,"context_line":"        authorize(context)"},{"line_number":70,"context_line":"        quota_class \u003d id"},{"line_number":71,"context_line":"        for key in body[\u0027quota_class_set\u0027].keys():"},{"line_number":72,"context_line":"            if key in QUOTAS:"},{"line_number":73,"context_line":"                try:"},{"line_number":74,"context_line":"                    value \u003d int(body[\u0027quota_class_set\u0027][key])"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F%2FQVE%3D","line":71,"in_reply_to":"AAAATn%2F%2FQpk%3D","updated":"2013-11-12 07:22:14.000000000","message":"This check is not related to this patch - a separate bug report was open for this","commit_id":"82da7bcdf505c75a0fe7ad7abaf758220d527455"},{"author":{"_account_id":8874,"name":"ling-yun","email":"YunlingZeng@hotmail.com","username":"ling-yun"},"change_message_id":"a1978b327bc50e8f1faec5e64e6cc7010e0a7e2a","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        context \u003d req.environ[\u0027cinder.context\u0027]"},{"line_number":69,"context_line":"        authorize(context)"},{"line_number":70,"context_line":"        quota_class \u003d id"},{"line_number":71,"context_line":"        for key in body[\u0027quota_class_set\u0027].keys():"},{"line_number":72,"context_line":"            if key in QUOTAS:"},{"line_number":73,"context_line":"                try:"},{"line_number":74,"context_line":"                    value \u003d int(body[\u0027quota_class_set\u0027][key])"}],"source_content_type":"text/x-python","patch_set":16,"id":"AAAATn%2F%2FQc8%3D","line":71,"in_reply_to":"AAAATn%2F%2FQpk%3D","updated":"2013-11-12 07:30:41.000000000","message":"This is would be done in bug 1249730 reported by Avishay Traeger.","commit_id":"82da7bcdf505c75a0fe7ad7abaf758220d527455"}],"cinder/tests/api/contrib/test_quotas_classes.py":[{"author":{"_account_id":4355,"name":"Avishay Traeger","email":"avishay@stratoscale.com","username":"avishay-il"},"change_message_id":"6dd219f8d57be2ff1d693b08168d25f92de8b1e8","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                 \u0027snapshots\u0027: snapshots,"},{"line_number":36,"context_line":"                 \u0027volumes\u0027: volumes}"},{"line_number":37,"context_line":"    # need to consider preexisting volume types as well"},{"line_number":38,"context_line":"    volume_types \u003d db.volume_type_get_all(context.get_admin_context())"},{"line_number":39,"context_line":"    for volume_type in volume_types:"},{"line_number":40,"context_line":"        resources[\u0027gigabytes_\u0027 + volume_type] \u003d -1"},{"line_number":41,"context_line":"        resources[\u0027snapshots_\u0027 + volume_type] \u003d -1"}],"source_content_type":"text/x-python","patch_set":5,"id":"AAAATn%2F%2Fn1A%3D","line":38,"updated":"2013-10-31 09:52:47.000000000","message":"Volume types should be faked in these unit tests - there shouldn\u0027t be any defined at this point, and you don\u0027t seem to use it in the tests.","commit_id":"2d29a5aa62dafb7e6bde630b4960acc57a081627"},{"author":{"_account_id":170,"name":"Mike Perez","email":"thingee@gmail.com","username":"thingee"},"change_message_id":"d03bdae49714723cccb0a555043ae1aff9287d02","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"from cinder.api.contrib import quota_classes"},{"line_number":27,"context_line":"from cinder import context"},{"line_number":28,"context_line":"from cinder import db"},{"line_number":29,"context_line":"from cinder import test"},{"line_number":30,"context_line":"from cinder.volume import volume_types"},{"line_number":31,"context_line":""}],"source_content_type":"text/x-python","patch_set":15,"id":"AAAATn%2F%2FUHU%3D","line":28,"updated":"2013-11-11 06:08:52.000000000","message":"db is never used.","commit_id":"e0671982a7a7f8ebc1f9bad6f6ef953062a788ef"},{"author":{"_account_id":2759,"name":"Huang Zhiteng","email":"winston.d@gmail.com","username":"zhiteng-huang"},"change_message_id":"54c8af7aae0eff83078268da29579ef48af296e0","unresolved":false,"context_lines":[{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def make_body(root\u003dTrue, gigabytes\u003d1000, snapshots\u003d10,"},{"line_number":33,"context_line":"              volumes\u003d10, tenant_id\u003d\u0027foo\u0027):"},{"line_number":34,"context_line":"    resources \u003d {\u0027gigabytes\u0027: gigabytes,"},{"line_number":35,"context_line":"                 \u0027snapshots\u0027: snapshots,"},{"line_number":36,"context_line":"                 \u0027volumes\u0027: volumes}"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F%2FL5w%3D","line":33,"updated":"2013-11-13 07:53:39.000000000","message":"Making the same helper function for both request and result generation limits its flexibility.  For example, what if I want to test a request like \u0027{\"quota_set\": {\"snapshots_type-1\": 100, \"volumes_type-2\": 10, \"tenant_id\": \"foo\"}}\u0027 while there are more than 2 types?","commit_id":"fee5fe00433bc1f4f39f88560b8b894772f2fd03"},{"author":{"_account_id":5538,"name":"Rushi Agrawal","email":"rushi.openstack@gmail.com","username":"rushiagr"},"change_message_id":"5eacb35833592240fc74056f9dfff729eff03500","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                 \u0027snapshots\u0027: snapshots,"},{"line_number":36,"context_line":"                 \u0027volumes\u0027: volumes}"},{"line_number":37,"context_line":"    # need to consider preexisting volume types as well"},{"line_number":38,"context_line":"    volume_types_faked \u003d [\u0027fake_type\u0027]"},{"line_number":39,"context_line":"    for volume_type in volume_types_faked:"},{"line_number":40,"context_line":"        resources[\u0027gigabytes_\u0027 + volume_type] \u003d -1"},{"line_number":41,"context_line":"        resources[\u0027snapshots_\u0027 + volume_type] \u003d -1"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F%2FPTY%3D","line":38,"updated":"2013-11-12 12:54:38.000000000","message":"Any reason why you want to have this as a list? Doesn\u0027t sound reasonable to me. We can just append the string \u0027fake_type\u0027 for the three types of resources, and save an unnecessary \u0027for\u0027","commit_id":"fee5fe00433bc1f4f39f88560b8b894772f2fd03"},{"author":{"_account_id":8282,"name":"Dong Liu","email":"willowd878@gmail.com","username":"liudong"},"change_message_id":"5eb8871e5f1235ff7570fe3f36c2e42cdac2f3d5","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                 \u0027snapshots\u0027: snapshots,"},{"line_number":36,"context_line":"                 \u0027volumes\u0027: volumes}"},{"line_number":37,"context_line":"    # need to consider preexisting volume types as well"},{"line_number":38,"context_line":"    volume_types_faked \u003d [\u0027fake_type\u0027]"},{"line_number":39,"context_line":"    for volume_type in volume_types_faked:"},{"line_number":40,"context_line":"        resources[\u0027gigabytes_\u0027 + volume_type] \u003d -1"},{"line_number":41,"context_line":"        resources[\u0027snapshots_\u0027 + volume_type] \u003d -1"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F%2FMeg%3D","line":38,"in_reply_to":"AAAATn%2F%2FM2A%3D","updated":"2013-11-13 03:52:53.000000000","message":"Can we change this var, something like volume_types for a collection of types","commit_id":"fee5fe00433bc1f4f39f88560b8b894772f2fd03"},{"author":{"_account_id":8874,"name":"ling-yun","email":"YunlingZeng@hotmail.com","username":"ling-yun"},"change_message_id":"2cc4f9ff4fcfa7be8a4e6541c949744ed18d4f82","unresolved":false,"context_lines":[{"line_number":35,"context_line":"                 \u0027snapshots\u0027: snapshots,"},{"line_number":36,"context_line":"                 \u0027volumes\u0027: volumes}"},{"line_number":37,"context_line":"    # need to consider preexisting volume types as well"},{"line_number":38,"context_line":"    volume_types_faked \u003d [\u0027fake_type\u0027]"},{"line_number":39,"context_line":"    for volume_type in volume_types_faked:"},{"line_number":40,"context_line":"        resources[\u0027gigabytes_\u0027 + volume_type] \u003d -1"},{"line_number":41,"context_line":"        resources[\u0027snapshots_\u0027 + volume_type] \u003d -1"}],"source_content_type":"text/x-python","patch_set":18,"id":"AAAATn%2F%2FM2A%3D","line":38,"in_reply_to":"AAAATn%2F%2FPTY%3D","updated":"2013-11-13 01:17:49.000000000","message":"Easy to add more volume type to test when using list .","commit_id":"fee5fe00433bc1f4f39f88560b8b894772f2fd03"}]}
