)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"69dcb9edc6b01d80a24fdea4c0017579aeabda8c","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Phil Day \u003cphilip.day@hp.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-08-22 09:05:03 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add quotas for Server Groups"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Server groups can be used to control the affinity and anti-affinity"},{"line_number":10,"context_line":"scheduling policy for a group of servers (instances).  Whilst this is"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"1abeadc6_c30b14d4","line":7,"updated":"2014-08-22 10:39:51.000000000","message":"This title is conflict with the other related patches.\n\nPlease change the title for showing this patch purpose.\n\nThe following message also is.","commit_id":"1c03b610cfd6b1aaa96898f1d8b4d84a7e4d3b12"}],"nova/api/openstack/compute/contrib/server_groups.py":[{"author":{"_account_id":9569,"name":"Sergey Nikitin","email":"nikitinserv@gmail.com","username":"snikitin"},"change_message_id":"1856bcb8d8388f32a042442ac4b294d5050cc861","unresolved":false,"context_lines":[{"line_number":244,"context_line":"                LOG.exception(_LE(\"Failed to update usages deallocating \""},{"line_number":245,"context_line":"                                  \"server group\"))"},{"line_number":246,"context_line":""},{"line_number":247,"context_line":"        sg.destroy(context)"},{"line_number":248,"context_line":""},{"line_number":249,"context_line":"        if self.ext_mgr.is_loaded(\u0027os-server-group-quotas\u0027):"},{"line_number":250,"context_line":"            quotas.commit()"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_c211eeb0","line":247,"updated":"2014-09-08 15:16:53.000000000","message":"Hmm, I think you should use here \n\n try:\n      sg.destroy(context)\n except nova.exception.InstanceGroupNotFound as e:\n      raise webob.exc.HTTPNotFound(explanation\u003de.format_message())\n\nBecause sg.destroy() still can raise InstanceGroupNotFound.","commit_id":"558231fd67d3ffc61fda8d5c7eb85a1acfd976f4"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"fd755f27948509495bdd697bd26f4a71b5bcb834","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                               user_id\u003dcontext.user_id, server_groups\u003d1)"},{"line_number":285,"context_line":"            except nova.exception.OverQuota:"},{"line_number":286,"context_line":"                msg \u003d _(\"Quota exceeded, too many server groups.\")"},{"line_number":287,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        vals \u003d body[\u0027server_group\u0027]"},{"line_number":290,"context_line":"        sg \u003d objects.InstanceGroup(context)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_06febc38","line":287,"updated":"2014-09-08 05:24:53.000000000","message":"We\u0027ve settled on 403 Forbidden for out of quota exceptions now.","commit_id":"558231fd67d3ffc61fda8d5c7eb85a1acfd976f4"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"58849cd3252d1006476fc3787ac649dfd68ff4d3","unresolved":false,"context_lines":[{"line_number":284,"context_line":"                               user_id\u003dcontext.user_id, server_groups\u003d1)"},{"line_number":285,"context_line":"            except nova.exception.OverQuota:"},{"line_number":286,"context_line":"                msg \u003d _(\"Quota exceeded, too many server groups.\")"},{"line_number":287,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        vals \u003d body[\u0027server_group\u0027]"},{"line_number":290,"context_line":"        sg \u003d objects.InstanceGroup(context)"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_ec87ceb4","line":287,"in_reply_to":"fa98f980_06febc38","updated":"2014-09-08 17:28:45.000000000","message":"Ok, I\u0027ll change it.   (I was basing it on the V2 keyPairs quota check)","commit_id":"558231fd67d3ffc61fda8d5c7eb85a1acfd976f4"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"fd755f27948509495bdd697bd26f4a71b5bcb834","unresolved":false,"context_lines":[{"line_number":294,"context_line":"            sg.name \u003d vals.get(\u0027name\u0027)"},{"line_number":295,"context_line":"            sg.policies \u003d vals.get(\u0027policies\u0027)"},{"line_number":296,"context_line":"            sg.create()"},{"line_number":297,"context_line":"        except ValueError as e:"},{"line_number":298,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        if self.ext_mgr.is_loaded(\u0027os-server-group-quotas\u0027):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_c6ecb492","line":297,"updated":"2014-09-08 05:24:53.000000000","message":"need to do a quota rollback here?","commit_id":"558231fd67d3ffc61fda8d5c7eb85a1acfd976f4"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"58849cd3252d1006476fc3787ac649dfd68ff4d3","unresolved":false,"context_lines":[{"line_number":294,"context_line":"            sg.name \u003d vals.get(\u0027name\u0027)"},{"line_number":295,"context_line":"            sg.policies \u003d vals.get(\u0027policies\u0027)"},{"line_number":296,"context_line":"            sg.create()"},{"line_number":297,"context_line":"        except ValueError as e:"},{"line_number":298,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de)"},{"line_number":299,"context_line":""},{"line_number":300,"context_line":"        if self.ext_mgr.is_loaded(\u0027os-server-group-quotas\u0027):"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_6cbbde75","line":297,"in_reply_to":"fa98f980_c6ecb492","updated":"2014-09-08 17:28:45.000000000","message":"Yep - good spot","commit_id":"558231fd67d3ffc61fda8d5c7eb85a1acfd976f4"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"e96d7848e3d30ab4570a4d1c49424790069a8c2e","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        try:"},{"line_number":248,"context_line":"            sg.destroy(context)"},{"line_number":249,"context_line":"        except nova.exception.InstanceGroupNotFound as e:"},{"line_number":250,"context_line":"            quotas.rollback()"},{"line_number":251,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        if self.ext_mgr.is_loaded(\u0027os-server-group-quotas\u0027):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_118df431","line":250,"updated":"2014-09-09 01:12:03.000000000","message":"So I think you can only call the rollback if self.ext_mgr.is_loaded is true\n\nSince you have to call it quite a bit in this class, might be worth just setting something explicitly in __init__ (just an suggestion, probably doesn\u0027t matter too much)","commit_id":"f4def723bae851c16fa1d2133e3b36ee42d54358"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"d65fe2b9b8d035c687d6bfb0785f70e8862ffef0","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        try:"},{"line_number":248,"context_line":"            sg.destroy(context)"},{"line_number":249,"context_line":"        except nova.exception.InstanceGroupNotFound as e:"},{"line_number":250,"context_line":"            quotas.rollback()"},{"line_number":251,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        if self.ext_mgr.is_loaded(\u0027os-server-group-quotas\u0027):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_798546ac","line":250,"in_reply_to":"fa98f980_118df431","updated":"2014-09-09 04:17:16.000000000","message":"Nice catch, and how about using \"quotas\" instead of self.ext_mgr.is_loaded(\u0027os-server-group-quotas\u0027) every time?\n\nput\n\n quotas \u003d None\n\nat line 228, and here can be changed to\n\n if quotas is not None:\n     qotas.rollback()\n\nand line 254 also can be changed to\n\n if quotas is not None:\n      quotas.commit()\n\nfor simple code.","commit_id":"f4def723bae851c16fa1d2133e3b36ee42d54358"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"84df5d953c3aeb602b578b960663677210ae4bde","unresolved":false,"context_lines":[{"line_number":247,"context_line":"        try:"},{"line_number":248,"context_line":"            sg.destroy(context)"},{"line_number":249,"context_line":"        except nova.exception.InstanceGroupNotFound as e:"},{"line_number":250,"context_line":"            quotas.rollback()"},{"line_number":251,"context_line":"            raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"        if self.ext_mgr.is_loaded(\u0027os-server-group-quotas\u0027):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_239d195a","line":250,"in_reply_to":"fa98f980_798546ac","updated":"2014-09-10 14:58:37.000000000","message":"Done","commit_id":"f4def723bae851c16fa1d2133e3b36ee42d54358"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"d65fe2b9b8d035c687d6bfb0785f70e8862ffef0","unresolved":false,"context_lines":[{"line_number":288,"context_line":"                               user_id\u003dcontext.user_id, server_groups\u003d1)"},{"line_number":289,"context_line":"            except nova.exception.OverQuota:"},{"line_number":290,"context_line":"                msg \u003d _(\"Quota exceeded, too many server groups.\")"},{"line_number":291,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        vals \u003d body[\u0027server_group\u0027]"},{"line_number":294,"context_line":"        sg \u003d objects.InstanceGroup(context)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_d930f209","line":291,"updated":"2014-09-09 04:17:16.000000000","message":"HTTP response of \"quota exceeded\" should be exc.HTTPForbidden[1].\n\n[1]: http://lists.openstack.org/pipermail/openstack-dev/2014-June/036557.html","commit_id":"f4def723bae851c16fa1d2133e3b36ee42d54358"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"84df5d953c3aeb602b578b960663677210ae4bde","unresolved":false,"context_lines":[{"line_number":288,"context_line":"                               user_id\u003dcontext.user_id, server_groups\u003d1)"},{"line_number":289,"context_line":"            except nova.exception.OverQuota:"},{"line_number":290,"context_line":"                msg \u003d _(\"Quota exceeded, too many server groups.\")"},{"line_number":291,"context_line":"                raise exc.HTTPBadRequest(explanation\u003dmsg)"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        vals \u003d body[\u0027server_group\u0027]"},{"line_number":294,"context_line":"        sg \u003d objects.InstanceGroup(context)"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_83c40541","line":291,"in_reply_to":"fa98f980_d930f209","updated":"2014-09-10 14:58:37.000000000","message":"Done","commit_id":"f4def723bae851c16fa1d2133e3b36ee42d54358"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"e96d7848e3d30ab4570a4d1c49424790069a8c2e","unresolved":false,"context_lines":[{"line_number":299,"context_line":"            sg.policies \u003d vals.get(\u0027policies\u0027)"},{"line_number":300,"context_line":"            sg.create()"},{"line_number":301,"context_line":"        except ValueError as e:"},{"line_number":302,"context_line":"            quotas.rollback()"},{"line_number":303,"context_line":"            raise exc.HTTPForbidden(explanation\u003de)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        if self.ext_mgr.is_loaded(\u0027os-server-group-quotas\u0027):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_9178042d","line":302,"updated":"2014-09-09 01:12:03.000000000","message":"So I think you can only call the rollback if self.ext_mgr.is_loaded is true","commit_id":"f4def723bae851c16fa1d2133e3b36ee42d54358"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"84df5d953c3aeb602b578b960663677210ae4bde","unresolved":false,"context_lines":[{"line_number":299,"context_line":"            sg.policies \u003d vals.get(\u0027policies\u0027)"},{"line_number":300,"context_line":"            sg.create()"},{"line_number":301,"context_line":"        except ValueError as e:"},{"line_number":302,"context_line":"            quotas.rollback()"},{"line_number":303,"context_line":"            raise exc.HTTPForbidden(explanation\u003de)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        if self.ext_mgr.is_loaded(\u0027os-server-group-quotas\u0027):"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_63c5613c","line":302,"in_reply_to":"fa98f980_9178042d","updated":"2014-09-10 14:58:37.000000000","message":"Done","commit_id":"f4def723bae851c16fa1d2133e3b36ee42d54358"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"d65fe2b9b8d035c687d6bfb0785f70e8862ffef0","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            sg.create()"},{"line_number":301,"context_line":"        except ValueError as e:"},{"line_number":302,"context_line":"            quotas.rollback()"},{"line_number":303,"context_line":"            raise exc.HTTPForbidden(explanation\u003de)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        if self.ext_mgr.is_loaded(\u0027os-server-group-quotas\u0027):"},{"line_number":306,"context_line":"            quotas.commit()"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_992e6aa4","line":303,"updated":"2014-09-09 04:17:16.000000000","message":"I feel here should be kept as\n\n raise exc.HTTPBadRequest(explanation\u003de)","commit_id":"f4def723bae851c16fa1d2133e3b36ee42d54358"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"84df5d953c3aeb602b578b960663677210ae4bde","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            sg.create()"},{"line_number":301,"context_line":"        except ValueError as e:"},{"line_number":302,"context_line":"            quotas.rollback()"},{"line_number":303,"context_line":"            raise exc.HTTPForbidden(explanation\u003de)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        if self.ext_mgr.is_loaded(\u0027os-server-group-quotas\u0027):"},{"line_number":306,"context_line":"            quotas.commit()"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_a3bf49a9","line":303,"in_reply_to":"fa98f980_992e6aa4","updated":"2014-09-10 14:58:37.000000000","message":"Done","commit_id":"f4def723bae851c16fa1d2133e3b36ee42d54358"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"d82b5510939b9ce5b586952f3eee9d5f9e723f42","unresolved":false,"context_lines":[{"line_number":300,"context_line":"            sg.create()"},{"line_number":301,"context_line":"        except ValueError as e:"},{"line_number":302,"context_line":"            quotas.rollback()"},{"line_number":303,"context_line":"            raise exc.HTTPForbidden(explanation\u003de)"},{"line_number":304,"context_line":""},{"line_number":305,"context_line":"        if self.ext_mgr.is_loaded(\u0027os-server-group-quotas\u0027):"},{"line_number":306,"context_line":"            quotas.commit()"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_8486d9d9","line":303,"in_reply_to":"fa98f980_992e6aa4","updated":"2014-09-10 06:22:48.000000000","message":"line 280 already check the input, so there shouldn\u0027t be happened. I feel return 500 is better. But it isn\u0027t block issue, this can be fixed as bug.","commit_id":"f4def723bae851c16fa1d2133e3b36ee42d54358"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"e377b0b8915e8519f77add4ae8701bcd480d21f9","unresolved":false,"context_lines":[{"line_number":241,"context_line":"                # the server group"},{"line_number":242,"context_line":"                quotas.reserve(context, project_id\u003dproject_id,"},{"line_number":243,"context_line":"                               user_id\u003duser_id, server_groups\u003d-1)"},{"line_number":244,"context_line":"            except Exception:"},{"line_number":245,"context_line":"                LOG.exception(_LE(\"Failed to update usages deallocating \""},{"line_number":246,"context_line":"                                  \"server group\"))"},{"line_number":247,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_fc06391b","line":244,"updated":"2014-09-11 07:43:47.000000000","message":"I think you need a quotas \u003d None in the exception handler","commit_id":"0cf430be07c0e42af3f594ba769fd9084ce1c273"},{"author":{"_account_id":6167,"name":"Ken\u0027ichi Ohmichi","email":"ken1ohmichi@gmail.com","username":"oomichi"},"change_message_id":"016343c02eb9de20052c43e4372b11342a7352ac","unresolved":false,"context_lines":[{"line_number":288,"context_line":"            quotas \u003d objects.Quotas()"},{"line_number":289,"context_line":"            try:"},{"line_number":290,"context_line":"                quotas.reserve(context, project_id\u003dcontext.project_id,"},{"line_number":291,"context_line":"                               user_id\u003dcontext.user_id, server_groups\u003d1)"},{"line_number":292,"context_line":"            except nova.exception.OverQuota:"},{"line_number":293,"context_line":"                msg \u003d _(\"Quota exceeded, too many server groups.\")"},{"line_number":294,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_76d8a81e","line":291,"updated":"2014-09-11 05:08:35.000000000","message":"All other quota checks(quotas.reserve() calls) are implemented in nova/compute/api.py . Can we do it for this quota also?\n\nNow v2.1 server_groups also is implemented as ./nova/api/openstack/compute/plugins/v3/server_groups.py and I hope we avoid duplicating quota check code in both v2 and v2.1.","commit_id":"0cf430be07c0e42af3f594ba769fd9084ce1c273"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"e377b0b8915e8519f77add4ae8701bcd480d21f9","unresolved":false,"context_lines":[{"line_number":288,"context_line":"            quotas \u003d objects.Quotas()"},{"line_number":289,"context_line":"            try:"},{"line_number":290,"context_line":"                quotas.reserve(context, project_id\u003dcontext.project_id,"},{"line_number":291,"context_line":"                               user_id\u003dcontext.user_id, server_groups\u003d1)"},{"line_number":292,"context_line":"            except nova.exception.OverQuota:"},{"line_number":293,"context_line":"                msg \u003d _(\"Quota exceeded, too many server groups.\")"},{"line_number":294,"context_line":"                raise exc.HTTPForbidden(explanation\u003dmsg)"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_dc2c159c","line":291,"in_reply_to":"fa98f980_76d8a81e","updated":"2014-09-11 07:43:47.000000000","message":"Personally I don\u0027t think it makes sense to do the server group create quota check in compute/api.py.","commit_id":"0cf430be07c0e42af3f594ba769fd9084ce1c273"}],"nova/compute/api.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"fd755f27948509495bdd697bd26f4a71b5bcb834","unresolved":false,"context_lines":[{"line_number":828,"context_line":"                        except exception.OverQuota:"},{"line_number":829,"context_line":"                            msg \u003d _(\"Quota exceeded, too many servers in \""},{"line_number":830,"context_line":"                                    \"group\")"},{"line_number":831,"context_line":"                            raise exception.ServerGroupLimitExceeded(msg)"},{"line_number":832,"context_line":""},{"line_number":833,"context_line":"                    objects.InstanceGroup.add_members(context,"},{"line_number":834,"context_line":"                                                      instance_group.uuid,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_26574028","line":831,"updated":"2014-09-08 05:24:53.000000000","message":"I don\u0027t think this exception is caught anywhere?","commit_id":"558231fd67d3ffc61fda8d5c7eb85a1acfd976f4"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"58849cd3252d1006476fc3787ac649dfd68ff4d3","unresolved":false,"context_lines":[{"line_number":828,"context_line":"                        except exception.OverQuota:"},{"line_number":829,"context_line":"                            msg \u003d _(\"Quota exceeded, too many servers in \""},{"line_number":830,"context_line":"                                    \"group\")"},{"line_number":831,"context_line":"                            raise exception.ServerGroupLimitExceeded(msg)"},{"line_number":832,"context_line":""},{"line_number":833,"context_line":"                    objects.InstanceGroup.add_members(context,"},{"line_number":834,"context_line":"                                                      instance_group.uuid,"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_8eff17aa","line":831,"in_reply_to":"fa98f980_26574028","updated":"2014-09-08 17:28:45.000000000","message":"Yep, I could probably just let the OverQuota error propagate up to the API","commit_id":"558231fd67d3ffc61fda8d5c7eb85a1acfd976f4"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"e96d7848e3d30ab4570a4d1c49424790069a8c2e","unresolved":false,"context_lines":[{"line_number":925,"context_line":"                # old handling of the \u0027group\u0027 scheduler hint.  The policy type"},{"line_number":926,"context_line":"                # will be \u0027legacy\u0027, indicating that this group was created to"},{"line_number":927,"context_line":"                # emulate legacy group behavior."},{"line_number":928,"context_line":"                group \u003d objects.InstanceGroup(context)"},{"line_number":929,"context_line":"                group.name \u003d group_hint"},{"line_number":930,"context_line":"                group.project_id \u003d context.project_id"},{"line_number":931,"context_line":"                group.user_id \u003d context.user_id"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_51405c56","line":928,"updated":"2014-09-09 01:12:03.000000000","message":"Do we need to do a quota check here?","commit_id":"f4def723bae851c16fa1d2133e3b36ee42d54358"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"84df5d953c3aeb602b578b960663677210ae4bde","unresolved":false,"context_lines":[{"line_number":925,"context_line":"                # old handling of the \u0027group\u0027 scheduler hint.  The policy type"},{"line_number":926,"context_line":"                # will be \u0027legacy\u0027, indicating that this group was created to"},{"line_number":927,"context_line":"                # emulate legacy group behavior."},{"line_number":928,"context_line":"                group \u003d objects.InstanceGroup(context)"},{"line_number":929,"context_line":"                group.name \u003d group_hint"},{"line_number":930,"context_line":"                group.project_id \u003d context.project_id"},{"line_number":931,"context_line":"                group.user_id \u003d context.user_id"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_d72c074d","line":928,"in_reply_to":"fa98f980_51405c56","updated":"2014-09-10 14:58:37.000000000","message":"Yep - good catch","commit_id":"f4def723bae851c16fa1d2133e3b36ee42d54358"},{"author":{"_account_id":5754,"name":"Alex Xu","email":"hejie.xu@intel.com","username":"xuhj"},"change_message_id":"c0e7c2448fdaae57abedd1c51cb704ba03c1faf7","unresolved":false,"context_lines":[{"line_number":828,"context_line":"                    if check_server_group_quota:"},{"line_number":829,"context_line":"                        count \u003d QUOTAS.count(instance_group,"},{"line_number":830,"context_line":"                                             \u0027server_group_members\u0027,"},{"line_number":831,"context_line":"                                             context.user_id)"},{"line_number":832,"context_line":"                        try:"},{"line_number":833,"context_line":"                            QUOTAS.limit_check(context,"},{"line_number":834,"context_line":"                                               server_group_members\u003dcount + 1)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_737a5689","line":831,"updated":"2014-09-12 01:13:59.000000000","message":"The signature of Quotas.count is:\n     def count(self, context, resource, *args, **kwargs):\n\nWe pass InstanceGroup object as context parameter.....\nbut it can works....\n\nA little confuse on whether this is ok.","commit_id":"aaa060e5649b41b84118e19fcc187850aedc553a"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"a28829e7482408e7cd256647586e37b6be8cca72","unresolved":false,"context_lines":[{"line_number":828,"context_line":"                    if check_server_group_quota:"},{"line_number":829,"context_line":"                        count \u003d QUOTAS.count(instance_group,"},{"line_number":830,"context_line":"                                             \u0027server_group_members\u0027,"},{"line_number":831,"context_line":"                                             context.user_id)"},{"line_number":832,"context_line":"                        try:"},{"line_number":833,"context_line":"                            QUOTAS.limit_check(context,"},{"line_number":834,"context_line":"                                               server_group_members\u003dcount + 1)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_c8650ce2","line":831,"in_reply_to":"fa98f980_737a5689","updated":"2014-09-12 04:05:39.000000000","message":"I agree this looks wrong. I think it passes the tests because the fake stub also has the wrong function signature. And we don\u0027t yet have a tempest test which exercises it for real","commit_id":"aaa060e5649b41b84118e19fcc187850aedc553a"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"6b3bdf1733ac0aa8dda15fadf648eeaf18b96249","unresolved":false,"context_lines":[{"line_number":828,"context_line":"                    if check_server_group_quota:"},{"line_number":829,"context_line":"                        count \u003d QUOTAS.count(instance_group,"},{"line_number":830,"context_line":"                                             \u0027server_group_members\u0027,"},{"line_number":831,"context_line":"                                             context.user_id)"},{"line_number":832,"context_line":"                        try:"},{"line_number":833,"context_line":"                            QUOTAS.limit_check(context,"},{"line_number":834,"context_line":"                                               server_group_members\u003dcount + 1)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_b9e73c11","line":831,"in_reply_to":"fa98f980_c8650ce2","updated":"2014-09-12 07:10:44.000000000","message":"By a strange set of coincidences It works in devtest as well !","commit_id":"aaa060e5649b41b84118e19fcc187850aedc553a"}],"nova/tests/api/openstack/compute/contrib/test_server_group_quotas.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"fd755f27948509495bdd697bd26f4a71b5bcb834","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 Cisco Systems, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_262e60a6","line":1,"updated":"2014-09-08 05:24:53.000000000","message":"I think this might be wrong?","commit_id":"558231fd67d3ffc61fda8d5c7eb85a1acfd976f4"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"58849cd3252d1006476fc3787ac649dfd68ff4d3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 Cisco Systems, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":8,"id":"fa98f980_2e946b43","line":1,"in_reply_to":"fa98f980_262e60a6","updated":"2014-09-08 17:28:45.000000000","message":"Yep :-)","commit_id":"558231fd67d3ffc61fda8d5c7eb85a1acfd976f4"},{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"e96d7848e3d30ab4570a4d1c49424790069a8c2e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 Cisco Systems, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_6312f359","line":1,"updated":"2014-09-09 01:12:03.000000000","message":"This hasn\u0027t been fixed","commit_id":"f4def723bae851c16fa1d2133e3b36ee42d54358"},{"author":{"_account_id":1501,"name":"Phil Day","email":"philip.day@hp.com","username":"philip-day"},"change_message_id":"84df5d953c3aeb602b578b960663677210ae4bde","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2014 Cisco Systems, Inc."},{"line_number":2,"context_line":"# All Rights Reserved."},{"line_number":3,"context_line":"#"},{"line_number":4,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"}],"source_content_type":"text/x-python","patch_set":9,"id":"fa98f980_372ab32c","line":1,"in_reply_to":"fa98f980_6312f359","updated":"2014-09-10 14:58:37.000000000","message":"Doh - \"fixed\" that in the wrong file :-(","commit_id":"f4def723bae851c16fa1d2133e3b36ee42d54358"}],"nova/tests/api/openstack/compute/contrib/test_server_groups.py":[{"author":{"_account_id":5292,"name":"Christopher Yeoh","email":"cbkyeoh@gmail.com","username":"cyeoh-0"},"change_message_id":"e377b0b8915e8519f77add4ae8701bcd480d21f9","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    def _setup_controller(self):"},{"line_number":93,"context_line":"        self.ext_mgr \u003d None"},{"line_number":94,"context_line":"        self.controller \u003d self.sg_controller_cls()"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def _get_app(self):"},{"line_number":97,"context_line":"        return fakes.wsgi_app_v3(init_only\u003d(\u0027os-server-groups\u0027,))"}],"source_content_type":"text/x-python","patch_set":11,"id":"fa98f980_1c705ddb","line":94,"updated":"2014-09-11 07:43:47.000000000","message":"I think there\u0027s a much cleaner way of doing this. Am taking the liberty of uploading an updated patchset that does the same thing but is much simpler.","commit_id":"0cf430be07c0e42af3f594ba769fd9084ce1c273"}]}
