)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"55827040239f4a93df67bb0500a93a97d4f577ca","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"2a9db404_b0e7a638","updated":"2025-04-25 14:52:57.000000000","message":"If we\u0027re going to merge a change like this with no test change, I\u0027d at least like a commit message hat tip to the fact that we know it\u0027s covered by an existing test. But, the existing test doesn\u0027t fully cover this change, so I\u0027d also like to see a little expansion before we merge.","commit_id":"b622875ef9e77232df6ea849c35ad3716f22255d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"9ca6a4ae8113a6ce57ffc24d557c410aa4fc7ba1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"904b016d_2488579d","updated":"2025-04-24 16:53:39.000000000","message":"Looks right to me.","commit_id":"b622875ef9e77232df6ea849c35ad3716f22255d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"192b8726ce7c515a49557f9fbadb6f2cb5ec3255","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"ee3019c0_3ae4d383","updated":"2025-04-25 14:39:05.000000000","message":"dropped +w to allow gibi to add unit test coverage based on dan\u0027s concern on irc","commit_id":"b622875ef9e77232df6ea849c35ad3716f22255d"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"bc7514bfae3ff7d9b65fd62930702b9d83e1da97","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"3db1fa0c_3323f5d6","updated":"2025-04-24 15:42:42.000000000","message":"i have not looked at this in detail but i agree that refactoring sound valid.","commit_id":"b622875ef9e77232df6ea849c35ad3716f22255d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"6ec22ca9ef208d1996adb736623c80c6b3821c4f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"f9ad35f5_7c241d32","updated":"2025-05-06 20:15:30.000000000","message":"Looks good to me","commit_id":"7f4c47c6423b121a5d8d79c192a4922500a749a1"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"8a5f4d987e024160d3381a626c78ef42bc588127","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"6fba51c1_a9b86242","updated":"2025-05-05 14:26:56.000000000","message":"Thanks for adding coverage to this","commit_id":"7f4c47c6423b121a5d8d79c192a4922500a749a1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ae86fcbfba2b97db965d947e638f14000e554385","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"a91ad3ed_54dcc918","updated":"2025-05-06 08:09:53.000000000","message":"recheck nova-ceph-multistore bug/2109428\n\nhttps://zuul.opendev.org/t/openstack/build/02496ca583c24518baa4ade3549fd282/log/controller/logs/screen-n-api.txt#10532","commit_id":"7f4c47c6423b121a5d8d79c192a4922500a749a1"}],"nova/quota.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"deb3c9f497c6b338ab9e5d4cc8a68723f56cf2d7","unresolved":true,"context_lines":[{"line_number":1209,"context_line":"def _server_group_count_members_by_user_legacy(context, group, user_id):"},{"line_number":1210,"context_line":"    filters \u003d {\u0027deleted\u0027: False, \u0027user_id\u0027: user_id, \u0027uuid\u0027: group.members}"},{"line_number":1211,"context_line":""},{"line_number":1212,"context_line":"    def group_member_uuids(cctxt):"},{"line_number":1213,"context_line":"        return {inst.uuid for inst in objects.InstanceList.get_by_filters("},{"line_number":1214,"context_line":"            cctxt, filters, expected_attrs\u003d[])}"},{"line_number":1215,"context_line":""},{"line_number":1216,"context_line":"    # Ignore any duplicates since build requests and instances can co-exist"},{"line_number":1217,"context_line":"    # for a short window of time after the instance is created in a cell but"}],"source_content_type":"text/x-python","patch_set":2,"id":"09aa5f55_0154acbe","line":1214,"range":{"start_line":1212,"start_character":2,"end_line":1214,"end_character":47},"updated":"2025-04-25 12:17:40.000000000","message":"ok so this set comprehension change the algorithm quite a lot\n\nwe are no longer using list here and below meaning that we go form doing many linearly time looks ups by allowing you do simple unions.\n  \n    instance_uuids \u003d set()\n    # NOTE(melwitt): Counting across cells for instances means we will miss\n    # counting resources if a cell is down.\n    per_cell \u003d nova_context.scatter_gather_all_cells(\n        context, group_member_uuids)\n    for uuids in per_cell.values():\n        instance_uuids |\u003d uuids\n\nthat is a nice data structure/algorithmic improvement.\nthe code is also simpler to reason about IMO as you have abstracted over the concurancy","commit_id":"b622875ef9e77232df6ea849c35ad3716f22255d"},{"author":{"_account_id":4393,"name":"Dan Smith","email":"dms@danplanet.com","username":"danms"},"change_message_id":"55827040239f4a93df67bb0500a93a97d4f577ca","unresolved":true,"context_lines":[{"line_number":1229,"context_line":"    # that are not yet created in a cell."},{"line_number":1230,"context_line":"    build_requests \u003d objects.BuildRequestList.get_by_filters(context, filters)"},{"line_number":1231,"context_line":"    for build_request in build_requests:"},{"line_number":1232,"context_line":"        instance_uuids.add(build_request.instance_uuid)"},{"line_number":1233,"context_line":""},{"line_number":1234,"context_line":"    return {\u0027user\u0027: {\u0027server_group_members\u0027: len(instance_uuids)}}"},{"line_number":1235,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"ab408ccc_7bc46dc0","line":1232,"updated":"2025-04-25 14:52:57.000000000","message":"There is exactly one test in the tree that covers this function at all, and it doesn\u0027t (AFAICT) have build requests that get included here. Can you extend it to validate this part of the code at least?","commit_id":"b622875ef9e77232df6ea849c35ad3716f22255d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"f4ab4920105a6ab2e7568564f56c039c1a40e4ba","unresolved":false,"context_lines":[{"line_number":1229,"context_line":"    # that are not yet created in a cell."},{"line_number":1230,"context_line":"    build_requests \u003d objects.BuildRequestList.get_by_filters(context, filters)"},{"line_number":1231,"context_line":"    for build_request in build_requests:"},{"line_number":1232,"context_line":"        instance_uuids.add(build_request.instance_uuid)"},{"line_number":1233,"context_line":""},{"line_number":1234,"context_line":"    return {\u0027user\u0027: {\u0027server_group_members\u0027: len(instance_uuids)}}"},{"line_number":1235,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"72529dcf_84907e18","line":1232,"in_reply_to":"ab408ccc_7bc46dc0","updated":"2025-05-05 14:07:04.000000000","message":"I\u0027ve added unit test coverage.","commit_id":"b622875ef9e77232df6ea849c35ad3716f22255d"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"9ca6a4ae8113a6ce57ffc24d557c410aa4fc7ba1","unresolved":true,"context_lines":[{"line_number":1232,"context_line":"        instance_uuids.add(build_request.instance_uuid)"},{"line_number":1233,"context_line":""},{"line_number":1234,"context_line":"    return {\u0027user\u0027: {\u0027server_group_members\u0027: len(instance_uuids)}}"},{"line_number":1235,"context_line":""},{"line_number":1236,"context_line":""},{"line_number":1237,"context_line":"def is_qfd_populated(context):"},{"line_number":1238,"context_line":"    \"\"\"Check if user_id and queued_for_delete fields are populated."}],"source_content_type":"text/x-python","patch_set":2,"id":"1aa91df2_47bf8a8a","line":1235,"updated":"2025-04-24 16:53:39.000000000","message":"Wow, I completely forgot about this code and wondered, why is it not using scatter-gather already? And then I found it\u0027s from 8 years ago before we had scatter-gather 😝","commit_id":"b622875ef9e77232df6ea849c35ad3716f22255d"}]}
