)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"b835f63945302f5d2e0b939e4f240743d0f1d975","unresolved":false,"context_lines":[{"line_number":13,"context_line":"traffic)."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ia5b8bd3794d22808ee1718d429f0bbdbe61e94ec"},{"line_number":16,"context_line":"bug: 1620824"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"9a89bdaa_b83c48c9","line":16,"range":{"start_line":16,"start_character":0,"end_line":16,"end_character":12},"updated":"2016-09-07 02:13:23.000000000","message":"Please use: Closes-Bug: #1620824 here.\nhttp://docs.openstack.org/infra/manual/developers.html","commit_id":"754beed13437bfb91b87b3568cc7fc0ff15b94c4"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"cc8a5c228a5988bddc27dd62299f69fa9ccc1ca8","unresolved":false,"context_lines":[{"line_number":11,"context_line":"patch sets \"nf_connctrack_tcp_loose\" inside the SNAT namespace to more"},{"line_number":12,"context_line":"intelligently handle SNAT traffic (and ignore what should be FIP"},{"line_number":13,"context_line":"traffic)."},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"Change-Id: Ia5b8bd3794d22808ee1718d429f0bbdbe61e94ec"},{"line_number":16,"context_line":"Closes-Bug: 1620824"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"dfeb2761_b9bef762","line":14,"updated":"2017-04-02 02:04:01.000000000","message":"Can you add a pointer or some more info about why tcp loose mode \u0027hijacks\u0027 the connections? Otherwise I\u0027m worried we will always be afraid to touch that code for not really knowing why shutting off loose mode solves the problem.","commit_id":"780e276d3623e36ee106d954f7d85904c340a497"}],"neutron/agent/l3/dvr_snat_ns.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d144ca35e1ee93242a312aeda2099f765b711f85","unresolved":false,"context_lines":[{"line_number":34,"context_line":"        return namespaces.build_ns_name(SNAT_NS_PREFIX, router_id)"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def create(self):"},{"line_number":37,"context_line":"        \"\"\"Create network namespace for SNAT traffic\"\"\""},{"line_number":38,"context_line":"        LOG.debug(\"DVR: add snat namespace: %s\", self.name)"},{"line_number":39,"context_line":"        ip_wrapper_root \u003d ip_lib.IPWrapper()"},{"line_number":40,"context_line":"        ip_wrapper \u003d ip_wrapper.ensure_namespace(self.name)"}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_389f62b5","line":37,"updated":"2016-09-06 20:24:29.000000000","message":"without a call to super() forwarding won\u0027t be enabled in the namespace, so will this work?","commit_id":"8e89ee629a1ba985d33e92f42c5819aaf34fb744"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d144ca35e1ee93242a312aeda2099f765b711f85","unresolved":false,"context_lines":[{"line_number":42,"context_line":"        # TCP conversations aren\u0027t taken over by SNAT"},{"line_number":43,"context_line":"        ip_wrapper.netns.execute([\u0027sysctl\u0027,"},{"line_number":44,"context_line":"                                  \u0027-w\u0027,"},{"line_number":45,"context_line":"                                  \u0027net.netfilter.nf_conntrack_tcp_loose\u003d0\u0027],"},{"line_number":46,"context_line":"                                 log_fail_as_error\u003dFalse,"},{"line_number":47,"context_line":"                                 run_as_root\u003dTrue)"},{"line_number":48,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"9a89bdaa_38d4c245","line":45,"updated":"2016-09-06 20:24:29.000000000","message":"I think setting this to zero will break things like fail-over when HA is active.","commit_id":"8e89ee629a1ba985d33e92f42c5819aaf34fb744"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"b835f63945302f5d2e0b939e4f240743d0f1d975","unresolved":false,"context_lines":[{"line_number":35,"context_line":""},{"line_number":36,"context_line":"    def create(self):"},{"line_number":37,"context_line":"        \"\"\"Create network namespace for SNAT traffic\"\"\""},{"line_number":38,"context_line":"        LOG.debug(\"DVR: add snat namespace: %s\", self.name)"},{"line_number":39,"context_line":"        ip_wrapper_root \u003d ip_lib.IPWrapper()"},{"line_number":40,"context_line":"        ip_wrapper \u003d ip_wrapper_root.ensure_namespace(self.name)"},{"line_number":41,"context_line":"        # Set nf_conntrack_tcp_loose to 0 to ensure mid-stream"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_24d5781b","line":38,"range":{"start_line":38,"start_character":8,"end_line":38,"end_character":59},"updated":"2016-09-07 02:13:23.000000000","message":"Just same question as Brian, should this call superclass before excute cmd in ns? like: \nsuper(SnatNamespace, self).create()","commit_id":"754beed13437bfb91b87b3568cc7fc0ff15b94c4"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"b835f63945302f5d2e0b939e4f240743d0f1d975","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def create(self):"},{"line_number":37,"context_line":"        \"\"\"Create network namespace for SNAT traffic\"\"\""},{"line_number":38,"context_line":"        LOG.debug(\"DVR: add snat namespace: %s\", self.name)"},{"line_number":39,"context_line":"        ip_wrapper_root \u003d ip_lib.IPWrapper()"},{"line_number":40,"context_line":"        ip_wrapper \u003d ip_wrapper_root.ensure_namespace(self.name)"},{"line_number":41,"context_line":"        # Set nf_conntrack_tcp_loose to 0 to ensure mid-stream"},{"line_number":42,"context_line":"        # TCP conversations aren\u0027t taken over by SNAT"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_648060f8","line":39,"range":{"start_line":39,"start_character":8,"end_line":39,"end_character":44},"updated":"2016-09-07 02:13:23.000000000","message":"This line is unnecessary, it initialize in namespace.Namespace()","commit_id":"754beed13437bfb91b87b3568cc7fc0ff15b94c4"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"b835f63945302f5d2e0b939e4f240743d0f1d975","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        \"\"\"Create network namespace for SNAT traffic\"\"\""},{"line_number":38,"context_line":"        LOG.debug(\"DVR: add snat namespace: %s\", self.name)"},{"line_number":39,"context_line":"        ip_wrapper_root \u003d ip_lib.IPWrapper()"},{"line_number":40,"context_line":"        ip_wrapper \u003d ip_wrapper_root.ensure_namespace(self.name)"},{"line_number":41,"context_line":"        # Set nf_conntrack_tcp_loose to 0 to ensure mid-stream"},{"line_number":42,"context_line":"        # TCP conversations aren\u0027t taken over by SNAT"},{"line_number":43,"context_line":"        ip_wrapper.netns.execute([\u0027sysctl\u0027,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_8438043f","line":40,"range":{"start_line":40,"start_character":21,"end_line":40,"end_character":36},"updated":"2016-09-07 02:13:23.000000000","message":"So you can use self.ip_wrapper_root here.","commit_id":"754beed13437bfb91b87b3568cc7fc0ff15b94c4"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"035eb4cb3c119bb6be530b8b7bdc2d1320dc6488","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def create(self):"},{"line_number":37,"context_line":"        \"\"\"Create network namespace for SNAT traffic\"\"\""},{"line_number":38,"context_line":"        super(SnatNamespace, self).create()"},{"line_number":39,"context_line":"        LOG.debug(\"DVR: add snat namespace: %s\", self.name)"},{"line_number":40,"context_line":"        ip_wrapper \u003d self.ip_wrapper_root.ensure_namespace(self.name)"},{"line_number":41,"context_line":"        # Set nf_conntrack_tcp_loose to 0 to ensure mid-stream"},{"line_number":42,"context_line":"        # TCP conversations aren\u0027t taken over by SNAT"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_3f38ec3c","line":39,"updated":"2016-09-07 19:00:16.000000000","message":"We don\u0027t log any other namespace creations","commit_id":"0aa45690646492a50e59c753bf141783dbc80188"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"30a8b37004692e32124deacec3a884b8c6758f42","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def create(self):"},{"line_number":37,"context_line":"        \"\"\"Create network namespace for SNAT traffic\"\"\""},{"line_number":38,"context_line":"        super(SnatNamespace, self).create()"},{"line_number":39,"context_line":"        LOG.debug(\"DVR: add snat namespace: %s\", self.name)"},{"line_number":40,"context_line":"        ip_wrapper \u003d self.ip_wrapper_root.ensure_namespace(self.name)"},{"line_number":41,"context_line":"        # Set nf_conntrack_tcp_loose to 0 to ensure mid-stream"},{"line_number":42,"context_line":"        # TCP conversations aren\u0027t taken over by SNAT"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_103957f2","line":39,"in_reply_to":"9a89bdaa_3a70fadb","updated":"2016-09-07 19:56:54.000000000","message":"That\u0027s mitaka, but yes, I guess the dvr_fip_ns code does have it, don\u0027t know how I missed that.","commit_id":"0aa45690646492a50e59c753bf141783dbc80188"},{"author":{"_account_id":14473,"name":"David Wahlstrom","email":"david.wahlstrom@gmail.com","username":"drwahl"},"change_message_id":"94d1322e552a889fa66a0c2c4404d2f5ac602664","unresolved":false,"context_lines":[{"line_number":36,"context_line":"    def create(self):"},{"line_number":37,"context_line":"        \"\"\"Create network namespace for SNAT traffic\"\"\""},{"line_number":38,"context_line":"        super(SnatNamespace, self).create()"},{"line_number":39,"context_line":"        LOG.debug(\"DVR: add snat namespace: %s\", self.name)"},{"line_number":40,"context_line":"        ip_wrapper \u003d self.ip_wrapper_root.ensure_namespace(self.name)"},{"line_number":41,"context_line":"        # Set nf_conntrack_tcp_loose to 0 to ensure mid-stream"},{"line_number":42,"context_line":"        # TCP conversations aren\u0027t taken over by SNAT"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_3a70fadb","line":39,"in_reply_to":"9a89bdaa_3f38ec3c","updated":"2016-09-07 19:06:42.000000000","message":"Is this not a similar log line?\nhttps://github.com/openstack/neutron/blob/stable/mitaka/neutron/agent/l3/dvr_fip_ns.py#L135","commit_id":"0aa45690646492a50e59c753bf141783dbc80188"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"035eb4cb3c119bb6be530b8b7bdc2d1320dc6488","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        \"\"\"Create network namespace for SNAT traffic\"\"\""},{"line_number":38,"context_line":"        super(SnatNamespace, self).create()"},{"line_number":39,"context_line":"        LOG.debug(\"DVR: add snat namespace: %s\", self.name)"},{"line_number":40,"context_line":"        ip_wrapper \u003d self.ip_wrapper_root.ensure_namespace(self.name)"},{"line_number":41,"context_line":"        # Set nf_conntrack_tcp_loose to 0 to ensure mid-stream"},{"line_number":42,"context_line":"        # TCP conversations aren\u0027t taken over by SNAT"},{"line_number":43,"context_line":"        ip_wrapper.netns.execute([\u0027sysctl\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_dfc8e024","line":40,"updated":"2016-09-07 19:00:16.000000000","message":"ip_wrapper \u003d ip_lib.IPWrapper(namespace\u003dself.name)\n\nensure_namespace() was already done in super()","commit_id":"0aa45690646492a50e59c753bf141783dbc80188"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"30a8b37004692e32124deacec3a884b8c6758f42","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        \"\"\"Create network namespace for SNAT traffic\"\"\""},{"line_number":38,"context_line":"        super(SnatNamespace, self).create()"},{"line_number":39,"context_line":"        LOG.debug(\"DVR: add snat namespace: %s\", self.name)"},{"line_number":40,"context_line":"        ip_wrapper \u003d self.ip_wrapper_root.ensure_namespace(self.name)"},{"line_number":41,"context_line":"        # Set nf_conntrack_tcp_loose to 0 to ensure mid-stream"},{"line_number":42,"context_line":"        # TCP conversations aren\u0027t taken over by SNAT"},{"line_number":43,"context_line":"        ip_wrapper.netns.execute([\u0027sysctl\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_30701bdc","line":40,"in_reply_to":"9a89bdaa_1a6b36f2","updated":"2016-09-07 19:56:54.000000000","message":"Look at what dvr_fip_ns.py does in it\u0027s create() - this method should really be a duplicate of that save for the sysctl being done - and it doesn\u0027t need the try/except.","commit_id":"0aa45690646492a50e59c753bf141783dbc80188"},{"author":{"_account_id":14473,"name":"David Wahlstrom","email":"david.wahlstrom@gmail.com","username":"drwahl"},"change_message_id":"94d1322e552a889fa66a0c2c4404d2f5ac602664","unresolved":false,"context_lines":[{"line_number":37,"context_line":"        \"\"\"Create network namespace for SNAT traffic\"\"\""},{"line_number":38,"context_line":"        super(SnatNamespace, self).create()"},{"line_number":39,"context_line":"        LOG.debug(\"DVR: add snat namespace: %s\", self.name)"},{"line_number":40,"context_line":"        ip_wrapper \u003d self.ip_wrapper_root.ensure_namespace(self.name)"},{"line_number":41,"context_line":"        # Set nf_conntrack_tcp_loose to 0 to ensure mid-stream"},{"line_number":42,"context_line":"        # TCP conversations aren\u0027t taken over by SNAT"},{"line_number":43,"context_line":"        ip_wrapper.netns.execute([\u0027sysctl\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_1a6b36f2","line":40,"in_reply_to":"9a89bdaa_dfc8e024","updated":"2016-09-07 19:06:42.000000000","message":"I tried removing this, as I thought the same thing.  However, you can see in patchset 4, the \"ip_wrapper\" function is not available if it\u0027s not called here.  Happy to change this accordingly, but not sure how to proceed.","commit_id":"0aa45690646492a50e59c753bf141783dbc80188"}],"neutron/tests/unit/agent/l3/test_dvr_snat_ns.py":[{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"b835f63945302f5d2e0b939e4f240743d0f1d975","unresolved":false,"context_lines":[{"line_number":1,"context_line":"# Copyright (c) 2015 OpenStack Foundation"},{"line_number":2,"context_line":"#"},{"line_number":3,"context_line":"#    Licensed under the Apache License, Version 2.0 (the \"License\"); you may"},{"line_number":4,"context_line":"#    not use this file except in compliance with the License. You may obtain"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_58a25cfe","line":1,"range":{"start_line":1,"start_character":16,"end_line":1,"end_character":20},"updated":"2016-09-07 02:13:23.000000000","message":"nit: 2016","commit_id":"754beed13437bfb91b87b3568cc7fc0ff15b94c4"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"b835f63945302f5d2e0b939e4f240743d0f1d975","unresolved":false,"context_lines":[{"line_number":30,"context_line":"        self.conf.state_path \u003d cfg.CONF.state_path"},{"line_number":31,"context_line":"        self.driver \u003d mock.Mock()"},{"line_number":32,"context_line":"        self.driver.DEV_NAME_LEN \u003d 14"},{"line_number":33,"context_line":"        self.net_id \u003d _uuid()"},{"line_number":34,"context_line":"        self.name \u003d \u0027snat-%s\u0027 % self.net_id"},{"line_number":35,"context_line":"        self.snat_ns \u003d dvr_snat_ns.SnatNamespace(self.net_id,"},{"line_number":36,"context_line":"                                                 self.conf,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_f8497061","line":33,"range":{"start_line":33,"start_character":13,"end_line":33,"end_character":19},"updated":"2016-09-07 02:13:23.000000000","message":"router_id","commit_id":"754beed13437bfb91b87b3568cc7fc0ff15b94c4"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"b835f63945302f5d2e0b939e4f240743d0f1d975","unresolved":false,"context_lines":[{"line_number":31,"context_line":"        self.driver \u003d mock.Mock()"},{"line_number":32,"context_line":"        self.driver.DEV_NAME_LEN \u003d 14"},{"line_number":33,"context_line":"        self.net_id \u003d _uuid()"},{"line_number":34,"context_line":"        self.name \u003d \u0027snat-%s\u0027 % self.net_id"},{"line_number":35,"context_line":"        self.snat_ns \u003d dvr_snat_ns.SnatNamespace(self.net_id,"},{"line_number":36,"context_line":"                                                 self.conf,"},{"line_number":37,"context_line":"                                                 self.driver,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_987144ab","line":34,"range":{"start_line":34,"start_character":37,"end_line":34,"end_character":43},"updated":"2016-09-07 02:13:23.000000000","message":"ditto","commit_id":"754beed13437bfb91b87b3568cc7fc0ff15b94c4"},{"author":{"_account_id":12860,"name":"Dongcan Ye","email":"yedongcan@yeah.net","username":"yedongcan"},"change_message_id":"b835f63945302f5d2e0b939e4f240743d0f1d975","unresolved":false,"context_lines":[{"line_number":32,"context_line":"        self.driver.DEV_NAME_LEN \u003d 14"},{"line_number":33,"context_line":"        self.net_id \u003d _uuid()"},{"line_number":34,"context_line":"        self.name \u003d \u0027snat-%s\u0027 % self.net_id"},{"line_number":35,"context_line":"        self.snat_ns \u003d dvr_snat_ns.SnatNamespace(self.net_id,"},{"line_number":36,"context_line":"                                                 self.conf,"},{"line_number":37,"context_line":"                                                 self.driver,"},{"line_number":38,"context_line":"                                                 use_ipv6\u003dFalse)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9a89bdaa_b86a88b1","line":35,"range":{"start_line":35,"start_character":54,"end_line":35,"end_character":60},"updated":"2016-09-07 02:13:23.000000000","message":"ditto","commit_id":"754beed13437bfb91b87b3568cc7fc0ff15b94c4"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"035eb4cb3c119bb6be530b8b7bdc2d1320dc6488","unresolved":false,"context_lines":[{"line_number":38,"context_line":"                                                 use_ipv6\u003dFalse)"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"    @mock.patch.object(utils, \u0027execute\u0027)"},{"line_number":41,"context_line":"    def _test_create(self, execute):"},{"line_number":42,"context_line":"        self.snat_ns.create()"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"        netns_cmd \u003d [\u0027ip\u0027, \u0027netns\u0027, \u0027exec\u0027, self.snat_ns.name]"}],"source_content_type":"text/x-python","patch_set":5,"id":"9a89bdaa_3a447a19","line":41,"updated":"2016-09-07 19:00:16.000000000","message":"Just make this test_create() and remove the one below since there is only one caller.","commit_id":"0aa45690646492a50e59c753bf141783dbc80188"}]}
