)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"84693cc278e9fa4746a1d377d10c770afb335215","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Distributed router can not add routes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Centralized router can add routes, but distributed router can not,"},{"line_number":10,"context_line":"the neutron router-update operation fails silently."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I517effcfc299c67c3413f7dc3352b97515ff69db"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1a4dcd0f_03d1f256","line":9,"updated":"2015-08-12 04:24:11.000000000","message":"Can we please elaborate the root cause for this issue ?","commit_id":"f7e72b89abb16ed5a2f5a4c9897d202e9de1bb45"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"9efaa60cc7e3a9c9343842c3041cbdca475d2c65","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Distributed router can not add routes"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Centralized router can add routes, but distributed router can not,"},{"line_number":10,"context_line":"the neutron router-update operation fails silently."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"Change-Id: I517effcfc299c67c3413f7dc3352b97515ff69db"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":9,"id":"1a4dcd0f_a6ccb035","line":9,"in_reply_to":"1a4dcd0f_03d1f256","updated":"2015-08-12 15:08:40.000000000","message":"The issue is the route needs to be added to the snat-* namespace on a compute node running DVR, as opposed to the qrouter-* namespace on a network node.  I can change the text.","commit_id":"f7e72b89abb16ed5a2f5a4c9897d202e9de1bb45"}],"neutron/agent/l3/agent.py":[{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"92d588f06ecea419c34947b1a4a7daba6497d895","unresolved":false,"context_lines":[{"line_number":1666,"context_line":"    def _update_routing_table(self, ri, operation, route):"},{"line_number":1667,"context_line":"        cmd \u003d [\u0027ip\u0027, \u0027route\u0027, operation, \u0027to\u0027, route[\u0027destination\u0027],"},{"line_number":1668,"context_line":"               \u0027via\u0027, route[\u0027nexthop\u0027]]"},{"line_number":1669,"context_line":"        if (ri.router[\u0027distributed\u0027] and"},{"line_number":1670,"context_line":"            self.conf.agent_mode \u003d\u003d \u0027dvr_snat\u0027 and"},{"line_number":1671,"context_line":"            self.get_gw_port_host(ri.router) \u003d\u003d self.host):"},{"line_number":1672,"context_line":"            ns_name \u003d self.get_snat_ns_name(ri.router[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_bc2ddbaa","line":1669,"updated":"2014-12-30 07:36:04.000000000","message":"How about use ri.router.get(\u0027distributed\u0027) instead of above ri.router[\u0027distributed\u0027].","commit_id":"35d04b2bed94cb0da1f899607d687997e93229e8"},{"author":{"_account_id":7249,"name":"Ann Taraday","email":"akamyshnikova@mirantis.com","username":"AKamyshnikova"},"change_message_id":"5cd7dea2ff32b4ffb2ef8bc4b936bc1c6777c489","unresolved":false,"context_lines":[{"line_number":1666,"context_line":"    def _update_routing_table(self, ri, operation, route):"},{"line_number":1667,"context_line":"        cmd \u003d [\u0027ip\u0027, \u0027route\u0027, operation, \u0027to\u0027, route[\u0027destination\u0027],"},{"line_number":1668,"context_line":"               \u0027via\u0027, route[\u0027nexthop\u0027]]"},{"line_number":1669,"context_line":"        if (ri.router[\u0027distributed\u0027] and"},{"line_number":1670,"context_line":"            self.conf.agent_mode \u003d\u003d \u0027dvr_snat\u0027 and"},{"line_number":1671,"context_line":"            self.get_gw_port_host(ri.router) \u003d\u003d self.host):"},{"line_number":1672,"context_line":"            ns_name \u003d self.get_snat_ns_name(ri.router[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":1,"id":"3a961159_0930709d","line":1669,"in_reply_to":"3a961159_bc2ddbaa","updated":"2014-12-30 09:13:25.000000000","message":"+1 this will avoid failing unittest","commit_id":"35d04b2bed94cb0da1f899607d687997e93229e8"}],"neutron/agent/l3/router_info.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"018ce14274ebdbb484693e8ac4b6fd9cc26550d2","unresolved":false,"context_lines":[{"line_number":118,"context_line":"            self.agent_conf.agent_mode \u003d\u003d \u0027dvr_snat\u0027 and"},{"line_number":119,"context_line":"            self.router.get(\u0027gw_port\u0027) \u003d\u003d self.ex_gw_port):"},{"line_number":120,"context_line":"            ns_name \u003d dvr_snat_ns.SnatNamespace.get_snat_ns_name("},{"line_number":121,"context_line":"                self._router[\u0027id\u0027])"},{"line_number":122,"context_line":"        else:"},{"line_number":123,"context_line":"            ns_name \u003d self.ns_name"},{"line_number":124,"context_line":"        ip_wrapper \u003d ip_lib.IPWrapper()"}],"source_content_type":"text/x-python","patch_set":6,"id":"1a4dcd0f_58188a75","line":121,"updated":"2015-08-11 02:00:40.000000000","message":"I don\u0027t think this is the right place to fix this, as this class doesn\u0027t have any other knowledge of DVR.  It seems dvr_edge_router.py is the correct place, but you\u0027ll need to do something like:\n\ndef _update_routing_table(self, operation, route, namespace):\n    [...]\n\ndef update_routing_table(self, operation, route, namespace\u003dNone):\n    if namespace is None:\n        namespace \u003d self.ns_name\n    self._update_routing_table(operation, route, namespace)\n\nAnd then over in dvr_edge_router.py:\n\ndef update_routing_table(self, operation, route, namespace\u003dNone):\n    ns_name \u003d dvr_snat_ns.SnatNamespace.get_snat_ns_name(self.router[\u0027id\u0027])\n    super(DvrEdgeRouter, self).update_routing_table(..., namespace\u003dns_name)","commit_id":"4bb7a83a275f651acdb8e710e35d67649cbc14cf"}],"neutron/tests/unit/agent/l3/test_agent.py":[{"author":{"_account_id":14605,"name":"vikram.choudhary","email":"vikschw@gmail.com","username":"vikram.choudhary"},"change_message_id":"677547bc7192b57ed46f386c9c9fa5994a1c2e19","unresolved":false,"context_lines":[{"line_number":1078,"context_line":"        ri.update_routing_table(\u0027replace\u0027, fake_route1)"},{"line_number":1079,"context_line":"        ri._update_routing_table.assert_called_once_with(\u0027replace\u0027,"},{"line_number":1080,"context_line":"                                                         fake_route1,"},{"line_number":1081,"context_line":"                                                         netns)"},{"line_number":1082,"context_line":""},{"line_number":1083,"context_line":"    def test_process_router_interface_added(self):"},{"line_number":1084,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1a4dcd0f_790bfe24","line":1081,"updated":"2015-08-17 07:50:31.000000000","message":"How about if the netns is None?","commit_id":"2bb48eb58ad28a629dd12c434b83680aa3f240a4"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ae87cb345ce7f810d048f58eabe93994395b621a","unresolved":false,"context_lines":[{"line_number":1078,"context_line":"        ri.update_routing_table(\u0027replace\u0027, fake_route1)"},{"line_number":1079,"context_line":"        ri._update_routing_table.assert_called_once_with(\u0027replace\u0027,"},{"line_number":1080,"context_line":"                                                         fake_route1,"},{"line_number":1081,"context_line":"                                                         netns)"},{"line_number":1082,"context_line":""},{"line_number":1083,"context_line":"    def test_process_router_interface_added(self):"},{"line_number":1084,"context_line":"        agent \u003d l3_agent.L3NATAgent(HOSTNAME, self.conf)"}],"source_content_type":"text/x-python","patch_set":10,"id":"fa1b9901_881f385a","line":1081,"in_reply_to":"1a4dcd0f_790bfe24","updated":"2015-08-20 19:47:22.000000000","message":"Can it be None?  use_namespaces is always True so the RouterInfo class will always initialize self.router_namespace, etc","commit_id":"2bb48eb58ad28a629dd12c434b83680aa3f240a4"}]}
