)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f4656688b8286b15aceeef7fc0904be088106430","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"07c7c67c_9c722f60","updated":"2025-08-14 19:07:47.000000000","message":"This is on the right track, just should make use of our scatter-gather utility.","commit_id":"81636a58f56f4866303bd17a6b454d66029692fd"},{"author":{"_account_id":26250,"name":"Johannes Kulik","email":"johannes.kulik@sap.com","username":"jkulik"},"change_message_id":"99eeaf3332b1742b288712048489cd832335b565","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"8e3b7bc4_ec25f27a","updated":"2024-01-25 12:53:01.000000000","message":"recheck another unrelated timeout","commit_id":"81636a58f56f4866303bd17a6b454d66029692fd"},{"author":{"_account_id":26250,"name":"Johannes Kulik","email":"johannes.kulik@sap.com","username":"jkulik"},"change_message_id":"c5abe7ad04549fa6350519d65cafdeec52a16ac3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"5cda34c9_f822e34f","updated":"2024-01-25 09:31:11.000000000","message":"recheck timeout","commit_id":"81636a58f56f4866303bd17a6b454d66029692fd"},{"author":{"_account_id":26250,"name":"Johannes Kulik","email":"johannes.kulik@sap.com","username":"jkulik"},"change_message_id":"6454f6407c636d4babe738ffd89a6cb239c96bfe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"add838d3_6d9346d2","updated":"2024-01-23 08:40:42.000000000","message":"recheck unrelated timeout","commit_id":"81636a58f56f4866303bd17a6b454d66029692fd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9aab1c36d240ca5fad22f15fdba06ad90087c310","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":18,"id":"54ad1fbc_4f681358","updated":"2025-12-17 08:53:21.000000000","message":"it might be nice to add a release note for this\nor a functional repoducer but i think i you add the unit test coverge for the cell time out and excption cases that would be the minium we need to proceed.","commit_id":"a86b2ffb16cf0e6add52bd197afd282e7ee1c2ce"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"57a651ba544a3b2e951073468d8f6cc4a5acb6e7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"a80d4ade_e7951223","updated":"2026-01-23 02:23:24.000000000","message":"Looks OK to me, thanks for fixing this!","commit_id":"fb661ec597e326b70829246cfdd4309dc7273bfa"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9ff6c4217b015a7f8dd28c2f1e32c0d5faf42e99","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"c19dabed_855aab77","updated":"2025-12-18 11:29:38.000000000","message":"ill defer to @melwittt@gmail.com on this but i think this is in an accpetable place to move forward.\nthanks for adding the extra test coverage and the release note.","commit_id":"fb661ec597e326b70829246cfdd4309dc7273bfa"},{"author":{"_account_id":15439,"name":"Alexey Khodos","email":"akhodos@tintri.com","username":"Alexey"},"change_message_id":"53170c7cb3da5030f513f8d33faf7e151fe21bfd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"a7ad7475_1950c77c","updated":"2026-01-03 02:14:05.000000000","message":"run-vmstore-ci","commit_id":"fb661ec597e326b70829246cfdd4309dc7273bfa"}],"nova/objects/instance.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ff660e25794a89029cc83fd46a3c85a84e43dc98","unresolved":false,"context_lines":[{"line_number":1466,"context_line":"        faults \u003d list(itertools.chain.from_iterable(cell_to_faults.values()))"},{"line_number":1467,"context_line":""},{"line_number":1468,"context_line":"        faults_by_uuid \u003d {}"},{"line_number":1469,"context_line":"        for fault in faults:"},{"line_number":1470,"context_line":"            faults_by_uuid[fault.instance_uuid] \u003d fault"},{"line_number":1471,"context_line":""},{"line_number":1472,"context_line":"        for instance in self:"},{"line_number":1473,"context_line":"            if instance.uuid in faults_by_uuid:"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fa7e38b_5b39599f","line":1470,"range":{"start_line":1469,"start_character":0,"end_line":1470,"end_character":55},"updated":"2020-01-29 09:40:00.000000000","message":"This could be a bit more complicated as cross cell resize is possible now. So the same instance can have latest fault in both two different cells. As far as I see cross cell resize does not move the faults from the source cell to the destination cell db [1]. \n\nI suggest to add a functional test to verify this:\n* boot an instance and make it record a fault\n* recover the faulty instance\n* move the instance to another cell\n* make it record another fault\n* list the faults \n\nIf my understanding is correct the API will return one of the two faults at random, but not always the latest one.\n\nhttps://github.com/openstack/nova/blob/9fa3600fcaef74660aadae56ecc5f766f1093f14/nova/conductor/tasks/cross_cell_migrate.py#L155","commit_id":"aa196913eeb98d539c8b6f7c7cd328b157e08609"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"a4ccd78811b562267a8a7272836c81953757df86","unresolved":false,"context_lines":[{"line_number":1443,"context_line":"        :returns: A list of instance uuids for which faults were found."},{"line_number":1444,"context_line":"        \"\"\""},{"line_number":1445,"context_line":"        uuids \u003d [inst.uuid for inst in self]"},{"line_number":1446,"context_line":"        inst_mappings \u003d objects.InstanceMappingList.get_by_instance_uuids("},{"line_number":1447,"context_line":"            self._context, uuids)"},{"line_number":1448,"context_line":""},{"line_number":1449,"context_line":"        def _group_inst_mappings_by_cell_id(instance_mappings):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_273e69b6","line":1446,"updated":"2020-02-20 20:07:29.000000000","message":"I think instead of doing this method, you should instead use the scatter_gather_all_cells utility. Here is an example of how to use it and parse the results:\n\nhttps://github.com/openstack/nova/blob/c16315165ce307c605cf4b608b2df3aa06f46982/nova/objects/service.py#L532-L554","commit_id":"1db0c0f36111299af400713b70c7594c944efb25"},{"author":{"_account_id":29125,"name":"Ivaylo Mitev","email":"imitev@vmware.com","username":"imitev"},"change_message_id":"d61a15fdef6d4d50c7fc6c4f7288d5b39a14fce5","unresolved":false,"context_lines":[{"line_number":1443,"context_line":"        :returns: A list of instance uuids for which faults were found."},{"line_number":1444,"context_line":"        \"\"\""},{"line_number":1445,"context_line":"        uuids \u003d [inst.uuid for inst in self]"},{"line_number":1446,"context_line":"        inst_mappings \u003d objects.InstanceMappingList.get_by_instance_uuids("},{"line_number":1447,"context_line":"            self._context, uuids)"},{"line_number":1448,"context_line":""},{"line_number":1449,"context_line":"        def _group_inst_mappings_by_cell_id(instance_mappings):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_c7b435f7","line":1446,"in_reply_to":"3fa7e38b_273e69b6","updated":"2020-02-20 20:27:59.000000000","message":"I did go for scatter_gather in patch set 5 but changed it back to this approach because of the issues pointed out in the comments by Balazs Gibizer.","commit_id":"1db0c0f36111299af400713b70c7594c944efb25"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"e4e03538712e7b2f6d181b3a1bd7e94c0ee50413","unresolved":false,"context_lines":[{"line_number":1443,"context_line":"        :returns: A list of instance uuids for which faults were found."},{"line_number":1444,"context_line":"        \"\"\""},{"line_number":1445,"context_line":"        uuids \u003d [inst.uuid for inst in self]"},{"line_number":1446,"context_line":"        inst_mappings \u003d objects.InstanceMappingList.get_by_instance_uuids("},{"line_number":1447,"context_line":"            self._context, uuids)"},{"line_number":1448,"context_line":""},{"line_number":1449,"context_line":"        def _group_inst_mappings_by_cell_id(instance_mappings):"}],"source_content_type":"text/x-python","patch_set":9,"id":"3fa7e38b_024d5b3b","line":1446,"in_reply_to":"3fa7e38b_c7b435f7","updated":"2020-02-20 21:28:27.000000000","message":"Oh, sorry about that. I should have noticed. I will leave it to gibi then.","commit_id":"1db0c0f36111299af400713b70c7594c944efb25"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"81c3e477baefa7ef121e26ec87c31ce4fb52442c","unresolved":true,"context_lines":[{"line_number":1595,"context_line":"                    for fault in faults:"},{"line_number":1596,"context_line":"                        faults_by_uuid[fault.instance_uuid] \u003d fault"},{"line_number":1597,"context_line":"            except Exception:"},{"line_number":1598,"context_line":"                LOG.exception(\u0027Error gathering faults from cell %s.\u0027, cell_id)"},{"line_number":1599,"context_line":""},{"line_number":1600,"context_line":"        for instance in self:"},{"line_number":1601,"context_line":"            if instance.uuid in faults_by_uuid:"}],"source_content_type":"text/x-python","patch_set":17,"id":"784b560a_857448b8","line":1598,"updated":"2025-08-14 18:06:37.000000000","message":"the intent of this patch is correct.\n\nthe impelemtion is not quite right.\n\nwe normally do a cell db accses patten that we refer to as schatter gatther where we dispatch the same query to multiple cells in parallel and then aggreate the results and so that instead of the latency scaling liniarly with te number of cells the latency is determined by the slowest cell.\n\nso this would need to be refactored to use that access pattern otherwise this woudl cause a perfroamce regression with the server detail list api.\n\nim not sure this si the correct plas to do this fix as a result.","commit_id":"81636a58f56f4866303bd17a6b454d66029692fd"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"f4656688b8286b15aceeef7fc0904be088106430","unresolved":true,"context_lines":[{"line_number":1595,"context_line":"                    for fault in faults:"},{"line_number":1596,"context_line":"                        faults_by_uuid[fault.instance_uuid] \u003d fault"},{"line_number":1597,"context_line":"            except Exception:"},{"line_number":1598,"context_line":"                LOG.exception(\u0027Error gathering faults from cell %s.\u0027, cell_id)"},{"line_number":1599,"context_line":""},{"line_number":1600,"context_line":"        for instance in self:"},{"line_number":1601,"context_line":"            if instance.uuid in faults_by_uuid:"}],"source_content_type":"text/x-python","patch_set":17,"id":"cc3ef2ba_43194d6a","line":1598,"in_reply_to":"784b560a_857448b8","updated":"2025-08-14 19:07:47.000000000","message":"+1, for this you will want to use instead `scatter_gather_all_cells(\nself._context, objects.InstanceFaultList.get_latest_by_instance_uuids, uuids)`\n\nNote the return value format of the result from `scatter_gather_all_cells()`, it is a dict, not simply a list of faults.\n\nAs for where to do this, I think this might actually be the right location. This is not the most common, usually multi-cell gathering code lives outside of objects but this is a method meant to fetch all instance faults in one batch, so I think it should be in here.\n\nI find one other example in `nova.objects.service.py`, though that one is a global function.\n\n[1] https://github.com/openstack/nova/blob/e4340cd8e54fe3b447192e7982693793c60569cd/nova/context.py#L532","commit_id":"81636a58f56f4866303bd17a6b454d66029692fd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9ff6c4217b015a7f8dd28c2f1e32c0d5faf42e99","unresolved":false,"context_lines":[{"line_number":1595,"context_line":"                    for fault in faults:"},{"line_number":1596,"context_line":"                        faults_by_uuid[fault.instance_uuid] \u003d fault"},{"line_number":1597,"context_line":"            except Exception:"},{"line_number":1598,"context_line":"                LOG.exception(\u0027Error gathering faults from cell %s.\u0027, cell_id)"},{"line_number":1599,"context_line":""},{"line_number":1600,"context_line":"        for instance in self:"},{"line_number":1601,"context_line":"            if instance.uuid in faults_by_uuid:"}],"source_content_type":"text/x-python","patch_set":17,"id":"494c1d65_b411d9b1","line":1598,"in_reply_to":"cc3ef2ba_43194d6a","updated":"2025-12-18 11:29:38.000000000","message":"Done","commit_id":"81636a58f56f4866303bd17a6b454d66029692fd"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9aab1c36d240ca5fad22f15fdba06ad90087c310","unresolved":true,"context_lines":[{"line_number":1577,"context_line":""},{"line_number":1578,"context_line":"        faults_by_uuid \u003d {}"},{"line_number":1579,"context_line":"        for cell_uuid, faults in results.items():"},{"line_number":1580,"context_line":"            if faults is nova_context.did_not_respond_sentinel:"},{"line_number":1581,"context_line":"                LOG.warning(\u0027Cell %s did not respond when getting faults\u0027,"},{"line_number":1582,"context_line":"                            cell_uuid)"},{"line_number":1583,"context_line":"            elif isinstance(faults, Exception):"},{"line_number":1584,"context_line":"                LOG.warning(\u0027Failed to get faults for cell %s\u0027, cell_uuid)"},{"line_number":1585,"context_line":"            else:"},{"line_number":1586,"context_line":"                for fault in faults:"},{"line_number":1587,"context_line":"                    faults_by_uuid[fault.instance_uuid] \u003d fault"}],"source_content_type":"text/x-python","patch_set":18,"id":"cc8d86c3_8629d1cd","line":1584,"range":{"start_line":1580,"start_character":12,"end_line":1584,"end_character":74},"updated":"2025-12-17 08:53:21.000000000","message":"from a testing perpective you did not unit test either of thes two paths","commit_id":"a86b2ffb16cf0e6add52bd197afd282e7ee1c2ce"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"9ff6c4217b015a7f8dd28c2f1e32c0d5faf42e99","unresolved":false,"context_lines":[{"line_number":1577,"context_line":""},{"line_number":1578,"context_line":"        faults_by_uuid \u003d {}"},{"line_number":1579,"context_line":"        for cell_uuid, faults in results.items():"},{"line_number":1580,"context_line":"            if faults is nova_context.did_not_respond_sentinel:"},{"line_number":1581,"context_line":"                LOG.warning(\u0027Cell %s did not respond when getting faults\u0027,"},{"line_number":1582,"context_line":"                            cell_uuid)"},{"line_number":1583,"context_line":"            elif isinstance(faults, Exception):"},{"line_number":1584,"context_line":"                LOG.warning(\u0027Failed to get faults for cell %s\u0027, cell_uuid)"},{"line_number":1585,"context_line":"            else:"},{"line_number":1586,"context_line":"                for fault in faults:"},{"line_number":1587,"context_line":"                    faults_by_uuid[fault.instance_uuid] \u003d fault"}],"source_content_type":"text/x-python","patch_set":18,"id":"990b9dd6_4315aea8","line":1584,"range":{"start_line":1580,"start_character":12,"end_line":1584,"end_character":74},"in_reply_to":"cc8d86c3_8629d1cd","updated":"2025-12-18 11:29:38.000000000","message":"Done","commit_id":"a86b2ffb16cf0e6add52bd197afd282e7ee1c2ce"}]}
