)]}'
{"neutron/agent/l3/agent.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"242cf1cc62fd238977a67d7eac404d6876b90a41","unresolved":false,"context_lines":[{"line_number":384,"context_line":"        self.plugin_rpc.update_floatingip_statuses("},{"line_number":385,"context_line":"            self.context, ri.router_id, fip_statuses)"},{"line_number":386,"context_line":""},{"line_number":387,"context_line":"    def router_deleted(self, context, **kwargs):"},{"line_number":388,"context_line":"        \"\"\"Deal with router deletion RPC message.\"\"\""},{"line_number":389,"context_line":"        router_id \u003d kwargs.get(\u0027router_id\u0027)"},{"line_number":390,"context_line":"        LOG.debug(\u0027Got router deleted notification for %s\u0027, router_id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a2ca52d_564c7bc7","line":387,"updated":"2015-10-16 16:36:08.000000000","message":"This could stay the same if you wanted to reduce the amount of change in this patch set (mostly changes to the callers).\n\nSince it is a required parameter, it probably should be mentioned explicitly.  It isn\u0027t necessary to switch to **kwargs just to pass this as a keyword argument.\n\nIn python, any parameter can be called as a positional or a keyword argument.  It is just that any you call positionally need to be listed (by the calling code) in order first starting with the first argument.  Then, keyword arguments can be included after that.","commit_id":"8302d477a290f72c6c45b81200d4a7cfa7a4acfd"}],"neutron/agent/l3/dvr.py":[{"author":{"_account_id":14957,"name":"Brad Behle","email":"behle@us.ibm.com","username":"behle"},"change_message_id":"3475fa3b284f9882389091398fa5a8453ac9fd93","unresolved":false,"context_lines":[{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def fip_delete_ext_net(self, context, router_id):"},{"line_number":82,"context_line":"        \"\"\"Delete fip namespace after external network removed.\"\"\""},{"line_number":83,"context_line":"        ext_net_id \u003d router_id"},{"line_number":84,"context_line":"        fip_ns \u003d self.get_fip_ns(ext_net_id)"},{"line_number":85,"context_line":"        if fip_ns and fip_ns.agent_gateway_port and not fip_ns.destroyed:"},{"line_number":86,"context_line":"            fip_ns.cleanup_fip_namespace()"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a1a9d01_3f76d03e","line":83,"updated":"2015-10-04 19:37:38.000000000","message":"No need to create a new label for router_id.  Either change the parameter name from router_id to ext_net_id or just pass router_id into get_fip_ns()","commit_id":"cee57ec9e5d2f339ee9f3523bf2137060f8c01ca"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"9439a0b2768e27e28aa21dd40e8fbf74b6b5a45b","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        # NOTE: External network_id is passed as router_id, so use it"},{"line_number":84,"context_line":"        # to fetch the right fipnamespace for the external network."},{"line_number":85,"context_line":"        fip_ns \u003d self.get_fip_ns(router_id)"},{"line_number":86,"context_line":"        if fip_ns and fip_ns.agent_gateway_port and not fip_ns.destroyed:"},{"line_number":87,"context_line":"            fip_ns.delete()"},{"line_number":88,"context_line":"            fip_ns \u003d None"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a2ca52d_67ae2c30","line":86,"updated":"2015-10-14 06:05:44.000000000","message":"Will get_fip_ns return None? If not, no need to check fip_ns here.","commit_id":"e19bcfda017ac886cf93d16f9e4a6dff74e88d37"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"34780026d2d04590a7df8ccc8ab87974c16b62b5","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        # NOTE: External network_id is passed as router_id, so use it"},{"line_number":84,"context_line":"        # to fetch the right fipnamespace for the external network."},{"line_number":85,"context_line":"        fip_ns \u003d self.get_fip_ns(router_id)"},{"line_number":86,"context_line":"        if fip_ns and fip_ns.agent_gateway_port and not fip_ns.destroyed:"},{"line_number":87,"context_line":"            fip_ns.delete()"},{"line_number":88,"context_line":"            fip_ns \u003d None"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a2ca52d_f9ecc1f4","line":86,"in_reply_to":"5a2ca52d_67ae2c30","updated":"2015-10-15 22:19:01.000000000","message":"It doesn\u0027t look like it can return None based on code in dvr_local_router.py:process()","commit_id":"e19bcfda017ac886cf93d16f9e4a6dff74e88d37"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"bc6a24d1e15e45ba719916a95defbb8abd8a9662","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        # NOTE: External network_id is passed as router_id, so use it"},{"line_number":84,"context_line":"        # to fetch the right fipnamespace for the external network."},{"line_number":85,"context_line":"        fip_ns \u003d self.get_fip_ns(router_id)"},{"line_number":86,"context_line":"        if fip_ns and fip_ns.agent_gateway_port and not fip_ns.destroyed:"},{"line_number":87,"context_line":"            fip_ns.delete()"},{"line_number":88,"context_line":"            fip_ns \u003d None"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a2ca52d_3c68e7b8","line":86,"in_reply_to":"5a2ca52d_67ae2c30","updated":"2015-10-15 22:07:52.000000000","message":"It won\u0027t.","commit_id":"e19bcfda017ac886cf93d16f9e4a6dff74e88d37"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"9e7c793e2e0b6611d4b113db0609d958e7a904c2","unresolved":false,"context_lines":[{"line_number":83,"context_line":"        # NOTE: External network_id is passed as router_id, so use it"},{"line_number":84,"context_line":"        # to fetch the right fipnamespace for the external network."},{"line_number":85,"context_line":"        fip_ns \u003d self.get_fip_ns(router_id)"},{"line_number":86,"context_line":"        if fip_ns and fip_ns.agent_gateway_port and not fip_ns.destroyed:"},{"line_number":87,"context_line":"            fip_ns.delete()"},{"line_number":88,"context_line":"            fip_ns \u003d None"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a2ca52d_82f0b268","line":86,"in_reply_to":"5a2ca52d_f9ecc1f4","updated":"2015-10-15 23:23:08.000000000","message":"Ok, I will remove the check here if \"fip_ns\".","commit_id":"e19bcfda017ac886cf93d16f9e4a6dff74e88d37"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"bc6a24d1e15e45ba719916a95defbb8abd8a9662","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        fip_ns \u003d self.get_fip_ns(router_id)"},{"line_number":86,"context_line":"        if fip_ns and fip_ns.agent_gateway_port and not fip_ns.destroyed:"},{"line_number":87,"context_line":"            fip_ns.delete()"},{"line_number":88,"context_line":"            fip_ns \u003d None"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a2ca52d_190f3d38","line":88,"updated":"2015-10-15 22:07:52.000000000","message":"nit:  Setting this local variable to None has no value since it will go out of scope anyway.  I don\u0027t think you need to do anything here.  The weak ref will break and the object will go away after this method finishes.","commit_id":"e19bcfda017ac886cf93d16f9e4a6dff74e88d37"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"9e7c793e2e0b6611d4b113db0609d958e7a904c2","unresolved":false,"context_lines":[{"line_number":85,"context_line":"        fip_ns \u003d self.get_fip_ns(router_id)"},{"line_number":86,"context_line":"        if fip_ns and fip_ns.agent_gateway_port and not fip_ns.destroyed:"},{"line_number":87,"context_line":"            fip_ns.delete()"},{"line_number":88,"context_line":"            fip_ns \u003d None"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a2ca52d_a2ce0e2c","line":88,"in_reply_to":"5a2ca52d_190f3d38","updated":"2015-10-15 23:23:08.000000000","message":"Ok will clean it up.","commit_id":"e19bcfda017ac886cf93d16f9e4a6dff74e88d37"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"242cf1cc62fd238977a67d7eac404d6876b90a41","unresolved":false,"context_lines":[{"line_number":78,"context_line":"        subnet_id \u003d arp_table[\u0027subnet_id\u0027]"},{"line_number":79,"context_line":"        ri._update_arp_entry(ip, mac, subnet_id, \u0027delete\u0027)"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"    def fipnamespace_delete_on_ext_net(self, context, **kwargs):"},{"line_number":82,"context_line":"        \"\"\"Delete fip namespace after external network removed.\"\"\""},{"line_number":83,"context_line":"        external_net_id \u003d kwargs.get(\u0027ext_net_id\u0027)"},{"line_number":84,"context_line":"        fip_ns \u003d self.get_fip_ns(external_net_id)"}],"source_content_type":"text/x-python","patch_set":25,"id":"5a2ca52d_5691dbef","line":81,"updated":"2015-10-16 16:36:08.000000000","message":"This could just be this:\n\n  def fipnamespace_delete_on_ext_net(self, context, external_net_id):\n      fip_ns \u003d self.get_fip_ns(external_net_id)\n      ...","commit_id":"8302d477a290f72c6c45b81200d4a7cfa7a4acfd"}],"neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"bc6a24d1e15e45ba719916a95defbb8abd8a9662","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            cctxt \u003d self.client.prepare(fanout\u003dTrue)"},{"line_number":121,"context_line":"            cctxt.cast(context, method, routers\u003drouter_ids)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _notification_fanout(self, context, method,"},{"line_number":124,"context_line":"                             router_id, ext_net_id\u003dNone):"},{"line_number":125,"context_line":"        \"\"\"Fanout the information to all L3 agents."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"5a2ca52d_bc65d7b5","line":123,"updated":"2015-10-15 22:07:52.000000000","message":"A method with two mutually exclusive arguments is an antipattern.  I think the current method should be made more generic by using kwargs to allow either router_id or ext_net_id to be passed.  Or, at least router_id should be given a default value so that you aren\u0027t required to pass it.\n\n  _notification_fanout(self, context, method, **kwargs):\n      cctxt.cast(context, method, **kwargs)\n\nI think Oleg may have a patch out that does something like this.  Right, found it [1].\n\n [1] https://review.openstack.org/#/c/231031/5/neutron/api/rpc/agentnotifiers/l3_rpc_agent_api.py","commit_id":"e19bcfda017ac886cf93d16f9e4a6dff74e88d37"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"9e7c793e2e0b6611d4b113db0609d958e7a904c2","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            cctxt \u003d self.client.prepare(fanout\u003dTrue)"},{"line_number":121,"context_line":"            cctxt.cast(context, method, routers\u003drouter_ids)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _notification_fanout(self, context, method,"},{"line_number":124,"context_line":"                             router_id, ext_net_id\u003dNone):"},{"line_number":125,"context_line":"        \"\"\"Fanout the information to all L3 agents."},{"line_number":126,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"5a2ca52d_829752eb","line":123,"in_reply_to":"5a2ca52d_bc65d7b5","updated":"2015-10-15 23:23:08.000000000","message":"ok will fix it.","commit_id":"e19bcfda017ac886cf93d16f9e4a6dff74e88d37"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"bc6a24d1e15e45ba719916a95defbb8abd8a9662","unresolved":false,"context_lines":[{"line_number":147,"context_line":"        if not ext_net_id:"},{"line_number":148,"context_line":"            cctxt.cast(context, method, router_id\u003drouter_id)"},{"line_number":149,"context_line":"        else:"},{"line_number":150,"context_line":"            cctxt.cast(context, method, router_id\u003dext_net_id)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def agent_updated(self, context, admin_state_up, host):"},{"line_number":153,"context_line":"        self._notification_host(context, \u0027agent_updated\u0027,"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a2ca52d_5c0da3e6","line":150,"updated":"2015-10-15 22:07:52.000000000","message":"Should this really be router_id\u003dext_net_id?  Even if it is correct, it is probably correct for the wrong reason.","commit_id":"e19bcfda017ac886cf93d16f9e4a6dff74e88d37"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"022145c9b5f537fcb211e8f3c756a7a20bad5e50","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            cctxt.cast(context, method, router_id\u003drouter_id)"},{"line_number":149,"context_line":"        else:"},{"line_number":150,"context_line":"            cctxt.cast(context, method, router_id\u003dext_net_id)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def agent_updated(self, context, admin_state_up, host):"},{"line_number":153,"context_line":"        self._notification_host(context, \u0027agent_updated\u0027,"},{"line_number":154,"context_line":"                                {\u0027admin_state_up\u0027: admin_state_up},"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a2ca52d_a8ace835","line":151,"updated":"2015-10-15 00:10:30.000000000","message":"You could collapse to \nif not ext_net_id: \n      cast_id \u003d router_id\n      ....\nelse:\n      cast_id \u003d ext_net_id\n      ...\n\ncctx \u003d self.client.prepare(fanout\u003dTrue)\n\ncctx.cast(context, method, router_id\u003dcast_id)","commit_id":"e19bcfda017ac886cf93d16f9e4a6dff74e88d37"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"9e7c793e2e0b6611d4b113db0609d958e7a904c2","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            cctxt.cast(context, method, router_id\u003drouter_id)"},{"line_number":149,"context_line":"        else:"},{"line_number":150,"context_line":"            cctxt.cast(context, method, router_id\u003dext_net_id)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def agent_updated(self, context, admin_state_up, host):"},{"line_number":153,"context_line":"        self._notification_host(context, \u0027agent_updated\u0027,"},{"line_number":154,"context_line":"                                {\u0027admin_state_up\u0027: admin_state_up},"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a2ca52d_a2c36eec","line":151,"in_reply_to":"5a2ca52d_39a3199f","updated":"2015-10-15 23:23:08.000000000","message":"will fix it.","commit_id":"e19bcfda017ac886cf93d16f9e4a6dff74e88d37"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"34780026d2d04590a7df8ccc8ab87974c16b62b5","unresolved":false,"context_lines":[{"line_number":148,"context_line":"            cctxt.cast(context, method, router_id\u003drouter_id)"},{"line_number":149,"context_line":"        else:"},{"line_number":150,"context_line":"            cctxt.cast(context, method, router_id\u003dext_net_id)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    def agent_updated(self, context, admin_state_up, host):"},{"line_number":153,"context_line":"        self._notification_host(context, \u0027agent_updated\u0027,"},{"line_number":154,"context_line":"                                {\u0027admin_state_up\u0027: admin_state_up},"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a2ca52d_39a3199f","line":151,"in_reply_to":"5a2ca52d_a8ace835","updated":"2015-10-15 22:19:01.000000000","message":"To me it doesn\u0027t seem right to overload router_id like this, why can\u0027t you pass it as \u0027ext_net_id\u003dext_net_id\u0027.  It\u0027s almost like the new method would be best since you\u0027re not saving any lines of code here with the if\u0027s.","commit_id":"e19bcfda017ac886cf93d16f9e4a6dff74e88d37"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"bc6a24d1e15e45ba719916a95defbb8abd8a9662","unresolved":false,"context_lines":[{"line_number":175,"context_line":"        self, context, ext_net_id):"},{"line_number":176,"context_line":"        self._notification_fanout("},{"line_number":177,"context_line":"            context, \u0027fipnamespace_delete_on_ext_net\u0027,"},{"line_number":178,"context_line":"            None, ext_net_id\u003dext_net_id)"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"    def router_removed_from_agent(self, context, router_id, host):"},{"line_number":181,"context_line":"        self._notification_host(context, \u0027router_removed_from_agent\u0027,"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a2ca52d_5ca9238f","line":178,"updated":"2015-10-15 22:07:52.000000000","message":"My comment on L123 would eliminate the need to pass None here as a useless router_id argument.","commit_id":"e19bcfda017ac886cf93d16f9e4a6dff74e88d37"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"cb63e266276a77d3e2260a53a1940cc31604f87c","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            cctxt \u003d self.client.prepare(fanout\u003dTrue)"},{"line_number":121,"context_line":"            cctxt.cast(context, method, routers\u003drouter_ids)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _notification_fanout(self, context, method, **kwargs):"},{"line_number":124,"context_line":"        \"\"\"Fanout the information to all L3 agents."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        This function will fanout the router_id or ext_net_id"}],"source_content_type":"text/x-python","patch_set":26,"id":"3a29b11f_51008534","line":123,"updated":"2015-10-19 16:55:12.000000000","message":"Oops!  Actually, I meant to leave router_id here as an explicit argument to avoid needing to change other places.  It makes it a little bit asymmetrical but I think it is okay.\n\nThere is another place where _notification_fanout is defined with router_id in the fourth positional argument.  I think it would be better to preserve that here.","commit_id":"a2d073aa531adc0cd0c9b618bd442704ffd0ed57"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"0dc33d643b5b5dcfffcfb85ea4e5a1bf4c081bf4","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                                host)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def router_deleted(self, context, router_id):"},{"line_number":152,"context_line":"        self._notification_fanout(context, \u0027router_deleted\u0027, router_id)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def routers_updated(self, context, router_ids, operation\u003dNone, data\u003dNone,"},{"line_number":155,"context_line":"                        shuffle_agents\u003dFalse, schedule_routers\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":26,"id":"5a2ca52d_c52f5d3d","line":152,"updated":"2015-10-17 02:40:01.000000000","message":"You should specify router_id\u003drouter_id here.","commit_id":"a2d073aa531adc0cd0c9b618bd442704ffd0ed57"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"ff1597202af7a63b16adce43fdc21f3491d38224","unresolved":false,"context_lines":[{"line_number":149,"context_line":"                                host)"},{"line_number":150,"context_line":""},{"line_number":151,"context_line":"    def router_deleted(self, context, router_id):"},{"line_number":152,"context_line":"        self._notification_fanout(context, \u0027router_deleted\u0027, router_id)"},{"line_number":153,"context_line":""},{"line_number":154,"context_line":"    def routers_updated(self, context, router_ids, operation\u003dNone, data\u003dNone,"},{"line_number":155,"context_line":"                        shuffle_agents\u003dFalse, schedule_routers\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":26,"id":"3a29b11f_c474d89d","line":152,"in_reply_to":"5a2ca52d_c52f5d3d","updated":"2015-10-19 16:01:31.000000000","message":"carl can you comment on this.","commit_id":"a2d073aa531adc0cd0c9b618bd442704ffd0ed57"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"acf85c25d93c99aa84d6b2c2d2d230e182b5d21d","unresolved":false,"context_lines":[{"line_number":140,"context_line":"                       \u0027method\u0027: method,"},{"line_number":141,"context_line":"                       \u0027ext_net_id\u0027: ext_net_id})"},{"line_number":142,"context_line":"        cctxt \u003d self.client.prepare(fanout\u003dTrue)"},{"line_number":143,"context_line":"        cctxt.cast(context, method, **kwargs)"},{"line_number":144,"context_line":""},{"line_number":145,"context_line":"    def agent_updated(self, context, admin_state_up, host):"},{"line_number":146,"context_line":"        self._notification_host(context, \u0027agent_updated\u0027, host,"}],"source_content_type":"text/x-python","patch_set":28,"id":"3a29b11f_8c19e98a","line":143,"updated":"2015-10-20 17:57:40.000000000","message":"This doesn\u0027t pass router_id here because it is still explicit.  Need to add it to kwargs for this to work correctly.","commit_id":"0dec0375fdb3c509d447181ce4dc4b0cdbeeb888"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"c1d8bd7f8afbdd0373352d2cc37758bae0d42ffc","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            cctxt \u003d self.client.prepare(fanout\u003dTrue)"},{"line_number":121,"context_line":"            cctxt.cast(context, method, routers\u003drouter_ids)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _notification_fanout(self, context, method, router_id\u003dNone, **kwargs):"},{"line_number":124,"context_line":"        \"\"\"Fanout the information to all L3 agents."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        This function will fanout the router_id or ext_net_id"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a29b11f_ce9a646e","line":123,"updated":"2015-10-21 04:24:58.000000000","message":"if kwargs only contains ext_net_id, maybe Carl\u0027s comment on PS 25 dvr.py also make sense here.","commit_id":"9cafcccf6ba7f65850bc324cf0f89c4c786bb350"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"e7080f3160429984a4caf12e32c8cc3a57902645","unresolved":false,"context_lines":[{"line_number":120,"context_line":"            cctxt \u003d self.client.prepare(fanout\u003dTrue)"},{"line_number":121,"context_line":"            cctxt.cast(context, method, routers\u003drouter_ids)"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"    def _notification_fanout(self, context, method, router_id\u003dNone, **kwargs):"},{"line_number":124,"context_line":"        \"\"\"Fanout the information to all L3 agents."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"        This function will fanout the router_id or ext_net_id"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a29b11f_c8647823","line":123,"in_reply_to":"3a29b11f_ce9a646e","updated":"2015-10-21 16:13:12.000000000","message":"Yes this was based on carl\u0027s input.","commit_id":"9cafcccf6ba7f65850bc324cf0f89c4c786bb350"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"c1d8bd7f8afbdd0373352d2cc37758bae0d42ffc","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        This function will fanout the router_id or ext_net_id"},{"line_number":127,"context_line":"        to the L3 Agents."},{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":"        ext_net_id \u003d kwargs.get(\u0027external_net_id\u0027)"},{"line_number":130,"context_line":"        if router_id:"},{"line_number":131,"context_line":"            kwargs[\u0027router_id\u0027] \u003d router_id"},{"line_number":132,"context_line":"            LOG.debug(\u0027Fanout notify agent at %(topic)s the message \u0027"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a29b11f_8e8f8c29","line":129,"updated":"2015-10-21 04:24:58.000000000","message":"From L171, I think it should be kwargs.get(\u0027ext_net_id\u0027) here.","commit_id":"9cafcccf6ba7f65850bc324cf0f89c4c786bb350"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"e7080f3160429984a4caf12e32c8cc3a57902645","unresolved":false,"context_lines":[{"line_number":126,"context_line":"        This function will fanout the router_id or ext_net_id"},{"line_number":127,"context_line":"        to the L3 Agents."},{"line_number":128,"context_line":"        \"\"\""},{"line_number":129,"context_line":"        ext_net_id \u003d kwargs.get(\u0027external_net_id\u0027)"},{"line_number":130,"context_line":"        if router_id:"},{"line_number":131,"context_line":"            kwargs[\u0027router_id\u0027] \u003d router_id"},{"line_number":132,"context_line":"            LOG.debug(\u0027Fanout notify agent at %(topic)s the message \u0027"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a29b11f_056019ce","line":129,"in_reply_to":"3a29b11f_8e8f8c29","updated":"2015-10-21 16:13:12.000000000","message":"good catch, will fix it.","commit_id":"9cafcccf6ba7f65850bc324cf0f89c4c786bb350"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"b593b5b8cbb496923b41af2bb4a59539cabcf121","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        ext_net_id \u003d kwargs.get(\u0027ext_net_id\u0027)"},{"line_number":130,"context_line":"        if router_id:"},{"line_number":131,"context_line":"            kwargs[\u0027router_id\u0027] \u003d router_id"},{"line_number":132,"context_line":"            LOG.debug(\u0027Fanout notify agent at %(topic)s the message \u0027"},{"line_number":133,"context_line":"                      \u0027%(method)s on router %(router_id)s\u0027,"},{"line_number":134,"context_line":"                      {\u0027topic\u0027: topics.L3_AGENT,"},{"line_number":135,"context_line":"                       \u0027method\u0027: method,"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a29b11f_b6984479","line":132,"updated":"2015-10-22 19:17:46.000000000","message":"I think maybe these log messages could be combined in to one more general message.  What do people think?\n\nThe only differences between the two log messages are \"router %(router_id)s\" and \"external_network %(ext_net_id)s\"","commit_id":"f85f8298c54a1c7cc3ee475a60ec60cad5bc9535"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"a75d18eba014f26291583ef9d18685cf74a18c46","unresolved":false,"context_lines":[{"line_number":129,"context_line":"        ext_net_id \u003d kwargs.get(\u0027ext_net_id\u0027)"},{"line_number":130,"context_line":"        if router_id:"},{"line_number":131,"context_line":"            kwargs[\u0027router_id\u0027] \u003d router_id"},{"line_number":132,"context_line":"            LOG.debug(\u0027Fanout notify agent at %(topic)s the message \u0027"},{"line_number":133,"context_line":"                      \u0027%(method)s on router %(router_id)s\u0027,"},{"line_number":134,"context_line":"                      {\u0027topic\u0027: topics.L3_AGENT,"},{"line_number":135,"context_line":"                       \u0027method\u0027: method,"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a29b11f_9febdbdb","line":132,"in_reply_to":"3a29b11f_b6984479","updated":"2015-10-22 19:57:14.000000000","message":"They both are exclusive to each other, so I think we can leave it as such.\nPlease let me know your thoughts.","commit_id":"f85f8298c54a1c7cc3ee475a60ec60cad5bc9535"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"b593b5b8cbb496923b41af2bb4a59539cabcf121","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                                     operation, arp_table)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def delete_fipnamespace_for_ext_net("},{"line_number":168,"context_line":"        self, context, ext_net_id):"},{"line_number":169,"context_line":"        self._notification_fanout("},{"line_number":170,"context_line":"            context, \u0027fipnamespace_delete_on_ext_net\u0027,"},{"line_number":171,"context_line":"            ext_net_id\u003dext_net_id)"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a29b11f_f6e55cdb","line":168,"updated":"2015-10-22 19:17:46.000000000","message":"nit:  Looks like the line break is not necessary.","commit_id":"f85f8298c54a1c7cc3ee475a60ec60cad5bc9535"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"a75d18eba014f26291583ef9d18685cf74a18c46","unresolved":false,"context_lines":[{"line_number":165,"context_line":"                                     operation, arp_table)"},{"line_number":166,"context_line":""},{"line_number":167,"context_line":"    def delete_fipnamespace_for_ext_net("},{"line_number":168,"context_line":"        self, context, ext_net_id):"},{"line_number":169,"context_line":"        self._notification_fanout("},{"line_number":170,"context_line":"            context, \u0027fipnamespace_delete_on_ext_net\u0027,"},{"line_number":171,"context_line":"            ext_net_id\u003dext_net_id)"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a29b11f_5fd9c355","line":168,"in_reply_to":"3a29b11f_f6e55cdb","updated":"2015-10-22 19:57:14.000000000","message":"Done","commit_id":"f85f8298c54a1c7cc3ee475a60ec60cad5bc9535"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"cc854d2624331bc0a4eaf1ec5ce15cc8a5a11078","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                       \u0027router_id\u0027: router_id})"},{"line_number":137,"context_line":"        if ext_net_id:"},{"line_number":138,"context_line":"            LOG.debug(\u0027Fanout notify agent at %(topic)s the message \u0027"},{"line_number":139,"context_line":"                      \u0027%(method)s for external_network  %(ext_net_id)s\u0027,"},{"line_number":140,"context_line":"                      {\u0027topic\u0027: topics.L3_AGENT,"},{"line_number":141,"context_line":"                       \u0027method\u0027: method,"},{"line_number":142,"context_line":"                       \u0027ext_net_id\u0027: ext_net_id})"}],"source_content_type":"text/x-python","patch_set":32,"id":"3a29b11f_ff1c0c15","line":139,"updated":"2015-10-26 08:46:15.000000000","message":"nit: extra space on this line, don\u0027t re-spin for this","commit_id":"cb465d40f59bfbc109204dc16259c0e4ce1c903a"}],"neutron/db/l3_dvr_db.py":[{"author":{"_account_id":11682,"name":"Ryan Moats","email":"rmoats@us.ibm.com","username":"regXboi"},"change_message_id":"34790f024db4f30618d7e0c644755fcd655036b4","unresolved":false,"context_lines":[{"line_number":174,"context_line":"                    context.elevated(), None, gw_ext_net_id)"},{"line_number":175,"context_line":"                # Send the information to all the L3 Agent hosts"},{"line_number":176,"context_line":"                # to clean up the fip namespace since it would be"},{"line_number":177,"context_line":"                # no more required."},{"line_number":178,"context_line":"                self.l3_rpc_notifier.delete_fipnamespace_for_ext_net("},{"line_number":179,"context_line":"                    context, gw_ext_net_id)"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"7a2fa921_84df4e68","line":177,"updated":"2015-10-08 15:45:49.000000000","message":"nit for a respin (wrap to keep pep8 happy):\n\n# to clean up the fip namespace as it is no longer required","commit_id":"45b3809753aba697b28fe24e1fd5acd6f0679190"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"fd2923972a72ddb397903dd4e05d36c0a4983498","unresolved":false,"context_lines":[{"line_number":174,"context_line":"                    context.elevated(), None, gw_ext_net_id)"},{"line_number":175,"context_line":"                # Send the information to all the L3 Agent hosts"},{"line_number":176,"context_line":"                # to clean up the fip namespace since it would be"},{"line_number":177,"context_line":"                # no more required."},{"line_number":178,"context_line":"                self.l3_rpc_notifier.delete_fipnamespace_for_ext_net("},{"line_number":179,"context_line":"                    context, gw_ext_net_id)"},{"line_number":180,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"7a2fa921_b804e749","line":177,"in_reply_to":"7a2fa921_84df4e68","updated":"2015-10-08 19:17:22.000000000","message":"Done","commit_id":"45b3809753aba697b28fe24e1fd5acd6f0679190"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"022145c9b5f537fcb211e8f3c756a7a20bad5e50","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        super(L3_NAT_with_dvr_db_mixin,"},{"line_number":159,"context_line":"            self)._delete_current_gw_port(context, router_id,"},{"line_number":160,"context_line":"                                          router, new_network)"},{"line_number":161,"context_line":"        if (is_distributed_router(router) and"},{"line_number":162,"context_line":"            gw_ext_net_id !\u003d new_network and gw_ext_net_id is not None):"},{"line_number":163,"context_line":"            self.delete_csnat_router_interface_ports("}],"source_content_type":"text/x-python","patch_set":22,"id":"5a2ca52d_687d70b0","line":160,"updated":"2015-10-15 00:10:30.000000000","message":"unecessary change (blank spce addition)","commit_id":"e19bcfda017ac886cf93d16f9e4a6dff74e88d37"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"cbce9db33c2a3d9785895c175bca7c8c73db4ce9","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        super(L3_NAT_with_dvr_db_mixin,"},{"line_number":159,"context_line":"            self)._delete_current_gw_port(context, router_id,"},{"line_number":160,"context_line":"                                          router, new_network)"},{"line_number":161,"context_line":"        if (is_distributed_router(router) and"},{"line_number":162,"context_line":"            gw_ext_net_id !\u003d new_network and gw_ext_net_id is not None):"},{"line_number":163,"context_line":"            self.delete_csnat_router_interface_ports("}],"source_content_type":"text/x-python","patch_set":22,"id":"5a2ca52d_a89cad0f","line":160,"in_reply_to":"5a2ca52d_0d16134c","updated":"2015-10-16 00:32:28.000000000","message":"I don\u0027t see any blank line in here. If you see the number L160 and L161.","commit_id":"e19bcfda017ac886cf93d16f9e4a6dff74e88d37"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"9e7c793e2e0b6611d4b113db0609d958e7a904c2","unresolved":false,"context_lines":[{"line_number":157,"context_line":""},{"line_number":158,"context_line":"        super(L3_NAT_with_dvr_db_mixin,"},{"line_number":159,"context_line":"            self)._delete_current_gw_port(context, router_id,"},{"line_number":160,"context_line":"                                          router, new_network)"},{"line_number":161,"context_line":"        if (is_distributed_router(router) and"},{"line_number":162,"context_line":"            gw_ext_net_id !\u003d new_network and gw_ext_net_id is not None):"},{"line_number":163,"context_line":"            self.delete_csnat_router_interface_ports("}],"source_content_type":"text/x-python","patch_set":22,"id":"5a2ca52d_0d16134c","line":160,"in_reply_to":"5a2ca52d_687d70b0","updated":"2015-10-15 23:23:08.000000000","message":"Will fix it.","commit_id":"e19bcfda017ac886cf93d16f9e4a6dff74e88d37"},{"author":{"_account_id":13770,"name":"Adolfo Duarte","email":"adduarte@redhat.com","username":"adolfoduarte"},"change_message_id":"022145c9b5f537fcb211e8f3c756a7a20bad5e50","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            self)._delete_current_gw_port(context, router_id,"},{"line_number":160,"context_line":"                                          router, new_network)"},{"line_number":161,"context_line":"        if (is_distributed_router(router) and"},{"line_number":162,"context_line":"            gw_ext_net_id !\u003d new_network and gw_ext_net_id is not None):"},{"line_number":163,"context_line":"            self.delete_csnat_router_interface_ports("},{"line_number":164,"context_line":"                context.elevated(), router)"},{"line_number":165,"context_line":"            # NOTE(Swami): Delete the Floatingip agent gateway port"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a2ca52d_c83b64ea","line":162,"updated":"2015-10-15 00:10:30.000000000","message":"can you use: \n.... !\u003d new_network and  gw_ext_net_id","commit_id":"e19bcfda017ac886cf93d16f9e4a6dff74e88d37"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"9e7c793e2e0b6611d4b113db0609d958e7a904c2","unresolved":false,"context_lines":[{"line_number":159,"context_line":"            self)._delete_current_gw_port(context, router_id,"},{"line_number":160,"context_line":"                                          router, new_network)"},{"line_number":161,"context_line":"        if (is_distributed_router(router) and"},{"line_number":162,"context_line":"            gw_ext_net_id !\u003d new_network and gw_ext_net_id is not None):"},{"line_number":163,"context_line":"            self.delete_csnat_router_interface_ports("},{"line_number":164,"context_line":"                context.elevated(), router)"},{"line_number":165,"context_line":"            # NOTE(Swami): Delete the Floatingip agent gateway port"}],"source_content_type":"text/x-python","patch_set":22,"id":"5a2ca52d_6d0c673b","line":162,"in_reply_to":"5a2ca52d_c83b64ea","updated":"2015-10-15 23:23:08.000000000","message":"I think this logic works and I would live it as such.","commit_id":"e19bcfda017ac886cf93d16f9e4a6dff74e88d37"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"b593b5b8cbb496923b41af2bb4a59539cabcf121","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        super(L3_NAT_with_dvr_db_mixin,"},{"line_number":161,"context_line":"            self)._delete_current_gw_port(context, router_id,"},{"line_number":162,"context_line":"                                          router, new_network)"},{"line_number":163,"context_line":"        if (is_distributed_router(router) and"},{"line_number":164,"context_line":"            gw_ext_net_id !\u003d new_network and gw_ext_net_id is not None):"},{"line_number":165,"context_line":"            self.delete_csnat_router_interface_ports("}],"source_content_type":"text/x-python","patch_set":31,"id":"3a29b11f_b9235755","line":162,"updated":"2015-10-22 19:17:46.000000000","message":"This whitespace shouldn\u0027t be changed by this patch set.  Revert changes to L161-L162.","commit_id":"f85f8298c54a1c7cc3ee475a60ec60cad5bc9535"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"a75d18eba014f26291583ef9d18685cf74a18c46","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"        super(L3_NAT_with_dvr_db_mixin,"},{"line_number":161,"context_line":"            self)._delete_current_gw_port(context, router_id,"},{"line_number":162,"context_line":"                                          router, new_network)"},{"line_number":163,"context_line":"        if (is_distributed_router(router) and"},{"line_number":164,"context_line":"            gw_ext_net_id !\u003d new_network and gw_ext_net_id is not None):"},{"line_number":165,"context_line":"            self.delete_csnat_router_interface_ports("}],"source_content_type":"text/x-python","patch_set":31,"id":"3a29b11f_3fbde7d7","line":162,"in_reply_to":"3a29b11f_b9235755","updated":"2015-10-22 19:57:14.000000000","message":"Done","commit_id":"f85f8298c54a1c7cc3ee475a60ec60cad5bc9535"}],"neutron/tests/functional/agent/test_l3_agent.py":[{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"c1d8bd7f8afbdd0373352d2cc37758bae0d42ffc","unresolved":false,"context_lines":[{"line_number":1627,"context_line":"        external_network_id \u003d ext_gateway_port[\u0027network_id\u0027]"},{"line_number":1628,"context_line":"        self.agent.fipnamespace_delete_on_ext_net("},{"line_number":1629,"context_line":"            self.agent.context, external_network_id)"},{"line_number":1630,"context_line":"        self._assert_interfaces_deleted_from_ovs()"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a29b11f_6e06b087","line":1630,"updated":"2015-10-21 04:24:58.000000000","message":"nit: no need to check br_int.","commit_id":"9cafcccf6ba7f65850bc324cf0f89c4c786bb350"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"e7080f3160429984a4caf12e32c8cc3a57902645","unresolved":false,"context_lines":[{"line_number":1627,"context_line":"        external_network_id \u003d ext_gateway_port[\u0027network_id\u0027]"},{"line_number":1628,"context_line":"        self.agent.fipnamespace_delete_on_ext_net("},{"line_number":1629,"context_line":"            self.agent.context, external_network_id)"},{"line_number":1630,"context_line":"        self._assert_interfaces_deleted_from_ovs()"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a29b11f_2853ac3a","line":1630,"in_reply_to":"3a29b11f_6e06b087","updated":"2015-10-21 16:13:12.000000000","message":"No need to check the br_int in here.","commit_id":"9cafcccf6ba7f65850bc324cf0f89c4c786bb350"}],"neutron/tests/unit/db/test_l3_dvr_db.py":[{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"c1d8bd7f8afbdd0373352d2cc37758bae0d42ffc","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        router.extra_attributes.distributed \u003d True"},{"line_number":312,"context_line":"        if gw_port:"},{"line_number":313,"context_line":"            router[\u0027gw_port_id\u0027] \u003d gw_port_db[\u0027id\u0027]"},{"line_number":314,"context_line":"            router.gw_port \u003d gw_port_db"},{"line_number":315,"context_line":"        else:"},{"line_number":316,"context_line":"            router[\u0027gw_port_id\u0027] \u003d None"},{"line_number":317,"context_line":"            router.gw_port \u003d None"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a29b11f_ee4160aa","line":314,"updated":"2015-10-21 04:24:58.000000000","message":"You could just move gw_port_db initialization into this if block.","commit_id":"9cafcccf6ba7f65850bc324cf0f89c4c786bb350"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"e7080f3160429984a4caf12e32c8cc3a57902645","unresolved":false,"context_lines":[{"line_number":311,"context_line":"        router.extra_attributes.distributed \u003d True"},{"line_number":312,"context_line":"        if gw_port:"},{"line_number":313,"context_line":"            router[\u0027gw_port_id\u0027] \u003d gw_port_db[\u0027id\u0027]"},{"line_number":314,"context_line":"            router.gw_port \u003d gw_port_db"},{"line_number":315,"context_line":"        else:"},{"line_number":316,"context_line":"            router[\u0027gw_port_id\u0027] \u003d None"},{"line_number":317,"context_line":"            router.gw_port \u003d None"}],"source_content_type":"text/x-python","patch_set":29,"id":"3a29b11f_886a00ec","line":314,"in_reply_to":"3a29b11f_ee4160aa","updated":"2015-10-21 16:13:12.000000000","message":"Done","commit_id":"9cafcccf6ba7f65850bc324cf0f89c4c786bb350"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"b593b5b8cbb496923b41af2bb4a59539cabcf121","unresolved":false,"context_lines":[{"line_number":310,"context_line":"                \u0027network_id\u0027: \u0027ext_net_id\u0027,"},{"line_number":311,"context_line":"                \u0027device_owner\u0027: l3_const.DEVICE_OWNER_ROUTER_GW"},{"line_number":312,"context_line":"            }"},{"line_number":313,"context_line":"            router[\u0027gw_port_id\u0027] \u003d gw_port_db[\u0027id\u0027]"},{"line_number":314,"context_line":"            router.gw_port \u003d gw_port_db"},{"line_number":315,"context_line":"        else:"},{"line_number":316,"context_line":"            router[\u0027gw_port_id\u0027] \u003d None"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a29b11f_998d3bd5","line":313,"updated":"2015-10-22 19:17:46.000000000","message":"What does this do?  I tried it in python and here is what I got:\n\n \u003e\u003e\u003e router \u003d mock.MagicMock()\n \u003e\u003e\u003e router[\u0027id\u0027] \u003d \"some value\"\n \u003e\u003e\u003e router[\u0027id\u0027]\n \u003cMagicMock name\u003d\u0027mock.__getitem__()\u0027 id\u003d\u002747720784\u0027\u003e\n\nSo, what is the effect of setting router[\u0027id\u0027] supposed to be here?","commit_id":"f85f8298c54a1c7cc3ee475a60ec60cad5bc9535"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"a75d18eba014f26291583ef9d18685cf74a18c46","unresolved":false,"context_lines":[{"line_number":310,"context_line":"                \u0027network_id\u0027: \u0027ext_net_id\u0027,"},{"line_number":311,"context_line":"                \u0027device_owner\u0027: l3_const.DEVICE_OWNER_ROUTER_GW"},{"line_number":312,"context_line":"            }"},{"line_number":313,"context_line":"            router[\u0027gw_port_id\u0027] \u003d gw_port_db[\u0027id\u0027]"},{"line_number":314,"context_line":"            router.gw_port \u003d gw_port_db"},{"line_number":315,"context_line":"        else:"},{"line_number":316,"context_line":"            router[\u0027gw_port_id\u0027] \u003d None"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a29b11f_7fc7df63","line":313,"in_reply_to":"3a29b11f_998d3bd5","updated":"2015-10-22 19:57:14.000000000","message":"Done","commit_id":"f85f8298c54a1c7cc3ee475a60ec60cad5bc9535"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"b593b5b8cbb496923b41af2bb4a59539cabcf121","unresolved":false,"context_lines":[{"line_number":313,"context_line":"            router[\u0027gw_port_id\u0027] \u003d gw_port_db[\u0027id\u0027]"},{"line_number":314,"context_line":"            router.gw_port \u003d gw_port_db"},{"line_number":315,"context_line":"        else:"},{"line_number":316,"context_line":"            router[\u0027gw_port_id\u0027] \u003d None"},{"line_number":317,"context_line":"            router.gw_port \u003d None"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        with mock.patch.object(manager.NeutronManager, \u0027get_plugin\u0027) as gp,\\"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a29b11f_392e67fb","line":316,"updated":"2015-10-22 19:17:46.000000000","message":"I\u0027m trying to figure out why router is acting like a dict and an object here.","commit_id":"f85f8298c54a1c7cc3ee475a60ec60cad5bc9535"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"a75d18eba014f26291583ef9d18685cf74a18c46","unresolved":false,"context_lines":[{"line_number":313,"context_line":"            router[\u0027gw_port_id\u0027] \u003d gw_port_db[\u0027id\u0027]"},{"line_number":314,"context_line":"            router.gw_port \u003d gw_port_db"},{"line_number":315,"context_line":"        else:"},{"line_number":316,"context_line":"            router[\u0027gw_port_id\u0027] \u003d None"},{"line_number":317,"context_line":"            router.gw_port \u003d None"},{"line_number":318,"context_line":""},{"line_number":319,"context_line":"        with mock.patch.object(manager.NeutronManager, \u0027get_plugin\u0027) as gp,\\"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a29b11f_1fb6ebf8","line":316,"in_reply_to":"3a29b11f_392e67fb","updated":"2015-10-22 19:57:14.000000000","message":"Done","commit_id":"f85f8298c54a1c7cc3ee475a60ec60cad5bc9535"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"b593b5b8cbb496923b41af2bb4a59539cabcf121","unresolved":false,"context_lines":[{"line_number":340,"context_line":"            return router, plugin, del_csnat_port, del_agent_gw_port, del_fip"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    def test_delete_current_gw_port_deletes_fip_agent_gw_port_and_fipnamespace("},{"line_number":343,"context_line":"        self):"},{"line_number":344,"context_line":"        rtr, plugin, d_csnat_port, d_agent_gw_port, del_fip \u003d ("},{"line_number":345,"context_line":"            self._setup_delete_current_gw_port_deletes_fip_agent_gw_port())"},{"line_number":346,"context_line":"        self.assertTrue(d_csnat_port.called)"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a29b11f_19f5abeb","line":343,"updated":"2015-10-22 19:17:46.000000000","message":"nit:  I think this should be indented 4 more spaces.","commit_id":"f85f8298c54a1c7cc3ee475a60ec60cad5bc9535"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"a75d18eba014f26291583ef9d18685cf74a18c46","unresolved":false,"context_lines":[{"line_number":340,"context_line":"            return router, plugin, del_csnat_port, del_agent_gw_port, del_fip"},{"line_number":341,"context_line":""},{"line_number":342,"context_line":"    def test_delete_current_gw_port_deletes_fip_agent_gw_port_and_fipnamespace("},{"line_number":343,"context_line":"        self):"},{"line_number":344,"context_line":"        rtr, plugin, d_csnat_port, d_agent_gw_port, del_fip \u003d ("},{"line_number":345,"context_line":"            self._setup_delete_current_gw_port_deletes_fip_agent_gw_port())"},{"line_number":346,"context_line":"        self.assertTrue(d_csnat_port.called)"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a29b11f_ffb20f05","line":343,"in_reply_to":"3a29b11f_19f5abeb","updated":"2015-10-22 19:57:14.000000000","message":"Done","commit_id":"f85f8298c54a1c7cc3ee475a60ec60cad5bc9535"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"b593b5b8cbb496923b41af2bb4a59539cabcf121","unresolved":false,"context_lines":[{"line_number":349,"context_line":"            mock.ANY, rtr)"},{"line_number":350,"context_line":"        d_agent_gw_port.assert_called_once_with("},{"line_number":351,"context_line":"            mock.ANY, None, \u0027ext_net_id\u0027)"},{"line_number":352,"context_line":"        del_fip.assert_called_once_with("},{"line_number":353,"context_line":"            mock.ANY, \u0027ext_net_id\u0027)"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    def test_delete_current_gw_port_never_calls_delete_fip_agent_gw_port(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a29b11f_393ae799","line":352,"updated":"2015-10-22 19:17:46.000000000","message":"nit:  No line wrap.","commit_id":"f85f8298c54a1c7cc3ee475a60ec60cad5bc9535"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"a75d18eba014f26291583ef9d18685cf74a18c46","unresolved":false,"context_lines":[{"line_number":349,"context_line":"            mock.ANY, rtr)"},{"line_number":350,"context_line":"        d_agent_gw_port.assert_called_once_with("},{"line_number":351,"context_line":"            mock.ANY, None, \u0027ext_net_id\u0027)"},{"line_number":352,"context_line":"        del_fip.assert_called_once_with("},{"line_number":353,"context_line":"            mock.ANY, \u0027ext_net_id\u0027)"},{"line_number":354,"context_line":""},{"line_number":355,"context_line":"    def test_delete_current_gw_port_never_calls_delete_fip_agent_gw_port(self):"}],"source_content_type":"text/x-python","patch_set":31,"id":"3a29b11f_5fc0e34f","line":352,"in_reply_to":"3a29b11f_393ae799","updated":"2015-10-22 19:57:14.000000000","message":"Done","commit_id":"f85f8298c54a1c7cc3ee475a60ec60cad5bc9535"}]}
