)]}'
{"neutron/agent/linux/ip_lib.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"48ca72492558656e42e076145b6045a34dc2529a","unresolved":false,"context_lines":[{"line_number":509,"context_line":"                                              self._parent.namespace)"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"    @property"},{"line_number":512,"context_line":"    def exist(self):"},{"line_number":513,"context_line":"        return privileged.interface_exists(self.name, self._parent.namespace)"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_d76927f8","line":512,"updated":"2019-12-04 03:36:23.000000000","message":"Don\u0027t know whether \u0027exist\u0027 or \u0027exists\u0027 is better?","commit_id":"824c8c5f98c1270bf2c65b5cf6a6c8fd2fdcf015"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"609782102b2eab3d63c4e0e6dccf7148eef3a3d3","unresolved":false,"context_lines":[{"line_number":509,"context_line":"                                              self._parent.namespace)"},{"line_number":510,"context_line":""},{"line_number":511,"context_line":"    @property"},{"line_number":512,"context_line":"    def exist(self):"},{"line_number":513,"context_line":"        return privileged.interface_exists(self.name, self._parent.namespace)"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_c5ae4a80","line":512,"in_reply_to":"3fa7e38b_d76927f8","updated":"2019-12-04 15:19:52.000000000","message":"Yes, we usually use \"exists\"; I\u0027ll change it.","commit_id":"824c8c5f98c1270bf2c65b5cf6a6c8fd2fdcf015"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"48ca72492558656e42e076145b6045a34dc2529a","unresolved":false,"context_lines":[{"line_number":510,"context_line":""},{"line_number":511,"context_line":"    @property"},{"line_number":512,"context_line":"    def exist(self):"},{"line_number":513,"context_line":"        return privileged.interface_exists(self.name, self._parent.namespace)"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"class IpAddrCommand(IpDeviceCommandBase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_9773afe8","line":513,"updated":"2019-12-04 03:36:23.000000000","message":"Why can\u0027t interface_exists just raise and we catch it here like set_mtu() above?","commit_id":"824c8c5f98c1270bf2c65b5cf6a6c8fd2fdcf015"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"609782102b2eab3d63c4e0e6dccf7148eef3a3d3","unresolved":false,"context_lines":[{"line_number":510,"context_line":""},{"line_number":511,"context_line":"    @property"},{"line_number":512,"context_line":"    def exist(self):"},{"line_number":513,"context_line":"        return privileged.interface_exists(self.name, self._parent.namespace)"},{"line_number":514,"context_line":""},{"line_number":515,"context_line":""},{"line_number":516,"context_line":"class IpAddrCommand(IpDeviceCommandBase):"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_68472da5","line":513,"in_reply_to":"3fa7e38b_9773afe8","updated":"2019-12-04 15:19:52.000000000","message":"Because privileged.interface_exists is executed inside the privsep context. This exception raised there will be always logged, regardless of if we catch it here; and that\u0027s the goal of this patch: to remove the exception from the logs.","commit_id":"824c8c5f98c1270bf2c65b5cf6a6c8fd2fdcf015"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"48ca72492558656e42e076145b6045a34dc2529a","unresolved":false,"context_lines":[{"line_number":949,"context_line":"    dev \u003d IPDevice(device_name, namespace\u003dnamespace)"},{"line_number":950,"context_line":"    try:"},{"line_number":951,"context_line":"        # Ensure the device has a MAC address and is up, even if it is already"},{"line_number":952,"context_line":"        # up. If the device doesn\u0027t exist, a RuntimeError will be raised."},{"line_number":953,"context_line":"        if not dev.link.exist or not dev.link.address:"},{"line_number":954,"context_line":"            LOG.error(\"Device %s cannot be used as it has no MAC \""},{"line_number":955,"context_line":"                      \"address\", device_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_577d37b0","line":952,"range":{"start_line":952,"start_character":14,"end_line":952,"end_character":72},"updated":"2019-12-04 03:36:23.000000000","message":"Are there callers expecting the old behavior?","commit_id":"824c8c5f98c1270bf2c65b5cf6a6c8fd2fdcf015"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"609782102b2eab3d63c4e0e6dccf7148eef3a3d3","unresolved":false,"context_lines":[{"line_number":949,"context_line":"    dev \u003d IPDevice(device_name, namespace\u003dnamespace)"},{"line_number":950,"context_line":"    try:"},{"line_number":951,"context_line":"        # Ensure the device has a MAC address and is up, even if it is already"},{"line_number":952,"context_line":"        # up. If the device doesn\u0027t exist, a RuntimeError will be raised."},{"line_number":953,"context_line":"        if not dev.link.exist or not dev.link.address:"},{"line_number":954,"context_line":"            LOG.error(\"Device %s cannot be used as it has no MAC \""},{"line_number":955,"context_line":"                      \"address\", device_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_45c25a36","line":952,"range":{"start_line":952,"start_character":14,"end_line":952,"end_character":72},"in_reply_to":"3fa7e38b_577d37b0","updated":"2019-12-04 15:19:52.000000000","message":"Hmmm not at all now with this new implementation. Thanks!","commit_id":"824c8c5f98c1270bf2c65b5cf6a6c8fd2fdcf015"}],"neutron/privileged/agent/linux/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":"e1931a91b6ec2030ab8ca8054f8bd47588609bbf","unresolved":false,"context_lines":[{"line_number":244,"context_line":"    with get_iproute(namespace) as ip:"},{"line_number":245,"context_line":"        link_id \u003d ip.link_lookup(ifname\u003ddevice)"},{"line_number":246,"context_line":"    if not link_id or len(link_id) \u003c 1:"},{"line_number":247,"context_line":"        if raise_exception:"},{"line_number":248,"context_line":"            raise NetworkInterfaceNotFound(device\u003ddevice, namespace\u003dnamespace)"},{"line_number":249,"context_line":"        else:"},{"line_number":250,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_f8c6a769","line":247,"updated":"2019-12-03 09:26:21.000000000","message":"I understand that this is normal event when the interface is not found, but I tend to leave debug log to make sure that the information is noted that something was not found.","commit_id":"06d3babf58f09ae986660980a7525a0638af9ff8"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"b69921ec5a062ceee3e64da0f351c5c5359601fd","unresolved":false,"context_lines":[{"line_number":244,"context_line":"    with get_iproute(namespace) as ip:"},{"line_number":245,"context_line":"        link_id \u003d ip.link_lookup(ifname\u003ddevice)"},{"line_number":246,"context_line":"    if not link_id or len(link_id) \u003c 1:"},{"line_number":247,"context_line":"        if raise_exception:"},{"line_number":248,"context_line":"            raise NetworkInterfaceNotFound(device\u003ddevice, namespace\u003dnamespace)"},{"line_number":249,"context_line":"        else:"},{"line_number":250,"context_line":"            return None"}],"source_content_type":"text/x-python","patch_set":2,"id":"3fa7e38b_48a12af7","line":247,"in_reply_to":"3fa7e38b_f8c6a769","updated":"2019-12-03 11:56:24.000000000","message":"Sure, I\u0027ll add a debug message before returning None (with the exception is not needed)","commit_id":"06d3babf58f09ae986660980a7525a0638af9ff8"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"48ca72492558656e42e076145b6045a34dc2529a","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            raise NetworkInterfaceNotFound(device\u003ddevice, namespace\u003dnamespace)"},{"line_number":252,"context_line":"        else:"},{"line_number":253,"context_line":"            LOG.debug(\u0027Interface %(dev)s not found in namespace %(namespace)s\u0027,"},{"line_number":254,"context_line":"                      {\u0027dev\u0027: device, \u0027namespace\u0027: namespace})"},{"line_number":255,"context_line":"            return None"},{"line_number":256,"context_line":"    return link_id[0]"},{"line_number":257,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_17601f0d","line":254,"updated":"2019-12-04 03:36:23.000000000","message":"Maybe this isn\u0027t necessary if ip_lib prints it","commit_id":"824c8c5f98c1270bf2c65b5cf6a6c8fd2fdcf015"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"609782102b2eab3d63c4e0e6dccf7148eef3a3d3","unresolved":false,"context_lines":[{"line_number":251,"context_line":"            raise NetworkInterfaceNotFound(device\u003ddevice, namespace\u003dnamespace)"},{"line_number":252,"context_line":"        else:"},{"line_number":253,"context_line":"            LOG.debug(\u0027Interface %(dev)s not found in namespace %(namespace)s\u0027,"},{"line_number":254,"context_line":"                      {\u0027dev\u0027: device, \u0027namespace\u0027: namespace})"},{"line_number":255,"context_line":"            return None"},{"line_number":256,"context_line":"    return link_id[0]"},{"line_number":257,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"3fa7e38b_e80d5d8f","line":254,"in_reply_to":"3fa7e38b_17601f0d","updated":"2019-12-04 15:19:52.000000000","message":"But I had just the opposite comment in https://review.opendev.org/#/c/696940/2/neutron/privileged/agent/linux/ip_lib.py@247","commit_id":"824c8c5f98c1270bf2c65b5cf6a6c8fd2fdcf015"}]}
