)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"2db966b384d24bb8cdc00afa69bbdb041f66018b","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     melanie witt \u003cmelwittt@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-06-01 00:01:13 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add InstanceGroup.get_counts()"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds a method for getting counts of server groups in the database"},{"line_number":10,"context_line":"for checking quota."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"df140735_af11cd5f","line":7,"range":{"start_line":7,"start_character":4,"end_line":7,"end_character":17},"updated":"2017-06-01 19:20:33.000000000","message":"It\u0027s actually InstanceGroupList...","commit_id":"240cd92885c6dad194af0232f5afafcd3a61182e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"3afe809b0797dfb744a40c2e2656b41ed2c79d19","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     melanie witt \u003cmelwittt@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2017-06-01 00:01:13 +0000"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Add InstanceGroup.get_counts()"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This adds a method for getting counts of server groups in the database"},{"line_number":10,"context_line":"for checking quota."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":13,"id":"df140735_b225b65e","line":7,"range":{"start_line":7,"start_character":4,"end_line":7,"end_character":17},"in_reply_to":"df140735_af11cd5f","updated":"2017-06-01 19:37:04.000000000","message":"Dangit. It started as InstanceGroup and I changed it to InstanceGroupList and forgot to update this.","commit_id":"240cd92885c6dad194af0232f5afafcd3a61182e"}],"nova/objects/instance_group.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"c10f53abc96123c55124d2025b50d3b9e009d2c1","unresolved":false,"context_lines":[{"line_number":505,"context_line":"        counts \u003d {}"},{"line_number":506,"context_line":"        counts[\u0027project\u0027] \u003d {\u0027server_groups\u0027: query.count()}"},{"line_number":507,"context_line":"        if user_id:"},{"line_number":508,"context_line":"            query \u003d query.filter_by(user_id\u003duser_id)"},{"line_number":509,"context_line":"            counts[\u0027user\u0027] \u003d {\u0027server_groups\u0027: query.count()}"},{"line_number":510,"context_line":"        return counts"},{"line_number":511,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"df140735_5bfa3c42","line":508,"range":{"start_line":508,"start_character":20,"end_line":508,"end_character":52},"updated":"2017-05-30 21:06:43.000000000","message":"Should this be project_id OR user_id, *or* project_id AND user_id, which is what you have right now.","commit_id":"0e68e3161403a2137eb2b7d50229fef845b5d478"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"afdc682e92187a9fe8416753107e49b5ade60074","unresolved":false,"context_lines":[{"line_number":505,"context_line":"        counts \u003d {}"},{"line_number":506,"context_line":"        counts[\u0027project\u0027] \u003d {\u0027server_groups\u0027: query.count()}"},{"line_number":507,"context_line":"        if user_id:"},{"line_number":508,"context_line":"            query \u003d query.filter_by(user_id\u003duser_id)"},{"line_number":509,"context_line":"            counts[\u0027user\u0027] \u003d {\u0027server_groups\u0027: query.count()}"},{"line_number":510,"context_line":"        return counts"},{"line_number":511,"context_line":""}],"source_content_type":"text/x-python","patch_set":12,"id":"df140735_db4acc7e","line":508,"range":{"start_line":508,"start_character":20,"end_line":508,"end_character":52},"in_reply_to":"df140735_5bfa3c42","updated":"2017-05-30 21:11:49.000000000","message":"It has to be AND. That is, there isn\u0027t a notion of quota across a project OR quota across a user. It\u0027s project quota and then project-user quota (since a user is always part of a project).","commit_id":"0e68e3161403a2137eb2b7d50229fef845b5d478"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"c16c926d4c7a0ea610fb122b2d8d19531772bd98","unresolved":false,"context_lines":[{"line_number":537,"context_line":"                    {\u0027project\u0027: {\u0027server_groups\u0027: \u003ccount across project\u003e},"},{"line_number":538,"context_line":"                     \u0027user\u0027: {\u0027server_groups\u0027: \u003ccount across user\u003e}}"},{"line_number":539,"context_line":"        \"\"\""},{"line_number":540,"context_line":"        return cls._get_counts_from_db(context, project_id, user_id\u003duser_id)"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"@db_api.pick_context_manager_reader"}],"source_content_type":"text/x-python","patch_set":13,"id":"df140735_9cddcee1","line":540,"updated":"2017-06-05 18:46:45.000000000","message":"These kinds of complex return values that aren\u0027t versioned are kinda icky because we can\u0027t easily automate testing them for correctness (i.e. we can\u0027t detect that we broke version 1.8 like we can if a signature changes).\n\nI dunno what to suggest, so I\u0027m just complaining here.","commit_id":"240cd92885c6dad194af0232f5afafcd3a61182e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"2061e11cd7e9e6761dc836b8e025dc6ac00200fb","unresolved":false,"context_lines":[{"line_number":537,"context_line":"                    {\u0027project\u0027: {\u0027server_groups\u0027: \u003ccount across project\u003e},"},{"line_number":538,"context_line":"                     \u0027user\u0027: {\u0027server_groups\u0027: \u003ccount across user\u003e}}"},{"line_number":539,"context_line":"        \"\"\""},{"line_number":540,"context_line":"        return cls._get_counts_from_db(context, project_id, user_id\u003duser_id)"},{"line_number":541,"context_line":""},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"@db_api.pick_context_manager_reader"}],"source_content_type":"text/x-python","patch_set":13,"id":"df140735_4e818fc3","line":540,"in_reply_to":"df140735_9cddcee1","updated":"2017-06-06 20:46:48.000000000","message":"Yeah, I was thinking something like that too. I mean, we cover the return value format in unit tests and AFAIK, we can\u0027t safely change it and instead have to add a new method and version anyway, so maybe it\u0027s moot since we don\u0027t allow changing return values of remotable methods. That is obviously only enforced via code review.","commit_id":"240cd92885c6dad194af0232f5afafcd3a61182e"}],"nova/tests/functional/db/test_instance_group.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"8a77fcf5c14a28e6e381ebb4a1a428dc2f98aa7b","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        self._api_group(project_id\u003d\u0027foo\u0027)"},{"line_number":193,"context_line":"        self._api_group(user_id\u003d\u0027bar\u0027)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        counts \u003d objects.InstanceGroupList.get_counts("},{"line_number":196,"context_line":"            self.context, self.context.project_id,"},{"line_number":197,"context_line":"            user_id\u003dself.context.user_id)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        self.assertEqual(2, counts[\u0027project\u0027][\u0027server_groups\u0027])"},{"line_number":200,"context_line":"        self.assertEqual(1, counts[\u0027user\u0027][\u0027server_groups\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"df140735_3b63081d","line":197,"range":{"start_line":195,"start_character":8,"end_line":197,"end_character":41},"updated":"2017-05-30 21:09:46.000000000","message":"Since user_id is optional we should have a test for that right?","commit_id":"0e68e3161403a2137eb2b7d50229fef845b5d478"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"afdc682e92187a9fe8416753107e49b5ade60074","unresolved":false,"context_lines":[{"line_number":192,"context_line":"        self._api_group(project_id\u003d\u0027foo\u0027)"},{"line_number":193,"context_line":"        self._api_group(user_id\u003d\u0027bar\u0027)"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"        counts \u003d objects.InstanceGroupList.get_counts("},{"line_number":196,"context_line":"            self.context, self.context.project_id,"},{"line_number":197,"context_line":"            user_id\u003dself.context.user_id)"},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"        self.assertEqual(2, counts[\u0027project\u0027][\u0027server_groups\u0027])"},{"line_number":200,"context_line":"        self.assertEqual(1, counts[\u0027user\u0027][\u0027server_groups\u0027])"}],"source_content_type":"text/x-python","patch_set":12,"id":"df140735_7b598058","line":197,"range":{"start_line":195,"start_character":8,"end_line":197,"end_character":41},"in_reply_to":"df140735_3b63081d","updated":"2017-05-30 21:11:49.000000000","message":"Yeah, good call. Will add.","commit_id":"0e68e3161403a2137eb2b7d50229fef845b5d478"}]}
