)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"d8ce06d53e7792a3d8a4cd0e63e64994b47f2ecc","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Brian Haley \u003cbrian.haley@hpe.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-12-03 22:58:25 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Correct return values for bridge.disable_ipv6()"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This fixes an issue where the lb agent did not plug the"},{"line_number":10,"context_line":"dhcp tap device into the bridge when having vlan networking"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7a740942_1eab0e8b","line":7,"updated":"2015-12-04 09:44:51.000000000","message":"Please adapt the commit message. You\u0027re not fixing disalbe_ipv6 now, but the _sysctl -w call to return values","commit_id":"5167ce59266a4919eec633f31d5dab1b76d1c2b3"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"acca4bd381e11f358a81a9d38ef541cf9b795555","unresolved":false,"context_lines":[{"line_number":4,"context_line":"Commit:     Brian Haley \u003cbrian.haley@hpe.com\u003e"},{"line_number":5,"context_line":"CommitDate: 2015-12-03 22:58:25 -0500"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Correct return values for bridge.disable_ipv6()"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"This fixes an issue where the lb agent did not plug the"},{"line_number":10,"context_line":"dhcp tap device into the bridge when having vlan networking"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7a740942_bbfe7336","line":7,"in_reply_to":"7a740942_1eab0e8b","updated":"2015-12-04 17:08:33.000000000","message":"Ok, will do.  Did this still fix the problem?  It would be bad if I broke it.","commit_id":"5167ce59266a4919eec633f31d5dab1b76d1c2b3"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"bd20c9dace9c9c383e0f79dea481f82268eb4330","unresolved":false,"context_lines":[{"line_number":9,"context_line":"This fixes an issue where the lb agent did not plug the"},{"line_number":10,"context_line":"dhcp tap device into the bridge when having vlan networking"},{"line_number":11,"context_line":"set up."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"Closes-Bug: #1520618"},{"line_number":14,"context_line":"Change-Id: I0d21fad3a676d1fdd30501ea6a295f1e9b207a3a"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":4,"id":"7a740942_9e761e3d","line":12,"updated":"2015-12-04 09:45:42.000000000","message":"You could add yourself as co-author","commit_id":"5167ce59266a4919eec633f31d5dab1b76d1c2b3"}],"neutron/agent/linux/bridge_lib.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"00a17f217b3443bb95098c97c2f5fe6a944ecf97","unresolved":false,"context_lines":[{"line_number":48,"context_line":""},{"line_number":49,"context_line":"    def _sysctl(self, cmd):"},{"line_number":50,"context_line":"        cmd \u003d [\u0027sysctl\u0027, \u0027-w\u0027] + cmd"},{"line_number":51,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper(self.namespace)"},{"line_number":52,"context_line":"        return ip_wrapper.netns.execute(cmd, run_as_root\u003dTrue)"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"    @classmethod"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_2bbeeeff","line":51,"updated":"2015-12-03 17:10:42.000000000","message":"I think you should add \u0027check_exit_code\u003dTrue\u0027 here and catch RuntimeError instead, then below code does not need to change.  You can then return 0 or 1 accordingly.  See delete_addr_and_conntrack_state() for an example.","commit_id":"c457cca7e75692129ed1adf554751cd68a7ec9a5"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"e9ba773e505ed5b42f8ec8ab3b605695a3281469","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            LOG.exception(_LE(\"Failed running %s\"), cmd)"},{"line_number":61,"context_line":"            return False"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        return True"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @classmethod"},{"line_number":66,"context_line":"    def addbr(cls, name, namespace\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_f4184577","line":63,"updated":"2015-12-07 15:25:16.000000000","message":"The lb code does this\n              if bridge_device.disable_ipv6():\n                return\nIt is expecting True on a failure, False on Success.\n\nSo either change the lb statement to if not ... or exchange True to False in this method (it\u0027s just the other way round)","commit_id":"e30542adf28c8021f8f8f8c0aa8c58d79cd8f768"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"ea6850a1de9fa769fe995badf16b57255339cdff","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            LOG.exception(_LE(\"Failed running %s\"), cmd)"},{"line_number":61,"context_line":"            return False"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        return True"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @classmethod"},{"line_number":66,"context_line":"    def addbr(cls, name, namespace\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_2adbc4ed","line":63,"in_reply_to":"7a740942_f4184577","updated":"2015-12-07 16:01:11.000000000","message":"Still thinking about it. Naturally I would say, any method returns True when a call has been successful. That\u0027s what you have implemented.\n\nHowever the linuxbridge expects exactly the opposite. The background might be, that calls like set_stp return a return value of 0 (False). While something \u003d! 0 (True) indicates an error. \n\nI don\u0027t think that returning False on successful execution makes sense. I would either\n\n- return nothing on successful execution and something (0! True) on failure\n- change all other methods to return True for success and False for failure as well + adapt lb class + test\n- return the exception on failure and nothing on success\n\n..just from the top of my head...","commit_id":"e30542adf28c8021f8f8f8c0aa8c58d79cd8f768"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"0e2214aadab934677ec0160f2875628b93cd6213","unresolved":false,"context_lines":[{"line_number":60,"context_line":"            LOG.exception(_LE(\"Failed running %s\"), cmd)"},{"line_number":61,"context_line":"            return False"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"        return True"},{"line_number":64,"context_line":""},{"line_number":65,"context_line":"    @classmethod"},{"line_number":66,"context_line":"    def addbr(cls, name, namespace\u003dNone):"}],"source_content_type":"text/x-python","patch_set":5,"id":"7a740942_0afb687a","line":63,"in_reply_to":"7a740942_f4184577","updated":"2015-12-07 16:05:19.000000000","message":"Yes, I guess this should just return 0 on success, 1 on failure, similar to what the command itself would do.","commit_id":"e30542adf28c8021f8f8f8c0aa8c58d79cd8f768"},{"author":{"_account_id":4656,"name":"Sean M. Collins","email":"sean@coreitpro.com","username":"scollins"},"change_message_id":"2e1915c807396438838441df131a35386808f97b","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        cmd \u003d [\u0027sysctl\u0027, \u0027-w\u0027] + cmd"},{"line_number":55,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper(self.namespace)"},{"line_number":56,"context_line":"        try:"},{"line_number":57,"context_line":"            ip_wrapper.netns.execute(cmd, run_as_root\u003dTrue,"},{"line_number":58,"context_line":"                                     check_exit_code\u003dTrue)"},{"line_number":59,"context_line":"        except RuntimeError:"},{"line_number":60,"context_line":"            LOG.exception(_LE(\"Failed running %s\"), cmd)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_fcb98b7a","line":57,"updated":"2015-12-09 15:47:43.000000000","message":"Sorry - I\u0027m a little fuzzy on what check_exit_code setting to True does, but it appears that you don\u0027t actually save the retval of the call to execute - shouldn\u0027t we at least save the retval and return it to the caller?","commit_id":"411f520e9500ca426190ec490265ae4481e71127"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"c281806edfa52b32e0c261141fee632889c92c63","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        cmd \u003d [\u0027sysctl\u0027, \u0027-w\u0027] + cmd"},{"line_number":55,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper(self.namespace)"},{"line_number":56,"context_line":"        try:"},{"line_number":57,"context_line":"            ip_wrapper.netns.execute(cmd, run_as_root\u003dTrue,"},{"line_number":58,"context_line":"                                     check_exit_code\u003dTrue)"},{"line_number":59,"context_line":"        except RuntimeError:"},{"line_number":60,"context_line":"            LOG.exception(_LE(\"Failed running %s\"), cmd)"}],"source_content_type":"text/x-python","patch_set":7,"id":"5a710552_80257bc3","line":57,"in_reply_to":"7a740942_33732350","updated":"2015-12-14 22:11:43.000000000","message":"Thanks brian this is one thing that I was seeing in my patch, where the ping command succeeds but the execute always returns an stderr.\n\nThis would make my patch more clean.","commit_id":"411f520e9500ca426190ec490265ae4481e71127"},{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"1f611721600127f880fbcb0c7d754808a58d9410","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        cmd \u003d [\u0027sysctl\u0027, \u0027-w\u0027] + cmd"},{"line_number":55,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper(self.namespace)"},{"line_number":56,"context_line":"        try:"},{"line_number":57,"context_line":"            ip_wrapper.netns.execute(cmd, run_as_root\u003dTrue,"},{"line_number":58,"context_line":"                                     check_exit_code\u003dTrue)"},{"line_number":59,"context_line":"        except RuntimeError:"},{"line_number":60,"context_line":"            LOG.exception(_LE(\"Failed running %s\"), cmd)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_33732350","line":57,"in_reply_to":"7a740942_e2248061","updated":"2015-12-12 07:07:25.000000000","message":"Nicely explained Brain!","commit_id":"411f520e9500ca426190ec490265ae4481e71127"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"4fa1b96d2820d267848fe4eb0b01b715ee64137b","unresolved":false,"context_lines":[{"line_number":54,"context_line":"        cmd \u003d [\u0027sysctl\u0027, \u0027-w\u0027] + cmd"},{"line_number":55,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper(self.namespace)"},{"line_number":56,"context_line":"        try:"},{"line_number":57,"context_line":"            ip_wrapper.netns.execute(cmd, run_as_root\u003dTrue,"},{"line_number":58,"context_line":"                                     check_exit_code\u003dTrue)"},{"line_number":59,"context_line":"        except RuntimeError:"},{"line_number":60,"context_line":"            LOG.exception(_LE(\"Failed running %s\"), cmd)"}],"source_content_type":"text/x-python","patch_set":7,"id":"7a740942_e2248061","line":57,"in_reply_to":"7a740942_fcb98b7a","updated":"2015-12-09 16:20:39.000000000","message":"The problem is that execute() doesn\u0027t return the exit status of the command it runs, it returns stdout and stderr.  Setting check_exit_code\u003dTrue will cause it to raise a RuntimeError if the exit status of the command is non-zero, which in sysctl\u0027s case is an error.  So we\u0027re normalizing that into zero (success) and one (failure) here to mimic what \"echo $?\" would be.\n\nAnd execute() will have dumped a message to the logs with the actual output on failure, so it\u0027s not lost, and we don\u0027t need to print it here.\n\nThis is all because sysctl is too verbose and prints the value you just set on success, unlike most other utilities that print nothing.\n\nClear as mud now? :)","commit_id":"411f520e9500ca426190ec490265ae4481e71127"}],"neutron/tests/common/net_helpers.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"00a17f217b3443bb95098c97c2f5fe6a944ecf97","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        for port in self.ports:"},{"line_number":421,"context_line":"            ip_wrapper \u003d ip_lib.IPWrapper(port.namespace)"},{"line_number":422,"context_line":"            if (ip_wrapper.netns.exists(port.namespace) or"},{"line_number":423,"context_line":"                port.namespace is None):"},{"line_number":424,"context_line":"                try:"},{"line_number":425,"context_line":"                    ip_wrapper.del_veth(port.name)"},{"line_number":426,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_6b4b962c","line":423,"updated":"2015-12-03 17:10:42.000000000","message":"This doesn\u0027t seem related to disable_ipv6.","commit_id":"c457cca7e75692129ed1adf554751cd68a7ec9a5"},{"author":{"_account_id":11307,"name":"Andreas Scheuring","email":"andreas.scheuring@de.ibm.com","username":"uniqueName"},"change_message_id":"64e1094f0186314e73f2025e622f6820bda16622","unresolved":false,"context_lines":[{"line_number":420,"context_line":"        for port in self.ports:"},{"line_number":421,"context_line":"            ip_wrapper \u003d ip_lib.IPWrapper(port.namespace)"},{"line_number":422,"context_line":"            if (ip_wrapper.netns.exists(port.namespace) or"},{"line_number":423,"context_line":"                port.namespace is None):"},{"line_number":424,"context_line":"                try:"},{"line_number":425,"context_line":"                    ip_wrapper.del_veth(port.name)"},{"line_number":426,"context_line":"                    break"}],"source_content_type":"text/x-python","patch_set":1,"id":"7a740942_cf4b962a","line":423,"in_reply_to":"7a740942_6b4b962c","updated":"2015-12-04 07:39:04.000000000","message":"yeah I know, but this issue was flooding my whole system with Veth pairs. Never mind, I\u0027ll push up a separate patchset for this... https://review.openstack.org/253360","commit_id":"c457cca7e75692129ed1adf554751cd68a7ec9a5"}],"neutron/tests/functional/agent/linux/test_bridge_lib.py":[{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"44e5962c45917704824cf889f9c8d7f1754b66a2","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            self.assertEqual(\"0\\n\", sysfs_disable_ipv6)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"            self.assertTrue(self.bridge.disable_ipv6())"},{"line_number":73,"context_line":"            sysfs_disable_ipv6 \u003d sysfs_disable_ipv6_file.read()"},{"line_number":74,"context_line":"            self.assertEqual(\"1\\n\", sysfs_disable_ipv6)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_12f6b08f","line":73,"updated":"2015-12-04 01:26:55.000000000","message":"We must reopen file. How about the following?\n\n sysfs_disable_ipv6 \u003d open(sysfs_path).read()\n self.assertEqual(\"0\\n\", sysfs_disable_ipv6)\n\n self.assertTrue(self.bridge.disable_ipv6())\n sysfs_disable_ipv6 \u003d open(sysfs_path).read()\n self.assertEqual(\"1\\n\", sysfs_disable_ipv6)","commit_id":"3ed0570fcb256b7e5963e702c6e45e4880119173"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"99026be7e267eab52fbdf63ef86fb15869926b9a","unresolved":false,"context_lines":[{"line_number":70,"context_line":"            self.assertEqual(\"0\\n\", sysfs_disable_ipv6)"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"            self.assertTrue(self.bridge.disable_ipv6())"},{"line_number":73,"context_line":"            sysfs_disable_ipv6 \u003d sysfs_disable_ipv6_file.read()"},{"line_number":74,"context_line":"            self.assertEqual(\"1\\n\", sysfs_disable_ipv6)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7a740942_81600837","line":73,"in_reply_to":"7a740942_12f6b08f","updated":"2015-12-04 03:58:39.000000000","message":"I\u0027ll change it to be separate calls, thanks.","commit_id":"3ed0570fcb256b7e5963e702c6e45e4880119173"}]}
