)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"15a422300b45b5dc0603b051c23f04f53e60df53","unresolved":false,"context_lines":[{"line_number":11,"context_line":"error will raise when the retry limit exceed, currently"},{"line_number":12,"context_line":"a log about limit exceed is generated but a"},{"line_number":13,"context_line":"ResourceClassExists Error is raised, which is a little"},{"line_number":14,"context_line":"bit wired and might confusing the users."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"We\u0027d better add a particular Exception for this kind of"},{"line_number":17,"context_line":"scenario and it could be used in other places also."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"fa31d9ce_2e4bc8b1","line":14,"updated":"2017-02-13 13:36:08.000000000","message":"confuse","commit_id":"345a90ca20aba33c2c3b25d32f0d125e8f5355f0"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"8137259bc1bea7c70722c75ee38a9475f9b4f164","unresolved":false,"context_lines":[{"line_number":11,"context_line":"error will raise when the retry limit exceed, currently"},{"line_number":12,"context_line":"a log about limit exceed is generated but a"},{"line_number":13,"context_line":"ResourceClassExists Error is raised, which is a little"},{"line_number":14,"context_line":"bit wired and might confusing the users."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"We\u0027d better add a particular Exception for this kind of"},{"line_number":17,"context_line":"scenario and it could be used in other places also."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"fa31d9ce_2bc57a5a","line":14,"range":{"start_line":14,"start_character":4,"end_line":14,"end_character":9},"updated":"2017-02-13 13:04:20.000000000","message":"wierd","commit_id":"345a90ca20aba33c2c3b25d32f0d125e8f5355f0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6cdfc3af4691970effcaa65f3f671d6b135b67bb","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Kevin_Zheng \u003czhengzhenyu@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-02-17 17:15:01 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Should raise correct error instead of class exist in Placement API"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When create resource class using placement API, and at"},{"line_number":10,"context_line":"the DB layer, we have a retry logic for 100 loop, and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da36d5c6_01ab958a","line":7,"updated":"2017-02-18 17:10:33.000000000","message":"s/Should raise/Raise/","commit_id":"ff9ec3bab9eb52b5e270bfbac16b52c82efcdbf8"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4d664a53fb80c4f0d2c127d994884bd4546cb283","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Kevin_Zheng \u003czhengzhenyu@huawei.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-02-17 17:15:01 +0800"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Should raise correct error instead of class exist in Placement API"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When create resource class using placement API, and at"},{"line_number":10,"context_line":"the DB layer, we have a retry logic for 100 loop, and"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da36d5c6_f77d62e8","line":7,"in_reply_to":"da36d5c6_01ab958a","updated":"2017-02-19 07:51:21.000000000","message":"Done","commit_id":"ff9ec3bab9eb52b5e270bfbac16b52c82efcdbf8"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"6cdfc3af4691970effcaa65f3f671d6b135b67bb","unresolved":false,"context_lines":[{"line_number":11,"context_line":"error will raise when the retry limit exceed, currently"},{"line_number":12,"context_line":"a log about limit exceed is generated but a"},{"line_number":13,"context_line":"ResourceClassExists Error is raised, which is a little"},{"line_number":14,"context_line":"bit wierd and might confuse the users."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"We\u0027d better add a particular Exception for this kind of"},{"line_number":17,"context_line":"scenario and it could be used in other places also."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da36d5c6_e1a5a1b5","line":14,"updated":"2017-02-18 17:10:33.000000000","message":"s/wierd/weird/ :)","commit_id":"ff9ec3bab9eb52b5e270bfbac16b52c82efcdbf8"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"4d664a53fb80c4f0d2c127d994884bd4546cb283","unresolved":false,"context_lines":[{"line_number":11,"context_line":"error will raise when the retry limit exceed, currently"},{"line_number":12,"context_line":"a log about limit exceed is generated but a"},{"line_number":13,"context_line":"ResourceClassExists Error is raised, which is a little"},{"line_number":14,"context_line":"bit wierd and might confuse the users."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"We\u0027d better add a particular Exception for this kind of"},{"line_number":17,"context_line":"scenario and it could be used in other places also."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"da36d5c6_1783d6cd","line":14,"in_reply_to":"da36d5c6_e1a5a1b5","updated":"2017-02-19 07:51:21.000000000","message":"Done","commit_id":"ff9ec3bab9eb52b5e270bfbac16b52c82efcdbf8"}],"nova/api/openstack/placement/handlers/resource_class.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"15a422300b45b5dc0603b051c23f04f53e60df53","unresolved":false,"context_lines":[{"line_number":84,"context_line":"            {\u0027name\u0027: data[\u0027name\u0027]},"},{"line_number":85,"context_line":"            json_formatter\u003dutil.json_error_formatter)"},{"line_number":86,"context_line":"    except exception.MaxRetryLimitExceed:"},{"line_number":87,"context_line":"        raise webob.exc.HTTPRequestTimeout("},{"line_number":88,"context_line":"            _(\u0027The server failed to add resource class: %(name)s, please\u0027"},{"line_number":89,"context_line":"              \u0027try again.\u0027) %"},{"line_number":90,"context_line":"            {\u0027name\u0027: data[\u0027name\u0027]},"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_09935ea4","line":87,"updated":"2017-02-13 13:36:08.000000000","message":"This isn\u0027t the right exception here. A request time out is raised when the server has spent too long waiting for the client to send all its information. See: https://httpstatuses.com/408\n\nConflict (409) which a different message is still probably the right response here because it means: \"could not be completed due to a conflict with the current state of the target resource\"\n\nIf that doesn\u0027t suit then the fallback is 400 (BadRequest).","commit_id":"345a90ca20aba33c2c3b25d32f0d125e8f5355f0"},{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"15a422300b45b5dc0603b051c23f04f53e60df53","unresolved":false,"context_lines":[{"line_number":85,"context_line":"            json_formatter\u003dutil.json_error_formatter)"},{"line_number":86,"context_line":"    except exception.MaxRetryLimitExceed:"},{"line_number":87,"context_line":"        raise webob.exc.HTTPRequestTimeout("},{"line_number":88,"context_line":"            _(\u0027The server failed to add resource class: %(name)s, please\u0027"},{"line_number":89,"context_line":"              \u0027try again.\u0027) %"},{"line_number":90,"context_line":"            {\u0027name\u0027: data[\u0027name\u0027]},"},{"line_number":91,"context_line":"            json_formatter\u003dutil.json_error_formatter)"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_a942520e","line":88,"updated":"2017-02-13 13:36:08.000000000","message":"The message here doesn\u0027t provide any information about why the failure happened which makes the request to try again unclear. Try again with the same data? Try again with something else? If we say that the database had a key generation conflict, then that suggests that submitting the same info is the right way to go.","commit_id":"345a90ca20aba33c2c3b25d32f0d125e8f5355f0"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ae52f2a0f9bd83138301f0378db059f7c1c222a5","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":88,"context_line":"            _(\u0027Max retries of DB transaction exceeded attempting \u0027"},{"line_number":89,"context_line":"              \u0027to create resource class: %(name)s, please\u0027"},{"line_number":90,"context_line":"              \u0027try again.\u0027) %"},{"line_number":91,"context_line":"            {\u0027name\u0027: data[\u0027name\u0027]},"},{"line_number":92,"context_line":"            json_formatter\u003dutil.json_error_formatter)"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa31d9ce_c212d408","line":90,"updated":"2017-02-14 08:43:30.000000000","message":"I have a little confuse on why we need another message than the one in exception MaxDBRetriesExceeded?","commit_id":"fd46c3eb01d32b7dfa993f5405769fd2fd773c40"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f464589f7d6fc5ca03e5bbec3909903624541742","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":88,"context_line":"            _(\u0027Max retries of DB transaction exceeded attempting \u0027"},{"line_number":89,"context_line":"              \u0027to create resource class: %(name)s, please\u0027"},{"line_number":90,"context_line":"              \u0027try again.\u0027) %"},{"line_number":91,"context_line":"            {\u0027name\u0027: data[\u0027name\u0027]},"},{"line_number":92,"context_line":"            json_formatter\u003dutil.json_error_formatter)"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa31d9ce_9332df0e","line":90,"in_reply_to":"fa31d9ce_c212d408","updated":"2017-02-14 15:57:06.000000000","message":"One exception (the one above) is user-facing. The other is internal.","commit_id":"fd46c3eb01d32b7dfa993f5405769fd2fd773c40"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"86161fa7c805f2534cc6160d8e878e977fd8c81c","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        raise webob.exc.HTTPConflict("},{"line_number":88,"context_line":"            _(\u0027Max retries of DB transaction exceeded attempting \u0027"},{"line_number":89,"context_line":"              \u0027to create resource class: %(name)s, please\u0027"},{"line_number":90,"context_line":"              \u0027try again.\u0027) %"},{"line_number":91,"context_line":"            {\u0027name\u0027: data[\u0027name\u0027]},"},{"line_number":92,"context_line":"            json_formatter\u003dutil.json_error_formatter)"},{"line_number":93,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"fa31d9ce_2a0c5b3a","line":90,"in_reply_to":"fa31d9ce_c212d408","updated":"2017-02-14 13:53:02.000000000","message":"at least this message\u0027s format is better than the MaxDBRetriesExcceded one.","commit_id":"fd46c3eb01d32b7dfa993f5405769fd2fd773c40"}],"nova/exception.py":[{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"11c1ca39d2c0b9a291f54d43f1fe8282a46f51c8","unresolved":false,"context_lines":[{"line_number":2067,"context_line":"    msg_fmt \u003d _(\"Libguestfs does not have permission to read host kernel.\")"},{"line_number":2068,"context_line":""},{"line_number":2069,"context_line":""},{"line_number":2070,"context_line":"class MaxRetryLimitExceed(NovaException):"},{"line_number":2071,"context_line":"    msg_fmt \u003d _(\"Max retry limit exceed when %(action)s.\")"},{"line_number":2072,"context_line":""},{"line_number":2073,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_b2cd4b5f","line":2070,"updated":"2017-02-13 18:37:58.000000000","message":"There is already a MaxRetriesExceeded exception class. I would have recommended you use that exception, however MaxRetriesExceeded inherits from NoValidHost (it\u0027s a scheduler exception), and that\u0027s not what we want to do here.\n\nThat said, \"MaxRetryLimitExceed\" isn\u0027t an appropriate name for the error here. How about MaxDBRetriesExceeded? That way it matches the existing MaxRetriesExceeded exception class but is specific to retrying DB transactions.","commit_id":"345a90ca20aba33c2c3b25d32f0d125e8f5355f0"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"11c1ca39d2c0b9a291f54d43f1fe8282a46f51c8","unresolved":false,"context_lines":[{"line_number":2068,"context_line":""},{"line_number":2069,"context_line":""},{"line_number":2070,"context_line":"class MaxRetryLimitExceed(NovaException):"},{"line_number":2071,"context_line":"    msg_fmt \u003d _(\"Max retry limit exceed when %(action)s.\")"},{"line_number":2072,"context_line":""},{"line_number":2073,"context_line":""},{"line_number":2074,"context_line":"class RealtimePolicyNotSupported(Invalid):"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_b23b8b37","line":2071,"updated":"2017-02-13 18:37:58.000000000","message":"\"Max retries of DB transaction exceeded attempting to perform %(action)s.\"","commit_id":"345a90ca20aba33c2c3b25d32f0d125e8f5355f0"}],"nova/objects/resource_provider.py":[{"author":{"_account_id":11564,"name":"Chris Dent","email":"cdent@anticdent.org","username":"chdent"},"change_message_id":"15a422300b45b5dc0603b051c23f04f53e60df53","unresolved":false,"context_lines":[{"line_number":1366,"context_line":"            LOG.warning(_LW(\"Exceeded retry limit on ID generation while \""},{"line_number":1367,"context_line":"                            \"creating ResourceClass %(name)s\"),"},{"line_number":1368,"context_line":"                        {\u0027name\u0027: self.name})"},{"line_number":1369,"context_line":"            msg \u003d \"creating resource %s\" % self.name"},{"line_number":1370,"context_line":"            raise exception.MaxRetryLimitExceed(action\u003dmsg)"},{"line_number":1371,"context_line":""},{"line_number":1372,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":2,"id":"fa31d9ce_69069acf","line":1369,"updated":"2017-02-13 13:36:08.000000000","message":"creating resource class","commit_id":"345a90ca20aba33c2c3b25d32f0d125e8f5355f0"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"ae52f2a0f9bd83138301f0378db059f7c1c222a5","unresolved":false,"context_lines":[{"line_number":1366,"context_line":"            LOG.warning(_LW(\"Exceeded retry limit on ID generation while \""},{"line_number":1367,"context_line":"                            \"creating ResourceClass %(name)s\"),"},{"line_number":1368,"context_line":"                        {\u0027name\u0027: self.name})"},{"line_number":1369,"context_line":"            msg \u003d \"creating resource class %s\" % self.name"},{"line_number":1370,"context_line":"            raise exception.MaxDBRetriesExceeded(action\u003dmsg)"},{"line_number":1371,"context_line":""},{"line_number":1372,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa31d9ce_c27f3464","line":1369,"range":{"start_line":1369,"start_character":18,"end_line":1369,"end_character":46},"updated":"2017-02-14 08:43:30.000000000","message":"So this should with translation mark? like _(\"creating resource class %s) % self.name?","commit_id":"fd46c3eb01d32b7dfa993f5405769fd2fd773c40"},{"author":{"_account_id":15888,"name":"Zhenyu Zheng","email":"zheng.zhenyu@outlook.com","username":"Kevin_Zheng"},"change_message_id":"332503426ebd0b283548a9b65d8d5e55371717ad","unresolved":false,"context_lines":[{"line_number":1366,"context_line":"            LOG.warning(_LW(\"Exceeded retry limit on ID generation while \""},{"line_number":1367,"context_line":"                            \"creating ResourceClass %(name)s\"),"},{"line_number":1368,"context_line":"                        {\u0027name\u0027: self.name})"},{"line_number":1369,"context_line":"            msg \u003d \"creating resource class %s\" % self.name"},{"line_number":1370,"context_line":"            raise exception.MaxDBRetriesExceeded(action\u003dmsg)"},{"line_number":1371,"context_line":""},{"line_number":1372,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa31d9ce_5db62d3e","line":1369,"range":{"start_line":1369,"start_character":18,"end_line":1369,"end_character":46},"in_reply_to":"fa31d9ce_b31e036e","updated":"2017-02-17 09:09:06.000000000","message":"Done","commit_id":"fd46c3eb01d32b7dfa993f5405769fd2fd773c40"},{"author":{"_account_id":7,"name":"Jay Pipes","email":"jaypipes@gmail.com","username":"jaypipes"},"change_message_id":"f464589f7d6fc5ca03e5bbec3909903624541742","unresolved":false,"context_lines":[{"line_number":1366,"context_line":"            LOG.warning(_LW(\"Exceeded retry limit on ID generation while \""},{"line_number":1367,"context_line":"                            \"creating ResourceClass %(name)s\"),"},{"line_number":1368,"context_line":"                        {\u0027name\u0027: self.name})"},{"line_number":1369,"context_line":"            msg \u003d \"creating resource class %s\" % self.name"},{"line_number":1370,"context_line":"            raise exception.MaxDBRetriesExceeded(action\u003dmsg)"},{"line_number":1371,"context_line":""},{"line_number":1372,"context_line":"    @staticmethod"}],"source_content_type":"text/x-python","patch_set":3,"id":"fa31d9ce_b31e036e","line":1369,"range":{"start_line":1369,"start_character":18,"end_line":1369,"end_character":46},"in_reply_to":"fa31d9ce_c27f3464","updated":"2017-02-14 15:57:06.000000000","message":"yes, ++ to Alex\u0027 comment.","commit_id":"fd46c3eb01d32b7dfa993f5405769fd2fd773c40"}]}
