)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3a2b250650803a4070622801c7fe196dcd250577","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"c7e3af91_ef050c6a","updated":"2021-12-07 14:03:07.000000000","message":"Please, add functional tests.","commit_id":"6460c6a376ffa31051cacbbaa6096e7402d12449"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"92658cf5b3c4c788c65a54b097a0099e8afefe78","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"b4950c41_fe20d2dd","updated":"2023-01-04 22:09:43.000000000","message":"So are the comments from PS1 no longer valid?","commit_id":"9139e5bcf0f31603afbddd4b604dc3bc44f1fb7b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"40d8faa7378fd49cf547a60ed74ce4b1f4175602","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"1e650fd0_4c80c5ec","updated":"2022-12-20 15:25:18.000000000","message":"recheck timeout fullstack","commit_id":"9139e5bcf0f31603afbddd4b604dc3bc44f1fb7b"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"01162dc4ccd8c4173e6994afae0f20a43e4e5c3a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"0908bf14_1d73bd1b","in_reply_to":"b4950c41_fe20d2dd","updated":"2023-01-05 10:10:27.000000000","message":"Done","commit_id":"9139e5bcf0f31603afbddd4b604dc3bc44f1fb7b"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2f6883344efd9b66e5582c82e9f682bf70275991","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"00921c1c_2d5733ac","updated":"2023-01-13 22:00:32.000000000","message":"Can\u0027t tell if functional failure is due to patch.","commit_id":"1cc3a5d48edae7f93ef481fcfbd96cfb5bcae306"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"192aab478bdbfdc94e3cf09abd14284a35f953ed","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"964e4ff8_6afe69d9","updated":"2023-01-17 10:09:21.000000000","message":"Please fix the comment from Brian, and solve the mergeconflict in ip_lib.py","commit_id":"1cc3a5d48edae7f93ef481fcfbd96cfb5bcae306"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"4fdc9aa9a27c3ba9ad07cda51bf3b7b849fa6b40","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"2ffcbd70_3b4d1e1d","updated":"2023-01-26 10:36:26.000000000","message":"Please check the functional test as test_get_link_devices_using_index fails","commit_id":"c682e6f211f5d043081cde893110d5f3105a1b68"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ab8c4393289fd6d3d8b2a3989c763c1badc8f2d4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"b09c421e_ea5c2cab","updated":"2023-01-25 01:29:36.000000000","message":"Re-based and fixed my nit to keep this moving forward.","commit_id":"c682e6f211f5d043081cde893110d5f3105a1b68"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a5aaf4c7cfc8e475980c6c49a2b161eabb5e32d4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"65650151_c34a43dd","updated":"2023-01-25 15:21:09.000000000","message":"recheck neutron-ovs-tempest-dvr-ha-multinode-full RETRY","commit_id":"c682e6f211f5d043081cde893110d5f3105a1b68"},{"author":{"_account_id":32586,"name":"Elvira García Ruiz","display_name":"Elvira","email":"egarciar@redhat.com","username":"elvira"},"change_message_id":"5754e834a05a690dc34959b2742c840f1a06b22d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"21068756_aea26929","updated":"2023-01-27 09:39:45.000000000","message":"LGTM, thanks!","commit_id":"3727103ce7c691793a0b02c0870ebb41c95f0cfd"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"e1dc0967a4e5f509c4fb92be66a3033eed7320e1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"99454938_c0e25316","updated":"2023-01-31 09:40:44.000000000","message":"recheck\ngrenade failure seems not related","commit_id":"3727103ce7c691793a0b02c0870ebb41c95f0cfd"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b4e0fee9243729709d422dc5ad734ab1fad32d03","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"de6fd782_60d8288b","updated":"2023-01-31 22:05:26.000000000","message":"recheck ReadTimeoutError","commit_id":"3727103ce7c691793a0b02c0870ebb41c95f0cfd"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"212e1369a885455ec5d39af285bd222d863d92a4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"5619a65a_60040422","updated":"2023-01-30 17:24:45.000000000","message":"recheck test_remote_group_and_remote_address_group unrelated failure","commit_id":"3727103ce7c691793a0b02c0870ebb41c95f0cfd"}],"neutron/privileged/agent/linux/ip_lib.py":[{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3a2b250650803a4070622801c7fe196dcd250577","unresolved":true,"context_lines":[{"line_number":564,"context_line":"    \"\"\""},{"line_number":565,"context_line":"    try:"},{"line_number":566,"context_line":"        with get_iproute(namespace) as ip:"},{"line_number":567,"context_line":"            if \"index\" in kwargs:"},{"line_number":568,"context_line":"                return make_serializable(ip.get_links(kwargs[\u0027index\u0027]))"},{"line_number":569,"context_line":"            else:"},{"line_number":570,"context_line":"                return make_serializable(ip.get_links(**kwargs))"}],"source_content_type":"text/x-python","patch_set":1,"id":"c565c045_96f66920","line":567,"range":{"start_line":567,"start_character":15,"end_line":567,"end_character":22},"updated":"2021-12-07 14:03:07.000000000","message":"nit: use single quotes, same as anywhere in this file.","commit_id":"6460c6a376ffa31051cacbbaa6096e7402d12449"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"01162dc4ccd8c4173e6994afae0f20a43e4e5c3a","unresolved":false,"context_lines":[{"line_number":564,"context_line":"    \"\"\""},{"line_number":565,"context_line":"    try:"},{"line_number":566,"context_line":"        with get_iproute(namespace) as ip:"},{"line_number":567,"context_line":"            if \"index\" in kwargs:"},{"line_number":568,"context_line":"                return make_serializable(ip.get_links(kwargs[\u0027index\u0027]))"},{"line_number":569,"context_line":"            else:"},{"line_number":570,"context_line":"                return make_serializable(ip.get_links(**kwargs))"}],"source_content_type":"text/x-python","patch_set":1,"id":"7f338609_72f1743d","line":567,"range":{"start_line":567,"start_character":15,"end_line":567,"end_character":22},"in_reply_to":"c565c045_96f66920","updated":"2023-01-05 10:10:27.000000000","message":"Done","commit_id":"6460c6a376ffa31051cacbbaa6096e7402d12449"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3a2b250650803a4070622801c7fe196dcd250577","unresolved":true,"context_lines":[{"line_number":565,"context_line":"    try:"},{"line_number":566,"context_line":"        with get_iproute(namespace) as ip:"},{"line_number":567,"context_line":"            if \"index\" in kwargs:"},{"line_number":568,"context_line":"                return make_serializable(ip.get_links(kwargs[\u0027index\u0027]))"},{"line_number":569,"context_line":"            else:"},{"line_number":570,"context_line":"                return make_serializable(ip.get_links(**kwargs))"},{"line_number":571,"context_line":"    except OSError as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"b2c5ef30_7329581f","line":568,"range":{"start_line":568,"start_character":54,"end_line":568,"end_character":60},"updated":"2021-12-07 14:03:07.000000000","message":"You are discarding any other parameter in kwargs. The method signature accepts args and kwargs [1]. Pop the \"index\" key and pass the rest of arguments:\n\nargs \u003d []\nif \u0027index\u0027 in kwargs:\n  args.append(kwargs.pop(\u0027index\u0027))\nreturn make_serializable(ip.get_links(*args, **kwargs))\n\n[1]https://github.com/svinota/pyroute2/blob/e24994ffba4f81660142bfcf8193c34207a28a4b/pyroute2.core/pr2modules/iproute/linux.py#L259","commit_id":"6460c6a376ffa31051cacbbaa6096e7402d12449"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"01162dc4ccd8c4173e6994afae0f20a43e4e5c3a","unresolved":false,"context_lines":[{"line_number":565,"context_line":"    try:"},{"line_number":566,"context_line":"        with get_iproute(namespace) as ip:"},{"line_number":567,"context_line":"            if \"index\" in kwargs:"},{"line_number":568,"context_line":"                return make_serializable(ip.get_links(kwargs[\u0027index\u0027]))"},{"line_number":569,"context_line":"            else:"},{"line_number":570,"context_line":"                return make_serializable(ip.get_links(**kwargs))"},{"line_number":571,"context_line":"    except OSError as e:"}],"source_content_type":"text/x-python","patch_set":1,"id":"5b6aabe1_916fa0d2","line":568,"range":{"start_line":568,"start_character":54,"end_line":568,"end_character":60},"in_reply_to":"b2c5ef30_7329581f","updated":"2023-01-05 10:10:27.000000000","message":"Done","commit_id":"6460c6a376ffa31051cacbbaa6096e7402d12449"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"3a2b250650803a4070622801c7fe196dcd250577","unresolved":true,"context_lines":[{"line_number":568,"context_line":"                return make_serializable(ip.get_links(kwargs[\u0027index\u0027]))"},{"line_number":569,"context_line":"            else:"},{"line_number":570,"context_line":"                return make_serializable(ip.get_links(**kwargs))"},{"line_number":571,"context_line":"    except OSError as e:"},{"line_number":572,"context_line":"        if e.errno \u003d\u003d errno.ENOENT:"},{"line_number":573,"context_line":"            raise NetworkNamespaceNotFound(netns_name\u003dnamespace)"},{"line_number":574,"context_line":"        raise"}],"source_content_type":"text/x-python","patch_set":1,"id":"7e4019b5_b4c7a3eb","line":571,"range":{"start_line":571,"start_character":4,"end_line":571,"end_character":10},"updated":"2021-12-07 14:03:07.000000000","message":"This method, being called from ip_lib.get_devices_info(), is not expected to fail. If the device index does not exist, a Netlink error exception will be raised:\npr2modules.netlink.exceptions.NetlinkError: (19, \u0027No such device\u0027)\n\nWe should capture this exception when \"index\" is provided and return an empty list.","commit_id":"6460c6a376ffa31051cacbbaa6096e7402d12449"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"01162dc4ccd8c4173e6994afae0f20a43e4e5c3a","unresolved":false,"context_lines":[{"line_number":568,"context_line":"                return make_serializable(ip.get_links(kwargs[\u0027index\u0027]))"},{"line_number":569,"context_line":"            else:"},{"line_number":570,"context_line":"                return make_serializable(ip.get_links(**kwargs))"},{"line_number":571,"context_line":"    except OSError as e:"},{"line_number":572,"context_line":"        if e.errno \u003d\u003d errno.ENOENT:"},{"line_number":573,"context_line":"            raise NetworkNamespaceNotFound(netns_name\u003dnamespace)"},{"line_number":574,"context_line":"        raise"}],"source_content_type":"text/x-python","patch_set":1,"id":"309bc6c2_8c204887","line":571,"range":{"start_line":571,"start_character":4,"end_line":571,"end_character":10},"in_reply_to":"7e4019b5_b4c7a3eb","updated":"2023-01-05 10:10:27.000000000","message":"I no longer agree with this idea. Any other method is raising an exception in those cases. If needed, we can catch it.","commit_id":"6460c6a376ffa31051cacbbaa6096e7402d12449"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a0cd3576b0cf78c826a777b2da1ff9176720d9ec","unresolved":true,"context_lines":[{"line_number":649,"context_line":"                index \u003d kwargs.pop(\u0027index\u0027)"},{"line_number":650,"context_line":"                return make_serializable(ip.get_links(index, **kwargs))"},{"line_number":651,"context_line":"            else:"},{"line_number":652,"context_line":"                return make_serializable(ip.get_links(**kwargs))"},{"line_number":653,"context_line":"    except OSError as e:"},{"line_number":654,"context_line":"        if e.errno \u003d\u003d errno.ENOENT:"},{"line_number":655,"context_line":"            raise NetworkNamespaceNotFound(netns_name\u003dnamespace)"}],"source_content_type":"text/x-python","patch_set":3,"id":"a6490afc_89462f70","line":652,"updated":"2023-01-05 15:06:16.000000000","message":"So looking at the code for get_links() it seems using index of \u0027all\u0027 is what we want if none is given. So this in theory could be a single call to get_links():\n\nindex \u003d \u0027all\u0027\nif \u0027index\u0027 in kwargs:\n    index \u003d kwargs.pop(\u0027index\u0027)\ntry:\n    with get_iproute(namespace) as ip:\n        return make_serializable(ip.get_links(index, **kwargs))\n        \nWhat do you think?","commit_id":"ffda349816bb302d19a47551ec8d00216949b64e"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"da78c6385bc3e81827edca0e7092422259ea75a0","unresolved":false,"context_lines":[{"line_number":649,"context_line":"                index \u003d kwargs.pop(\u0027index\u0027)"},{"line_number":650,"context_line":"                return make_serializable(ip.get_links(index, **kwargs))"},{"line_number":651,"context_line":"            else:"},{"line_number":652,"context_line":"                return make_serializable(ip.get_links(**kwargs))"},{"line_number":653,"context_line":"    except OSError as e:"},{"line_number":654,"context_line":"        if e.errno \u003d\u003d errno.ENOENT:"},{"line_number":655,"context_line":"            raise NetworkNamespaceNotFound(netns_name\u003dnamespace)"}],"source_content_type":"text/x-python","patch_set":3,"id":"b7bac815_bb82ea32","line":652,"in_reply_to":"a6490afc_89462f70","updated":"2023-01-13 19:52:21.000000000","message":"Done","commit_id":"ffda349816bb302d19a47551ec8d00216949b64e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2f6883344efd9b66e5582c82e9f682bf70275991","unresolved":true,"context_lines":[{"line_number":645,"context_line":"    \"\"\""},{"line_number":646,"context_line":"    try:"},{"line_number":647,"context_line":"        with get_iproute(namespace) as ip:"},{"line_number":648,"context_line":"            index \u003d kwargs.pop(\u0027index\u0027) if \u0027index\u0027 in kwargs else \u0027all\u0027"},{"line_number":649,"context_line":"            return make_serializable(ip.get_links(index, **kwargs))"},{"line_number":650,"context_line":"    except OSError as e:"},{"line_number":651,"context_line":"        if e.errno \u003d\u003d errno.ENOENT:"}],"source_content_type":"text/x-python","patch_set":4,"id":"2af453d0_59b1750c","line":648,"updated":"2023-01-13 22:00:32.000000000","message":"nit: this could be outside the try/except","commit_id":"1cc3a5d48edae7f93ef481fcfbd96cfb5bcae306"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ab8c4393289fd6d3d8b2a3989c763c1badc8f2d4","unresolved":false,"context_lines":[{"line_number":645,"context_line":"    \"\"\""},{"line_number":646,"context_line":"    try:"},{"line_number":647,"context_line":"        with get_iproute(namespace) as ip:"},{"line_number":648,"context_line":"            index \u003d kwargs.pop(\u0027index\u0027) if \u0027index\u0027 in kwargs else \u0027all\u0027"},{"line_number":649,"context_line":"            return make_serializable(ip.get_links(index, **kwargs))"},{"line_number":650,"context_line":"    except OSError as e:"},{"line_number":651,"context_line":"        if e.errno \u003d\u003d errno.ENOENT:"}],"source_content_type":"text/x-python","patch_set":4,"id":"7bb6426d_ec77f749","line":648,"in_reply_to":"15692fb0_66c1e84d","updated":"2023-01-25 01:29:36.000000000","message":"Done","commit_id":"1cc3a5d48edae7f93ef481fcfbd96cfb5bcae306"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"192aab478bdbfdc94e3cf09abd14284a35f953ed","unresolved":true,"context_lines":[{"line_number":645,"context_line":"    \"\"\""},{"line_number":646,"context_line":"    try:"},{"line_number":647,"context_line":"        with get_iproute(namespace) as ip:"},{"line_number":648,"context_line":"            index \u003d kwargs.pop(\u0027index\u0027) if \u0027index\u0027 in kwargs else \u0027all\u0027"},{"line_number":649,"context_line":"            return make_serializable(ip.get_links(index, **kwargs))"},{"line_number":650,"context_line":"    except OSError as e:"},{"line_number":651,"context_line":"        if e.errno \u003d\u003d errno.ENOENT:"}],"source_content_type":"text/x-python","patch_set":4,"id":"15692fb0_66c1e84d","line":648,"in_reply_to":"2af453d0_59b1750c","updated":"2023-01-17 10:09:21.000000000","message":"+1","commit_id":"1cc3a5d48edae7f93ef481fcfbd96cfb5bcae306"}],"neutron/tests/functional/privileged/agent/linux/test_ip_lib.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"192aab478bdbfdc94e3cf09abd14284a35f953ed","unresolved":true,"context_lines":[{"line_number":62,"context_line":"            self.assertNotIn(name, interfaces)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class GetLinkDevicesTestCase(functional_base.BaseSudoTestCase):"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def setUp(self):"},{"line_number":68,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":4,"id":"41c346b9_80e8ac3a","line":65,"range":{"start_line":65,"start_character":6,"end_line":65,"end_character":28},"updated":"2023-01-17 10:09:21.000000000","message":"This seems really a better name","commit_id":"1cc3a5d48edae7f93ef481fcfbd96cfb5bcae306"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ab8c4393289fd6d3d8b2a3989c763c1badc8f2d4","unresolved":false,"context_lines":[{"line_number":62,"context_line":"            self.assertNotIn(name, interfaces)"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"class GetLinkDevicesTestCase(functional_base.BaseSudoTestCase):"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def setUp(self):"},{"line_number":68,"context_line":"        super().setUp()"}],"source_content_type":"text/x-python","patch_set":4,"id":"d498448f_96a5c376","line":65,"range":{"start_line":65,"start_character":6,"end_line":65,"end_character":28},"in_reply_to":"41c346b9_80e8ac3a","updated":"2023-01-25 01:29:36.000000000","message":"Done","commit_id":"1cc3a5d48edae7f93ef481fcfbd96cfb5bcae306"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f606b96e6cde80a6a9ab999093e4ba2703026216","unresolved":true,"context_lines":[{"line_number":252,"context_line":"                self.namespace, index\u003dexpected_device[\u0027index\u0027])"},{"line_number":253,"context_line":"            self.assertEqual(1, len(device))"},{"line_number":254,"context_line":"            self.assertEqual(ip_lib.get_attr(expected_device, \u0027IFLA_IFNAME\u0027),"},{"line_number":255,"context_line":"                             ip_lib.get_attr(device[0], \u0027IFLA_IFNAME\u0027))"},{"line_number":256,"context_line":""},{"line_number":257,"context_line":"        self.assertRaises(netlink_exc.NetlinkError,"},{"line_number":258,"context_line":"                          priv_ip_lib.get_link_devices, self.namespace,"}],"source_content_type":"text/x-python","patch_set":5,"id":"eb4aace1_740e3e81","line":255,"range":{"start_line":255,"start_character":29,"end_line":255,"end_character":44},"updated":"2023-01-26 16:28:59.000000000","message":"get_attr moved to linux_utils import, will fix","commit_id":"c682e6f211f5d043081cde893110d5f3105a1b68"}]}
