)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"772a8b1192931d9d7f22eab57598506af2808d2d","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Use the root helper in the ip netns list command executed by the IP library"},{"line_number":10,"context_line":"when checking for the existence of a namespace.  This prevents an unprivileged"},{"line_number":11,"context_line":"l3 agent from erroneously trying to create another namespace when one already"},{"line_number":12,"context_line":"exists."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Closes-Bug: #1348812"},{"line_number":15,"context_line":"Closes-Bug: #1311804"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"baada198_f22fda86","line":12,"updated":"2014-07-28 19:50:46.000000000","message":"Could you explicit in the commit message and perhaps in the code, the root cause: overconstrained permissions on /var/run/netns?","commit_id":"32a1cec65157302988664146b20da11b0b7a1ed5"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"91994af8ffd7027a0497e6c4e8027b18418346c9","unresolved":false,"context_lines":[{"line_number":9,"context_line":"Use the root helper in the ip netns list command executed by the IP library"},{"line_number":10,"context_line":"when checking for the existence of a namespace.  This prevents an unprivileged"},{"line_number":11,"context_line":"l3 agent from erroneously trying to create another namespace when one already"},{"line_number":12,"context_line":"exists."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Closes-Bug: #1348812"},{"line_number":15,"context_line":"Closes-Bug: #1311804"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":2,"id":"baada198_f2c35a55","line":12,"in_reply_to":"baada198_f22fda86","updated":"2014-07-28 19:56:55.000000000","message":"Done","commit_id":"32a1cec65157302988664146b20da11b0b7a1ed5"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"28e89a87b4e8622c4d383f22769c8eeadcf259f1","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Kevin Benton \u003cblak111@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-09-08 20:23:50 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Option for root_helper when checking namespace"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a configuration option to use the root helper in the ip netns list"},{"line_number":10,"context_line":"command executed by the IP library when checking for the existence of a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"fa98f980_c118c577","line":7,"updated":"2014-09-10 14:09:10.000000000","message":"Adds option","commit_id":"243f483c5734dda36837f72e1aa91feb30e67546"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"ff91167ab30c74e05adf63ad8fce110ef205c508","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Kevin Benton \u003cblak111@gmail.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2014-09-08 20:23:50 -0700"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Option for root_helper when checking namespace"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a configuration option to use the root helper in the ip netns list"},{"line_number":10,"context_line":"command executed by the IP library when checking for the existence of a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"fa98f980_5770fe71","line":7,"in_reply_to":"fa98f980_c118c577","updated":"2014-09-11 07:43:11.000000000","message":"Doesn\u0027t fit in 50 chars with \"Adds\"","commit_id":"243f483c5734dda36837f72e1aa91feb30e67546"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"3a1f1181cb98ce0477092d83ecce2eaed5252c29","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Option for root_helper when checking namespace"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a configuration option to use the root helper in the ip netns list"},{"line_number":10,"context_line":"command executed by the IP library when checking for the existence of a"},{"line_number":11,"context_line":"namespace.  This prevents an unprivileged l3 agent from erroneously trying"},{"line_number":12,"context_line":"to create another namespace when one already exists. This is necessary in"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"fa98f980_aa0ca73c","line":9,"updated":"2014-09-09 08:35:03.000000000","message":"A new configuration option seems to imply a DocImpact tag","commit_id":"243f483c5734dda36837f72e1aa91feb30e67546"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"ff91167ab30c74e05adf63ad8fce110ef205c508","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Option for root_helper when checking namespace"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Adds a configuration option to use the root helper in the ip netns list"},{"line_number":10,"context_line":"command executed by the IP library when checking for the existence of a"},{"line_number":11,"context_line":"namespace.  This prevents an unprivileged l3 agent from erroneously trying"},{"line_number":12,"context_line":"to create another namespace when one already exists. This is necessary in"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":16,"id":"fa98f980_7769828b","line":9,"in_reply_to":"fa98f980_aa0ca73c","updated":"2014-09-11 07:43:11.000000000","message":"Done","commit_id":"243f483c5734dda36837f72e1aa91feb30e67546"}],"neutron/agent/common/config.py":[{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"3a1f1181cb98ce0477092d83ecce2eaed5252c29","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027use_helper_for_ns_read\u0027,"},{"line_number":31,"context_line":"                default\u003dTrue,"},{"line_number":32,"context_line":"                help\u003d_(\u0027Use the root helper to read the namespaces from \u0027"},{"line_number":33,"context_line":"                       \u0027the operating system.\u0027)),"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"AGENT_STATE_OPTS \u003d ["}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_0a6213d8","line":33,"updated":"2014-09-09 08:35:03.000000000","message":"the default value seems incorrect because currently root_helper is not used to check namespace existance","commit_id":"243f483c5734dda36837f72e1aa91feb30e67546"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"ff91167ab30c74e05adf63ad8fce110ef205c508","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027use_helper_for_ns_read\u0027,"},{"line_number":31,"context_line":"                default\u003dTrue,"},{"line_number":32,"context_line":"                help\u003d_(\u0027Use the root helper to read the namespaces from \u0027"},{"line_number":33,"context_line":"                       \u0027the operating system.\u0027)),"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"AGENT_STATE_OPTS \u003d ["}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_b79ccac1","line":33,"in_reply_to":"fa98f980_0a6213d8","updated":"2014-09-11 07:43:11.000000000","message":"I intentionally set this because the current code causes failures on some systems that are almost impossible to debug.","commit_id":"243f483c5734dda36837f72e1aa91feb30e67546"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"9b451cc9e9a28300c80eada9b0ea9ce45dc90b7a","unresolved":false,"context_lines":[{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027use_helper_for_ns_read\u0027,"},{"line_number":31,"context_line":"                default\u003dTrue,"},{"line_number":32,"context_line":"                help\u003d_(\u0027Use the root helper to read the namespaces from \u0027"},{"line_number":33,"context_line":"                       \u0027the operating system.\u0027)),"},{"line_number":34,"context_line":"]"},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"AGENT_STATE_OPTS \u003d ["}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_f88e3e2d","line":33,"in_reply_to":"fa98f980_b79ccac1","updated":"2014-09-11 11:41:12.000000000","message":"neutron-sanity-check has been defined to handle such case.","commit_id":"243f483c5734dda36837f72e1aa91feb30e67546"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"618a3764e3c7c5d025f77c1808771f6f114d9d31","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    cfg.StrOpt(\u0027root_helper\u0027, default\u003d\u0027sudo\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\u0027Root helper application.\u0027)),"},{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027use_helper_for_ns_read\u0027,"},{"line_number":31,"context_line":"                default\u003dTrue,"},{"line_number":32,"context_line":"                help\u003d_(\u0027Use the root helper to read the namespaces from \u0027"},{"line_number":33,"context_line":"                       \u0027the operating system.\u0027)),"},{"line_number":34,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_9873724d","line":31,"updated":"2014-09-11 11:42:40.000000000","message":"it should be disabled by default, see PS16","commit_id":"7ce86fd657d508e4f8e47b9e5975b17914c622c7"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"45d9e77013bbc784db159945c87f055bcfb7eb03","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    cfg.StrOpt(\u0027root_helper\u0027, default\u003d\u0027sudo\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\u0027Root helper application.\u0027)),"},{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027use_helper_for_ns_read\u0027,"},{"line_number":31,"context_line":"                default\u003dTrue,"},{"line_number":32,"context_line":"                help\u003d_(\u0027Use the root helper to read the namespaces from \u0027"},{"line_number":33,"context_line":"                       \u0027the operating system.\u0027)),"},{"line_number":34,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_317bd87c","line":31,"in_reply_to":"fa98f980_1d027b6f","updated":"2014-09-17 23:45:19.000000000","message":"It\u0027s a distro specific. It\u0027s deployment specific. One of the HA tools had set the directory to be not publicly readable.","commit_id":"7ce86fd657d508e4f8e47b9e5975b17914c622c7"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"26581389744b8c63b7abbcb124374c16c67c49ff","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    cfg.StrOpt(\u0027root_helper\u0027, default\u003d\u0027sudo\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\u0027Root helper application.\u0027)),"},{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027use_helper_for_ns_read\u0027,"},{"line_number":31,"context_line":"                default\u003dTrue,"},{"line_number":32,"context_line":"                help\u003d_(\u0027Use the root helper to read the namespaces from \u0027"},{"line_number":33,"context_line":"                       \u0027the operating system.\u0027)),"},{"line_number":34,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_11d41446","line":31,"in_reply_to":"fa98f980_317bd87c","updated":"2014-09-17 23:45:46.000000000","message":"not* distro specific","commit_id":"7ce86fd657d508e4f8e47b9e5975b17914c622c7"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"fa791ddbf53912f8f548d780900db8815d911ac2","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    cfg.StrOpt(\u0027root_helper\u0027, default\u003d\u0027sudo\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\u0027Root helper application.\u0027)),"},{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027use_helper_for_ns_read\u0027,"},{"line_number":31,"context_line":"                default\u003dTrue,"},{"line_number":32,"context_line":"                help\u003d_(\u0027Use the root helper to read the namespaces from \u0027"},{"line_number":33,"context_line":"                       \u0027the operating system.\u0027)),"},{"line_number":34,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_efa65253","line":31,"in_reply_to":"fa98f980_48a75cbd","updated":"2014-09-12 08:56:56.000000000","message":"Did you mean \u0027conservative\u0027, or is there another meaning of \u0027consecutive\u0027 I\u0027m not understanding?\n\nThe sanity-check just suggests the performance improvement but it doesn\u0027t fail so I think that should be okay.","commit_id":"7ce86fd657d508e4f8e47b9e5975b17914c622c7"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"79671d038b56326e96c1a0339b82b020005fe3c0","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    cfg.StrOpt(\u0027root_helper\u0027, default\u003d\u0027sudo\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\u0027Root helper application.\u0027)),"},{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027use_helper_for_ns_read\u0027,"},{"line_number":31,"context_line":"                default\u003dTrue,"},{"line_number":32,"context_line":"                help\u003d_(\u0027Use the root helper to read the namespaces from \u0027"},{"line_number":33,"context_line":"                       \u0027the operating system.\u0027)),"},{"line_number":34,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_48a75cbd","line":31,"in_reply_to":"fa98f980_811da864","updated":"2014-09-12 04:39:42.000000000","message":"+1 Kevin\ni prefer the consecutive default here.\n\ni\u0027m not sure if sanity-check should suggest optimization, though.\nhaving too consecutive configuration is perfectly sanity thing.","commit_id":"7ce86fd657d508e4f8e47b9e5975b17914c622c7"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"929d8905dd43d83bf984746b61b1d6d7cbb9a871","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    cfg.StrOpt(\u0027root_helper\u0027, default\u003d\u0027sudo\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\u0027Root helper application.\u0027)),"},{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027use_helper_for_ns_read\u0027,"},{"line_number":31,"context_line":"                default\u003dTrue,"},{"line_number":32,"context_line":"                help\u003d_(\u0027Use the root helper to read the namespaces from \u0027"},{"line_number":33,"context_line":"                       \u0027the operating system.\u0027)),"},{"line_number":34,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_811da864","line":31,"in_reply_to":"fa98f980_9873724d","updated":"2014-09-11 21:21:43.000000000","message":"I disagree. Neutron sanity check doesn\u0027t seem to be run in deployments that I\u0027ve found. I would rather have a neutron that works at lower performance rather than not at all. The sanity check can be run to determine if you can disable the flag.","commit_id":"7ce86fd657d508e4f8e47b9e5975b17914c622c7"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"e40b527ec0935483d39cc4809ee17e4396e54f7c","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    cfg.StrOpt(\u0027root_helper\u0027, default\u003d\u0027sudo\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\u0027Root helper application.\u0027)),"},{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027use_helper_for_ns_read\u0027,"},{"line_number":31,"context_line":"                default\u003dTrue,"},{"line_number":32,"context_line":"                help\u003d_(\u0027Use the root helper to read the namespaces from \u0027"},{"line_number":33,"context_line":"                       \u0027the operating system.\u0027)),"},{"line_number":34,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_fd077716","line":31,"in_reply_to":"fa98f980_efa65253","updated":"2014-09-17 11:05:43.000000000","message":"i meant conservative!","commit_id":"7ce86fd657d508e4f8e47b9e5975b17914c622c7"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"a7f6c4cd57735adf23cc47c6519b383f79937bbc","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    cfg.StrOpt(\u0027root_helper\u0027, default\u003d\u0027sudo\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\u0027Root helper application.\u0027)),"},{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027use_helper_for_ns_read\u0027,"},{"line_number":31,"context_line":"                default\u003dTrue,"},{"line_number":32,"context_line":"                help\u003d_(\u0027Use the root helper to read the namespaces from \u0027"},{"line_number":33,"context_line":"                       \u0027the operating system.\u0027)),"},{"line_number":34,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":19,"id":"fa98f980_1d027b6f","line":31,"in_reply_to":"fa98f980_fd077716","updated":"2014-09-17 11:36:36.000000000","message":"Hehe, I agree with Cedric, but, it\u0027s just ok, deployers can set it back to False if they believe they\u0027re doing fine.\n\nI\u0027d like to know which distributions need use_helper_for_ns_read, RHOS doesn\u0027t. I have no clue.","commit_id":"7ce86fd657d508e4f8e47b9e5975b17914c622c7"},{"author":{"_account_id":9970,"name":"John Kasperski","email":"jckasper@linux.vnet.ibm.com","username":"jckasper"},"change_message_id":"194fc6e4547ace81aa8f8bcdbfc64571d15e3933","unresolved":false,"context_lines":[{"line_number":28,"context_line":"    cfg.StrOpt(\u0027root_helper\u0027, default\u003d\u0027sudo\u0027,"},{"line_number":29,"context_line":"               help\u003d_(\u0027Root helper application.\u0027)),"},{"line_number":30,"context_line":"    cfg.BoolOpt(\u0027use_helper_for_ns_read\u0027,"},{"line_number":31,"context_line":"                default\u003dTrue,"},{"line_number":32,"context_line":"                help\u003d_(\u0027Use the root helper to read the namespaces from \u0027"},{"line_number":33,"context_line":"                       \u0027the operating system.\u0027)),"},{"line_number":34,"context_line":"]"}],"source_content_type":"text/x-python","patch_set":24,"id":"9a1a9d01_4502bb70","line":31,"updated":"2015-09-28 19:53:35.000000000","message":"Why does this config option default to True when this option is not needed for a majority of the distros ?","commit_id":"9833364fbd4705fc4a563192cf2707ffe8cf763d"}],"neutron/agent/linux/ip_lib.py":[{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"c93796a4a11603c9055753254a32a32875141f94","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        # This call may need to be escalated because some deployments restrict"},{"line_number":543,"context_line":"        # the neutron user from accessing /var/run/netns (e.g. via umask/ACLs)."},{"line_number":544,"context_line":"        # On the first return with namespaces, the root_helped version will be"},{"line_number":545,"context_line":"        # compared with the unhelped version to determine if root is necessary."},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"        if (self._parent.root_helper and"},{"line_number":548,"context_line":"            (self.READ_ROOT_REQUIRED or self.READ_ROOT_REQUIRED is None)):"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_7afe033b","line":545,"updated":"2014-07-30 05:44:53.000000000","message":"this seems over-engineered.\ni prefer the earlier simpler version.","commit_id":"b3efc260267c9240bc4c34b568f10e47a5709b05"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"b56f95bb3e0bbcdf6d0c91ba39cebf755b0dc035","unresolved":false,"context_lines":[{"line_number":542,"context_line":"        # This call may need to be escalated because some deployments restrict"},{"line_number":543,"context_line":"        # the neutron user from accessing /var/run/netns (e.g. via umask/ACLs)."},{"line_number":544,"context_line":"        # On the first return with namespaces, the root_helped version will be"},{"line_number":545,"context_line":"        # compared with the unhelped version to determine if root is necessary."},{"line_number":546,"context_line":""},{"line_number":547,"context_line":"        if (self._parent.root_helper and"},{"line_number":548,"context_line":"            (self.READ_ROOT_REQUIRED or self.READ_ROOT_REQUIRED is None)):"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_d5b7e01f","line":545,"in_reply_to":"baada198_7afe033b","updated":"2014-07-30 06:10:05.000000000","message":"There are people on the bug report that said the performance impact of sudo is unacceptable. I don\u0027t think it\u0027s acceptable to have the l3 agent break in restricted environments so I\u0027m trying to get a compromise.","commit_id":"b3efc260267c9240bc4c34b568f10e47a5709b05"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"c93796a4a11603c9055753254a32a32875141f94","unresolved":false,"context_lines":[{"line_number":552,"context_line":"            # check a non-empty return against the return of an unhelped"},{"line_number":553,"context_line":"            # version to see if the helper is necessary for future calls"},{"line_number":554,"context_line":"            if self.READ_ROOT_REQUIRED is None and output.strip():"},{"line_number":555,"context_line":"                unhelped_output \u003d self._parent._execute(\u0027o\u0027, \u0027netns\u0027, [\u0027list\u0027])"},{"line_number":556,"context_line":"                self.READ_ROOT_REQUIRED \u003d unhelped_output !\u003d output"},{"line_number":557,"context_line":"        else:"},{"line_number":558,"context_line":"            output \u003d self._parent._execute(\u0027o\u0027, \u0027netns\u0027, [\u0027list\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_ba7dfbb4","line":555,"updated":"2014-07-30 05:44:53.000000000","message":"this seems racy.\nanother entity can actually modify the list behind us.","commit_id":"b3efc260267c9240bc4c34b568f10e47a5709b05"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"7d52920e2688971ff5f4f357019d6e33245a93d6","unresolved":false,"context_lines":[{"line_number":552,"context_line":"            # check a non-empty return against the return of an unhelped"},{"line_number":553,"context_line":"            # version to see if the helper is necessary for future calls"},{"line_number":554,"context_line":"            if self.READ_ROOT_REQUIRED is None and output.strip():"},{"line_number":555,"context_line":"                unhelped_output \u003d self._parent._execute(\u0027o\u0027, \u0027netns\u0027, [\u0027list\u0027])"},{"line_number":556,"context_line":"                self.READ_ROOT_REQUIRED \u003d unhelped_output !\u003d output"},{"line_number":557,"context_line":"        else:"},{"line_number":558,"context_line":"            output \u003d self._parent._execute(\u0027o\u0027, \u0027netns\u0027, [\u0027list\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_e9f29ee1","line":555,"in_reply_to":"baada198_b5ed0cf3","updated":"2014-08-04 19:14:40.000000000","message":"assuming neutron is the sole user of netns, you mean?","commit_id":"b3efc260267c9240bc4c34b568f10e47a5709b05"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"b56f95bb3e0bbcdf6d0c91ba39cebf755b0dc035","unresolved":false,"context_lines":[{"line_number":552,"context_line":"            # check a non-empty return against the return of an unhelped"},{"line_number":553,"context_line":"            # version to see if the helper is necessary for future calls"},{"line_number":554,"context_line":"            if self.READ_ROOT_REQUIRED is None and output.strip():"},{"line_number":555,"context_line":"                unhelped_output \u003d self._parent._execute(\u0027o\u0027, \u0027netns\u0027, [\u0027list\u0027])"},{"line_number":556,"context_line":"                self.READ_ROOT_REQUIRED \u003d unhelped_output !\u003d output"},{"line_number":557,"context_line":"        else:"},{"line_number":558,"context_line":"            output \u003d self._parent._execute(\u0027o\u0027, \u0027netns\u0027, [\u0027list\u0027])"}],"source_content_type":"text/x-python","patch_set":6,"id":"baada198_b5ed0cf3","line":555,"in_reply_to":"baada198_ba7dfbb4","updated":"2014-07-30 06:10:05.000000000","message":"Since all of them have to travel through this code path before modifying the namespace, this can be protected against by making it a class-level var.","commit_id":"b3efc260267c9240bc4c34b568f10e47a5709b05"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"73030ff53f307e8d756d13a10f58e28b09a76ce0","unresolved":false,"context_lines":[{"line_number":538,"context_line":"            root_helper\u003dself._parent.root_helper,"},{"line_number":539,"context_line":"            check_exit_code\u003dcheck_exit_code)"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    def _is_read_root_required(self):"},{"line_number":542,"context_line":"        # Read calls may need to be escalated because some deployments restrict"},{"line_number":543,"context_line":"        # the neutron user from accessing /var/run/netns (e.g. via umask/ACLs)."},{"line_number":544,"context_line":"        # On the first return with namespaces, the root_helped version will be"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_4f7e18e4","line":541,"updated":"2014-08-05 08:11:24.000000000","message":"(just thinking) perhaps, it would be cleaner to transform this instancemethod in a classmethod to explicit that the check is done once, the signature would become something like:\n\n   @classmethod\n  def is_read_root_required(cls, root_helper):","commit_id":"6f9f026ff04f7fb5b8ed8b6795b781b0698103b4"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"e8563c7f5d3348f440e4072ce08d1deb0ec880e8","unresolved":false,"context_lines":[{"line_number":538,"context_line":"            root_helper\u003dself._parent.root_helper,"},{"line_number":539,"context_line":"            check_exit_code\u003dcheck_exit_code)"},{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    def _is_read_root_required(self):"},{"line_number":542,"context_line":"        # Read calls may need to be escalated because some deployments restrict"},{"line_number":543,"context_line":"        # the neutron user from accessing /var/run/netns (e.g. via umask/ACLs)."},{"line_number":544,"context_line":"        # On the first return with namespaces, the root_helped version will be"}],"source_content_type":"text/x-python","patch_set":9,"id":"baada198_712725c8","line":541,"in_reply_to":"baada198_4f7e18e4","updated":"2014-08-05 19:55:53.000000000","message":"Yes, that would help with the horrific repeating of the class name. Good idea.","commit_id":"6f9f026ff04f7fb5b8ed8b6795b781b0698103b4"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"a2c21244d3bcb8accc3552f170aaece6d59c4824","unresolved":false,"context_lines":[{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    @classmethod"},{"line_number":542,"context_line":"    def is_read_root_required(cls, exec_func, root_helper):"},{"line_number":543,"context_line":"        # Read calls may need to be escalated because some deployments restrict"},{"line_number":544,"context_line":"        # the neutron user from accessing /var/run/netns (e.g. via umask/ACLs)."},{"line_number":545,"context_line":"        # On the first return with namespaces, the root_helped version will be"},{"line_number":546,"context_line":"        # compared with the unhelped version to determine if root is necessary."}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_aa8f8621","line":543,"updated":"2014-08-05 20:52:08.000000000","message":"this comment look like a docstring?","commit_id":"a0aef023150dc2b6c86fe038630f5d61627ec3e1"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"bbcd8aa4f7003a18716ca8d5ed7cbdea70a3011d","unresolved":false,"context_lines":[{"line_number":540,"context_line":""},{"line_number":541,"context_line":"    @classmethod"},{"line_number":542,"context_line":"    def is_read_root_required(cls, exec_func, root_helper):"},{"line_number":543,"context_line":"        # Read calls may need to be escalated because some deployments restrict"},{"line_number":544,"context_line":"        # the neutron user from accessing /var/run/netns (e.g. via umask/ACLs)."},{"line_number":545,"context_line":"        # On the first return with namespaces, the root_helped version will be"},{"line_number":546,"context_line":"        # compared with the unhelped version to determine if root is necessary."}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_4ed6f3c5","line":543,"in_reply_to":"baada198_aa8f8621","updated":"2014-08-06 05:33:24.000000000","message":"It looks like it, but you can tell it\u0027s not because of the # symbols in the front... ;-)","commit_id":"a0aef023150dc2b6c86fe038630f5d61627ec3e1"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"a2c21244d3bcb8accc3552f170aaece6d59c4824","unresolved":false,"context_lines":[{"line_number":562,"context_line":""},{"line_number":563,"context_line":"        # check flag again in case a coroutine finished this process already"},{"line_number":564,"context_line":"        if cls.READ_ROOT_REQUIRED is None:"},{"line_number":565,"context_line":"            cls.READ_ROOT_REQUIRED \u003d not unhelped.strip()"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"        return cls.READ_ROOT_REQUIRED"},{"line_number":568,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_aaddc615","line":565,"updated":"2014-08-05 20:52:08.000000000","message":"a log could be added to explicit the choice made by is_read_root_required?","commit_id":"a0aef023150dc2b6c86fe038630f5d61627ec3e1"},{"author":{"_account_id":8124,"name":"cbrandily","email":"zzelle@gmail.com","username":"cbrandily"},"change_message_id":"a35e8a1caa58605b9cd802afd5199aebe987137f","unresolved":false,"context_lines":[{"line_number":562,"context_line":""},{"line_number":563,"context_line":"        # check flag again in case a coroutine finished this process already"},{"line_number":564,"context_line":"        if cls.READ_ROOT_REQUIRED is None:"},{"line_number":565,"context_line":"            cls.READ_ROOT_REQUIRED \u003d not unhelped.strip()"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"        return cls.READ_ROOT_REQUIRED"},{"line_number":568,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_0f279264","line":565,"in_reply_to":"baada198_4efd133c","updated":"2014-08-06 08:24:11.000000000","message":"i was proposing to add the log in the if statement so only one log between to 2 service restarts","commit_id":"a0aef023150dc2b6c86fe038630f5d61627ec3e1"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"bbcd8aa4f7003a18716ca8d5ed7cbdea70a3011d","unresolved":false,"context_lines":[{"line_number":562,"context_line":""},{"line_number":563,"context_line":"        # check flag again in case a coroutine finished this process already"},{"line_number":564,"context_line":"        if cls.READ_ROOT_REQUIRED is None:"},{"line_number":565,"context_line":"            cls.READ_ROOT_REQUIRED \u003d not unhelped.strip()"},{"line_number":566,"context_line":""},{"line_number":567,"context_line":"        return cls.READ_ROOT_REQUIRED"},{"line_number":568,"context_line":""}],"source_content_type":"text/x-python","patch_set":10,"id":"baada198_4efd133c","line":565,"in_reply_to":"baada198_aaddc615","updated":"2014-08-06 05:33:24.000000000","message":"I thought about that, but nothing else in this module logs anything. I wasn\u0027t sure if there was a reason for that. I guess I can add it and see if it upsets people.","commit_id":"a0aef023150dc2b6c86fe038630f5d61627ec3e1"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"79459202dc0981d965b77341851d8d83241b0d73","unresolved":false,"context_lines":[{"line_number":512,"context_line":"    COMMAND \u003d \u0027netns\u0027"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"    # None is not checked, False is not required, True is required"},{"line_number":515,"context_line":"    READ_ROOT_REQUIRED \u003d None"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"    def add(self, name):"},{"line_number":518,"context_line":"        self._as_root(\u0027add\u0027, name, use_root_namespace\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_19ffd268","line":515,"updated":"2014-08-15 03:28:29.000000000","message":"This isn\u0027t a constant, so why is it in all-caps?","commit_id":"ce02b8f5b3421ce283b1d85d9f8d94271a43a943"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"1dfc05369abc016bfe6d2f3d0d72f4ad325d7acd","unresolved":false,"context_lines":[{"line_number":512,"context_line":"    COMMAND \u003d \u0027netns\u0027"},{"line_number":513,"context_line":""},{"line_number":514,"context_line":"    # None is not checked, False is not required, True is required"},{"line_number":515,"context_line":"    READ_ROOT_REQUIRED \u003d None"},{"line_number":516,"context_line":""},{"line_number":517,"context_line":"    def add(self, name):"},{"line_number":518,"context_line":"        self._as_root(\u0027add\u0027, name, use_root_namespace\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_61ef2888","line":515,"in_reply_to":"7ac7a964_19ffd268","updated":"2014-08-15 07:14:26.000000000","message":"Easier for me to see that way. :-)","commit_id":"ce02b8f5b3421ce283b1d85d9f8d94271a43a943"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"95189d98eba18fc712bf216ff24b35d81336ae71","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        On the first root_helped return with namespaces, the unhelped version"},{"line_number":550,"context_line":"        will be checked to determine if the helper is necessary. The result"},{"line_number":551,"context_line":"        is stored in a class variable so this check only needs to occur once."},{"line_number":552,"context_line":"        \"\"\""},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"        if not root_helper:"},{"line_number":555,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_9483b505","line":552,"updated":"2014-08-06 08:03:19.000000000","message":"Will this detection work if the namespace list is empty at start?\n\nIf that\u0027s not ok, adding a setting would be acceptable? (I\u0027m not sure if that\u0027s ok for backporting)\n\n(enable_netns_root_helper, #false by default)","commit_id":"ce02b8f5b3421ce283b1d85d9f8d94271a43a943"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"db7f072b548d1d46bb80059714539c9e5d0c1e86","unresolved":false,"context_lines":[{"line_number":549,"context_line":"        On the first root_helped return with namespaces, the unhelped version"},{"line_number":550,"context_line":"        will be checked to determine if the helper is necessary. The result"},{"line_number":551,"context_line":"        is stored in a class variable so this check only needs to occur once."},{"line_number":552,"context_line":"        \"\"\""},{"line_number":553,"context_line":""},{"line_number":554,"context_line":"        if not root_helper:"},{"line_number":555,"context_line":"            return False"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_6c2b987c","line":552,"in_reply_to":"baada198_9483b505","updated":"2014-08-07 02:09:15.000000000","message":"Yes, if it\u0027s empty to begin with it won\u0027t set the flag (L563) so subsequent calls will keep coming here until it detects them.","commit_id":"ce02b8f5b3421ce283b1d85d9f8d94271a43a943"},{"author":{"_account_id":4395,"name":"Aaron Rosen","email":"aaronorosen@gmail.com","username":"arosen"},"change_message_id":"d684c726cf86f9224411e2b943dc01a233c02d63","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        # check return of an unhelped call to see if the helper is necessary"},{"line_number":567,"context_line":"        unhelped \u003d exec_func(\u0027o\u0027, \u0027netns\u0027, [\u0027list\u0027])"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"        # check flag again in case a coroutine finished this process already"},{"line_number":570,"context_line":"        if cls.READ_ROOT_REQUIRED is None:"},{"line_number":571,"context_line":"            cls.READ_ROOT_REQUIRED \u003d not unhelped.strip()"},{"line_number":572,"context_line":"            if cls.READ_ROOT_REQUIRED:"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_69c6516b","line":569,"updated":"2014-08-06 05:58:26.000000000","message":"I don\u0027t think doing this twice really buys us anything does it? Why?","commit_id":"ce02b8f5b3421ce283b1d85d9f8d94271a43a943"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"db7f072b548d1d46bb80059714539c9e5d0c1e86","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        # check return of an unhelped call to see if the helper is necessary"},{"line_number":567,"context_line":"        unhelped \u003d exec_func(\u0027o\u0027, \u0027netns\u0027, [\u0027list\u0027])"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"        # check flag again in case a coroutine finished this process already"},{"line_number":570,"context_line":"        if cls.READ_ROOT_REQUIRED is None:"},{"line_number":571,"context_line":"            cls.READ_ROOT_REQUIRED \u003d not unhelped.strip()"},{"line_number":572,"context_line":"            if cls.READ_ROOT_REQUIRED:"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_ecaa4883","line":569,"in_reply_to":"baada198_69c6516b","updated":"2014-08-07 02:09:15.000000000","message":"It was originally to protect when I was doing an exact comparison, there is still a narrow race, but I\u0027m not sure the existing code calls in the correct order to reach it. Take the following example:\n\n1. Coro 1 starts this process and makes it to 560 and yields.\n\n2. Coro 1 resumes and makes it to 567 and yields.\n\n3. Coro 2 starts this process and makes it to 560 and yields.\n\n4. Coro 1 resumes, sets READ_ROOT_REQUIRED, and makes a netns call to delete the only namespace and yields.\n\n5. Coro 2 resumes and makes it to 567 and yields.\n\nThen Coro 2 would receive an empty output from the unhelped call and  would assume root_help was required because it didn\u0027t check to see if the other coroutine already determined if elevation is required.","commit_id":"ce02b8f5b3421ce283b1d85d9f8d94271a43a943"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"1dfc05369abc016bfe6d2f3d0d72f4ad325d7acd","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        # check return of an unhelped call to see if the helper is necessary"},{"line_number":567,"context_line":"        unhelped \u003d exec_func(\u0027o\u0027, \u0027netns\u0027, [\u0027list\u0027])"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"        # check flag again in case a coroutine finished this process already"},{"line_number":570,"context_line":"        if cls.READ_ROOT_REQUIRED is None:"},{"line_number":571,"context_line":"            cls.READ_ROOT_REQUIRED \u003d not unhelped.strip()"},{"line_number":572,"context_line":"            if cls.READ_ROOT_REQUIRED:"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_8164444a","line":569,"in_reply_to":"baada198_a55df7ed","updated":"2014-08-15 07:14:26.000000000","message":"I thought about that but I didn\u0027t want to decorate the whole function so it locks on every single check. Then if I move the semaphore down after the flag check I have to check it again anyway.","commit_id":"ce02b8f5b3421ce283b1d85d9f8d94271a43a943"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"bfc4868dac6bbc80f01f693f2cf2d0ccb6937fa1","unresolved":false,"context_lines":[{"line_number":566,"context_line":"        # check return of an unhelped call to see if the helper is necessary"},{"line_number":567,"context_line":"        unhelped \u003d exec_func(\u0027o\u0027, \u0027netns\u0027, [\u0027list\u0027])"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"        # check flag again in case a coroutine finished this process already"},{"line_number":570,"context_line":"        if cls.READ_ROOT_REQUIRED is None:"},{"line_number":571,"context_line":"            cls.READ_ROOT_REQUIRED \u003d not unhelped.strip()"},{"line_number":572,"context_line":"            if cls.READ_ROOT_REQUIRED:"}],"source_content_type":"text/x-python","patch_set":11,"id":"baada198_a55df7ed","line":569,"in_reply_to":"baada198_ecaa4883","updated":"2014-08-13 06:39:38.000000000","message":"this could be synchronized with a @synchronize(\"is_read_root_required\") too. Your version works too.","commit_id":"ce02b8f5b3421ce283b1d85d9f8d94271a43a943"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"79459202dc0981d965b77341851d8d83241b0d73","unresolved":false,"context_lines":[{"line_number":580,"context_line":"        if self.is_read_root_required(self._parent._execute,"},{"line_number":581,"context_line":"                                      self._parent.root_helper):"},{"line_number":582,"context_line":"            output \u003d self._parent._execute("},{"line_number":583,"context_line":"                \u0027o\u0027, \u0027netns\u0027, [\u0027list\u0027], root_helper\u003dself._parent.root_helper)"},{"line_number":584,"context_line":"        else:"},{"line_number":585,"context_line":"            output \u003d self._parent._execute(\u0027o\u0027, \u0027netns\u0027, [\u0027list\u0027])"},{"line_number":586,"context_line":"        for line in output.split(\u0027\\n\u0027):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_393bae3b","line":583,"updated":"2014-08-15 03:28:29.000000000","message":"DRY - consider setting the root_helper in this if/else block and calling execute separately.","commit_id":"ce02b8f5b3421ce283b1d85d9f8d94271a43a943"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"1dfc05369abc016bfe6d2f3d0d72f4ad325d7acd","unresolved":false,"context_lines":[{"line_number":580,"context_line":"        if self.is_read_root_required(self._parent._execute,"},{"line_number":581,"context_line":"                                      self._parent.root_helper):"},{"line_number":582,"context_line":"            output \u003d self._parent._execute("},{"line_number":583,"context_line":"                \u0027o\u0027, \u0027netns\u0027, [\u0027list\u0027], root_helper\u003dself._parent.root_helper)"},{"line_number":584,"context_line":"        else:"},{"line_number":585,"context_line":"            output \u003d self._parent._execute(\u0027o\u0027, \u0027netns\u0027, [\u0027list\u0027])"},{"line_number":586,"context_line":"        for line in output.split(\u0027\\n\u0027):"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_617ac8f2","line":583,"in_reply_to":"7ac7a964_393bae3b","updated":"2014-08-15 07:14:26.000000000","message":"Done","commit_id":"ce02b8f5b3421ce283b1d85d9f8d94271a43a943"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"57be8faf511cf7b7b4f6f4144c2a2562025f8e9d","unresolved":false,"context_lines":[{"line_number":525,"context_line":"    COMMAND \u003d \u0027netns\u0027"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"    # None is not checked, False is not required, True is required"},{"line_number":528,"context_line":"    read_root_required \u003d None"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"    def add(self, name):"},{"line_number":531,"context_line":"        self._as_root(\u0027add\u0027, name, use_root_namespace\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_6f083b92","line":528,"updated":"2014-09-08 07:40:54.000000000","message":"Is it used anywhere? I\u0027ve failed to find its usages in the patch.","commit_id":"62014945545b02b3ba783afb92f1b7a343cc88ac"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"cd24f7d7272490120e2c2c18311b58373ee17631","unresolved":false,"context_lines":[{"line_number":525,"context_line":"    COMMAND \u003d \u0027netns\u0027"},{"line_number":526,"context_line":""},{"line_number":527,"context_line":"    # None is not checked, False is not required, True is required"},{"line_number":528,"context_line":"    read_root_required \u003d None"},{"line_number":529,"context_line":""},{"line_number":530,"context_line":"    def add(self, name):"},{"line_number":531,"context_line":"        self._as_root(\u0027add\u0027, name, use_root_namespace\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_26e719e6","line":528,"in_reply_to":"fa98f980_6f083b92","updated":"2014-09-09 03:04:59.000000000","message":"no, this is leftover from the previous approach.","commit_id":"62014945545b02b3ba783afb92f1b7a343cc88ac"},{"author":{"_account_id":12737,"name":"Jacek Swiderski","email":"jacek.swiderski@codilime.com","username":"Altran"},"change_message_id":"4d2329de6db9e4237a6d86852358b68659288c5c","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                         \u0027vlan protocol 802.1Q\u0027,"},{"line_number":35,"context_line":"                         \u0027vlan id\u0027]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class SubProcessBase(object):"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_4d3ef82a","line":37,"updated":"2014-09-09 07:36:13.000000000","message":"I\u0027m not sure how is this related to the change.","commit_id":"243f483c5734dda36837f72e1aa91feb30e67546"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"ff91167ab30c74e05adf63ad8fce110ef205c508","unresolved":false,"context_lines":[{"line_number":34,"context_line":"                         \u0027vlan protocol 802.1Q\u0027,"},{"line_number":35,"context_line":"                         \u0027vlan id\u0027]"},{"line_number":36,"context_line":""},{"line_number":37,"context_line":"LOG \u003d logging.getLogger(__name__)"},{"line_number":38,"context_line":""},{"line_number":39,"context_line":""},{"line_number":40,"context_line":"class SubProcessBase(object):"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_37b0da42","line":37,"in_reply_to":"fa98f980_4d3ef82a","updated":"2014-09-11 07:43:11.000000000","message":"Whoops. Leftover from old runtime check in previous patch that got shot down.","commit_id":"243f483c5734dda36837f72e1aa91feb30e67546"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"48509565fd25973538e6077dcbfec6f5b1da0227","unresolved":false,"context_lines":[{"line_number":556,"context_line":"            if not cfg.CONF.AGENT.use_helper_for_ns_read:"},{"line_number":557,"context_line":"                root_helper \u003d None"},{"line_number":558,"context_line":"        except cfg.NoSuchOptError:"},{"line_number":559,"context_line":"            # use root helper if no config option was registered"},{"line_number":560,"context_line":"            pass"},{"line_number":561,"context_line":"        output \u003d self._parent._execute(\u0027o\u0027, \u0027netns\u0027, [\u0027list\u0027],"},{"line_number":562,"context_line":"                                       root_helper\u003droot_helper)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_fc64c44a","line":559,"updated":"2014-09-09 04:57:44.000000000","message":"why is this necessary?\nif it\u0027s for functional tests, it\u0027s better to fix the test instead.","commit_id":"243f483c5734dda36837f72e1aa91feb30e67546"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"28e89a87b4e8622c4d383f22769c8eeadcf259f1","unresolved":false,"context_lines":[{"line_number":556,"context_line":"            if not cfg.CONF.AGENT.use_helper_for_ns_read:"},{"line_number":557,"context_line":"                root_helper \u003d None"},{"line_number":558,"context_line":"        except cfg.NoSuchOptError:"},{"line_number":559,"context_line":"            # use root helper if no config option was registered"},{"line_number":560,"context_line":"            pass"},{"line_number":561,"context_line":"        output \u003d self._parent._execute(\u0027o\u0027, \u0027netns\u0027, [\u0027list\u0027],"},{"line_number":562,"context_line":"                                       root_helper\u003droot_helper)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_01ed6d25","line":559,"in_reply_to":"fa98f980_fc64c44a","updated":"2014-09-10 14:09:10.000000000","message":"Not sure how this works exactly, but since you set use_helper_for_ns_read to have default\u003dTrue (and assuming neutron.agent.common.register_root_helper(cfg.CONF) has been called), this exception is never generated?\n\nAlso, in neutron.cmd.sanity_check.check_read_netns(), cfg.CONF.AGENT.use_helper_for_ns_read is used as well, and it isn\u0027t in a try-except block.","commit_id":"243f483c5734dda36837f72e1aa91feb30e67546"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"ff91167ab30c74e05adf63ad8fce110ef205c508","unresolved":false,"context_lines":[{"line_number":556,"context_line":"            if not cfg.CONF.AGENT.use_helper_for_ns_read:"},{"line_number":557,"context_line":"                root_helper \u003d None"},{"line_number":558,"context_line":"        except cfg.NoSuchOptError:"},{"line_number":559,"context_line":"            # use root helper if no config option was registered"},{"line_number":560,"context_line":"            pass"},{"line_number":561,"context_line":"        output \u003d self._parent._execute(\u0027o\u0027, \u0027netns\u0027, [\u0027list\u0027],"},{"line_number":562,"context_line":"                                       root_helper\u003droot_helper)"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_5749de2f","line":559,"in_reply_to":"fa98f980_fc64c44a","updated":"2014-09-11 07:43:11.000000000","message":"Similar logic as the handler for ip_lib_force_root. Other unit tests do not setup the agent config.","commit_id":"243f483c5734dda36837f72e1aa91feb30e67546"},{"author":{"_account_id":7962,"name":"Ronak Shah","email":"ronak.malav.shah@gmail.com","username":"ronak"},"change_message_id":"675ae5d0fc1cb6efd2764e704c3ee6030bc66640","unresolved":false,"context_lines":[{"line_number":552,"context_line":"    def exists(self, name):"},{"line_number":553,"context_line":"        root_helper \u003d self._parent.root_helper"},{"line_number":554,"context_line":"        if not cfg.CONF.AGENT.use_helper_for_ns_read:"},{"line_number":555,"context_line":"            root_helper \u003d None"},{"line_number":556,"context_line":"        output \u003d self._parent._execute(\u0027o\u0027, \u0027netns\u0027, [\u0027list\u0027],"},{"line_number":557,"context_line":"                                       root_helper\u003droot_helper)"},{"line_number":558,"context_line":"        for line in output.split(\u0027\\n\u0027):"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a961159_672fde88","line":555,"updated":"2014-12-12 06:54:57.000000000","message":"Just in case if you happen to make 24th PS :):\n\nroot_helper \u003d (self._parent.root_helper if cfg.CONF.AGENT.use_helper_for_ns_read else None)","commit_id":"a81660c86452e5d33b085350e7b65dfc369e39ad"},{"author":{"_account_id":8788,"name":"Miguel Angel Ajo","email":"mangelajo@redhat.com","username":"mangelajo"},"change_message_id":"d8f310bc1aa4e7a71207513c4e66e144e486233d","unresolved":false,"context_lines":[{"line_number":552,"context_line":"    def exists(self, name):"},{"line_number":553,"context_line":"        root_helper \u003d self._parent.root_helper"},{"line_number":554,"context_line":"        if not cfg.CONF.AGENT.use_helper_for_ns_read:"},{"line_number":555,"context_line":"            root_helper \u003d None"},{"line_number":556,"context_line":"        output \u003d self._parent._execute(\u0027o\u0027, \u0027netns\u0027, [\u0027list\u0027],"},{"line_number":557,"context_line":"                                       root_helper\u003droot_helper)"},{"line_number":558,"context_line":"        for line in output.split(\u0027\\n\u0027):"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a961159_7bdf59d6","line":555,"in_reply_to":"3a961159_672fde88","updated":"2014-12-12 23:36:47.000000000","message":"I find that harder to read :)","commit_id":"a81660c86452e5d33b085350e7b65dfc369e39ad"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"ec798d78734a58787f8bcfaf8073be2d6e805a1b","unresolved":false,"context_lines":[{"line_number":552,"context_line":"    def exists(self, name):"},{"line_number":553,"context_line":"        root_helper \u003d self._parent.root_helper"},{"line_number":554,"context_line":"        if not cfg.CONF.AGENT.use_helper_for_ns_read:"},{"line_number":555,"context_line":"            root_helper \u003d None"},{"line_number":556,"context_line":"        output \u003d self._parent._execute(\u0027o\u0027, \u0027netns\u0027, [\u0027list\u0027],"},{"line_number":557,"context_line":"                                       root_helper\u003droot_helper)"},{"line_number":558,"context_line":"        for line in output.split(\u0027\\n\u0027):"}],"source_content_type":"text/x-python","patch_set":23,"id":"3a961159_a3c27750","line":555,"in_reply_to":"3a961159_7bdf59d6","updated":"2014-12-13 04:34:30.000000000","message":"Yeah, code golf isn\u0027t always advisable.","commit_id":"a81660c86452e5d33b085350e7b65dfc369e39ad"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"d4b6e5db3273785fac1228c0b45a0867ff042cb5","unresolved":false,"context_lines":[{"line_number":63,"context_line":"                                 log_fail_as_error\u003dself.log_fail_as_error)"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    def enforce_root_helper(self):"},{"line_number":66,"context_line":"        if not self.root_helper and os.geteuid() !\u003d 0:"},{"line_number":67,"context_line":"            raise exceptions.SudoRequired()"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    def _as_root(self, options, command, args, use_root_namespace\u003dFalse):"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_829ac711","line":66,"updated":"2014-12-23 22:25:17.000000000","message":"Nice catch on effective user id!","commit_id":"9833364fbd4705fc4a563192cf2707ffe8cf763d"},{"author":{"_account_id":9970,"name":"John Kasperski","email":"jckasper@linux.vnet.ibm.com","username":"jckasper"},"change_message_id":"194fc6e4547ace81aa8f8bcdbfc64571d15e3933","unresolved":false,"context_lines":[{"line_number":196,"context_line":"        return (IPDevice(name, self.root_helper, self.namespace))"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    @classmethod"},{"line_number":199,"context_line":"    def get_namespaces(cls, root_helper):"},{"line_number":200,"context_line":"        output \u003d cls._execute(\u0027\u0027, \u0027netns\u0027, (\u0027list\u0027,), root_helper\u003droot_helper)"},{"line_number":201,"context_line":"        return [l.strip() for l in output.split(\u0027\\n\u0027)]"},{"line_number":202,"context_line":""}],"source_content_type":"text/x-python","patch_set":24,"id":"9a1a9d01_250d4790","line":199,"updated":"2015-09-28 19:53:35.000000000","message":"Why is \"root\" check not done here for this ip netns list  ?","commit_id":"9833364fbd4705fc4a563192cf2707ffe8cf763d"}],"neutron/cmd/sanity/checks.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"57be8faf511cf7b7b4f6f4144c2a2562025f8e9d","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    # read without root_helper. if exists, not required."},{"line_number":100,"context_line":"    ipw_nohelp \u003d ip_lib.IPWrapper()"},{"line_number":101,"context_line":"    exists \u003d ipw_nohelp.netns.exists(nsname)"},{"line_number":102,"context_line":"    ipw.netns.delete(nsname)"},{"line_number":103,"context_line":"    return not exists"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_ef9eeb53","line":102,"updated":"2014-09-08 07:40:54.000000000","message":"How about deleting the namespace in try: finally: section to make sure it\u0027s removed even if code above fails?","commit_id":"62014945545b02b3ba783afb92f1b7a343cc88ac"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"cd24f7d7272490120e2c2c18311b58373ee17631","unresolved":false,"context_lines":[{"line_number":99,"context_line":"    # read without root_helper. if exists, not required."},{"line_number":100,"context_line":"    ipw_nohelp \u003d ip_lib.IPWrapper()"},{"line_number":101,"context_line":"    exists \u003d ipw_nohelp.netns.exists(nsname)"},{"line_number":102,"context_line":"    ipw.netns.delete(nsname)"},{"line_number":103,"context_line":"    return not exists"}],"source_content_type":"text/x-python","patch_set":14,"id":"fa98f980_86cd2560","line":102,"in_reply_to":"fa98f980_ef9eeb53","updated":"2014-09-09 03:04:59.000000000","message":"Done","commit_id":"62014945545b02b3ba783afb92f1b7a343cc88ac"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"ec798d78734a58787f8bcfaf8073be2d6e805a1b","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"def netns_read_requires_helper(root_helper):"},{"line_number":114,"context_line":"    ipw \u003d ip_lib.IPWrapper(root_helper)"},{"line_number":115,"context_line":"    nsname \u003d \"netnsreadtest-\" + utils.get_random_string(6)"},{"line_number":116,"context_line":"    ipw.netns.add(nsname)"},{"line_number":117,"context_line":"    try:"},{"line_number":118,"context_line":"        # read without root_helper. if exists, not required."}],"source_content_type":"text/x-python","patch_set":23,"id":"3a961159_03ab4b89","line":115,"updated":"2014-12-13 04:34:30.000000000","message":"(No action required) We should probably standardize on uuids for namespaces to eliminate the possibility of clashes.","commit_id":"a81660c86452e5d33b085350e7b65dfc369e39ad"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"7235d055b60fba739405914ba3215e49bcf83add","unresolved":false,"context_lines":[{"line_number":112,"context_line":""},{"line_number":113,"context_line":"def netns_read_requires_helper(root_helper):"},{"line_number":114,"context_line":"    ipw \u003d ip_lib.IPWrapper(root_helper)"},{"line_number":115,"context_line":"    nsname \u003d \"netnsreadtest-\" + utils.get_random_string(6)"},{"line_number":116,"context_line":"    ipw.netns.add(nsname)"},{"line_number":117,"context_line":"    try:"},{"line_number":118,"context_line":"        # read without root_helper. if exists, not required."}],"source_content_type":"text/x-python","patch_set":23,"id":"3a961159_9d91cb9c","line":115,"in_reply_to":"3a961159_03ab4b89","updated":"2014-12-18 07:57:43.000000000","message":"merge conflict so i will update","commit_id":"a81660c86452e5d33b085350e7b65dfc369e39ad"}],"neutron/cmd/sanity_check.py":[{"author":{"_account_id":12737,"name":"Jacek Swiderski","email":"jacek.swiderski@codilime.com","username":"Altran"},"change_message_id":"4d2329de6db9e4237a6d86852358b68659288c5c","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    required \u003d checks.netns_read_requires_helper("},{"line_number":57,"context_line":"        root_helper\u003dcfg.CONF.AGENT.root_helper)"},{"line_number":58,"context_line":"    if not required and cfg.CONF.AGENT.use_helper_for_ns_read:"},{"line_number":59,"context_line":"        LOG.warning(_(\"The user that is executing neutron can read the \""},{"line_number":60,"context_line":"                      \"namespaces without using the root_helper. Disable the \""},{"line_number":61,"context_line":"                      \"use_helper_for_ns_read to avoid a performance impact.\"))"},{"line_number":62,"context_line":"        # Don\u0027t fail because nothing is actually broken. Just not optimal."}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_ad720447","line":59,"updated":"2014-09-09 07:36:13.000000000","message":"_LW","commit_id":"243f483c5734dda36837f72e1aa91feb30e67546"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"ff91167ab30c74e05adf63ad8fce110ef205c508","unresolved":false,"context_lines":[{"line_number":56,"context_line":"    required \u003d checks.netns_read_requires_helper("},{"line_number":57,"context_line":"        root_helper\u003dcfg.CONF.AGENT.root_helper)"},{"line_number":58,"context_line":"    if not required and cfg.CONF.AGENT.use_helper_for_ns_read:"},{"line_number":59,"context_line":"        LOG.warning(_(\"The user that is executing neutron can read the \""},{"line_number":60,"context_line":"                      \"namespaces without using the root_helper. Disable the \""},{"line_number":61,"context_line":"                      \"use_helper_for_ns_read to avoid a performance impact.\"))"},{"line_number":62,"context_line":"        # Don\u0027t fail because nothing is actually broken. Just not optimal."}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_f7c73296","line":59,"in_reply_to":"fa98f980_ad720447","updated":"2014-09-11 07:43:11.000000000","message":"Done","commit_id":"243f483c5734dda36837f72e1aa91feb30e67546"},{"author":{"_account_id":12737,"name":"Jacek Swiderski","email":"jacek.swiderski@codilime.com","username":"Altran"},"change_message_id":"4d2329de6db9e4237a6d86852358b68659288c5c","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        # Don\u0027t fail because nothing is actually broken. Just not optimal."},{"line_number":63,"context_line":"        result \u003d True"},{"line_number":64,"context_line":"    elif required and not cfg.CONF.AGENT.use_helper_for_ns_read:"},{"line_number":65,"context_line":"        LOG.error(_(\"The user that is executing neutron does not have \""},{"line_number":66,"context_line":"                    \"permissions to read the namespaces. Enable the \""},{"line_number":67,"context_line":"                    \"use_helper_for_ns_read configuration option.\"))"},{"line_number":68,"context_line":"        result \u003d False"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_cd8e6827","line":65,"updated":"2014-09-09 07:36:13.000000000","message":"_LE","commit_id":"243f483c5734dda36837f72e1aa91feb30e67546"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"ff91167ab30c74e05adf63ad8fce110ef205c508","unresolved":false,"context_lines":[{"line_number":62,"context_line":"        # Don\u0027t fail because nothing is actually broken. Just not optimal."},{"line_number":63,"context_line":"        result \u003d True"},{"line_number":64,"context_line":"    elif required and not cfg.CONF.AGENT.use_helper_for_ns_read:"},{"line_number":65,"context_line":"        LOG.error(_(\"The user that is executing neutron does not have \""},{"line_number":66,"context_line":"                    \"permissions to read the namespaces. Enable the \""},{"line_number":67,"context_line":"                    \"use_helper_for_ns_read configuration option.\"))"},{"line_number":68,"context_line":"        result \u003d False"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_17cd96b7","line":65,"in_reply_to":"fa98f980_cd8e6827","updated":"2014-09-11 07:43:11.000000000","message":"Done","commit_id":"243f483c5734dda36837f72e1aa91feb30e67546"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"28e89a87b4e8622c4d383f22769c8eeadcf259f1","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    else:"},{"line_number":70,"context_line":"        # everything is configured appropriately"},{"line_number":71,"context_line":"        result \u003d True"},{"line_number":72,"context_line":"    return result"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def check_nova_notify():"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_a176613c","line":72,"updated":"2014-09-10 14:09:10.000000000","message":"this return will never be reached.","commit_id":"243f483c5734dda36837f72e1aa91feb30e67546"},{"author":{"_account_id":8213,"name":"Claudiu Belu","email":"cbelu@cloudbasesolutions.com","username":"claudiub"},"change_message_id":"1369c9ca1b16b91ac1155aac62c7b20e70de63e0","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    else:"},{"line_number":70,"context_line":"        # everything is configured appropriately"},{"line_number":71,"context_line":"        result \u003d True"},{"line_number":72,"context_line":"    return result"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def check_nova_notify():"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_22f6d3f9","line":72,"in_reply_to":"fa98f980_77b6e23f","updated":"2014-09-11 10:02:31.000000000","message":"whops, misread result as return. My bad. :D","commit_id":"243f483c5734dda36837f72e1aa91feb30e67546"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"ff91167ab30c74e05adf63ad8fce110ef205c508","unresolved":false,"context_lines":[{"line_number":69,"context_line":"    else:"},{"line_number":70,"context_line":"        # everything is configured appropriately"},{"line_number":71,"context_line":"        result \u003d True"},{"line_number":72,"context_line":"    return result"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"def check_nova_notify():"}],"source_content_type":"text/x-python","patch_set":16,"id":"fa98f980_77b6e23f","line":72,"in_reply_to":"fa98f980_a176613c","updated":"2014-09-11 07:43:11.000000000","message":"I certainly think it will. It\u0027s the only return in the whole block.","commit_id":"243f483c5734dda36837f72e1aa91feb30e67546"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"ec798d78734a58787f8bcfaf8073be2d6e805a1b","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                    help\u003d_(\u0027Check for ARP responder support\u0027)),"},{"line_number":117,"context_line":"    BoolOptCallback(\u0027vf_management\u0027, check_vf_management, default\u003dFalse,"},{"line_number":118,"context_line":"                    help\u003d_(\u0027Check for VF management support\u0027)),"},{"line_number":119,"context_line":"    BoolOptCallback(\u0027read_netns\u0027, check_read_netns, default\u003dFalse,"},{"line_number":120,"context_line":"                    help\u003d_(\u0027Check netns permission settings\u0027)),"},{"line_number":121,"context_line":"]"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"3a961159_63932f5b","line":119,"updated":"2014-12-13 04:34:30.000000000","message":"(No action required) It probably makes sense to add a type for sanity check options that defaults to false automatically.","commit_id":"a81660c86452e5d33b085350e7b65dfc369e39ad"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"7235d055b60fba739405914ba3215e49bcf83add","unresolved":false,"context_lines":[{"line_number":116,"context_line":"                    help\u003d_(\u0027Check for ARP responder support\u0027)),"},{"line_number":117,"context_line":"    BoolOptCallback(\u0027vf_management\u0027, check_vf_management, default\u003dFalse,"},{"line_number":118,"context_line":"                    help\u003d_(\u0027Check for VF management support\u0027)),"},{"line_number":119,"context_line":"    BoolOptCallback(\u0027read_netns\u0027, check_read_netns, default\u003dFalse,"},{"line_number":120,"context_line":"                    help\u003d_(\u0027Check netns permission settings\u0027)),"},{"line_number":121,"context_line":"]"},{"line_number":122,"context_line":""}],"source_content_type":"text/x-python","patch_set":23,"id":"3a961159_bde7673f","line":119,"in_reply_to":"3a961159_63932f5b","updated":"2014-12-18 07:57:43.000000000","message":"maybe i\u0027ll just change the class here since it\u0027s the only place in use...","commit_id":"a81660c86452e5d33b085350e7b65dfc369e39ad"},{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"d4b6e5db3273785fac1228c0b45a0867ff042cb5","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class BoolOptCallback(cfg.BoolOpt):"},{"line_number":33,"context_line":"    def __init__(self, name, callback, **kwargs):"},{"line_number":34,"context_line":"        if \u0027default\u0027 not in kwargs:"},{"line_number":35,"context_line":"            kwargs[\u0027default\u0027] \u003d False"},{"line_number":36,"context_line":"        self.callback \u003d callback"},{"line_number":37,"context_line":"        super(BoolOptCallback, self).__init__(name, **kwargs)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_22a8331f","line":34,"updated":"2014-12-23 22:25:17.000000000","message":"(nit) Nice cleanup, but I think what you meant was:\n\n kwargs.setdefault(\u0027default\u0027, False)","commit_id":"9833364fbd4705fc4a563192cf2707ffe8cf763d"},{"author":{"_account_id":704,"name":"Edgar Magana","email":"emagana@gmail.com","username":"emagana"},"change_message_id":"27110417b4f0ad9fd4c564151bb070621ab2fabb","unresolved":false,"context_lines":[{"line_number":31,"context_line":""},{"line_number":32,"context_line":"class BoolOptCallback(cfg.BoolOpt):"},{"line_number":33,"context_line":"    def __init__(self, name, callback, **kwargs):"},{"line_number":34,"context_line":"        if \u0027default\u0027 not in kwargs:"},{"line_number":35,"context_line":"            kwargs[\u0027default\u0027] \u003d False"},{"line_number":36,"context_line":"        self.callback \u003d callback"},{"line_number":37,"context_line":"        super(BoolOptCallback, self).__init__(name, **kwargs)"}],"source_content_type":"text/x-python","patch_set":24,"id":"3a961159_cb4ca3cb","line":34,"in_reply_to":"3a961159_22a8331f","updated":"2014-12-30 00:54:38.000000000","message":"I think it can be changed in a new patch, this commit has already a couple of +2","commit_id":"9833364fbd4705fc4a563192cf2707ffe8cf763d"}],"neutron/tests/unit/test_linux_ip_lib.py":[{"author":{"_account_id":2035,"name":"Maru Newby","email":"marun@redhat.com","username":"maru"},"change_message_id":"79459202dc0981d965b77341851d8d83241b0d73","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        self.assertEqual(dev.namespace, \u0027ns\u0027)"},{"line_number":284,"context_line":"        self.assertEqual(dev.name, \u0027eth0\u0027)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def test_namespace_exists_is_root_helped_on_first_but_not_subsequent(self):"},{"line_number":287,"context_line":"        ip \u003d ip_lib.IPWrapper(\u0027sudo\u0027)"},{"line_number":288,"context_line":"        with mock.patch.object(ip.netns._parent, \u0027_execute\u0027,"},{"line_number":289,"context_line":"                               return_value\u003d\"ns\") as execute:"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_593f8a25","line":286,"updated":"2014-08-15 03:28:29.000000000","message":"DRY - these test additions look like they can be trivially parametized.  Please refactor.","commit_id":"ce02b8f5b3421ce283b1d85d9f8d94271a43a943"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"1dfc05369abc016bfe6d2f3d0d72f4ad325d7acd","unresolved":false,"context_lines":[{"line_number":283,"context_line":"        self.assertEqual(dev.namespace, \u0027ns\u0027)"},{"line_number":284,"context_line":"        self.assertEqual(dev.name, \u0027eth0\u0027)"},{"line_number":285,"context_line":""},{"line_number":286,"context_line":"    def test_namespace_exists_is_root_helped_on_first_but_not_subsequent(self):"},{"line_number":287,"context_line":"        ip \u003d ip_lib.IPWrapper(\u0027sudo\u0027)"},{"line_number":288,"context_line":"        with mock.patch.object(ip.netns._parent, \u0027_execute\u0027,"},{"line_number":289,"context_line":"                               return_value\u003d\"ns\") as execute:"}],"source_content_type":"text/x-python","patch_set":11,"id":"7ac7a964_2121b0fb","line":286,"in_reply_to":"7ac7a964_593f8a25","updated":"2014-08-15 07:14:26.000000000","message":"You vastly overestimate what is trivial for me. :-)","commit_id":"ce02b8f5b3421ce283b1d85d9f8d94271a43a943"}]}
