)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a22f6cd352f50b204a77fdff5bcd85a116d354a3","unresolved":false,"context_lines":[{"line_number":10,"context_line":"pyroute2 library instead of calling /sbin/ip."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Need to do some analysis to see if performance has"},{"line_number":13,"context_line":"increased."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Id802e77543177fbb95ff15c2c7361172e8824633"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"7f515b1d_fc3b23ce","line":13,"updated":"2017-09-25 19:58:57.000000000","message":"even if performance would not be better, it might help for https://bugs.launchpad.net/neutron/+bug/1717582\nso maybe You can add \"Related-Bug\" in commit message also?","commit_id":"3cac55ae749b8405ca7b16fc6f0895a94c282fb0"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"338b6ceebd30b4198c960d9cca3636282d186510","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change network namespace add/delete/list code to use"},{"line_number":10,"context_line":"pyroute2 library instead of calling /sbin/ip."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Id802e77543177fbb95ff15c2c7361172e8824633"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7f515b1d_312ce0aa","line":11,"updated":"2017-09-28 13:59:57.000000000","message":"As Slawek commented, this patch could mention https://bugs.launchpad.net/neutron/+bug/1717582\n\nAlso this patch is related to https://bugs.launchpad.net/neutron/+bug/1492714, a RFE to replace ip commands with native Python pyroute2 library.","commit_id":"4462848fc2a821ae431858bf9f6e29ada070d837"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f19823cc887880829bb6197518176923f56a5b5b","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Change network namespace add/delete/list code to use"},{"line_number":10,"context_line":"pyroute2 library instead of calling /sbin/ip."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: Id802e77543177fbb95ff15c2c7361172e8824633"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7f515b1d_3cf83779","line":11,"in_reply_to":"7f515b1d_312ce0aa","updated":"2017-09-28 14:31:19.000000000","message":"I\u0027ll add them, thanks.","commit_id":"4462848fc2a821ae431858bf9f6e29ada070d837"}],"neutron/agent/linux/ip_lib.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a22f6cd352f50b204a77fdff5bcd85a116d354a3","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        self.set_log_fail_as_error(False)"},{"line_number":209,"context_line":"        try:"},{"line_number":210,"context_line":"            ip \u003d self.netns.add(name)"},{"line_number":211,"context_line":"        except linux_utils.ProcessExecutionError:"},{"line_number":212,"context_line":"            if self.netns.exists(name):"},{"line_number":213,"context_line":"                # NOTE(slaweq): error which was catched here might be actually"},{"line_number":214,"context_line":"                # because of namespace already exists, in such case it\u0027s not"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_9c4f8f33","line":211,"updated":"2017-09-25 19:58:57.000000000","message":"this function should be now reverted to \"previous version\", before my patch https://review.openstack.org/#/c/503890/ because now it even can\u0027t catch linux_utils.ProcessExecutionError","commit_id":"3cac55ae749b8405ca7b16fc6f0895a94c282fb0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2dd46272f54dbac4092d6c07b271ef363c2bffda","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        self.set_log_fail_as_error(False)"},{"line_number":209,"context_line":"        try:"},{"line_number":210,"context_line":"            ip \u003d self.netns.add(name)"},{"line_number":211,"context_line":"        except linux_utils.ProcessExecutionError:"},{"line_number":212,"context_line":"            if self.netns.exists(name):"},{"line_number":213,"context_line":"                # NOTE(slaweq): error which was catched here might be actually"},{"line_number":214,"context_line":"                # because of namespace already exists, in such case it\u0027s not"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_e2225801","line":211,"in_reply_to":"7f515b1d_7f1a857d","updated":"2017-09-25 21:21:35.000000000","message":"yes, we should revert my patch IMHO.\nCatching EEXIST is not the case when You are using pyroute2 as it\u0027s handling it internally already. Check in https://github.com/svinota/pyroute2/blob/master/pyroute2/netns/__init__.py#L147","commit_id":"3cac55ae749b8405ca7b16fc6f0895a94c282fb0"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6761fed2263b9beb3fb6a23d58d4b347e8b8f74e","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        self.set_log_fail_as_error(False)"},{"line_number":209,"context_line":"        try:"},{"line_number":210,"context_line":"            ip \u003d self.netns.add(name)"},{"line_number":211,"context_line":"        except linux_utils.ProcessExecutionError:"},{"line_number":212,"context_line":"            if self.netns.exists(name):"},{"line_number":213,"context_line":"                # NOTE(slaweq): error which was catched here might be actually"},{"line_number":214,"context_line":"                # because of namespace already exists, in such case it\u0027s not"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_7f1a857d","line":211,"in_reply_to":"7f515b1d_9c4f8f33","updated":"2017-09-25 20:55:33.000000000","message":"We should maybe just revert the entire patch.  For now I can just catch the EEXIST in the priv code and silently ignore it.","commit_id":"3cac55ae749b8405ca7b16fc6f0895a94c282fb0"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"c0b7989d2d1dff5d5a3bbd9a8e33b2f8a4c41cd0","unresolved":false,"context_lines":[{"line_number":208,"context_line":"        self.set_log_fail_as_error(False)"},{"line_number":209,"context_line":"        try:"},{"line_number":210,"context_line":"            ip \u003d self.netns.add(name)"},{"line_number":211,"context_line":"        except linux_utils.ProcessExecutionError:"},{"line_number":212,"context_line":"            if self.netns.exists(name):"},{"line_number":213,"context_line":"                # NOTE(slaweq): error which was catched here might be actually"},{"line_number":214,"context_line":"                # because of namespace already exists, in such case it\u0027s not"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_82f04469","line":211,"in_reply_to":"7f515b1d_e2225801","updated":"2017-09-25 21:24:06.000000000","message":"Interesting, since I was seeing EEXIST errors in most of the failed tests.","commit_id":"3cac55ae749b8405ca7b16fc6f0895a94c282fb0"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"338b6ceebd30b4198c960d9cca3636282d186510","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                             namespace\u003dnamespace,"},{"line_number":96,"context_line":"                             log_fail_as_error\u003dself.log_fail_as_error)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    @staticmethod"},{"line_number":99,"context_line":"    def _execute(options, command, args, run_as_root\u003dFalse,"},{"line_number":100,"context_line":"                 namespace\u003dNone, log_fail_as_error\u003dTrue):"},{"line_number":101,"context_line":"        opt_list \u003d [\u0027-%s\u0027 % o for o in options]"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_1c6b3b85","line":98,"range":{"start_line":98,"start_character":5,"end_line":98,"end_character":17},"updated":"2017-09-28 13:59:57.000000000","message":"I could make sense to do this change but I think is out of scope of this patch.","commit_id":"4462848fc2a821ae431858bf9f6e29ada070d837"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f19823cc887880829bb6197518176923f56a5b5b","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                             namespace\u003dnamespace,"},{"line_number":96,"context_line":"                             log_fail_as_error\u003dself.log_fail_as_error)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    @staticmethod"},{"line_number":99,"context_line":"    def _execute(options, command, args, run_as_root\u003dFalse,"},{"line_number":100,"context_line":"                 namespace\u003dNone, log_fail_as_error\u003dTrue):"},{"line_number":101,"context_line":"        opt_list \u003d [\u0027-%s\u0027 % o for o in options]"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_9706e41b","line":98,"range":{"start_line":98,"start_character":5,"end_line":98,"end_character":17},"in_reply_to":"7f515b1d_1c6b3b85","updated":"2017-09-28 14:31:19.000000000","message":"It\u0027s related to the change on L274, there are now no more callers outside this class calling _execute().","commit_id":"4462848fc2a821ae431858bf9f6e29ada070d837"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"e3385b93249bb0175bc8fd86d59c06afc83455fd","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                             namespace\u003dnamespace,"},{"line_number":96,"context_line":"                             log_fail_as_error\u003dself.log_fail_as_error)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    @staticmethod"},{"line_number":99,"context_line":"    def _execute(options, command, args, run_as_root\u003dFalse,"},{"line_number":100,"context_line":"                 namespace\u003dNone, log_fail_as_error\u003dTrue):"},{"line_number":101,"context_line":"        opt_list \u003d [\u0027-%s\u0027 % o for o in options]"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_c5713178","line":98,"range":{"start_line":98,"start_character":5,"end_line":98,"end_character":17},"in_reply_to":"7f515b1d_9706e41b","updated":"2017-09-29 08:53:15.000000000","message":"It is used here: https://github.com/openstack/neutron/blob/master/neutron/plugins/ml2/drivers/mech_sriov/agent/pci_lib.py#L190","commit_id":"4462848fc2a821ae431858bf9f6e29ada070d837"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"313e27a2b69536a30c10288d09159245dca9038f","unresolved":false,"context_lines":[{"line_number":95,"context_line":"                             namespace\u003dnamespace,"},{"line_number":96,"context_line":"                             log_fail_as_error\u003dself.log_fail_as_error)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"    @staticmethod"},{"line_number":99,"context_line":"    def _execute(options, command, args, run_as_root\u003dFalse,"},{"line_number":100,"context_line":"                 namespace\u003dNone, log_fail_as_error\u003dTrue):"},{"line_number":101,"context_line":"        opt_list \u003d [\u0027-%s\u0027 % o for o in options]"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_3e349692","line":98,"range":{"start_line":98,"start_character":5,"end_line":98,"end_character":17},"in_reply_to":"7f515b1d_c5713178","updated":"2017-09-29 14:54:48.000000000","message":"Who uses sriov? :)  It\u0027s amazing I could break this and there wasn\u0027t a unit test to catch it.  I\u0027ll leave it alone.\n\nBut that link_show() function should really just use self._as_root(), so I\u0027ll clean it up in a follow-on.","commit_id":"4462848fc2a821ae431858bf9f6e29ada070d837"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"47c80d9bf756d5991d06b512b8e310c7ae9cb372","unresolved":false,"context_lines":[{"line_number":261,"context_line":"        if cfg.CONF.AGENT.use_helper_for_ns_read:"},{"line_number":262,"context_line":"            return privileged.list_netns_priv()"},{"line_number":263,"context_line":"        else:"},{"line_number":264,"context_line":"            return privileged.list_netns()"},{"line_number":265,"context_line":""},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"class IPDevice(SubProcessBase):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f515b1d_5cfbf377","line":264,"updated":"2017-09-28 14:04:57.000000000","message":"I would personally define it in this file instead of \"privileged.list_netns()\" when it\u0027s in fact not privileged","commit_id":"0cd1ec40004e16c12b2ee133bdc6e131106db612"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"5701e47ade43ef1838f85323f2cc461193fc24d0","unresolved":false,"context_lines":[{"line_number":895,"context_line":"        if cfg.CONF.AGENT.use_helper_for_ns_read:"},{"line_number":896,"context_line":"            output \u003d privileged.list_netns()"},{"line_number":897,"context_line":"        else:"},{"line_number":898,"context_line":"            output \u003d netns.listnetns()"},{"line_number":899,"context_line":"        return True if name in output else False"},{"line_number":900,"context_line":""},{"line_number":901,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7f515b1d_42ce6882","line":898,"updated":"2017-09-28 14:56:23.000000000","message":"sorry but I have one more thing.\nCan\u0027t it be something like:\n\n    return (name in IPWrapper().get_namespaces())\n\nto not duplicate this \"if..else..\" condition in two places?","commit_id":"8e57936b5ab0638e9207a295e1c295d3ffb19016"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"8ba2cab0b28a9fc2684c14ee73c2310adb5b79d8","unresolved":false,"context_lines":[{"line_number":895,"context_line":"        if cfg.CONF.AGENT.use_helper_for_ns_read:"},{"line_number":896,"context_line":"            output \u003d privileged.list_netns()"},{"line_number":897,"context_line":"        else:"},{"line_number":898,"context_line":"            output \u003d netns.listnetns()"},{"line_number":899,"context_line":"        return True if name in output else False"},{"line_number":900,"context_line":""},{"line_number":901,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7f515b1d_e31553e6","line":898,"in_reply_to":"7f515b1d_42ce6882","updated":"2017-09-28 20:04:13.000000000","message":"Ok, and now I\u0027ve been inspired to do more drastic changes like I did for the neigh table when I moved that to pyroute2.","commit_id":"8e57936b5ab0638e9207a295e1c295d3ffb19016"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"8e4f0b28afb566093203599aff0b4101e7c60d3e","unresolved":false,"context_lines":[{"line_number":895,"context_line":"        if cfg.CONF.AGENT.use_helper_for_ns_read:"},{"line_number":896,"context_line":"            output \u003d privileged.list_netns()"},{"line_number":897,"context_line":"        else:"},{"line_number":898,"context_line":"            output \u003d netns.listnetns()"},{"line_number":899,"context_line":"        return True if name in output else False"},{"line_number":900,"context_line":""},{"line_number":901,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"7f515b1d_3e14a443","line":898,"in_reply_to":"7f515b1d_e31553e6","updated":"2017-09-28 20:23:13.000000000","message":"ups :)","commit_id":"8e57936b5ab0638e9207a295e1c295d3ffb19016"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"8e4f0b28afb566093203599aff0b4101e7c60d3e","unresolved":false,"context_lines":[{"line_number":1046,"context_line":""},{"line_number":1047,"context_line":"def network_namespace_exists(namespace, **kwargs):"},{"line_number":1048,"context_line":"    output \u003d list_network_namespaces(**kwargs)"},{"line_number":1049,"context_line":"    return True if namespace in output else False"},{"line_number":1050,"context_line":""},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":"def ensure_device_is_ready(device_name, namespace\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f515b1d_c31b777e","line":1049,"updated":"2017-09-28 20:23:13.000000000","message":"just out of curiosity: why not \"return (namespace in output)\" - it will not return also True or False like this \"if\" condition?","commit_id":"cbdc059c6a5f70d7e5cfd00580ec51b503dfc9bb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"cc6956c8e5775b57755152ddf7d0d1a67d1512be","unresolved":false,"context_lines":[{"line_number":1046,"context_line":""},{"line_number":1047,"context_line":"def network_namespace_exists(namespace, **kwargs):"},{"line_number":1048,"context_line":"    output \u003d list_network_namespaces(**kwargs)"},{"line_number":1049,"context_line":"    return True if namespace in output else False"},{"line_number":1050,"context_line":""},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":"def ensure_device_is_ready(device_name, namespace\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f515b1d_de98f075","line":1049,"in_reply_to":"7f515b1d_c31b777e","updated":"2017-09-28 20:38:04.000000000","message":"Must have just been my initial copy/paste to get this working, I\u0027ll change it.","commit_id":"cbdc059c6a5f70d7e5cfd00580ec51b503dfc9bb"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"505a6e3532a8025672f766d53ce1dda87b8f7376","unresolved":false,"context_lines":[{"line_number":1046,"context_line":""},{"line_number":1047,"context_line":"def network_namespace_exists(namespace, **kwargs):"},{"line_number":1048,"context_line":"    output \u003d list_network_namespaces(**kwargs)"},{"line_number":1049,"context_line":"    return True if namespace in output else False"},{"line_number":1050,"context_line":""},{"line_number":1051,"context_line":""},{"line_number":1052,"context_line":"def ensure_device_is_ready(device_name, namespace\u003dNone):"}],"source_content_type":"text/x-python","patch_set":7,"id":"7f515b1d_981a8514","line":1049,"in_reply_to":"7f515b1d_de98f075","updated":"2017-09-29 06:43:46.000000000","message":"thx","commit_id":"cbdc059c6a5f70d7e5cfd00580ec51b503dfc9bb"}],"neutron/privileged/agent/linux/ip_lib.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a22f6cd352f50b204a77fdff5bcd85a116d354a3","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"@privileged.default.entrypoint"},{"line_number":182,"context_line":"def create_netns(name, **kwargs):"},{"line_number":183,"context_line":"    \"\"\"Create a network namespace."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    :param name: The name of the namespace to create"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_7c84d35e","line":182,"updated":"2017-09-25 19:58:57.000000000","message":"are **kwargs really necessary here? what keyword arguments You are expecting here?","commit_id":"3cac55ae749b8405ca7b16fc6f0895a94c282fb0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2dd46272f54dbac4092d6c07b271ef363c2bffda","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"@privileged.default.entrypoint"},{"line_number":182,"context_line":"def create_netns(name, **kwargs):"},{"line_number":183,"context_line":"    \"\"\"Create a network namespace."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    :param name: The name of the namespace to create"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_627c28eb","line":182,"in_reply_to":"7f515b1d_1fb5d1cd","updated":"2017-09-25 21:21:35.000000000","message":"ok, I was just asking :)","commit_id":"3cac55ae749b8405ca7b16fc6f0895a94c282fb0"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6761fed2263b9beb3fb6a23d58d4b347e8b8f74e","unresolved":false,"context_lines":[{"line_number":179,"context_line":""},{"line_number":180,"context_line":""},{"line_number":181,"context_line":"@privileged.default.entrypoint"},{"line_number":182,"context_line":"def create_netns(name, **kwargs):"},{"line_number":183,"context_line":"    \"\"\"Create a network namespace."},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    :param name: The name of the namespace to create"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_1fb5d1cd","line":182,"in_reply_to":"7f515b1d_7c84d35e","updated":"2017-09-25 20:55:33.000000000","message":"netns.create() can take an additional arg, libc.  The other netns.* calls can take args too.  I just didn\u0027t want to not allow extra things in the future, and did this for the neigh operations above.  I\u0027ll at least add it to the netns.create() call below.","commit_id":"3cac55ae749b8405ca7b16fc6f0895a94c282fb0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a22f6cd352f50b204a77fdff5bcd85a116d354a3","unresolved":false,"context_lines":[{"line_number":188,"context_line":""},{"line_number":189,"context_line":""},{"line_number":190,"context_line":"@privileged.default.entrypoint"},{"line_number":191,"context_line":"def remove_netns(name, **kwargs):"},{"line_number":192,"context_line":"    \"\"\"Remove a network namespace."},{"line_number":193,"context_line":""},{"line_number":194,"context_line":"    :param name: The name of the namespace to remove"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_3ca53b05","line":191,"updated":"2017-09-25 19:58:57.000000000","message":"same question here","commit_id":"3cac55ae749b8405ca7b16fc6f0895a94c282fb0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a22f6cd352f50b204a77fdff5bcd85a116d354a3","unresolved":false,"context_lines":[{"line_number":197,"context_line":""},{"line_number":198,"context_line":""},{"line_number":199,"context_line":"@privileged.default.entrypoint"},{"line_number":200,"context_line":"def list_netns_priv(**kwargs):"},{"line_number":201,"context_line":"    \"\"\"List network namespaces."},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"    Caller requires raised priveleges to list namespaces"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_1ca83fd9","line":200,"updated":"2017-09-25 19:58:57.000000000","message":"same here","commit_id":"3cac55ae749b8405ca7b16fc6f0895a94c282fb0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"a22f6cd352f50b204a77fdff5bcd85a116d354a3","unresolved":false,"context_lines":[{"line_number":205,"context_line":"    return netns.listnetns()"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":""},{"line_number":208,"context_line":"def list_netns(**kwargs):"},{"line_number":209,"context_line":"    \"\"\"List network namespaces."},{"line_number":210,"context_line":""},{"line_number":211,"context_line":"    Caller does not require raised priveleges to list namespaces"}],"source_content_type":"text/x-python","patch_set":3,"id":"7f515b1d_fcae83e5","line":208,"updated":"2017-09-25 19:58:57.000000000","message":"and here","commit_id":"3cac55ae749b8405ca7b16fc6f0895a94c282fb0"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2dd46272f54dbac4092d6c07b271ef363c2bffda","unresolved":false,"context_lines":[{"line_number":187,"context_line":"    try:"},{"line_number":188,"context_line":"        netns.create(name, **kwargs)"},{"line_number":189,"context_line":"    except OSError as e:"},{"line_number":190,"context_line":"        if e.errno !\u003d errno.EEXIST:"},{"line_number":191,"context_line":"            raise"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_026d7431","line":190,"updated":"2017-09-25 21:21:35.000000000","message":"see my comment in PS3 about it","commit_id":"4462848fc2a821ae431858bf9f6e29ada070d837"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"74d5e6134d608177ab33caccc826f99445f6208c","unresolved":false,"context_lines":[{"line_number":187,"context_line":"    try:"},{"line_number":188,"context_line":"        netns.create(name, **kwargs)"},{"line_number":189,"context_line":"    except OSError as e:"},{"line_number":190,"context_line":"        if e.errno !\u003d errno.EEXIST:"},{"line_number":191,"context_line":"            raise"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_61629fb0","line":190,"in_reply_to":"7f515b1d_026d7431","updated":"2017-09-27 17:26:53.000000000","message":"Is this still an issue?  I can create a new error class the caller can catch instead of doing this here.","commit_id":"4462848fc2a821ae431858bf9f6e29ada070d837"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7de55904c3d0d98cba0efc77d4fec2261579884d","unresolved":false,"context_lines":[{"line_number":187,"context_line":"    try:"},{"line_number":188,"context_line":"        netns.create(name, **kwargs)"},{"line_number":189,"context_line":"    except OSError as e:"},{"line_number":190,"context_line":"        if e.errno !\u003d errno.EEXIST:"},{"line_number":191,"context_line":"            raise"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_da425c3e","line":190,"in_reply_to":"7f515b1d_61629fb0","updated":"2017-09-27 19:01:53.000000000","message":"sorry, no. It looks fine as we checked that this error can be thrown in different place in pyroute2","commit_id":"4462848fc2a821ae431858bf9f6e29ada070d837"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"338b6ceebd30b4198c960d9cca3636282d186510","unresolved":false,"context_lines":[{"line_number":209,"context_line":"    return netns.listnetns(**kwargs)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"def list_netns(**kwargs):"},{"line_number":213,"context_line":"    \"\"\"List network namespaces."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    Caller does not require raised priveleges to list namespaces"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_31a98023","line":212,"updated":"2017-09-28 13:59:57.000000000","message":"If this is not a privileged operation, it shouldn\u0027t be in this file.","commit_id":"4462848fc2a821ae431858bf9f6e29ada070d837"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f19823cc887880829bb6197518176923f56a5b5b","unresolved":false,"context_lines":[{"line_number":209,"context_line":"    return netns.listnetns(**kwargs)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"def list_netns(**kwargs):"},{"line_number":213,"context_line":"    \"\"\"List network namespaces."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    Caller does not require raised priveleges to list namespaces"}],"source_content_type":"text/x-python","patch_set":4,"id":"7f515b1d_1719d420","line":212,"in_reply_to":"7f515b1d_31a98023","updated":"2017-09-28 14:31:19.000000000","message":"Yeah, I was just trying to keep all the pyroute2 code in one place, I\u0027ll see what I can do.","commit_id":"4462848fc2a821ae431858bf9f6e29ada070d837"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"47c80d9bf756d5991d06b512b8e310c7ae9cb372","unresolved":false,"context_lines":[{"line_number":209,"context_line":"    return netns.listnetns(**kwargs)"},{"line_number":210,"context_line":""},{"line_number":211,"context_line":""},{"line_number":212,"context_line":"def list_netns(**kwargs):"},{"line_number":213,"context_line":"    \"\"\"List network namespaces."},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"    Caller does not require raised priveleges to list namespaces"}],"source_content_type":"text/x-python","patch_set":5,"id":"7f515b1d_fcbf3fa7","line":212,"updated":"2017-09-28 14:04:57.000000000","message":"why we need this \"not privileged\" function in privileged module?","commit_id":"0cd1ec40004e16c12b2ee133bdc6e131106db612"}],"neutron/tests/fullstack/resources/machine.py":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"9068cb85e5be31321275d86f555b918d0c34051c","unresolved":false,"context_lines":[{"line_number":200,"context_line":"        # All associated vlan interfaces are deleted too"},{"line_number":201,"context_line":"        self.bridge.delete_port(self.port.name)"},{"line_number":202,"context_line":""},{"line_number":203,"context_line":"        ip_lib.network_namespace_delete(self.namespace)"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":""},{"line_number":206,"context_line":"class FakeFullstackTrunkMachine(FakeFullstackMachine):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7f515b1d_20bbef0e","line":203,"updated":"2017-10-04 21:10:11.000000000","message":"this name of function was wrong. I fixed this typo","commit_id":"343dc5012dab2cbafd8e34ae94604b65760ef596"}],"neutron/tests/unit/agent/linux/test_ip_lib.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"288a59793e060b201cfd3df357e4050089daf053","unresolved":false,"context_lines":[{"line_number":265,"context_line":"        self.execute_p \u003d mock.patch.object(ip_lib.IPWrapper, \u0027_execute\u0027)"},{"line_number":266,"context_line":"        self.execute \u003d self.execute_p.start()"},{"line_number":267,"context_line":"        self.addCleanup(privileged.default.set_client_mode, True)"},{"line_number":268,"context_line":"        privileged.default.set_client_mode(False)"},{"line_number":269,"context_line":""},{"line_number":270,"context_line":"    @mock.patch(\u0027os.path.islink\u0027)"},{"line_number":271,"context_line":"    @mock.patch(\u0027os.listdir\u0027, return_value\u003d[\u0027lo\u0027])"}],"source_content_type":"text/x-python","patch_set":9,"id":"7f515b1d_6f92564e","line":268,"updated":"2017-09-29 15:16:34.000000000","message":"I\u0027m still not sure we should do this, we could just as easily mock the call into the privileged lib code instead of pyroute2.","commit_id":"06d88321a7e9a53abf3d415e7e937b44ad799b79"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"288a59793e060b201cfd3df357e4050089daf053","unresolved":false,"context_lines":[{"line_number":1229,"context_line":"        self.command \u003d \u0027netns\u0027"},{"line_number":1230,"context_line":"        self.netns_cmd \u003d ip_lib.IpNetnsCommand(self.parent)"},{"line_number":1231,"context_line":"        self.addCleanup(privileged.default.set_client_mode, True)"},{"line_number":1232,"context_line":"        privileged.default.set_client_mode(False)"},{"line_number":1233,"context_line":""},{"line_number":1234,"context_line":"    @mock.patch.object(pyroute2.netns, \u0027create\u0027)"},{"line_number":1235,"context_line":"    def test_add_namespace(self, create):"}],"source_content_type":"text/x-python","patch_set":9,"id":"7f515b1d_0f9be265","line":1232,"updated":"2017-09-29 15:16:34.000000000","message":"Here too.","commit_id":"06d88321a7e9a53abf3d415e7e937b44ad799b79"}]}
