)]}'
{"nova/compute/api.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"1a88b091c5cd5b26775d49e0efd224fb6f095de2","unresolved":false,"context_lines":[{"line_number":988,"context_line":"                                    \"group\")"},{"line_number":989,"context_line":"                            raise exception.QuotaError(msg)"},{"line_number":990,"context_line":""},{"line_number":991,"context_line":"                    instance_group.add_member([instance.uuid])"},{"line_number":992,"context_line":""},{"line_number":993,"context_line":"                # send a state update notification for the initial create to"},{"line_number":994,"context_line":"                # show it going from non-existent to BUILDING"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8ec9b2_799712ec","line":991,"updated":"2016-09-16 05:19:05.000000000","message":"I think this could be fixed much more simply by:\n\n members \u003d objects.InstanceGroup.add_members(\n         context, instance_group.uuid, [instance.uuid])\n instance_group.members.extend(members)","commit_id":"a0b70a2403d045e3ad2ba6c011cf247c318ff28d"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"db110fa1bf9b18fc8e0a1086948fd18a1f41d5ea","unresolved":false,"context_lines":[{"line_number":988,"context_line":"                                    \"group\")"},{"line_number":989,"context_line":"                            raise exception.QuotaError(msg)"},{"line_number":990,"context_line":""},{"line_number":991,"context_line":"                    instance_group.add_member([instance.uuid])"},{"line_number":992,"context_line":""},{"line_number":993,"context_line":"                # send a state update notification for the initial create to"},{"line_number":994,"context_line":"                # show it going from non-existent to BUILDING"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a8ec9b2_12a3439e","line":991,"in_reply_to":"7a8ec9b2_799712ec","updated":"2016-09-16 08:01:19.000000000","message":"Yes, For me creating second method wit almost same, and missleading method name was not fine but I was followed old patch: https://review.openstack.org/#/c/286443/\n\nYour idea is much more simpler and works fine. I changed it. Thx.","commit_id":"a0b70a2403d045e3ad2ba6c011cf247c318ff28d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"7a0621979da0bf0950102b8ea6d87bdc5dc7c94a","unresolved":false,"context_lines":[{"line_number":990,"context_line":""},{"line_number":991,"context_line":"                    members \u003d objects.InstanceGroup.add_members("},{"line_number":992,"context_line":"                        context, instance_group.uuid, [instance.uuid])"},{"line_number":993,"context_line":"                    instance_group.members.extend(members)"},{"line_number":994,"context_line":""},{"line_number":995,"context_line":"                # send a state update notification for the initial create to"},{"line_number":996,"context_line":"                # show it going from non-existent to BUILDING"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_3aec71f2","line":993,"range":{"start_line":993,"start_character":20,"end_line":993,"end_character":58},"updated":"2016-09-16 20:14:36.000000000","message":"Since you have to respin anyway, could you please add a code comment for this explaining that it\u0027s needed for the server group members quota check?","commit_id":"4b2ddd7776bdebfece8101f76e03e95f6149c405"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"dd314913de1347f7151592652729de8cec28a91c","unresolved":false,"context_lines":[{"line_number":990,"context_line":""},{"line_number":991,"context_line":"                    members \u003d objects.InstanceGroup.add_members("},{"line_number":992,"context_line":"                        context, instance_group.uuid, [instance.uuid])"},{"line_number":993,"context_line":"                    instance_group.members.extend(members)"},{"line_number":994,"context_line":""},{"line_number":995,"context_line":"                # send a state update notification for the initial create to"},{"line_number":996,"context_line":"                # show it going from non-existent to BUILDING"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_9a70170d","line":993,"range":{"start_line":993,"start_character":20,"end_line":993,"end_character":58},"in_reply_to":"7a8ec9b2_3aec71f2","updated":"2016-09-17 07:54:02.000000000","message":"Done","commit_id":"4b2ddd7776bdebfece8101f76e03e95f6149c405"},{"author":{"_account_id":782,"name":"John Garbutt","email":"john@johngarbutt.com","username":"johngarbutt"},"change_message_id":"b09ccd0b6f546e54dbc6a2b5feb1f3912c6b88e3","unresolved":false,"context_lines":[{"line_number":993,"context_line":"                    # list of members added to servers group in this iteration"},{"line_number":994,"context_line":"                    # is needed to check quota of server group during add next"},{"line_number":995,"context_line":"                    # instance"},{"line_number":996,"context_line":"                    instance_group.members.extend(members)"},{"line_number":997,"context_line":""},{"line_number":998,"context_line":"                # send a state update notification for the initial create to"},{"line_number":999,"context_line":"                # show it going from non-existent to BUILDING"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_c7d61427","line":996,"updated":"2016-09-19 13:12:14.000000000","message":"Its tempting to fix up the object behaviour, but that breaks the contract for this version of the object, I guess :(","commit_id":"43826e458eefc4157b45d8a04422cbdcdec4f7ff"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"74a1f9b9232047040ef58772350bd5869415d6c8","unresolved":false,"context_lines":[{"line_number":993,"context_line":"                    # list of members added to servers group in this iteration"},{"line_number":994,"context_line":"                    # is needed to check quota of server group during add next"},{"line_number":995,"context_line":"                    # instance"},{"line_number":996,"context_line":"                    instance_group.members.extend(members)"},{"line_number":997,"context_line":""},{"line_number":998,"context_line":"                # send a state update notification for the initial create to"},{"line_number":999,"context_line":"                # show it going from non-existent to BUILDING"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a8ec9b2_cae7f044","line":996,"in_reply_to":"7a8ec9b2_c7d61427","updated":"2016-09-19 15:41:46.000000000","message":"Ew yeah I just looked at how objects.Quotas.count uses this:\n\nhttps://github.com/openstack/nova/blob/46cf8afa1758d07f5ece2a52517aa16adb2812fd/nova/quota.py#L1516\n\nWhich then relies on instance_group.members:\n\nhttps://github.com/openstack/nova/blob/46cf8afa1758d07f5ece2a52517aa16adb2812fd/nova/objects/instance_group.py#L221\n\nSo there is some nasty tight coupling and confusing code working through quotas to figure this out, but I don\u0027t have a simple solution to clean this up right now.","commit_id":"43826e458eefc4157b45d8a04422cbdcdec4f7ff"}],"nova/tests/unit/compute/test_compute.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"7a0621979da0bf0950102b8ea6d87bdc5dc7c94a","unresolved":false,"context_lines":[{"line_number":7868,"context_line":"                display_name\u003ddisplay_name)"},{"line_number":7869,"context_line":""},{"line_number":7870,"context_line":"            self.assertEqual(ref[0][\u0027hostname\u0027], hostname)"},{"line_number":7871,"context_line":""},{"line_number":7872,"context_line":"    def test_instance_create_adds_to_instance_group(self):"},{"line_number":7873,"context_line":"        self.stub_out(\u0027nova.tests.unit.image.fake._FakeImageService.show\u0027,"},{"line_number":7874,"context_line":"                      self.fake_show)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_6dd39e60","line":7871,"updated":"2016-09-16 20:14:36.000000000","message":"Could add:\n\n @mock.patch(\u0027nova.compute.api.API._get_requested_instance_group\u0027)","commit_id":"4b2ddd7776bdebfece8101f76e03e95f6149c405"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"dd314913de1347f7151592652729de8cec28a91c","unresolved":false,"context_lines":[{"line_number":7868,"context_line":"                display_name\u003ddisplay_name)"},{"line_number":7869,"context_line":""},{"line_number":7870,"context_line":"            self.assertEqual(ref[0][\u0027hostname\u0027], hostname)"},{"line_number":7871,"context_line":""},{"line_number":7872,"context_line":"    def test_instance_create_adds_to_instance_group(self):"},{"line_number":7873,"context_line":"        self.stub_out(\u0027nova.tests.unit.image.fake._FakeImageService.show\u0027,"},{"line_number":7874,"context_line":"                      self.fake_show)"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_1ad6c727","line":7871,"in_reply_to":"7a8ec9b2_6dd39e60","updated":"2016-09-17 07:54:02.000000000","message":"Done","commit_id":"4b2ddd7776bdebfece8101f76e03e95f6149c405"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"7a0621979da0bf0950102b8ea6d87bdc5dc7c94a","unresolved":false,"context_lines":[{"line_number":7869,"context_line":""},{"line_number":7870,"context_line":"            self.assertEqual(ref[0][\u0027hostname\u0027], hostname)"},{"line_number":7871,"context_line":""},{"line_number":7872,"context_line":"    def test_instance_create_adds_to_instance_group(self):"},{"line_number":7873,"context_line":"        self.stub_out(\u0027nova.tests.unit.image.fake._FakeImageService.show\u0027,"},{"line_number":7874,"context_line":"                      self.fake_show)"},{"line_number":7875,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_cdccb2bd","line":7872,"range":{"start_line":7872,"start_character":52,"end_line":7872,"end_character":56},"updated":"2016-09-16 20:14:36.000000000","message":", mock_get","commit_id":"4b2ddd7776bdebfece8101f76e03e95f6149c405"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"dd314913de1347f7151592652729de8cec28a91c","unresolved":false,"context_lines":[{"line_number":7869,"context_line":""},{"line_number":7870,"context_line":"            self.assertEqual(ref[0][\u0027hostname\u0027], hostname)"},{"line_number":7871,"context_line":""},{"line_number":7872,"context_line":"    def test_instance_create_adds_to_instance_group(self):"},{"line_number":7873,"context_line":"        self.stub_out(\u0027nova.tests.unit.image.fake._FakeImageService.show\u0027,"},{"line_number":7874,"context_line":"                      self.fake_show)"},{"line_number":7875,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_fa14bbe9","line":7872,"range":{"start_line":7872,"start_character":52,"end_line":7872,"end_character":56},"in_reply_to":"7a8ec9b2_cdccb2bd","updated":"2016-09-17 07:54:02.000000000","message":"Done","commit_id":"4b2ddd7776bdebfece8101f76e03e95f6149c405"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"7a0621979da0bf0950102b8ea6d87bdc5dc7c94a","unresolved":false,"context_lines":[{"line_number":7878,"context_line":"        group.project_id \u003d self.context.project_id"},{"line_number":7879,"context_line":"        group.user_id \u003d self.context.user_id"},{"line_number":7880,"context_line":"        group.create()"},{"line_number":7881,"context_line":""},{"line_number":7882,"context_line":"        inst_type \u003d flavors.get_default_flavor()"},{"line_number":7883,"context_line":"        (refs, resv_id) \u003d self.compute_api.create("},{"line_number":7884,"context_line":"            self.context, inst_type, self.fake_image[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_0d4a1a26","line":7881,"updated":"2016-09-16 20:14:36.000000000","message":"Set up the thing we\u0027ll test on:\n\n mock_get.return_value \u003d group","commit_id":"4b2ddd7776bdebfece8101f76e03e95f6149c405"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"dd314913de1347f7151592652729de8cec28a91c","unresolved":false,"context_lines":[{"line_number":7878,"context_line":"        group.project_id \u003d self.context.project_id"},{"line_number":7879,"context_line":"        group.user_id \u003d self.context.user_id"},{"line_number":7880,"context_line":"        group.create()"},{"line_number":7881,"context_line":""},{"line_number":7882,"context_line":"        inst_type \u003d flavors.get_default_flavor()"},{"line_number":7883,"context_line":"        (refs, resv_id) \u003d self.compute_api.create("},{"line_number":7884,"context_line":"            self.context, inst_type, self.fake_image[\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_da19bf23","line":7881,"in_reply_to":"7a8ec9b2_0d4a1a26","updated":"2016-09-17 07:54:02.000000000","message":"Done","commit_id":"4b2ddd7776bdebfece8101f76e03e95f6149c405"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"7a0621979da0bf0950102b8ea6d87bdc5dc7c94a","unresolved":false,"context_lines":[{"line_number":7883,"context_line":"        (refs, resv_id) \u003d self.compute_api.create("},{"line_number":7884,"context_line":"            self.context, inst_type, self.fake_image[\u0027id\u0027],"},{"line_number":7885,"context_line":"            scheduler_hints\u003d{\u0027group\u0027: group.uuid})"},{"line_number":7886,"context_line":""},{"line_number":7887,"context_line":"        group \u003d objects.InstanceGroup.get_by_uuid(self.context, group.uuid)"},{"line_number":7888,"context_line":"        self.assertIn(refs[0][\u0027uuid\u0027], group.members)"},{"line_number":7889,"context_line":"        count \u003d objects.Quotas.count(self.context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_ed75ee63","line":7886,"updated":"2016-09-16 20:14:36.000000000","message":"Then:\n\n self.assertEqual(len(refs), len(group.members))","commit_id":"4b2ddd7776bdebfece8101f76e03e95f6149c405"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"843bded0ed4eef8ace46f1c3ee12089305573051","unresolved":false,"context_lines":[{"line_number":7883,"context_line":"        (refs, resv_id) \u003d self.compute_api.create("},{"line_number":7884,"context_line":"            self.context, inst_type, self.fake_image[\u0027id\u0027],"},{"line_number":7885,"context_line":"            scheduler_hints\u003d{\u0027group\u0027: group.uuid})"},{"line_number":7886,"context_line":""},{"line_number":7887,"context_line":"        group \u003d objects.InstanceGroup.get_by_uuid(self.context, group.uuid)"},{"line_number":7888,"context_line":"        self.assertIn(refs[0][\u0027uuid\u0027], group.members)"},{"line_number":7889,"context_line":"        count \u003d objects.Quotas.count(self.context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_0d53fa6b","line":7886,"in_reply_to":"7a8ec9b2_ed75ee63","updated":"2016-09-16 20:26:09.000000000","message":"Alternatively, you could move the block from L7889 here. I\u0027m not sure which is better.","commit_id":"4b2ddd7776bdebfece8101f76e03e95f6149c405"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"dd314913de1347f7151592652729de8cec28a91c","unresolved":false,"context_lines":[{"line_number":7883,"context_line":"        (refs, resv_id) \u003d self.compute_api.create("},{"line_number":7884,"context_line":"            self.context, inst_type, self.fake_image[\u0027id\u0027],"},{"line_number":7885,"context_line":"            scheduler_hints\u003d{\u0027group\u0027: group.uuid})"},{"line_number":7886,"context_line":""},{"line_number":7887,"context_line":"        group \u003d objects.InstanceGroup.get_by_uuid(self.context, group.uuid)"},{"line_number":7888,"context_line":"        self.assertIn(refs[0][\u0027uuid\u0027], group.members)"},{"line_number":7889,"context_line":"        count \u003d objects.Quotas.count(self.context,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_3ad9c357","line":7886,"in_reply_to":"7a8ec9b2_ed75ee63","updated":"2016-09-17 07:54:02.000000000","message":"Done","commit_id":"4b2ddd7776bdebfece8101f76e03e95f6149c405"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"7a0621979da0bf0950102b8ea6d87bdc5dc7c94a","unresolved":false,"context_lines":[{"line_number":7886,"context_line":""},{"line_number":7887,"context_line":"        group \u003d objects.InstanceGroup.get_by_uuid(self.context, group.uuid)"},{"line_number":7888,"context_line":"        self.assertIn(refs[0][\u0027uuid\u0027], group.members)"},{"line_number":7889,"context_line":"        count \u003d objects.Quotas.count(self.context,"},{"line_number":7890,"context_line":"                             \u0027server_group_members\u0027,"},{"line_number":7891,"context_line":"                             group,"},{"line_number":7892,"context_line":"                             self.context.user_id)"},{"line_number":7893,"context_line":"        self.assertEqual(len(refs), count)"},{"line_number":7894,"context_line":""},{"line_number":7895,"context_line":"    def test_instance_create_with_group_uuid_fails_group_not_exist(self):"},{"line_number":7896,"context_line":"        self.stub_out(\u0027nova.tests.unit.image.fake._FakeImageService.show\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_1a6c159b","line":7893,"range":{"start_line":7889,"start_character":8,"end_line":7893,"end_character":42},"updated":"2016-09-16 20:14:36.000000000","message":"I just noticed this block doesn\u0027t fail without the fix because objects.InstanceGroup.get_by_uuid will pull the group members from the db and the quota count run upon it will pass because in the original code, they are getting properly added to the db. It\u0027s just that they\u0027re not reflected locally for the local object check.\n\nAnd moving this before L7887 doesn\u0027t work either because we don\u0027t have an InstanceGroup local object to look at.\n\nI put a suggestion inline on a check that fails without the fix and passes with the fix. And then this block can be removed.","commit_id":"4b2ddd7776bdebfece8101f76e03e95f6149c405"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"dd314913de1347f7151592652729de8cec28a91c","unresolved":false,"context_lines":[{"line_number":7886,"context_line":""},{"line_number":7887,"context_line":"        group \u003d objects.InstanceGroup.get_by_uuid(self.context, group.uuid)"},{"line_number":7888,"context_line":"        self.assertIn(refs[0][\u0027uuid\u0027], group.members)"},{"line_number":7889,"context_line":"        count \u003d objects.Quotas.count(self.context,"},{"line_number":7890,"context_line":"                             \u0027server_group_members\u0027,"},{"line_number":7891,"context_line":"                             group,"},{"line_number":7892,"context_line":"                             self.context.user_id)"},{"line_number":7893,"context_line":"        self.assertEqual(len(refs), count)"},{"line_number":7894,"context_line":""},{"line_number":7895,"context_line":"    def test_instance_create_with_group_uuid_fails_group_not_exist(self):"},{"line_number":7896,"context_line":"        self.stub_out(\u0027nova.tests.unit.image.fake._FakeImageService.show\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a8ec9b2_5adccf45","line":7893,"range":{"start_line":7889,"start_character":8,"end_line":7893,"end_character":42},"in_reply_to":"7a8ec9b2_1a6c159b","updated":"2016-09-17 07:54:02.000000000","message":"I removed this block as it is not necessary now. Thx for help :)","commit_id":"4b2ddd7776bdebfece8101f76e03e95f6149c405"}]}
