)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12712,"name":"Gleb Stepanov","email":"gstepanov@mirantis.com","username":"stgleb"},"change_message_id":"45231f47ad1e6e4da8cd0abe315a53b75dbfdc36","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Added a test case for QuotaExists as well."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-Bug: 1552622"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I725c3616833e9e328b21d975ab45bdfbd2058be7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7af24918_75751530","line":15,"updated":"2016-03-04 15:44:15.000000000","message":"I\u0027m not sure, but is it allowed to leave blank live between\nCloses-Bug and Change-Id?","commit_id":"d87821e485ad580f8380777620dbd07a709adc74"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"2909d2c7e675ddf072106e332368b9b0757f0295","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Added a test case for QuotaExists as well."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-Bug: 1552622"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I725c3616833e9e328b21d975ab45bdfbd2058be7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7af24918_78050c12","line":15,"in_reply_to":"7af24918_75751530","updated":"2016-03-04 16:04:05.000000000","message":"it doesn\u0027t matter, a lot of patches did so","commit_id":"d87821e485ad580f8380777620dbd07a709adc74"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0e8932501964d3e3e379d1566090e51d0335f403","unresolved":false,"context_lines":[{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Added a test case for QuotaExists as well."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Closes-Bug: 1552622"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"Change-Id: I725c3616833e9e328b21d975ab45bdfbd2058be7"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7af24918_d6f79af3","line":15,"in_reply_to":"7af24918_78050c12","updated":"2016-03-07 06:04:40.000000000","message":"Yeah, that is not really important..","commit_id":"d87821e485ad580f8380777620dbd07a709adc74"}],"nova/api/openstack/compute/quota_sets.py":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"0e8932501964d3e3e379d1566090e51d0335f403","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                try:"},{"line_number":144,"context_line":"                    objects.Quotas.update_limit(context, project_id,"},{"line_number":145,"context_line":"                                                key, value, user_id\u003duser_id)"},{"line_number":146,"context_line":"                except exception.ProjectQuotaNotFound as e:"},{"line_number":147,"context_line":"                    # See bug 1552622, a race condition can raise the exception"},{"line_number":148,"context_line":"                    raise webob.exc.HTTPNotFound("},{"line_number":149,"context_line":"                        explanation\u003de.format_message())"},{"line_number":150,"context_line":"        # Note(gmann): Removed \u0027id\u0027 from update\u0027s response to make it same"},{"line_number":151,"context_line":"        # as V2. If needed it can be added with microversion."},{"line_number":152,"context_line":"        return self._format_quota_set(None, self._get_quotas(context, id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7af24918_766cc69c","line":149,"range":{"start_line":146,"start_character":0,"end_line":149,"end_character":55},"updated":"2016-03-07 06:04:40.000000000","message":"This operation is for multiple quota items as line 138.\nIf this exception happens in the middle, some quota items are updated but the other are not updated.\n\nThat seems difficult against production envs.\nbut it is difficult to add rollback here because we need to think failures again in the rollback.\n\nI am not sure what is the best way for this kind of situations, and I just want to see opinions about this.","commit_id":"d87821e485ad580f8380777620dbd07a709adc74"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"7c0249edf2f82fce17cf6326d4458beea828e705","unresolved":false,"context_lines":[{"line_number":143,"context_line":"                try:"},{"line_number":144,"context_line":"                    objects.Quotas.update_limit(context, project_id,"},{"line_number":145,"context_line":"                                                key, value, user_id\u003duser_id)"},{"line_number":146,"context_line":"                except exception.ProjectQuotaNotFound as e:"},{"line_number":147,"context_line":"                    # See bug 1552622, a race condition can raise the exception"},{"line_number":148,"context_line":"                    raise webob.exc.HTTPNotFound("},{"line_number":149,"context_line":"                        explanation\u003de.format_message())"},{"line_number":150,"context_line":"        # Note(gmann): Removed \u0027id\u0027 from update\u0027s response to make it same"},{"line_number":151,"context_line":"        # as V2. If needed it can be added with microversion."},{"line_number":152,"context_line":"        return self._format_quota_set(None, self._get_quotas(context, id,"}],"source_content_type":"text/x-python","patch_set":3,"id":"5aef4532_fa81f74e","line":149,"range":{"start_line":146,"start_character":0,"end_line":149,"end_character":55},"in_reply_to":"7af24918_766cc69c","updated":"2016-03-07 14:00:27.000000000","message":"how about doing this :\n\nrecord the error info but let the whole loop proceed\nthen if any error recorded, raise the error message \nright after this loop? so we won\u0027t affect other object\nbut we still report the error ? \n\nThe other alternative is just ignore the error \nsince this kind of error is acceptable?","commit_id":"d87821e485ad580f8380777620dbd07a709adc74"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"023505a4defaf5327c2952ae1af91b7c0aa72f63","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                    objects.Quotas.update_limit(context, project_id,"},{"line_number":147,"context_line":"                                                key, value, user_id\u003duser_id)"},{"line_number":148,"context_line":"                except exception.ProjectQuotaNotFound:"},{"line_number":149,"context_line":"                    # See bug 1552622, a race condition can raise the exception"},{"line_number":150,"context_line":"                    LOG.debug(\u0027Possible race condition encountered when doing \u0027"},{"line_number":151,"context_line":"                              \u0027update for project:%(project_id)s, \u0027"},{"line_number":152,"context_line":"                              \u0027user:%(user_id)s, key:%(key)s\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a061dce_fed58c1b","line":149,"range":{"start_line":149,"start_character":22,"end_line":149,"end_character":79},"updated":"2016-04-07 20:41:50.000000000","message":"it is nice to put more reason why we can ignore this exception here. How about\n\n # NOTE: When a race condition what DELETE this quota happens\n # just before this update_limit, this exception happens.\n # This is a super rare case on productions because there are\n # different guys(one is deleting its quota, the other is updating\n # the same quota on the same project). It is enough to ignore\n # such exception here.","commit_id":"a07272ec799f4fa9494452b8979de618def7e6b6"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"28bb2c8599c8403bdba26e0f0a9251143da6de77","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                    objects.Quotas.update_limit(context, project_id,"},{"line_number":147,"context_line":"                                                key, value, user_id\u003duser_id)"},{"line_number":148,"context_line":"                except exception.ProjectQuotaNotFound:"},{"line_number":149,"context_line":"                    # See bug 1552622, a race condition can raise the exception"},{"line_number":150,"context_line":"                    LOG.debug(\u0027Possible race condition encountered when doing \u0027"},{"line_number":151,"context_line":"                              \u0027update for project:%(project_id)s, \u0027"},{"line_number":152,"context_line":"                              \u0027user:%(user_id)s, key:%(key)s\u0027,"}],"source_content_type":"text/x-python","patch_set":4,"id":"9a061dce_5ecf5855","line":149,"range":{"start_line":149,"start_character":22,"end_line":149,"end_character":79},"in_reply_to":"9a061dce_fed58c1b","updated":"2016-04-07 20:46:20.000000000","message":"ok, will do it ,thanks!","commit_id":"a07272ec799f4fa9494452b8979de618def7e6b6"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"2bc9ed515d6efd57078f18ae42b62dbe05ac7768","unresolved":false,"context_lines":[{"line_number":155,"context_line":"                               \u0027key\u0027: key})"},{"line_number":156,"context_line":"        # Note(gmann): Removed \u0027id\u0027 from update\u0027s response to make it same"},{"line_number":157,"context_line":"        # as V2. If needed it can be added with microversion."},{"line_number":158,"context_line":"        return self._format_quota_set(None, self._get_quotas(context, id,"},{"line_number":159,"context_line":"                                                             user_id\u003duser_id))"},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    @extensions.expected_errors(())"}],"source_content_type":"text/x-python","patch_set":4,"id":"5aef4532_3c4c8d9d","line":158,"range":{"start_line":158,"start_character":20,"end_line":158,"end_character":37},"updated":"2016-03-09 10:52:13.000000000","message":"and even the quota is not valid quota (per line 134)\nwe will still report all the quota info here\nso we don\u0027t need to tell user what\u0027s exactly changed, just show the final result will be fine?","commit_id":"a07272ec799f4fa9494452b8979de618def7e6b6"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"a78c4317a1ccd0007568a6ac154496ba7a72faf5","unresolved":false,"context_lines":[{"line_number":102,"context_line":"                                                           user_id\u003duser_id,"},{"line_number":103,"context_line":"                                                           usages\u003dTrue))"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    @extensions.expected_errors((400, 404))"},{"line_number":106,"context_line":"    @validation.schema(quota_sets.update)"},{"line_number":107,"context_line":"    def update(self, req, id, body):"},{"line_number":108,"context_line":"        context \u003d req.environ[\u0027nova.context\u0027]"}],"source_content_type":"text/x-python","patch_set":6,"id":"9a061dce_bfae36e5","line":105,"range":{"start_line":105,"start_character":38,"end_line":105,"end_character":41},"updated":"2016-04-08 19:02:07.000000000","message":"This seems unnecessary now.","commit_id":"61ef96a6440f2e8614be45bdf829093a4e2d94ab"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8d184c48341cb72888466d692490ce47de21f2eb","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                try:"},{"line_number":146,"context_line":"                    objects.Quotas.update_limit(context, project_id,"},{"line_number":147,"context_line":"                                                key, value, user_id\u003duser_id)"},{"line_number":148,"context_line":"                except exception.ProjectQuotaNotFound:"},{"line_number":149,"context_line":"                    # NOTE: When a race condition what DELETE this quota"},{"line_number":150,"context_line":"                    # just before this update_limit, this exception happens."},{"line_number":151,"context_line":"                    # This is a super rare case on productions because there"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_4b30fc07","line":148,"updated":"2016-04-08 21:04:40.000000000","message":"How is the test actually hitting this? Is it doing the update (create) and delete on separate workers concurrently?\n\nThat seems like a busted test. Still, if we just silently ignore this failure, we\u0027re not creating/updating quota for the given key, so we\u0027re potentially returning success for the request even though we actually failed.\n\nSo if we\u0027re not going to do something like put the keys in a queue and keep retrying until the queue is empty, it seems we should let it fail since we didn\u0027t complete the request.","commit_id":"89b2abfa71986cc7df2f3a9a78699520fc21ef16"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"4ae7ddb2a945c3e9d8171a4817b47d38155a920a","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                try:"},{"line_number":146,"context_line":"                    objects.Quotas.update_limit(context, project_id,"},{"line_number":147,"context_line":"                                                key, value, user_id\u003duser_id)"},{"line_number":148,"context_line":"                except exception.ProjectQuotaNotFound:"},{"line_number":149,"context_line":"                    # NOTE: When a race condition what DELETE this quota"},{"line_number":150,"context_line":"                    # just before this update_limit, this exception happens."},{"line_number":151,"context_line":"                    # This is a super rare case on productions because there"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a18252c_ccc1dc30","line":148,"in_reply_to":"5a18252c_4cf82ce6","updated":"2016-04-12 11:18:09.000000000","message":"um... another thought is actually it\u0027s a loop\nwe can\u0027t raise exception because some actions may already be taken, and if you take a look at comment line 120-121\nit already ignore some wrong param, maybe we can just ignore the error since it will not affect actually to end user because it\u0027s already deleted?","commit_id":"89b2abfa71986cc7df2f3a9a78699520fc21ef16"},{"author":{"_account_id":6062,"name":"jichenjc","email":"jichenjc@cn.ibm.com","username":"jichenjc"},"change_message_id":"07989da7a59bdf6da31bbf22790f77e4290694da","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                try:"},{"line_number":146,"context_line":"                    objects.Quotas.update_limit(context, project_id,"},{"line_number":147,"context_line":"                                                key, value, user_id\u003duser_id)"},{"line_number":148,"context_line":"                except exception.ProjectQuotaNotFound:"},{"line_number":149,"context_line":"                    # NOTE: When a race condition what DELETE this quota"},{"line_number":150,"context_line":"                    # just before this update_limit, this exception happens."},{"line_number":151,"context_line":"                    # This is a super rare case on productions because there"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a18252c_4cf82ce6","line":148,"in_reply_to":"9a061dce_286829ba","updated":"2016-04-12 11:12:27.000000000","message":"yes, it should not in production system, the original bug report seems from a stress test, will update this according to suggestion","commit_id":"89b2abfa71986cc7df2f3a9a78699520fc21ef16"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"9963c9578059df9c8a89f1245307972d182979ff","unresolved":false,"context_lines":[{"line_number":145,"context_line":"                try:"},{"line_number":146,"context_line":"                    objects.Quotas.update_limit(context, project_id,"},{"line_number":147,"context_line":"                                                key, value, user_id\u003duser_id)"},{"line_number":148,"context_line":"                except exception.ProjectQuotaNotFound:"},{"line_number":149,"context_line":"                    # NOTE: When a race condition what DELETE this quota"},{"line_number":150,"context_line":"                    # just before this update_limit, this exception happens."},{"line_number":151,"context_line":"                    # This is a super rare case on productions because there"}],"source_content_type":"text/x-python","patch_set":7,"id":"9a061dce_286829ba","line":148,"in_reply_to":"9a061dce_4b30fc07","updated":"2016-04-08 23:08:44.000000000","message":"Matt,\n\nI don\u0027t think this scenario happens on productions, because *different* users change/delete quota of the same tenant at the same time. That seems meaningless operation and both results(deleting/existing quota) seem fine.\n\nBut as atomic API operation, I see your point.\nIt is nice to return error response to user when this problem happens.","commit_id":"89b2abfa71986cc7df2f3a9a78699520fc21ef16"}]}
