)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"6d3aab254b65bb3f9435a10916c363fe87e530cb","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Fan Zhang \u003czh.f@outlook.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-11-07 14:04:59 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix quota check in trove."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Support negative number, e.g -1, as unlimited reources quota."},{"line_number":10,"context_line":"Keep 0 as a normal quota number."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":7,"id":"3f4b6375_6a0eac8c","line":7,"updated":"2017-11-07 09:00:17.000000000","message":"This first line is bad. Try to describe what has been changed in this patch briefly.","commit_id":"bfa15f27443e3eea5789a7bf742f6603058af3f9"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"6492fd303e9c079a2487de20b7d066ce692108e7","unresolved":false,"context_lines":[{"line_number":11,"context_line":"aims at supporting negative number, e.g -1, as unlimited quota restraint,"},{"line_number":12,"context_line":"and keeping 0 as a normal quota number."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"The test focuses on the functionality of"},{"line_number":15,"context_line":"trove.quota.quota.DbQuotaDriver#reserve after setting hard limit with -1."},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I028e6d7814ff240aa3f697e3d6ac8c7bac5bf3fd"},{"line_number":18,"context_line":"Closes-bug: #1729791"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":8,"id":"3f4b6375_16c75d66","line":15,"range":{"start_line":14,"start_character":0,"end_line":15,"end_character":73},"updated":"2017-11-07 12:36:45.000000000","message":"The last paragraph is unnecessary.","commit_id":"c168a6756b4e3f46835616ec2312968f71ce6aea"},{"author":{"_account_id":21781,"name":"Hunt Xu","email":"mhuntxu@gmail.com","username":"huntxu"},"change_message_id":"115228ddd96b24878326a88474836ba1a516efa9","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Fan Zhang \u003czh.f@outlook.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-11-09 10:56:13 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support negative number as unlimited quota restraint in Trove."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In other projects like nova and cinder, hard limit -1 often means"},{"line_number":10,"context_line":"unlimited quota restraint. But Trove dose not support that. This patch"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"3f4b6375_19fe4d38","line":7,"updated":"2017-11-09 03:32:53.000000000","message":"I don\u0027t think we should consider all the negative integers as unlimited. -1 is enough as other OpenStack components do.\n\nQuota API should be updated to do some input validations as well.","commit_id":"dda1481600574e74a7760d1a6330b7deb4d62926"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"650514d80d46a36358c3bf6e44b1c7aed8baf513","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Fan Zhang \u003czh.f@outlook.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-11-09 10:56:13 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Support negative number as unlimited quota restraint in Trove."},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"In other projects like nova and cinder, hard limit -1 often means"},{"line_number":10,"context_line":"unlimited quota restraint. But Trove dose not support that. This patch"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"3f4b6375_593de5db","line":7,"in_reply_to":"3f4b6375_19fe4d38","updated":"2017-11-09 03:43:29.000000000","message":"+1","commit_id":"dda1481600574e74a7760d1a6330b7deb4d62926"}],"trove/quota/quota.py":[{"author":{"_account_id":27064,"name":"lijinhui","email":"jinhui23.li@gmail.com","username":"lijinhui"},"change_message_id":"04eb0cd27e5465236a20721aa3ad258a8206458a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3f4b6375_15b317eb","updated":"2017-11-03 08:59:21.000000000","message":"maybe need consider \"quotas[resource].hard_limit \u003d 0\"","commit_id":"f620e48468e0031a611856a771194c6f4981bc52"},{"author":{"_account_id":25113,"name":"Fan Zhang","email":"zh.f@outlook.com","username":"fanzhang"},"change_message_id":"e05a13e69a645d6fbd88d218ca638bc930a5d408","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"3f4b6375_d5857fae","in_reply_to":"3f4b6375_15b317eb","updated":"2017-11-03 09:08:24.000000000","message":"Good catch. Thx.","commit_id":"f620e48468e0031a611856a771194c6f4981bc52"},{"author":{"_account_id":13562,"name":"Samuel Matzek","email":"smatzek@us.ibm.com","username":"smatzek"},"change_message_id":"88455091ab440641928aefec4f8433e147f302e5","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        overs \u003d [resource for resource in deltas"},{"line_number":149,"context_line":"                 if (int(deltas[resource]) \u003e 0 and"},{"line_number":150,"context_line":"                     0 \u003c\u003d quotas[resource].hard_limit \u003c ("},{"line_number":151,"context_line":"                     quota_usages[resource].in_use +"},{"line_number":152,"context_line":"                     quota_usages[resource].reserved +"},{"line_number":153,"context_line":"                     int(deltas[resource])))]"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f4b6375_21a7990e","line":150,"updated":"2017-11-08 17:07:51.000000000","message":"I believe this is currently incorrect.  \u003c should be \u003c\u003d otherwise it will not allow the hard_limit value as the original code does.","commit_id":"70c9699dab56b93693f691bc348ba87da1a7784e"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"64ee655cf096ed78fb4c71f75c9b03a886772ce8","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        overs \u003d [resource for resource in deltas"},{"line_number":149,"context_line":"                 if (int(deltas[resource]) \u003e 0 and"},{"line_number":150,"context_line":"                     0 \u003c\u003d quotas[resource].hard_limit \u003c ("},{"line_number":151,"context_line":"                     quota_usages[resource].in_use +"},{"line_number":152,"context_line":"                     quota_usages[resource].reserved +"},{"line_number":153,"context_line":"                     int(deltas[resource])))]"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f4b6375_f6737e15","line":150,"in_reply_to":"3f4b6375_21a7990e","updated":"2017-11-09 02:04:31.000000000","message":"+1","commit_id":"70c9699dab56b93693f691bc348ba87da1a7784e"},{"author":{"_account_id":25113,"name":"Fan Zhang","email":"zh.f@outlook.com","username":"fanzhang"},"change_message_id":"58fa06bf743d26df92f8a2958339f1c1154c98a5","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        overs \u003d [resource for resource in deltas"},{"line_number":149,"context_line":"                 if (int(deltas[resource]) \u003e 0 and"},{"line_number":150,"context_line":"                     0 \u003c\u003d quotas[resource].hard_limit \u003c ("},{"line_number":151,"context_line":"                     quota_usages[resource].in_use +"},{"line_number":152,"context_line":"                     quota_usages[resource].reserved +"},{"line_number":153,"context_line":"                     int(deltas[resource])))]"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f4b6375_366a361b","line":150,"in_reply_to":"3f4b6375_21a7990e","updated":"2017-11-09 02:26:40.000000000","message":"Good catch. The original code did miss \u003d as well.","commit_id":"70c9699dab56b93693f691bc348ba87da1a7784e"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"423131da1386395e117fc78ab51e47af7a530363","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        overs \u003d [resource for resource in deltas"},{"line_number":149,"context_line":"                 if (int(deltas[resource]) \u003e 0 and"},{"line_number":150,"context_line":"                     0 \u003c\u003d quotas[resource].hard_limit \u003c ("},{"line_number":151,"context_line":"                     quota_usages[resource].in_use +"},{"line_number":152,"context_line":"                     quota_usages[resource].reserved +"},{"line_number":153,"context_line":"                     int(deltas[resource])))]"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f4b6375_797b017b","line":150,"in_reply_to":"3f4b6375_366a361b","updated":"2017-11-09 02:34:10.000000000","message":"Fan Zhange, no, the original code is correct.","commit_id":"70c9699dab56b93693f691bc348ba87da1a7784e"},{"author":{"_account_id":25113,"name":"Fan Zhang","email":"zh.f@outlook.com","username":"fanzhang"},"change_message_id":"f9bdcba2564295457967107d061aa5de90810c43","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        overs \u003d [resource for resource in deltas"},{"line_number":149,"context_line":"                 if (int(deltas[resource]) \u003e 0 and"},{"line_number":150,"context_line":"                     0 \u003c\u003d quotas[resource].hard_limit \u003c ("},{"line_number":151,"context_line":"                     quota_usages[resource].in_use +"},{"line_number":152,"context_line":"                     quota_usages[resource].reserved +"},{"line_number":153,"context_line":"                     int(deltas[resource])))]"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f4b6375_39e4690e","line":150,"in_reply_to":"3f4b6375_797b017b","updated":"2017-11-09 02:54:24.000000000","message":"My brain is kind messy. Let me see...","commit_id":"70c9699dab56b93693f691bc348ba87da1a7784e"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"341976f958ecc47b5249d3c2d3f57e25f0338ea3","unresolved":false,"context_lines":[{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        overs \u003d [resource for resource in deltas"},{"line_number":149,"context_line":"                 if (int(deltas[resource]) \u003e 0 and"},{"line_number":150,"context_line":"                     0 \u003c\u003d quotas[resource].hard_limit \u003c ("},{"line_number":151,"context_line":"                     quota_usages[resource].in_use +"},{"line_number":152,"context_line":"                     quota_usages[resource].reserved +"},{"line_number":153,"context_line":"                     int(deltas[resource])))]"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f4b6375_79dae14b","line":150,"in_reply_to":"3f4b6375_797b017b","updated":"2017-11-09 02:55:26.000000000","message":"My mistake again, I think the change and the original code are both correct. Here we are checking for quota exceeding, meeting the hard limit shoud not be count as \u0027overs\u0027.","commit_id":"70c9699dab56b93693f691bc348ba87da1a7784e"},{"author":{"_account_id":13562,"name":"Samuel Matzek","email":"smatzek@us.ibm.com","username":"smatzek"},"change_message_id":"88455091ab440641928aefec4f8433e147f302e5","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                                                           deltas.keys())"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        overs \u003d [resource for resource in deltas"},{"line_number":149,"context_line":"                 if (int(deltas[resource]) \u003e 0 and"},{"line_number":150,"context_line":"                     0 \u003c\u003d quotas[resource].hard_limit \u003c ("},{"line_number":151,"context_line":"                     quota_usages[resource].in_use +"},{"line_number":152,"context_line":"                     quota_usages[resource].reserved +"},{"line_number":153,"context_line":"                     int(deltas[resource])))]"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        if overs:"},{"line_number":156,"context_line":"            raise exception.QuotaExceeded(overs\u003dsorted(overs))"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f4b6375_a144a948","line":153,"range":{"start_line":149,"start_character":17,"end_line":153,"end_character":45},"updated":"2017-11-08 17:07:51.000000000","message":"I think this would be clearer if written like this, to separate out special case \u003e -1 check from the specific limit check\n\n                if (int(deltas[resource]) \u003e -1  and\n                     quotas[resource].hard_limit \u003e 0 and\n                      (quota_usages[resource].in_use +\n                     quota_usages[resource].reserved +\n                     int(deltas[resource])) \u003e quotas[resource].hard_limit)]","commit_id":"70c9699dab56b93693f691bc348ba87da1a7784e"},{"author":{"_account_id":25113,"name":"Fan Zhang","email":"zh.f@outlook.com","username":"fanzhang"},"change_message_id":"58fa06bf743d26df92f8a2958339f1c1154c98a5","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                                                           deltas.keys())"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        overs \u003d [resource for resource in deltas"},{"line_number":149,"context_line":"                 if (int(deltas[resource]) \u003e 0 and"},{"line_number":150,"context_line":"                     0 \u003c\u003d quotas[resource].hard_limit \u003c ("},{"line_number":151,"context_line":"                     quota_usages[resource].in_use +"},{"line_number":152,"context_line":"                     quota_usages[resource].reserved +"},{"line_number":153,"context_line":"                     int(deltas[resource])))]"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        if overs:"},{"line_number":156,"context_line":"            raise exception.QuotaExceeded(overs\u003dsorted(overs))"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f4b6375_f6049e1a","line":153,"range":{"start_line":149,"start_character":17,"end_line":153,"end_character":45},"in_reply_to":"3f4b6375_76ce6e2e","updated":"2017-11-09 02:26:40.000000000","message":"Done","commit_id":"70c9699dab56b93693f691bc348ba87da1a7784e"},{"author":{"_account_id":25113,"name":"Fan Zhang","email":"zh.f@outlook.com","username":"fanzhang"},"change_message_id":"2a4ed27da8477718767c5c7064153efb05f3577f","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                                                           deltas.keys())"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        overs \u003d [resource for resource in deltas"},{"line_number":149,"context_line":"                 if (int(deltas[resource]) \u003e 0 and"},{"line_number":150,"context_line":"                     0 \u003c\u003d quotas[resource].hard_limit \u003c ("},{"line_number":151,"context_line":"                     quota_usages[resource].in_use +"},{"line_number":152,"context_line":"                     quota_usages[resource].reserved +"},{"line_number":153,"context_line":"                     int(deltas[resource])))]"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        if overs:"},{"line_number":156,"context_line":"            raise exception.QuotaExceeded(overs\u003dsorted(overs))"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f4b6375_79c9c1aa","line":153,"range":{"start_line":149,"start_character":17,"end_line":153,"end_character":45},"in_reply_to":"3f4b6375_76ce6e2e","updated":"2017-11-09 02:39:54.000000000","message":"Well, I think maybe it\u0027s better this way:\n        overs \u003d [resource for resource in deltas\n                 if (int(deltas[resource]) \u003e 0 and\n                     -1 \u003c quotas[resource].hard_limit \u003c (\n                     quota_usages[resource].in_use +\n                     quota_usages[resource].reserved +\n                     int(deltas[resource])))]\nJust simply chained comparison.","commit_id":"70c9699dab56b93693f691bc348ba87da1a7784e"},{"author":{"_account_id":13562,"name":"Samuel Matzek","email":"smatzek@us.ibm.com","username":"smatzek"},"change_message_id":"b527956c60ad328230d07a36c92ba4ea1fcbc89c","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                                                           deltas.keys())"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        overs \u003d [resource for resource in deltas"},{"line_number":149,"context_line":"                 if (int(deltas[resource]) \u003e 0 and"},{"line_number":150,"context_line":"                     0 \u003c\u003d quotas[resource].hard_limit \u003c ("},{"line_number":151,"context_line":"                     quota_usages[resource].in_use +"},{"line_number":152,"context_line":"                     quota_usages[resource].reserved +"},{"line_number":153,"context_line":"                     int(deltas[resource])))]"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        if overs:"},{"line_number":156,"context_line":"            raise exception.QuotaExceeded(overs\u003dsorted(overs))"}],"source_content_type":"text/x-python","patch_set":9,"id":"1f485f77_bd760f3e","line":153,"range":{"start_line":149,"start_character":17,"end_line":153,"end_character":45},"in_reply_to":"3f4b6375_76ce6e2e","updated":"2017-11-09 12:37:37.000000000","message":"Yep, that\u0027s what I meant.","commit_id":"70c9699dab56b93693f691bc348ba87da1a7784e"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"341976f958ecc47b5249d3c2d3f57e25f0338ea3","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                                                           deltas.keys())"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        overs \u003d [resource for resource in deltas"},{"line_number":149,"context_line":"                 if (int(deltas[resource]) \u003e 0 and"},{"line_number":150,"context_line":"                     0 \u003c\u003d quotas[resource].hard_limit \u003c ("},{"line_number":151,"context_line":"                     quota_usages[resource].in_use +"},{"line_number":152,"context_line":"                     quota_usages[resource].reserved +"},{"line_number":153,"context_line":"                     int(deltas[resource])))]"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        if overs:"},{"line_number":156,"context_line":"            raise exception.QuotaExceeded(overs\u003dsorted(overs))"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f4b6375_b9b979ed","line":153,"range":{"start_line":149,"start_character":17,"end_line":153,"end_character":45},"in_reply_to":"3f4b6375_79c9c1aa","updated":"2017-11-09 02:55:26.000000000","message":"Seperate comparisons are clearer, but I\u0027m ok with the chained one.","commit_id":"70c9699dab56b93693f691bc348ba87da1a7784e"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"64ee655cf096ed78fb4c71f75c9b03a886772ce8","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                                                           deltas.keys())"},{"line_number":147,"context_line":""},{"line_number":148,"context_line":"        overs \u003d [resource for resource in deltas"},{"line_number":149,"context_line":"                 if (int(deltas[resource]) \u003e 0 and"},{"line_number":150,"context_line":"                     0 \u003c\u003d quotas[resource].hard_limit \u003c ("},{"line_number":151,"context_line":"                     quota_usages[resource].in_use +"},{"line_number":152,"context_line":"                     quota_usages[resource].reserved +"},{"line_number":153,"context_line":"                     int(deltas[resource])))]"},{"line_number":154,"context_line":""},{"line_number":155,"context_line":"        if overs:"},{"line_number":156,"context_line":"            raise exception.QuotaExceeded(overs\u003dsorted(overs))"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f4b6375_76ce6e2e","line":153,"range":{"start_line":149,"start_character":17,"end_line":153,"end_character":45},"in_reply_to":"3f4b6375_a144a948","updated":"2017-11-09 02:04:31.000000000","message":"Maybe you mean:\n                 if (int(deltas[resource]) \u003e 0 and\n                     quotas[resource].hard_limit \u003e -1 and\n                     (quota_usages[resource].in_use +\n                      quota_usages[resource].reserved +\n                      int(deltas[resource])) \u003e quotas[resource].hard_limit)]","commit_id":"70c9699dab56b93693f691bc348ba87da1a7784e"}],"trove/tests/unittests/quota/test_quota.py":[{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"6d3aab254b65bb3f9435a10916c363fe87e530cb","unresolved":false,"context_lines":[{"line_number":413,"context_line":"            self.assertEqual(kw[\u0027usage_id\u0027] + 1, kw[\u0027delta\u0027])"},{"line_number":414,"context_line":"            self.assertEqual(Reservation.Statuses.RESERVED, kw[\u0027status\u0027])"},{"line_number":415,"context_line":""},{"line_number":416,"context_line":"    def test_reserve_with_unlimited_quota(self):"},{"line_number":417,"context_line":""},{"line_number":418,"context_line":"        FAKE_QUOTA_USAGE \u003d [QuotaUsage(id\u003d1,"},{"line_number":419,"context_line":"                                       tenant_id\u003dFAKE_TENANT1,"}],"source_content_type":"text/x-python","patch_set":7,"id":"3f4b6375_0a75f831","line":416,"updated":"2017-11-07 09:00:17.000000000","message":"Only the behavior of DbQuotaDriver.check_quotas has been changed here, so just we should just add new unittests for it and it\u0027s not necessary to test this change for DbQuotaDriver.reserve.","commit_id":"bfa15f27443e3eea5789a7bf742f6603058af3f9"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"6492fd303e9c079a2487de20b7d066ce692108e7","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        QuotaUsage.save \u003d Mock()"},{"line_number":438,"context_line":"        Reservation.create \u003d Mock()"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        # Check if the hard limit has been set to -1."},{"line_number":441,"context_line":"        quotas \u003d self.driver.get_all_quotas_by_tenant(FAKE_TENANT1,"},{"line_number":442,"context_line":"                                                      resources.keys())"},{"line_number":443,"context_line":"        self.assertEqual(FAKE_TENANT1, quotas[Resource.INSTANCES].tenant_id)"},{"line_number":444,"context_line":"        self.assertEqual(-1, quotas[Resource.INSTANCES].hard_limit)"},{"line_number":445,"context_line":"        self.assertEqual(-1, quotas[Resource.VOLUMES].hard_limit)"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        # Set up the deltas with the intention that after the reserve call"},{"line_number":448,"context_line":"        # the deltas should match usage_id + 1 for both instances and volumes"}],"source_content_type":"text/x-python","patch_set":8,"id":"3f4b6375_f6960149","line":445,"range":{"start_line":440,"start_character":0,"end_line":445,"end_character":65},"updated":"2017-11-07 12:36:45.000000000","message":"This is unrelated.","commit_id":"c168a6756b4e3f46835616ec2312968f71ce6aea"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"6492fd303e9c079a2487de20b7d066ce692108e7","unresolved":false,"context_lines":[{"line_number":444,"context_line":"        self.assertEqual(-1, quotas[Resource.INSTANCES].hard_limit)"},{"line_number":445,"context_line":"        self.assertEqual(-1, quotas[Resource.VOLUMES].hard_limit)"},{"line_number":446,"context_line":""},{"line_number":447,"context_line":"        # Set up the deltas with the intention that after the reserve call"},{"line_number":448,"context_line":"        # the deltas should match usage_id + 1 for both instances and volumes"},{"line_number":449,"context_line":"        delta \u003d {\u0027instances\u0027: 2, \u0027volumes\u0027: 3}"},{"line_number":450,"context_line":"        self.driver.reserve(FAKE_TENANT1, resources, delta)"},{"line_number":451,"context_line":""},{"line_number":452,"context_line":"        for _, kw in Reservation.create.call_args_list:"},{"line_number":453,"context_line":"            self.assertEqual(kw[\u0027usage_id\u0027] + 1, kw[\u0027delta\u0027])"},{"line_number":454,"context_line":"            self.assertEqual(Reservation.Statuses.RESERVED, kw[\u0027status\u0027])"},{"line_number":455,"context_line":""},{"line_number":456,"context_line":"    def test_reserve_resource_unknown(self):"},{"line_number":457,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"3f4b6375_367a5923","line":454,"range":{"start_line":447,"start_character":0,"end_line":454,"end_character":73},"updated":"2017-11-07 12:36:45.000000000","message":"If \u0027reserve\u0027 is used to verify how check_quotas works, there\u0027s no need to check usage_id, delta, and status. Use:\n\ntry:\n    self.driver.reserver(...)\nexecpt exception.QuotaExceeded:\n    self.fail(...)\n\nBut I still think adding a new unittest to verify check_quota directly is better (for this, the same try...except...self.fail approach can also be used).","commit_id":"c168a6756b4e3f46835616ec2312968f71ce6aea"},{"author":{"_account_id":24739,"name":"Yao Wang","email":"wangyao@cmss.chinamobile.com","username":"wangyao"},"change_message_id":"e425f221306e285340d6f2b92576fc78fded7dde","unresolved":false,"context_lines":[{"line_number":438,"context_line":"        Reservation.create \u003d Mock()"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        delta \u003d {\u0027instances\u0027: 2, \u0027volumes\u0027: 3}"},{"line_number":441,"context_line":"        try:"},{"line_number":442,"context_line":"            self.driver.reserve(FAKE_TENANT1, resources, delta)"},{"line_number":443,"context_line":"        except exception.QuotaExceeded:"},{"line_number":444,"context_line":"            self.fail(\"Limit -1 should represent unlimited, but it didn\u0027t\")"}],"source_content_type":"text/x-python","patch_set":9,"id":"3f4b6375_ef461c21","line":441,"range":{"start_line":441,"start_character":11,"end_line":441,"end_character":12},"updated":"2017-11-08 00:52:04.000000000","message":"hi, I think in the tests try ...except shoud change like this.\nself.assertRaises(exception.QuotaExceeded,\n                          self.driver.reserve,\n                          FAKE_TENANT1,\n                          resources,\n                          delta)","commit_id":"70c9699dab56b93693f691bc348ba87da1a7784e"},{"author":{"_account_id":22608,"name":"zhanggang","email":"zhanggang@cmss.chinamobile.com","username":"zhanggang"},"change_message_id":"a5762ded7b48abbea47208f259b62f2d1219bc58","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        QuotaUsage.save \u003d Mock()"},{"line_number":438,"context_line":"        Reservation.create \u003d Mock()"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        delta \u003d {\u0027instances\u0027: 2, \u0027volumes\u0027: 3}"},{"line_number":441,"context_line":"        try:"},{"line_number":442,"context_line":"            self.driver.reserve(FAKE_TENANT1, resources, delta)"},{"line_number":443,"context_line":"        except exception.QuotaExceeded:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f4b6375_d901d508","line":440,"range":{"start_line":440,"start_character":8,"end_line":440,"end_character":13},"updated":"2017-11-09 03:43:39.000000000","message":"use try...expect is bad in test case. \njust use like assertEqual(overs, None) is enough.","commit_id":"dda1481600574e74a7760d1a6330b7deb4d62926"},{"author":{"_account_id":22608,"name":"zhanggang","email":"zhanggang@cmss.chinamobile.com","username":"zhanggang"},"change_message_id":"b9699bbe7645252bb7303301466fc241dff4e88b","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        QuotaUsage.save \u003d Mock()"},{"line_number":438,"context_line":"        Reservation.create \u003d Mock()"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        delta \u003d {\u0027instances\u0027: 2, \u0027volumes\u0027: 3}"},{"line_number":441,"context_line":"        try:"},{"line_number":442,"context_line":"            self.driver.reserve(FAKE_TENANT1, resources, delta)"},{"line_number":443,"context_line":"        except exception.QuotaExceeded:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f4b6375_dc4e6337","line":440,"range":{"start_line":440,"start_character":8,"end_line":440,"end_character":13},"in_reply_to":"3f4b6375_3cac57ed","updated":"2017-11-09 04:17:12.000000000","message":"yes, assertIsNone is better.","commit_id":"dda1481600574e74a7760d1a6330b7deb4d62926"},{"author":{"_account_id":13157,"name":"Zhao Chao","email":"zhaochao1984@gmail.com","username":"zhaochao"},"change_message_id":"641ee96cb3c879061102970559b832c235f7609e","unresolved":false,"context_lines":[{"line_number":437,"context_line":"        QuotaUsage.save \u003d Mock()"},{"line_number":438,"context_line":"        Reservation.create \u003d Mock()"},{"line_number":439,"context_line":""},{"line_number":440,"context_line":"        delta \u003d {\u0027instances\u0027: 2, \u0027volumes\u0027: 3}"},{"line_number":441,"context_line":"        try:"},{"line_number":442,"context_line":"            self.driver.reserve(FAKE_TENANT1, resources, delta)"},{"line_number":443,"context_line":"        except exception.QuotaExceeded:"}],"source_content_type":"text/x-python","patch_set":10,"id":"3f4b6375_3cac57ed","line":440,"range":{"start_line":440,"start_character":8,"end_line":440,"end_character":13},"in_reply_to":"3f4b6375_d901d508","updated":"2017-11-09 04:03:07.000000000","message":"This sounds good, but \u0027overs\u0027 is a local variables, we cannot check it directly, and we has assertIsNone.\n\nSo the correct unittest may be:\n1. test for check_quotas\n2. test the return value of check_quotas, when unlimited quotas are used, check_quotas should return None (no explicit return value, otherwise QuotaExceed will be raised.)\n3. use assertIsNoe to check this","commit_id":"dda1481600574e74a7760d1a6330b7deb4d62926"}]}
