)]}'
{"neutron/db/l3_db.py":[{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"51c1f76bbf951274522e4e645dc9155d11473bdd","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                          st_attr.StandardAttrDescriptionMixin):"},{"line_number":138,"context_line":"    \"\"\"Mixin class to add L3/NAT router methods to db_base_plugin_v2.\"\"\""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    _allow_router_interface_fip \u003d False"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    router_device_owners \u003d ("},{"line_number":143,"context_line":"        DEVICE_OWNER_HA_REPLICATED_INT,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_845c6fee","line":140,"range":{"start_line":140,"start_character":4,"end_line":140,"end_character":31},"updated":"2016-05-19 16:13:47.000000000","message":"My concern is that this isn\u0027t discoverable.  IOW, a cloud user doesn\u0027t have a way to know if the feature is available or not without trying.  I guess you could argue that trying it and seeing the failure is one way of providing \"discoverability\".","commit_id":"193363160902730e2082380f0756a6510f67e3bf"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"0209a69f547943dd5aba38ba38dc569ca3f36826","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                          st_attr.StandardAttrDescriptionMixin):"},{"line_number":138,"context_line":"    \"\"\"Mixin class to add L3/NAT router methods to db_base_plugin_v2.\"\"\""},{"line_number":139,"context_line":""},{"line_number":140,"context_line":"    _allow_router_interface_fip \u003d False"},{"line_number":141,"context_line":""},{"line_number":142,"context_line":"    router_device_owners \u003d ("},{"line_number":143,"context_line":"        DEVICE_OWNER_HA_REPLICATED_INT,"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_d65d6948","line":140,"range":{"start_line":140,"start_character":4,"end_line":140,"end_character":31},"in_reply_to":"bab6814e_845c6fee","updated":"2016-05-20 07:28:39.000000000","message":"i agree any plugin which enables this ought to provide an extension or something for discoverability.\nideally neutron-api extension, but it can be a vendor extension for the time being.","commit_id":"193363160902730e2082380f0756a6510f67e3bf"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"51c1f76bbf951274522e4e645dc9155d11473bdd","unresolved":false,"context_lines":[{"line_number":889,"context_line":"        # with subnet\u0027s gateway-ip, return that router."},{"line_number":890,"context_line":"        # Otherwise return the first router."},{"line_number":891,"context_line":"        gw_port \u003d orm.aliased(models_v2.Port, name\u003d\"gw_port\")"},{"line_number":892,"context_line":"        # NOTE(yamamoto): Unfortunately there\u0027s out-of-tree code relying"},{"line_number":893,"context_line":"        # on the loose validation caused by bug 1556884. (networking-midonet)"},{"line_number":894,"context_line":"        # As simply fixing the bug would cause a severe regression there,"},{"line_number":895,"context_line":"        # this code is structured so that they can fix the regression easily"},{"line_number":896,"context_line":"        # by flipping the knob, instead of overriding this entire method."},{"line_number":897,"context_line":"        # This structure also might be useful for the RFE bug 1566191,"},{"line_number":898,"context_line":"        # in case we decide to implement it."},{"line_number":899,"context_line":"        if self._allow_router_interface_fip:"},{"line_number":900,"context_line":"            device_owner_check \u003d True"},{"line_number":901,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_5f86d065","line":898,"range":{"start_line":892,"start_character":8,"end_line":898,"end_character":44},"updated":"2016-05-19 16:13:47.000000000","message":"nit:  I\u0027d prefer this comment be place above where the value is set.","commit_id":"193363160902730e2082380f0756a6510f67e3bf"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"57cd248f2675e4703aa46bbe96336f39d6b8ac2b","unresolved":false,"context_lines":[{"line_number":889,"context_line":"        # with subnet\u0027s gateway-ip, return that router."},{"line_number":890,"context_line":"        # Otherwise return the first router."},{"line_number":891,"context_line":"        gw_port \u003d orm.aliased(models_v2.Port, name\u003d\"gw_port\")"},{"line_number":892,"context_line":"        # NOTE(yamamoto): Unfortunately there\u0027s out-of-tree code relying"},{"line_number":893,"context_line":"        # on the loose validation caused by bug 1556884. (networking-midonet)"},{"line_number":894,"context_line":"        # As simply fixing the bug would cause a severe regression there,"},{"line_number":895,"context_line":"        # this code is structured so that they can fix the regression easily"},{"line_number":896,"context_line":"        # by flipping the knob, instead of overriding this entire method."},{"line_number":897,"context_line":"        # This structure also might be useful for the RFE bug 1566191,"},{"line_number":898,"context_line":"        # in case we decide to implement it."},{"line_number":899,"context_line":"        if self._allow_router_interface_fip:"},{"line_number":900,"context_line":"            device_owner_check \u003d True"},{"line_number":901,"context_line":"        else:"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_89281f87","line":898,"range":{"start_line":892,"start_character":8,"end_line":898,"end_character":44},"in_reply_to":"bab6814e_5f86d065","updated":"2016-05-25 07:35:44.000000000","message":"Done","commit_id":"193363160902730e2082380f0756a6510f67e3bf"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"51c1f76bbf951274522e4e645dc9155d11473bdd","unresolved":false,"context_lines":[{"line_number":897,"context_line":"        # This structure also might be useful for the RFE bug 1566191,"},{"line_number":898,"context_line":"        # in case we decide to implement it."},{"line_number":899,"context_line":"        if self._allow_router_interface_fip:"},{"line_number":900,"context_line":"            device_owner_check \u003d True"},{"line_number":901,"context_line":"        else:"},{"line_number":902,"context_line":"            device_owner_check \u003d ("},{"line_number":903,"context_line":"                gw_port.device_owner \u003d\u003d l3_constants.DEVICE_OWNER_ROUTER_GW"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_bf6ffcc3","line":900,"range":{"start_line":900,"start_character":12,"end_line":900,"end_character":37},"updated":"2016-05-19 16:13:47.000000000","message":"Instead of doing this, I think this code will read better if you refactor L905 - L913 like this:\n\n  routerport_qry \u003d context.session.query(...).filter(gw_port_network_id ...)\n  if not self._allow_router_interface_fip:\n      routerport_qry \u003d routerport_qry.filter(gw_port.device_owner ...)\n  routerport_qry \u003d routerport_qry.distinct()\n\nOr, something like that.  The if / else clause here looks like it could be reduced to this:\n\n  device_owner_check \u003d (\n      self._allow_router_interface_fip or\n      gw_port.device_owner \u003d\u003d l3_constants.DEVICE_OWNER_ROUTER_GW)\n\nBut, it can\u0027t.  So, I\u0027d prefer to structure the code in a way that doesn\u0027t make it look tempting to try that \"optimization\".","commit_id":"193363160902730e2082380f0756a6510f67e3bf"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"9f237c92c47b4c11f96829a554872c43a2d57e13","unresolved":false,"context_lines":[{"line_number":897,"context_line":"        # This structure also might be useful for the RFE bug 1566191,"},{"line_number":898,"context_line":"        # in case we decide to implement it."},{"line_number":899,"context_line":"        if self._allow_router_interface_fip:"},{"line_number":900,"context_line":"            device_owner_check \u003d True"},{"line_number":901,"context_line":"        else:"},{"line_number":902,"context_line":"            device_owner_check \u003d ("},{"line_number":903,"context_line":"                gw_port.device_owner \u003d\u003d l3_constants.DEVICE_OWNER_ROUTER_GW"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_ab350647","line":900,"range":{"start_line":900,"start_character":12,"end_line":900,"end_character":37},"in_reply_to":"bab6814e_bf6ffcc3","updated":"2016-05-25 12:57:21.000000000","message":"Done","commit_id":"193363160902730e2082380f0756a6510f67e3bf"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"0209a69f547943dd5aba38ba38dc569ca3f36826","unresolved":false,"context_lines":[{"line_number":897,"context_line":"        # This structure also might be useful for the RFE bug 1566191,"},{"line_number":898,"context_line":"        # in case we decide to implement it."},{"line_number":899,"context_line":"        if self._allow_router_interface_fip:"},{"line_number":900,"context_line":"            device_owner_check \u003d True"},{"line_number":901,"context_line":"        else:"},{"line_number":902,"context_line":"            device_owner_check \u003d ("},{"line_number":903,"context_line":"                gw_port.device_owner \u003d\u003d l3_constants.DEVICE_OWNER_ROUTER_GW"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_318f9f76","line":900,"range":{"start_line":900,"start_character":12,"end_line":900,"end_character":37},"in_reply_to":"bab6814e_bf6ffcc3","updated":"2016-05-20 07:28:39.000000000","message":"i originally tried that but it didn\u0027t work for some reasons.\n(i guess it\u0027s due to the use of orm.aliased for gw_port but i haven\u0027t investigated further)\nany insights are welcome.","commit_id":"193363160902730e2082380f0756a6510f67e3bf"},{"author":{"_account_id":7448,"name":"Carl Baldwin","email":"carl@ecbaldwin.net","username":"carl-baldwin"},"change_message_id":"51c1f76bbf951274522e4e645dc9155d11473bdd","unresolved":false,"context_lines":[{"line_number":902,"context_line":"            device_owner_check \u003d ("},{"line_number":903,"context_line":"                gw_port.device_owner \u003d\u003d l3_constants.DEVICE_OWNER_ROUTER_GW"},{"line_number":904,"context_line":"            )"},{"line_number":905,"context_line":"        routerport_qry \u003d context.session.query("},{"line_number":906,"context_line":"            RouterPort.router_id, models_v2.IPAllocation.ip_address).join("},{"line_number":907,"context_line":"            models_v2.Port, models_v2.IPAllocation).filter("},{"line_number":908,"context_line":"            models_v2.Port.network_id \u003d\u003d internal_port[\u0027network_id\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_1fd8c81c","line":905,"range":{"start_line":905,"start_character":8,"end_line":905,"end_character":47},"updated":"2016-05-19 16:13:47.000000000","message":"I think with a little bit of refactoring and a new method that your plugin could override, we could do this without the need to add the boolean flag.  Maybe you could create a new method that just adds the gw_port filter to the query.  Then, a plugin could override that method with a \"pass\" method or something.","commit_id":"193363160902730e2082380f0756a6510f67e3bf"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"9f237c92c47b4c11f96829a554872c43a2d57e13","unresolved":false,"context_lines":[{"line_number":902,"context_line":"            device_owner_check \u003d ("},{"line_number":903,"context_line":"                gw_port.device_owner \u003d\u003d l3_constants.DEVICE_OWNER_ROUTER_GW"},{"line_number":904,"context_line":"            )"},{"line_number":905,"context_line":"        routerport_qry \u003d context.session.query("},{"line_number":906,"context_line":"            RouterPort.router_id, models_v2.IPAllocation.ip_address).join("},{"line_number":907,"context_line":"            models_v2.Port, models_v2.IPAllocation).filter("},{"line_number":908,"context_line":"            models_v2.Port.network_id \u003d\u003d internal_port[\u0027network_id\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_0b4532b2","line":905,"range":{"start_line":905,"start_character":8,"end_line":905,"end_character":47},"in_reply_to":"bab6814e_1fd8c81c","updated":"2016-05-25 12:57:21.000000000","message":"Done","commit_id":"193363160902730e2082380f0756a6510f67e3bf"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"0209a69f547943dd5aba38ba38dc569ca3f36826","unresolved":false,"context_lines":[{"line_number":902,"context_line":"            device_owner_check \u003d ("},{"line_number":903,"context_line":"                gw_port.device_owner \u003d\u003d l3_constants.DEVICE_OWNER_ROUTER_GW"},{"line_number":904,"context_line":"            )"},{"line_number":905,"context_line":"        routerport_qry \u003d context.session.query("},{"line_number":906,"context_line":"            RouterPort.router_id, models_v2.IPAllocation.ip_address).join("},{"line_number":907,"context_line":"            models_v2.Port, models_v2.IPAllocation).filter("},{"line_number":908,"context_line":"            models_v2.Port.network_id \u003d\u003d internal_port[\u0027network_id\u0027],"}],"source_content_type":"text/x-python","patch_set":4,"id":"bab6814e_51d7c34a","line":905,"range":{"start_line":905,"start_character":8,"end_line":905,"end_character":47},"in_reply_to":"bab6814e_1fd8c81c","updated":"2016-05-20 07:28:39.000000000","message":"again, it was difficult for me due to orm.aliased.","commit_id":"193363160902730e2082380f0756a6510f67e3bf"},{"author":{"_account_id":1653,"name":"garyk","email":"gkotton@vmware.com","username":"garyk"},"change_message_id":"55b5a7f21a4c49c3969e43fb6593ecf3d742f830","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    # entire method, _get_router_for_floatingip."},{"line_number":148,"context_line":"    # This structure also might be useful for the RFE bug 1566191,"},{"line_number":149,"context_line":"    # in case we decide to implement it."},{"line_number":150,"context_line":"    _allow_router_interface_fip \u003d False"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    router_device_owners \u003d ("},{"line_number":153,"context_line":"        DEVICE_OWNER_HA_REPLICATED_INT,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_8febff11","line":150,"updated":"2016-05-25 08:19:29.000000000","message":"i think that you need a release note for this explaining so that others can gain/benefit","commit_id":"262c088da23878a4d2e2fa76bcd799e7e031d223"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"c67462469a60cb5b4742c2338a961a2701c284ff","unresolved":false,"context_lines":[{"line_number":147,"context_line":"    # entire method, _get_router_for_floatingip."},{"line_number":148,"context_line":"    # This structure also might be useful for the RFE bug 1566191,"},{"line_number":149,"context_line":"    # in case we decide to implement it."},{"line_number":150,"context_line":"    _allow_router_interface_fip \u003d False"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"    router_device_owners \u003d ("},{"line_number":153,"context_line":"        DEVICE_OWNER_HA_REPLICATED_INT,"}],"source_content_type":"text/x-python","patch_set":5,"id":"bab6814e_01d403bb","line":150,"in_reply_to":"bab6814e_8febff11","updated":"2016-05-25 08:46:05.000000000","message":"i\u0027m not sure release note is a right place to mention implementation details like this.","commit_id":"262c088da23878a4d2e2fa76bcd799e7e031d223"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"95e10f2b66ea34bcccdd88e5627cbd694ee47b5a","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    # instead of the entire method, _get_router_for_floatingip."},{"line_number":155,"context_line":"    # This structure also might be useful for the RFE bug 1566191,"},{"line_number":156,"context_line":"    # in case we decide to implement it."},{"line_number":157,"context_line":"    def filter_gw_port_owner_for_floatingip(self, gw_port, qry):"},{"line_number":158,"context_line":"        return qry.filter("},{"line_number":159,"context_line":"            gw_port.device_owner \u003d\u003d l3_constants.DEVICE_OWNER_ROUTER_GW"},{"line_number":160,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_1091ce99","line":157,"updated":"2016-05-25 16:02:23.000000000","message":"I personally would have exposed a new method \u0027get_router_for_floatingip\u0027 which, based on the parameters submitted, internal_port, internal_subnet and external_network, returns the router_id. A public method such as this can be more safely overridden, otherwise this is pretty tied to the query logic/select logic. This method can be started at line 935 (basically it\u0027s the same as the private version without the validation at the very top)","commit_id":"69413a193ef4b15408ec4ce10a1f4a4768e64555"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"4c055857e29c7d9f94b23363cfbd9fcaf54d9026","unresolved":false,"context_lines":[{"line_number":154,"context_line":"    # instead of the entire method, _get_router_for_floatingip."},{"line_number":155,"context_line":"    # This structure also might be useful for the RFE bug 1566191,"},{"line_number":156,"context_line":"    # in case we decide to implement it."},{"line_number":157,"context_line":"    def filter_gw_port_owner_for_floatingip(self, gw_port, qry):"},{"line_number":158,"context_line":"        return qry.filter("},{"line_number":159,"context_line":"            gw_port.device_owner \u003d\u003d l3_constants.DEVICE_OWNER_ROUTER_GW"},{"line_number":160,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":7,"id":"bab6814e_5c4990b6","line":157,"in_reply_to":"bab6814e_1091ce99","updated":"2016-05-26 09:26:29.000000000","message":"it isn\u0027t so different from making the plugin override the entire _get_router_for_floatingip, which i wanted to avoid.\nbut done.","commit_id":"69413a193ef4b15408ec4ce10a1f4a4768e64555"}],"neutron/tests/unit/extensions/test_l3.py":[{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"016396f9b60d5d6d974da5d093e8a071f3dc798c","unresolved":false,"context_lines":[{"line_number":2508,"context_line":"    def test_floatingip_via_router_interface_returns_404(self):"},{"line_number":2509,"context_line":"        with self.subnet(cidr\u003d\"10.0.0.0/24\") as exs,\\"},{"line_number":2510,"context_line":"             self.subnet(cidr\u003d\"10.0.1.0/24\") as ins1,\\"},{"line_number":2511,"context_line":"             self.subnet(cidr\u003d\"10.0.2.0/24\") as ins2:"},{"line_number":2512,"context_line":"            network_ex_id \u003d exs[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":2513,"context_line":"            self._set_net_external(network_ex_id)"},{"line_number":2514,"context_line":"            network_in2_id \u003d ins1[\u0027subnet\u0027][\u0027network_id\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afc51ec_fb498b61","line":2511,"range":{"start_line":2511,"start_character":13,"end_line":2511,"end_character":52},"updated":"2016-03-15 08:04:03.000000000","message":"Do we need to define ins2 for this test? We need just two external networks, don\u0027t we?","commit_id":"9ac4a1d18f38a67cb3241a28128725fc17dd3025"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"4589645ff590fbb1b6122636addb43349dabf538","unresolved":false,"context_lines":[{"line_number":2508,"context_line":"    def test_floatingip_via_router_interface_returns_404(self):"},{"line_number":2509,"context_line":"        with self.subnet(cidr\u003d\"10.0.0.0/24\") as exs,\\"},{"line_number":2510,"context_line":"             self.subnet(cidr\u003d\"10.0.1.0/24\") as ins1,\\"},{"line_number":2511,"context_line":"             self.subnet(cidr\u003d\"10.0.2.0/24\") as ins2:"},{"line_number":2512,"context_line":"            network_ex_id \u003d exs[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":2513,"context_line":"            self._set_net_external(network_ex_id)"},{"line_number":2514,"context_line":"            network_in2_id \u003d ins1[\u0027subnet\u0027][\u0027network_id\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afc51ec_0675fe30","line":2511,"range":{"start_line":2511,"start_character":13,"end_line":2511,"end_character":52},"in_reply_to":"3afc51ec_3bd2d35c","updated":"2016-03-15 08:37:08.000000000","message":"Ah, I was so confused ;)","commit_id":"9ac4a1d18f38a67cb3241a28128725fc17dd3025"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"c9a3c9be882ed877f4da3ba7c42f614000895b22","unresolved":false,"context_lines":[{"line_number":2508,"context_line":"    def test_floatingip_via_router_interface_returns_404(self):"},{"line_number":2509,"context_line":"        with self.subnet(cidr\u003d\"10.0.0.0/24\") as exs,\\"},{"line_number":2510,"context_line":"             self.subnet(cidr\u003d\"10.0.1.0/24\") as ins1,\\"},{"line_number":2511,"context_line":"             self.subnet(cidr\u003d\"10.0.2.0/24\") as ins2:"},{"line_number":2512,"context_line":"            network_ex_id \u003d exs[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":2513,"context_line":"            self._set_net_external(network_ex_id)"},{"line_number":2514,"context_line":"            network_in2_id \u003d ins1[\u0027subnet\u0027][\u0027network_id\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afc51ec_3bd2d35c","line":2511,"range":{"start_line":2511,"start_character":13,"end_line":2511,"end_character":52},"in_reply_to":"3afc51ec_fb498b61","updated":"2016-03-15 08:08:12.000000000","message":"my intention was to use a different networks for floating-ip and private_port.","commit_id":"9ac4a1d18f38a67cb3241a28128725fc17dd3025"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"016396f9b60d5d6d974da5d093e8a071f3dc798c","unresolved":false,"context_lines":[{"line_number":2511,"context_line":"             self.subnet(cidr\u003d\"10.0.2.0/24\") as ins2:"},{"line_number":2512,"context_line":"            network_ex_id \u003d exs[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":2513,"context_line":"            self._set_net_external(network_ex_id)"},{"line_number":2514,"context_line":"            network_in2_id \u003d ins1[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":2515,"context_line":"            self._set_net_external(network_in2_id)"},{"line_number":2516,"context_line":"            with self.router() as r1, self.port(subnet\u003dins1) as private_port:"},{"line_number":2517,"context_line":"                self._add_external_gateway_to_router(r1[\u0027router\u0027][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afc51ec_c0601e04","line":2514,"range":{"start_line":2514,"start_character":12,"end_line":2514,"end_character":26},"updated":"2016-03-15 08:04:03.000000000","message":"network_in1_id\n\nIt confused me ;) Please match the numbers.","commit_id":"9ac4a1d18f38a67cb3241a28128725fc17dd3025"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"c9a3c9be882ed877f4da3ba7c42f614000895b22","unresolved":false,"context_lines":[{"line_number":2511,"context_line":"             self.subnet(cidr\u003d\"10.0.2.0/24\") as ins2:"},{"line_number":2512,"context_line":"            network_ex_id \u003d exs[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":2513,"context_line":"            self._set_net_external(network_ex_id)"},{"line_number":2514,"context_line":"            network_in2_id \u003d ins1[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":2515,"context_line":"            self._set_net_external(network_in2_id)"},{"line_number":2516,"context_line":"            with self.router() as r1, self.port(subnet\u003dins1) as private_port:"},{"line_number":2517,"context_line":"                self._add_external_gateway_to_router(r1[\u0027router\u0027][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afc51ec_fbbceb07","line":2514,"range":{"start_line":2514,"start_character":12,"end_line":2514,"end_character":26},"in_reply_to":"3afc51ec_c0601e04","updated":"2016-03-15 08:08:12.000000000","message":"i meant s/ins1/ins2/ here.","commit_id":"9ac4a1d18f38a67cb3241a28128725fc17dd3025"},{"author":{"_account_id":6854,"name":"YAMAMOTO Takashi","email":"yamamoto@midokura.com","username":"yamamoto"},"change_message_id":"a8bd118b80e1ce73b5f279f0db7b58168bde0b82","unresolved":false,"context_lines":[{"line_number":2511,"context_line":"             self.subnet(cidr\u003d\"10.0.2.0/24\") as ins2:"},{"line_number":2512,"context_line":"            network_ex_id \u003d exs[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":2513,"context_line":"            self._set_net_external(network_ex_id)"},{"line_number":2514,"context_line":"            network_in2_id \u003d ins1[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":2515,"context_line":"            self._set_net_external(network_in2_id)"},{"line_number":2516,"context_line":"            with self.router() as r1, self.port(subnet\u003dins1) as private_port:"},{"line_number":2517,"context_line":"                self._add_external_gateway_to_router(r1[\u0027router\u0027][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afc51ec_06333ef7","line":2514,"range":{"start_line":2514,"start_character":12,"end_line":2514,"end_character":26},"in_reply_to":"3afc51ec_fbbceb07","updated":"2016-03-15 08:28:55.000000000","message":"Done","commit_id":"9ac4a1d18f38a67cb3241a28128725fc17dd3025"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"016396f9b60d5d6d974da5d093e8a071f3dc798c","unresolved":false,"context_lines":[{"line_number":2512,"context_line":"            network_ex_id \u003d exs[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":2513,"context_line":"            self._set_net_external(network_ex_id)"},{"line_number":2514,"context_line":"            network_in2_id \u003d ins1[\u0027subnet\u0027][\u0027network_id\u0027]"},{"line_number":2515,"context_line":"            self._set_net_external(network_in2_id)"},{"line_number":2516,"context_line":"            with self.router() as r1, self.port(subnet\u003dins1) as private_port:"},{"line_number":2517,"context_line":"                self._add_external_gateway_to_router(r1[\u0027router\u0027][\u0027id\u0027],"},{"line_number":2518,"context_line":"                                                     network_ex_id)"}],"source_content_type":"text/x-python","patch_set":1,"id":"3afc51ec_a05d1249","line":2515,"range":{"start_line":2515,"start_character":35,"end_line":2515,"end_character":49},"updated":"2016-03-15 08:04:03.000000000","message":"network_in1_id","commit_id":"9ac4a1d18f38a67cb3241a28128725fc17dd3025"},{"author":{"_account_id":7715,"name":"Hirofumi Ichihara","email":"ichihara.hirofumi@gmail.com","username":"Hirofumi-Ichihara"},"change_message_id":"016396f9b60d5d6d974da5d093e8a071f3dc798c","unresolved":false,"context_lines":[{"line_number":2521,"context_line":"                self._router_interface_action(\u0027add\u0027, r1[\u0027router\u0027][\u0027id\u0027],"},{"line_number":2522,"context_line":"                                              ins2[\u0027subnet\u0027][\u0027id\u0027], None)"},{"line_number":2523,"context_line":"                self._make_floatingip(self.fmt,"},{"line_number":2524,"context_line":"                                      network_id\u003dnetwork_in2_id,"},{"line_number":2525,"context_line":"                                      port_id\u003dprivate_port[\u0027port\u0027][\u0027id\u0027],"},{"line_number":2526,"context_line":"                                      http_status\u003dexc.HTTPNotFound.code)"},{"line_number":2527,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"3afc51ec_0057a626","line":2524,"range":{"start_line":2524,"start_character":49,"end_line":2524,"end_character":63},"updated":"2016-03-15 08:04:03.000000000","message":"network_in1_id","commit_id":"9ac4a1d18f38a67cb3241a28128725fc17dd3025"},{"author":{"_account_id":14611,"name":"dasm","display_name":"dasm","email":"dsmigiel@redhat.com","username":"dasm"},"change_message_id":"36075f177bcbda182e64887ee67dc6d65c2806e3","unresolved":false,"context_lines":[{"line_number":2507,"context_line":""},{"line_number":2508,"context_line":"    def test_floatingip_via_router_interface_returns_404(self):"},{"line_number":2509,"context_line":"        # NOTE(yamamoto): \"exs\" subnet is just to provide a gateway port"},{"line_number":2510,"context_line":"        # for the router.  Otherwise the test would fail earlier without"},{"line_number":2511,"context_line":"        # reaching the code we want to test. (bug 1556884)"},{"line_number":2512,"context_line":"        with self.subnet(cidr\u003d\"10.0.0.0/24\") as exs,\\"},{"line_number":2513,"context_line":"             self.subnet(cidr\u003d\"10.0.1.0/24\") as ins1,\\"}],"source_content_type":"text/x-python","patch_set":2,"id":"1af94dfe_0560bacd","line":2510,"range":{"start_line":2510,"start_character":25,"end_line":2510,"end_character":26},"updated":"2016-03-15 20:26:23.000000000","message":"nit: extra whitespace.","commit_id":"094f9bbc987a77176a209dbd8375ba2544861d4c"}]}
