)]}'
{"neutron/agent/linux/ip_lib.py":[{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"a20a62bfff535b8393df61a748946a27ff1aa4f7","unresolved":false,"context_lines":[{"line_number":1343,"context_line":"    privileged.delete_ip_rule(namespace, **cmd_args)"},{"line_number":1344,"context_line":""},{"line_number":1345,"context_line":""},{"line_number":1346,"context_line":"def get_attr(pyroute2_obj, attr_name):"},{"line_number":1347,"context_line":"    \"\"\"Get an attribute from a PyRoute2 object\"\"\""},{"line_number":1348,"context_line":"    rule_attrs \u003d pyroute2_obj.get(\u0027attrs\u0027, [])"},{"line_number":1349,"context_line":"    for attr in (attr for attr in rule_attrs if attr[0] \u003d\u003d attr_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_9eefa1e8","line":1346,"range":{"start_line":1346,"start_character":4,"end_line":1346,"end_character":12},"updated":"2019-01-18 23:40:37.000000000","message":"nit: this doesn\u0027t look like an external-facing API so it is better to prefix the name with \"_\" to make it clear.","commit_id":"1bcfdfa90cb092ae19b7c573ff96cffdfa29f65c"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"20f4111e5a51a0b6b52c55824b426230fdd96fe0","unresolved":false,"context_lines":[{"line_number":1343,"context_line":"    privileged.delete_ip_rule(namespace, **cmd_args)"},{"line_number":1344,"context_line":""},{"line_number":1345,"context_line":""},{"line_number":1346,"context_line":"def get_attr(pyroute2_obj, attr_name):"},{"line_number":1347,"context_line":"    \"\"\"Get an attribute from a PyRoute2 object\"\"\""},{"line_number":1348,"context_line":"    rule_attrs \u003d pyroute2_obj.get(\u0027attrs\u0027, [])"},{"line_number":1349,"context_line":"    for attr in (attr for attr in rule_attrs if attr[0] \u003d\u003d attr_name):"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_2e98c268","line":1346,"range":{"start_line":1346,"start_character":4,"end_line":1346,"end_character":12},"in_reply_to":"9fdfeff1_9eefa1e8","updated":"2019-01-19 20:04:46.000000000","message":"I\u0027ll use this function in tc_lib.py too. For example: [1]\n\n[1] https://review.openstack.org/#/c/622859/13/neutron/agent/linux/tc_lib.py","commit_id":"1bcfdfa90cb092ae19b7c573ff96cffdfa29f65c"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"a20a62bfff535b8393df61a748946a27ff1aa4f7","unresolved":false,"context_lines":[{"line_number":1415,"context_line":"            ret[\u0027vxlan_group\u0027] \u003d get_attr(ifla_infodata, \u0027IFLA_VXLAN_GROUP\u0027)"},{"line_number":1416,"context_line":"        elif ret[\u0027kind\u0027] \u003d\u003d \u0027vlan\u0027:"},{"line_number":1417,"context_line":"            ifla_infodata \u003d get_attr(ifla_linkinfo, \u0027IFLA_INFO_DATA\u0027)"},{"line_number":1418,"context_line":"            ret[\u0027vlan_id\u0027] \u003d get_attr(ifla_infodata, \u0027IFLA_VLAN_ID\u0027)"},{"line_number":1419,"context_line":""},{"line_number":1420,"context_line":"    return retval"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_9ee321a5","line":1418,"range":{"start_line":1418,"start_character":12,"end_line":1418,"end_character":15},"updated":"2019-01-18 23:40:37.000000000","message":"This method always returns am empty list. Shouldn\u0027t you add this to \u0027retval\u0027?\n\nAlso, the tests didn\u0027t seem to catch this issue?","commit_id":"1bcfdfa90cb092ae19b7c573ff96cffdfa29f65c"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"20f4111e5a51a0b6b52c55824b426230fdd96fe0","unresolved":false,"context_lines":[{"line_number":1415,"context_line":"            ret[\u0027vxlan_group\u0027] \u003d get_attr(ifla_infodata, \u0027IFLA_VXLAN_GROUP\u0027)"},{"line_number":1416,"context_line":"        elif ret[\u0027kind\u0027] \u003d\u003d \u0027vlan\u0027:"},{"line_number":1417,"context_line":"            ifla_infodata \u003d get_attr(ifla_linkinfo, \u0027IFLA_INFO_DATA\u0027)"},{"line_number":1418,"context_line":"            ret[\u0027vlan_id\u0027] \u003d get_attr(ifla_infodata, \u0027IFLA_VLAN_ID\u0027)"},{"line_number":1419,"context_line":""},{"line_number":1420,"context_line":"    return retval"}],"source_content_type":"text/x-python","patch_set":1,"id":"9fdfeff1_2eb1a2e2","line":1418,"range":{"start_line":1418,"start_character":12,"end_line":1418,"end_character":15},"in_reply_to":"9fdfeff1_9ee321a5","updated":"2019-01-19 20:04:46.000000000","message":"I\u0027m deeply sorry. This is why the tests are no catching this error: the tests don\u0027t start with \"test_\".\n\nWhen I run the tests, I executed the whole test_ip_lib file and everything run smoothly... SORRY!!","commit_id":"1bcfdfa90cb092ae19b7c573ff96cffdfa29f65c"},{"author":{"_account_id":27654,"name":"Hongbin Lu","email":"kira034@163.com","username":"hongbin.lu"},"change_message_id":"baf9b4e96c0cc7b5f929b06c89f8d7839ecfe746","unresolved":false,"context_lines":[{"line_number":1407,"context_line":"               \u0027broadcast\u0027: get_attr(device, \u0027IFLA_BROADCAST\u0027)}"},{"line_number":1408,"context_line":"        ifla_linkinfo \u003d get_attr(device, \u0027IFLA_LINKINFO\u0027)"},{"line_number":1409,"context_line":"        if not ifla_linkinfo:"},{"line_number":1410,"context_line":"            continue"},{"line_number":1411,"context_line":"        ret[\u0027kind\u0027] \u003d get_attr(ifla_linkinfo, \u0027IFLA_INFO_KIND\u0027)"},{"line_number":1412,"context_line":"        if ret[\u0027kind\u0027] \u003d\u003d \u0027vxlan\u0027:"},{"line_number":1413,"context_line":"            ifla_infodata \u003d get_attr(ifla_linkinfo, \u0027IFLA_INFO_DATA\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_aed01bcb","line":1410,"range":{"start_line":1410,"start_character":12,"end_line":1410,"end_character":20},"updated":"2019-01-21 22:37:51.000000000","message":"Just want to make sure. Do you want to add \u0027ret\u0027 to \u0027retval\u0027 before continue?","commit_id":"0c373eb9eb7e8232a1920ac48bdcf42dd9cad4d8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"4a9b05a519c1ca99a85f002f5c8a4cdb66391776","unresolved":false,"context_lines":[{"line_number":1407,"context_line":"               \u0027broadcast\u0027: get_attr(device, \u0027IFLA_BROADCAST\u0027)}"},{"line_number":1408,"context_line":"        ifla_linkinfo \u003d get_attr(device, \u0027IFLA_LINKINFO\u0027)"},{"line_number":1409,"context_line":"        if not ifla_linkinfo:"},{"line_number":1410,"context_line":"            continue"},{"line_number":1411,"context_line":"        ret[\u0027kind\u0027] \u003d get_attr(ifla_linkinfo, \u0027IFLA_INFO_KIND\u0027)"},{"line_number":1412,"context_line":"        if ret[\u0027kind\u0027] \u003d\u003d \u0027vxlan\u0027:"},{"line_number":1413,"context_line":"            ifla_infodata \u003d get_attr(ifla_linkinfo, \u0027IFLA_INFO_DATA\u0027)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9fdfeff1_23f8b4e3","line":1410,"range":{"start_line":1410,"start_character":12,"end_line":1410,"end_character":20},"in_reply_to":"9fdfeff1_aed01bcb","updated":"2019-01-22 16:16:46.000000000","message":"I checked this and there are some devices, like \"lo\", doesn\u0027t have this info but we need to list them too. Other functions can filter out those devices if needed, but the current function must return those devices in any case.\n\nThanks!\n\nBTW, I\u0027ll add a test for this.","commit_id":"0c373eb9eb7e8232a1920ac48bdcf42dd9cad4d8"}],"neutron/tests/functional/privileged/agent/linux/test_ip_lib.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"645eb33812a20dee854302aa39304f5e2eea0432","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                                      [ip_lib.LOOPBACK_DEVNAME])"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _remove_ns(self, namespace):"},{"line_number":65,"context_line":"        priv_ip_lib.remove_netns(namespace)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def test_get_devices_info_lo(self):"},{"line_number":68,"context_line":"        devices \u003d priv_ip_lib.get_link_devices(self.namespace)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_d587de0e","line":65,"updated":"2019-01-25 09:37:36.000000000","message":"can\u0027t this be added directly to cleanup?","commit_id":"093f4b62581b4cce8507b5d28184e175dd9e8ee8"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3959ab06275409dadd71eb8afbf986656304fe98","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                                      [ip_lib.LOOPBACK_DEVNAME])"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _remove_ns(self, namespace):"},{"line_number":65,"context_line":"        priv_ip_lib.remove_netns(namespace)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def test_get_devices_info_lo(self):"},{"line_number":68,"context_line":"        devices \u003d priv_ip_lib.get_link_devices(self.namespace)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_dbbb8d6f","line":65,"in_reply_to":"9fdfeff1_5bd6bdf3","updated":"2019-01-25 11:49:34.000000000","message":"ok","commit_id":"093f4b62581b4cce8507b5d28184e175dd9e8ee8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7613098ed1f7191e1cb01d4ea60b4071c01e9d8e","unresolved":false,"context_lines":[{"line_number":62,"context_line":"                                      [ip_lib.LOOPBACK_DEVNAME])"},{"line_number":63,"context_line":""},{"line_number":64,"context_line":"    def _remove_ns(self, namespace):"},{"line_number":65,"context_line":"        priv_ip_lib.remove_netns(namespace)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"    def test_get_devices_info_lo(self):"},{"line_number":68,"context_line":"        devices \u003d priv_ip_lib.get_link_devices(self.namespace)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_5bd6bdf3","line":65,"in_reply_to":"9fdfeff1_d587de0e","updated":"2019-01-25 11:35:55.000000000","message":"Yes, but I\u0027ve been using this format in the other classes. Just to be consistent.","commit_id":"093f4b62581b4cce8507b5d28184e175dd9e8ee8"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"645eb33812a20dee854302aa39304f5e2eea0432","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        for device in devices:"},{"line_number":85,"context_line":"            if (ip_lib.get_attr(device, \u0027IFLA_IFNAME\u0027) in"},{"line_number":86,"context_line":"                    self.interfaces_to_exclude):"},{"line_number":87,"context_line":"                continue"},{"line_number":88,"context_line":"            self.assertIn(ip_lib.get_attr(device, \u0027IFLA_IFNAME\u0027),"},{"line_number":89,"context_line":"                          self.interfaces)"},{"line_number":90,"context_line":"            ifla_linkinfo \u003d ip_lib.get_attr(device, \u0027IFLA_LINKINFO\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_d5b59ece","line":87,"updated":"2019-01-25 09:37:36.000000000","message":"maybe You could add here also assertion to check that such interface is for sure not in results list","commit_id":"093f4b62581b4cce8507b5d28184e175dd9e8ee8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"7613098ed1f7191e1cb01d4ea60b4071c01e9d8e","unresolved":false,"context_lines":[{"line_number":84,"context_line":"        for device in devices:"},{"line_number":85,"context_line":"            if (ip_lib.get_attr(device, \u0027IFLA_IFNAME\u0027) in"},{"line_number":86,"context_line":"                    self.interfaces_to_exclude):"},{"line_number":87,"context_line":"                continue"},{"line_number":88,"context_line":"            self.assertIn(ip_lib.get_attr(device, \u0027IFLA_IFNAME\u0027),"},{"line_number":89,"context_line":"                          self.interfaces)"},{"line_number":90,"context_line":"            ifla_linkinfo \u003d ip_lib.get_attr(device, \u0027IFLA_LINKINFO\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_7b3f0125","line":87,"in_reply_to":"9fdfeff1_d5b59ece","updated":"2019-01-25 11:35:55.000000000","message":"Actually this is what I want to avoid. For example, I need to exclude \"lo\" device.\n\nBut what I\u0027m going to do is to ensure that all self.interfaces are created and tested (in all the three test cases).","commit_id":"093f4b62581b4cce8507b5d28184e175dd9e8ee8"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"645eb33812a20dee854302aa39304f5e2eea0432","unresolved":false,"context_lines":[{"line_number":108,"context_line":"        for device in devices:"},{"line_number":109,"context_line":"            if (ip_lib.get_attr(device, \u0027IFLA_IFNAME\u0027) in"},{"line_number":110,"context_line":"                    self.interfaces_to_exclude):"},{"line_number":111,"context_line":"                continue"},{"line_number":112,"context_line":"            name \u003d ip_lib.get_attr(device, \u0027IFLA_IFNAME\u0027)"},{"line_number":113,"context_line":"            self.assertIn(name, self.interfaces + vlan_interfaces)"},{"line_number":114,"context_line":"            ifla_linkinfo \u003d ip_lib.get_attr(device, \u0027IFLA_LINKINFO\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_15e1e6d0","line":111,"updated":"2019-01-25 09:37:36.000000000","message":"same here","commit_id":"093f4b62581b4cce8507b5d28184e175dd9e8ee8"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"645eb33812a20dee854302aa39304f5e2eea0432","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        for device in devices:"},{"line_number":140,"context_line":"            if (ip_lib.get_attr(device, \u0027IFLA_IFNAME\u0027) in"},{"line_number":141,"context_line":"                    self.interfaces_to_exclude):"},{"line_number":142,"context_line":"                continue"},{"line_number":143,"context_line":"            name \u003d ip_lib.get_attr(device, \u0027IFLA_IFNAME\u0027)"},{"line_number":144,"context_line":"            self.assertIn(name, self.interfaces + vxlan_interfaces)"},{"line_number":145,"context_line":"            ifla_linkinfo \u003d ip_lib.get_attr(device, \u0027IFLA_LINKINFO\u0027)"}],"source_content_type":"text/x-python","patch_set":5,"id":"9fdfeff1_d5ea7eaa","line":142,"updated":"2019-01-25 09:37:36.000000000","message":"and here :)","commit_id":"093f4b62581b4cce8507b5d28184e175dd9e8ee8"}]}
