)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"a92d9999bdb33d01eed937aa36156a010f88699e","unresolved":false,"context_lines":[{"line_number":23,"context_line":"\u0027destination\u0027 \u003d \u0027host-id\u0027 ( destination host id)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Based on the portbinding profile information in the port,"},{"line_number":26,"context_line":"the ml2 plugin will notify the L3 plugin if there is a profile"},{"line_number":27,"context_line":"update."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"L3 plugin will verify the profile state and then take action"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"bae84128_04a10f46","line":26,"range":{"start_line":26,"start_character":4,"end_line":26,"end_character":26},"updated":"2016-02-24 13:35:17.000000000","message":"ml2 plugin already notifies l3 plugin, please do not add more logic to ml2, binding profile update can be checked by l3 plugin","commit_id":"f974f22799efa43acb8ab7df4bf4e0703b6d0840"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"a9b24e58413ca343184c86dfaf41c85127b7db7b","unresolved":false,"context_lines":[{"line_number":23,"context_line":"\u0027destination\u0027 \u003d \u0027host-id\u0027 ( destination host id)"},{"line_number":24,"context_line":""},{"line_number":25,"context_line":"Based on the portbinding profile information in the port,"},{"line_number":26,"context_line":"the ml2 plugin will notify the L3 plugin if there is a profile"},{"line_number":27,"context_line":"update."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"L3 plugin will verify the profile state and then take action"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":17,"id":"bae84128_e7f17b02","line":26,"range":{"start_line":26,"start_character":4,"end_line":26,"end_character":26},"in_reply_to":"bae84128_04a10f46","updated":"2016-02-24 17:10:51.000000000","message":"Done","commit_id":"f974f22799efa43acb8ab7df4bf4e0703b6d0840"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"41a15791f1c6ba52bd2167f56c421d1367f56306","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"L3 plugin will verify the migration profile for the port on"},{"line_number":26,"context_line":"any port update and then take action to create routers in the"},{"line_number":27,"context_line":"respective agents if routers have not been created."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Depends-On: Ib1cc44bf9d01baf4d1f1d26c2a368a5ca7c6ab68"},{"line_number":30,"context_line":"Change-Id: Ibb62f012333cfdfd468bafdc0b4501aa46b4b54d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"3afc51ec_18f30875","line":27,"updated":"2016-03-11 18:41:43.000000000","message":"Can you mention about the impact of this enhancement in face of partial upgrades nova vs neutron and neutron-server vs neutron agents (or point me to a discussion if there was one)?\n\nHave you consider adding a release note?","commit_id":"bd01e100fcfe2e4719880940c5be6e80136eacb5"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"e1906dea1766dbcb71b9ca6f430ae275782d519b","unresolved":false,"context_lines":[{"line_number":24,"context_line":""},{"line_number":25,"context_line":"L3 plugin will verify the migration profile for the port on"},{"line_number":26,"context_line":"any port update and then take action to create routers in the"},{"line_number":27,"context_line":"respective agents if routers have not been created."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Depends-On: Ib1cc44bf9d01baf4d1f1d26c2a368a5ca7c6ab68"},{"line_number":30,"context_line":"Change-Id: Ibb62f012333cfdfd468bafdc0b4501aa46b4b54d"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"3afc51ec_522c00ab","line":27,"in_reply_to":"3afc51ec_18f30875","updated":"2016-03-14 16:43:27.000000000","message":"Done","commit_id":"bd01e100fcfe2e4719880940c5be6e80136eacb5"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"36a5e6cfa40a504a69caee24472a2fd7d4d0f60b","unresolved":false,"context_lines":[{"line_number":26,"context_line":"any port update and then take action to create routers in the"},{"line_number":27,"context_line":"respective agents if routers have not been created."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Depends-On: Ib1cc44bf9d01baf4d1f1d26c2a368a5ca7c6ab68"},{"line_number":30,"context_line":"Change-Id: Ibb62f012333cfdfd468bafdc0b4501aa46b4b54d"},{"line_number":31,"context_line":"Related-Bug: #1456073"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"3afc51ec_f4029c3d","line":29,"updated":"2016-03-11 23:21:26.000000000","message":"why are we making this depend on the Nova change? If this is just for testing, it could have been handled as a \u0027test\u0027 patch. If there\u0027s no other reason, consider remove the Depends-on so that this can merge without being blocked by the Nova change (assumed that Neutron can handle the lack of Nova support - which is what you need to support partial upgrades).","commit_id":"bd01e100fcfe2e4719880940c5be6e80136eacb5"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"e1906dea1766dbcb71b9ca6f430ae275782d519b","unresolved":false,"context_lines":[{"line_number":26,"context_line":"any port update and then take action to create routers in the"},{"line_number":27,"context_line":"respective agents if routers have not been created."},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"Depends-On: Ib1cc44bf9d01baf4d1f1d26c2a368a5ca7c6ab68"},{"line_number":30,"context_line":"Change-Id: Ibb62f012333cfdfd468bafdc0b4501aa46b4b54d"},{"line_number":31,"context_line":"Related-Bug: #1456073"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":22,"id":"3afc51ec_921cc878","line":29,"in_reply_to":"3afc51ec_f4029c3d","updated":"2016-03-14 16:43:27.000000000","message":"Done","commit_id":"bd01e100fcfe2e4719880940c5be6e80136eacb5"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"cbc2c244b69db4874dbda66f19797086024343a0","unresolved":false,"context_lines":[{"line_number":28,"context_line":"any port update and then take action to create routers in the"},{"line_number":29,"context_line":"respective agents if routers have not been created."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"If the live migration fails or if reverted, then the port"},{"line_number":32,"context_line":"binding profile attribute \u0027migrating_to\u0027 will be cleared from"},{"line_number":33,"context_line":"the port profile. In this case, the router and the fip namespace"},{"line_number":34,"context_line":"may be created on the destination node, but since the VM did"},{"line_number":35,"context_line":"not land on the destination node, it would not cause any issues,"},{"line_number":36,"context_line":"since the traffic will still be flowing out from the origination"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"df7087c5_eff2786f","line":33,"range":{"start_line":31,"start_character":0,"end_line":33,"end_character":17},"updated":"2018-03-20 22:36:40.000000000","message":"I just noticed this today when digging through these code paths, and I think there might be case that nova doesn\u0027t cleanup the migrating_to entry in the binding profile when live migration fails if you\u0027re using shared ephemeral disk, i.e. the rbd image backend for the libvirt driver.\n\n(5:29:37 PM) mriedem: i wonder if anyone that uses DVR also uses shared ephemeral storage (rbd imagebackend) and live migration (HP cloud anyone?)\n(5:29:53 PM) mriedem: because i\u0027m pretty sure we don\u0027t cleanup on failed live migration properly in that case\n(5:30:26 PM) mriedem: https://github.com/openstack/nova/blob/3fd863d8bf2fa1fc09acd08d976689462cffd2e3/nova/compute/manager.py#L6506 will also cleanup some stuff we put in the port\u0027s binding profile for DVR during live migration,\n(5:30:42 PM) mriedem: but if do_cleanup is False, which it is if you\u0027re using shared ephemeral storage, then we don\u0027t clean that up\n\nI don\u0027t know how much of a problem that is though.","commit_id":"f0bdb798fa14b7bd5649d98789e71803127dd9f7"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"53c4cf6b5821cd62d7b302ea93f089297d83b0e0","unresolved":false,"context_lines":[{"line_number":28,"context_line":"any port update and then take action to create routers in the"},{"line_number":29,"context_line":"respective agents if routers have not been created."},{"line_number":30,"context_line":""},{"line_number":31,"context_line":"If the live migration fails or if reverted, then the port"},{"line_number":32,"context_line":"binding profile attribute \u0027migrating_to\u0027 will be cleared from"},{"line_number":33,"context_line":"the port profile. In this case, the router and the fip namespace"},{"line_number":34,"context_line":"may be created on the destination node, but since the VM did"},{"line_number":35,"context_line":"not land on the destination node, it would not cause any issues,"},{"line_number":36,"context_line":"since the traffic will still be flowing out from the origination"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":25,"id":"df7087c5_af06bf1f","line":33,"range":{"start_line":31,"start_character":0,"end_line":33,"end_character":17},"in_reply_to":"df7087c5_eff2786f","updated":"2018-03-20 23:53:30.000000000","message":"https://bugs.launchpad.net/nova/+bug/1757292 for tracking this issue.","commit_id":"f0bdb798fa14b7bd5649d98789e71803127dd9f7"}],"neutron/db/l3_dvr_db.py":[{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"43b3fd86ab82885fef18e77f08c618c712e1588c","unresolved":false,"context_lines":[{"line_number":538,"context_line":"            device_owner \u003d\u003d l3_const.DEVICE_OWNER_AGENT_GW):"},{"line_number":539,"context_line":"            return (port_db[portbindings.HOST_ID], port_dest_host)"},{"line_number":540,"context_line":"        else:"},{"line_number":541,"context_line":"            return (None, None)"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def _get_agent_gw_ports_exist_for_network("},{"line_number":544,"context_line":"            self, context, network_id, host, agent_id):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a57f1b5_dfbea3d3","line":541,"updated":"2016-02-11 12:31:46.000000000","message":"I think at least, it should be:\n  return (None, port_dest_host)","commit_id":"a600b73331dcfe3307243ce6872947da707484d7"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"65bb828c78a91d123399c23c9709088d4fde3cca","unresolved":false,"context_lines":[{"line_number":538,"context_line":"            device_owner \u003d\u003d l3_const.DEVICE_OWNER_AGENT_GW):"},{"line_number":539,"context_line":"            return (port_db[portbindings.HOST_ID], port_dest_host)"},{"line_number":540,"context_line":"        else:"},{"line_number":541,"context_line":"            return (None, None)"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def _get_agent_gw_ports_exist_for_network("},{"line_number":544,"context_line":"            self, context, network_id, host, agent_id):"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a57f1b5_375a622b","line":541,"in_reply_to":"3a57f1b5_dfbea3d3","updated":"2016-02-11 16:50:53.000000000","message":"This was added, because there are some unit tests that failed which did not have portbinding or dest_host.","commit_id":"a600b73331dcfe3307243ce6872947da707484d7"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"43b3fd86ab82885fef18e77f08c618c712e1588c","unresolved":false,"context_lines":[{"line_number":572,"context_line":""},{"line_number":573,"context_line":"    def check_if_port_has_fip_and_agent_gw_port_on_host("},{"line_number":574,"context_line":"            self, context, port, host):"},{"line_number":575,"context_line":"        \"\"\"Function to get the floatingip of port and create agent_gw_port\"\"\""},{"line_number":576,"context_line":"        fip \u003d self._get_floatingip_on_port(context, port_id\u003dport[\u0027id\u0027])"},{"line_number":577,"context_line":"        if fip:"},{"line_number":578,"context_line":"            network_id \u003d fip.get(\u0027floating_network_id\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a57f1b5_f7f8634b","line":575,"updated":"2016-02-11 12:31:46.000000000","message":"nit: IMO, \"Function to get\" seems this method will return something, would you please update this docstring, and it\u0027s to create agent_gw_port if not exists.","commit_id":"a600b73331dcfe3307243ce6872947da707484d7"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"65bb828c78a91d123399c23c9709088d4fde3cca","unresolved":false,"context_lines":[{"line_number":572,"context_line":""},{"line_number":573,"context_line":"    def check_if_port_has_fip_and_agent_gw_port_on_host("},{"line_number":574,"context_line":"            self, context, port, host):"},{"line_number":575,"context_line":"        \"\"\"Function to get the floatingip of port and create agent_gw_port\"\"\""},{"line_number":576,"context_line":"        fip \u003d self._get_floatingip_on_port(context, port_id\u003dport[\u0027id\u0027])"},{"line_number":577,"context_line":"        if fip:"},{"line_number":578,"context_line":"            network_id \u003d fip.get(\u0027floating_network_id\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a57f1b5_d7150e40","line":575,"in_reply_to":"3a57f1b5_f7f8634b","updated":"2016-02-11 16:50:53.000000000","message":"will fix it.","commit_id":"a600b73331dcfe3307243ce6872947da707484d7"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"43b3fd86ab82885fef18e77f08c618c712e1588c","unresolved":false,"context_lines":[{"line_number":574,"context_line":"            self, context, port, host):"},{"line_number":575,"context_line":"        \"\"\"Function to get the floatingip of port and create agent_gw_port\"\"\""},{"line_number":576,"context_line":"        fip \u003d self._get_floatingip_on_port(context, port_id\u003dport[\u0027id\u0027])"},{"line_number":577,"context_line":"        if fip:"},{"line_number":578,"context_line":"            network_id \u003d fip.get(\u0027floating_network_id\u0027)"},{"line_number":579,"context_line":"            agent_gw_port \u003d self.create_fip_agent_gw_port_if_not_exists("},{"line_number":580,"context_line":"                context.elevated(), network_id, host)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a57f1b5_50de1d40","line":577,"updated":"2016-02-11 12:31:46.000000000","message":"It may be invalid, what shall this method do for case fip is None?","commit_id":"a600b73331dcfe3307243ce6872947da707484d7"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"65bb828c78a91d123399c23c9709088d4fde3cca","unresolved":false,"context_lines":[{"line_number":574,"context_line":"            self, context, port, host):"},{"line_number":575,"context_line":"        \"\"\"Function to get the floatingip of port and create agent_gw_port\"\"\""},{"line_number":576,"context_line":"        fip \u003d self._get_floatingip_on_port(context, port_id\u003dport[\u0027id\u0027])"},{"line_number":577,"context_line":"        if fip:"},{"line_number":578,"context_line":"            network_id \u003d fip.get(\u0027floating_network_id\u0027)"},{"line_number":579,"context_line":"            agent_gw_port \u003d self.create_fip_agent_gw_port_if_not_exists("},{"line_number":580,"context_line":"                context.elevated(), network_id, host)"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a57f1b5_741f786c","line":577,"in_reply_to":"3a57f1b5_50de1d40","updated":"2016-02-11 16:50:53.000000000","message":"If fip is none it will not do anything and return.","commit_id":"a600b73331dcfe3307243ce6872947da707484d7"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"a92d9999bdb33d01eed937aa36156a010f88699e","unresolved":false,"context_lines":[{"line_number":459,"context_line":"            if router:"},{"line_number":460,"context_line":"                router_floatingips \u003d router.get(l3_const.FLOATINGIP_KEY, [])"},{"line_number":461,"context_line":"                if router[\u0027distributed\u0027]:"},{"line_number":462,"context_line":"                    if ((floating_ip.get(\u0027host\u0027, None) !\u003d host) and"},{"line_number":463,"context_line":"                        floating_ip.get(\u0027dest_host\u0027) is None):"},{"line_number":464,"context_line":"                        continue"},{"line_number":465,"context_line":"                    LOG.debug(\"Floating IP host: %s\", floating_ip[\u0027host\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"bae84128_243a53e7","line":462,"range":{"start_line":462,"start_character":62,"end_line":462,"end_character":63},"updated":"2016-02-24 13:35:17.000000000","message":"not needed","commit_id":"f974f22799efa43acb8ab7df4bf4e0703b6d0840"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"a92d9999bdb33d01eed937aa36156a010f88699e","unresolved":false,"context_lines":[{"line_number":459,"context_line":"            if router:"},{"line_number":460,"context_line":"                router_floatingips \u003d router.get(l3_const.FLOATINGIP_KEY, [])"},{"line_number":461,"context_line":"                if router[\u0027distributed\u0027]:"},{"line_number":462,"context_line":"                    if ((floating_ip.get(\u0027host\u0027, None) !\u003d host) and"},{"line_number":463,"context_line":"                        floating_ip.get(\u0027dest_host\u0027) is None):"},{"line_number":464,"context_line":"                        continue"},{"line_number":465,"context_line":"                    LOG.debug(\"Floating IP host: %s\", floating_ip[\u0027host\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"bae84128_c4360702","line":462,"range":{"start_line":462,"start_character":24,"end_line":462,"end_character":25},"updated":"2016-02-24 13:35:17.000000000","message":"not needed","commit_id":"f974f22799efa43acb8ab7df4bf4e0703b6d0840"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"a9b24e58413ca343184c86dfaf41c85127b7db7b","unresolved":false,"context_lines":[{"line_number":459,"context_line":"            if router:"},{"line_number":460,"context_line":"                router_floatingips \u003d router.get(l3_const.FLOATINGIP_KEY, [])"},{"line_number":461,"context_line":"                if router[\u0027distributed\u0027]:"},{"line_number":462,"context_line":"                    if ((floating_ip.get(\u0027host\u0027, None) !\u003d host) and"},{"line_number":463,"context_line":"                        floating_ip.get(\u0027dest_host\u0027) is None):"},{"line_number":464,"context_line":"                        continue"},{"line_number":465,"context_line":"                    LOG.debug(\"Floating IP host: %s\", floating_ip[\u0027host\u0027])"}],"source_content_type":"text/x-python","patch_set":17,"id":"bae84128_c742770e","line":462,"range":{"start_line":462,"start_character":24,"end_line":462,"end_character":25},"in_reply_to":"bae84128_c4360702","updated":"2016-02-24 17:10:51.000000000","message":"Done","commit_id":"f974f22799efa43acb8ab7df4bf4e0703b6d0840"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"a92d9999bdb33d01eed937aa36156a010f88699e","unresolved":false,"context_lines":[{"line_number":501,"context_line":"                # check for the portbinding profile \u0027destination\u0027"},{"line_number":502,"context_line":"                # key for the host."},{"line_number":503,"context_line":"                if (port[portbindings.HOST_ID] \u003d\u003d host or"},{"line_number":504,"context_line":"                    (host in port.get(portbindings.PROFILE).values())):"},{"line_number":505,"context_line":"                    port_dict.update({port[\u0027id\u0027]: port})"},{"line_number":506,"context_line":"            # Add the port binding host to the floatingip dictionary"},{"line_number":507,"context_line":"            for fip in floating_ips:"}],"source_content_type":"text/x-python","patch_set":17,"id":"bae84128_5f112051","line":504,"range":{"start_line":504,"start_character":21,"end_line":504,"end_character":68},"updated":"2016-02-24 13:35:17.000000000","message":"this check should be more strict","commit_id":"f974f22799efa43acb8ab7df4bf4e0703b6d0840"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"a9b24e58413ca343184c86dfaf41c85127b7db7b","unresolved":false,"context_lines":[{"line_number":501,"context_line":"                # check for the portbinding profile \u0027destination\u0027"},{"line_number":502,"context_line":"                # key for the host."},{"line_number":503,"context_line":"                if (port[portbindings.HOST_ID] \u003d\u003d host or"},{"line_number":504,"context_line":"                    (host in port.get(portbindings.PROFILE).values())):"},{"line_number":505,"context_line":"                    port_dict.update({port[\u0027id\u0027]: port})"},{"line_number":506,"context_line":"            # Add the port binding host to the floatingip dictionary"},{"line_number":507,"context_line":"            for fip in floating_ips:"}],"source_content_type":"text/x-python","patch_set":17,"id":"bae84128_67544bc9","line":504,"range":{"start_line":504,"start_character":21,"end_line":504,"end_character":68},"in_reply_to":"bae84128_5f112051","updated":"2016-02-24 17:10:51.000000000","message":"Done","commit_id":"f974f22799efa43acb8ab7df4bf4e0703b6d0840"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"a92d9999bdb33d01eed937aa36156a010f88699e","unresolved":false,"context_lines":[{"line_number":538,"context_line":"            device_owner \u003d\u003d l3_const.DEVICE_OWNER_AGENT_GW):"},{"line_number":539,"context_line":"            return (port_db[portbindings.HOST_ID], port_dest_host)"},{"line_number":540,"context_line":"        else:"},{"line_number":541,"context_line":"            return (None, port_dest_host)"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def _get_agent_gw_ports_exist_for_network("},{"line_number":544,"context_line":"            self, context, network_id, host, agent_id):"}],"source_content_type":"text/x-python","patch_set":17,"id":"bae84128_647a9bbe","line":541,"range":{"start_line":541,"start_character":19,"end_line":541,"end_character":41},"updated":"2016-02-24 13:35:17.000000000","message":"please make a separate function, returning two hosts is really confusing","commit_id":"f974f22799efa43acb8ab7df4bf4e0703b6d0840"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"a9b24e58413ca343184c86dfaf41c85127b7db7b","unresolved":false,"context_lines":[{"line_number":538,"context_line":"            device_owner \u003d\u003d l3_const.DEVICE_OWNER_AGENT_GW):"},{"line_number":539,"context_line":"            return (port_db[portbindings.HOST_ID], port_dest_host)"},{"line_number":540,"context_line":"        else:"},{"line_number":541,"context_line":"            return (None, port_dest_host)"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def _get_agent_gw_ports_exist_for_network("},{"line_number":544,"context_line":"            self, context, network_id, host, agent_id):"}],"source_content_type":"text/x-python","patch_set":17,"id":"bae84128_c759d7fe","line":541,"range":{"start_line":541,"start_character":19,"end_line":541,"end_character":41},"in_reply_to":"bae84128_647a9bbe","updated":"2016-02-24 17:10:51.000000000","message":"Done","commit_id":"f974f22799efa43acb8ab7df4bf4e0703b6d0840"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"cb45b842c731959de3ebb95af3980faca608a659","unresolved":false,"context_lines":[{"line_number":504,"context_line":"                port_in_migration \u003d ("},{"line_number":505,"context_line":"                    port_profile.get(\u0027migration_status\u0027) \u003d\u003d \u0027migration\u0027 and"},{"line_number":506,"context_line":"                    port_profile.get(\u0027destination\u0027) \u003d\u003d host)"},{"line_number":507,"context_line":"                if (port[portbindings.HOST_ID] \u003d\u003d host or"},{"line_number":508,"context_line":"                    port_in_migration):"},{"line_number":509,"context_line":"                    port_dict.update({port[\u0027id\u0027]: port})"},{"line_number":510,"context_line":"            # Add the port binding host to the floatingip dictionary"},{"line_number":511,"context_line":"            for fip in floating_ips:"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_7ecdd45c","line":508,"range":{"start_line":507,"start_character":0,"end_line":508,"end_character":39},"updated":"2016-02-25 06:12:52.000000000","message":"nit: this could be in one line","commit_id":"e7f22665dbb47f5288278b034863893c5f4106d3"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"cb45b842c731959de3ebb95af3980faca608a659","unresolved":false,"context_lines":[{"line_number":538,"context_line":"        device_owner \u003d port_db[\u0027device_owner\u0027] if port_db else \"\""},{"line_number":539,"context_line":"        if (n_utils.is_dvr_serviced(device_owner) or"},{"line_number":540,"context_line":"            device_owner \u003d\u003d l3_const.DEVICE_OWNER_AGENT_GW):"},{"line_number":541,"context_line":"            return (port_db[portbindings.HOST_ID])"},{"line_number":542,"context_line":""},{"line_number":543,"context_line":"    def _get_dvr_migrating_service_port_hostid("},{"line_number":544,"context_line":"        self, context, port_id, port\u003dNone):"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_febf245e","line":541,"range":{"start_line":541,"start_character":19,"end_line":541,"end_character":50},"updated":"2016-02-25 06:12:52.000000000","message":"I don\u0027t think the parenthesis is needed here.","commit_id":"e7f22665dbb47f5288278b034863893c5f4106d3"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"cb45b842c731959de3ebb95af3980faca608a659","unresolved":false,"context_lines":[{"line_number":582,"context_line":"                if host_id:"},{"line_number":583,"context_line":"                    return"},{"line_number":584,"context_line":""},{"line_number":585,"context_line":"    def check_if_port_has_fip_and_agent_gw_port_on_host("},{"line_number":586,"context_line":"            self, context, port, host):"},{"line_number":587,"context_line":"        \"\"\"Create fip agent_gw_port on host if not exists\"\"\""},{"line_number":588,"context_line":"        fip \u003d self._get_floatingip_on_port(context, port_id\u003dport[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_7e22f402","line":585,"range":{"start_line":585,"start_character":8,"end_line":585,"end_character":55},"updated":"2016-02-25 06:12:52.000000000","message":"It is named \"check\" function, but it is actually a \"create\" function here.","commit_id":"e7f22665dbb47f5288278b034863893c5f4106d3"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"cb45b842c731959de3ebb95af3980faca608a659","unresolved":false,"context_lines":[{"line_number":591,"context_line":"        network_id \u003d fip.get(\u0027floating_network_id\u0027)"},{"line_number":592,"context_line":"        agent_gw_port \u003d self.create_fip_agent_gw_port_if_not_exists("},{"line_number":593,"context_line":"            context.elevated(), network_id, host)"},{"line_number":594,"context_line":"        LOG.debug(\"Port-in-Migration: Floatingip Agent Gateway port\""},{"line_number":595,"context_line":"                  \" %(gw)s created for the future host: %(dest_host)s\","},{"line_number":596,"context_line":"                  {\u0027gw\u0027: agent_gw_port,"},{"line_number":597,"context_line":"                   \u0027dest_host\u0027: host})"},{"line_number":598,"context_line":""}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_9e6c1838","line":595,"range":{"start_line":594,"start_character":63,"end_line":595,"end_character":25},"updated":"2016-02-25 06:12:52.000000000","message":"nit: It is usually\n\n\"...port \"\n\"%(gw)s ...\"","commit_id":"e7f22665dbb47f5288278b034863893c5f4106d3"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"cb45b842c731959de3ebb95af3980faca608a659","unresolved":false,"context_lines":[{"line_number":815,"context_line":"            return"},{"line_number":816,"context_line":""},{"line_number":817,"context_line":"        if is_distributed_router(router):"},{"line_number":818,"context_line":"            host \u003d self._get_dvr_service_port_hostid("},{"line_number":819,"context_line":"                context, fixed_port_id)"},{"line_number":820,"context_line":"            dest_host \u003d self._get_dvr_migrating_service_port_hostid("},{"line_number":821,"context_line":"                context, fixed_port_id)"},{"line_number":822,"context_line":"            self.l3_rpc_notifier.routers_updated_on_host("}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_feca8419","line":819,"range":{"start_line":818,"start_character":0,"end_line":819,"end_character":39},"updated":"2016-02-25 06:12:52.000000000","message":"no related change","commit_id":"e7f22665dbb47f5288278b034863893c5f4106d3"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"cb50c949627e7764af175c04036dd51b86e9ca96","unresolved":false,"context_lines":[{"line_number":564,"context_line":"            port_dest_host \u003d port_profile.get(\u0027migrating_to\u0027)"},{"line_number":565,"context_line":"        device_owner \u003d port_db[\u0027device_owner\u0027] if port_db else \"\""},{"line_number":566,"context_line":"        if n_utils.is_dvr_serviced(device_owner):"},{"line_number":567,"context_line":"            return port_dest_host"},{"line_number":568,"context_line":""},{"line_number":569,"context_line":"    def _get_agent_gw_ports_exist_for_network("},{"line_number":570,"context_line":"            self, context, network_id, host, agent_id):"}],"source_content_type":"text/x-python","patch_set":25,"id":"3afc51ec_aa3b3a37","line":567,"updated":"2016-03-15 01:27:39.000000000","message":"Looking at this method for the 25th time :) and I can already see a re-factor to get rid of the local variable, but I\u0027ll save that for Newton.","commit_id":"f0bdb798fa14b7bd5649d98789e71803127dd9f7"}],"neutron/db/l3_dvrscheduler_db.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b8697bcf1d54a3b19541b11d96b9adf962491191","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        if not dest_host:"},{"line_number":88,"context_line":"            port_host \u003d port[portbindings.HOST_ID]"},{"line_number":89,"context_line":"        else:"},{"line_number":90,"context_line":"            port_host \u003d dest_host"},{"line_number":91,"context_line":"        l3_agent_on_host \u003d (self.get_l3_agents("},{"line_number":92,"context_line":"            context, filters\u003d{\u0027host\u0027: [port_host]}) or [None])[0]"},{"line_number":93,"context_line":"        if not l3_agent_on_host:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_4cc8fd55","line":90,"updated":"2016-02-03 23:21:08.000000000","message":"nit: you can remove if/else and replace with:\n\nport_host \u003d dest_host or port[portbindings.HOST_ID]","commit_id":"911210f67bc6cc5ae71c69513f901a0b43a481f9"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"1b84957e49fcc34662cf853bfb139234eecc5c57","unresolved":false,"context_lines":[{"line_number":87,"context_line":"        if not dest_host:"},{"line_number":88,"context_line":"            port_host \u003d port[portbindings.HOST_ID]"},{"line_number":89,"context_line":"        else:"},{"line_number":90,"context_line":"            port_host \u003d dest_host"},{"line_number":91,"context_line":"        l3_agent_on_host \u003d (self.get_l3_agents("},{"line_number":92,"context_line":"            context, filters\u003d{\u0027host\u0027: [port_host]}) or [None])[0]"},{"line_number":93,"context_line":"        if not l3_agent_on_host:"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_eae4243c","line":90,"in_reply_to":"5a5ae5dd_4cc8fd55","updated":"2016-02-03 23:29:25.000000000","message":"ok we can fix it.","commit_id":"911210f67bc6cc5ae71c69513f901a0b43a481f9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b8697bcf1d54a3b19541b11d96b9adf962491191","unresolved":false,"context_lines":[{"line_number":376,"context_line":"            new_port_profile_status \u003d\u003d \u0027migration\u0027)"},{"line_number":377,"context_line":"        no_portbinding_host_change \u003d ("},{"line_number":378,"context_line":"            original_port.get(portbindings."},{"line_number":379,"context_line":"            HOST_ID) \u003d\u003d new_port.get(portbindings.HOST_ID))"},{"line_number":380,"context_line":"        dvr_service_port_on_pre_migration \u003d ("},{"line_number":381,"context_line":"            profile_updated and"},{"line_number":382,"context_line":"            is_migration_profile and no_portbinding_host_change and"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_6f5da6e8","line":379,"updated":"2016-02-03 23:21:08.000000000","message":"There\u0027s a similar check to this on L395+, so I think this can be tweaked a little to not re-check.","commit_id":"911210f67bc6cc5ae71c69513f901a0b43a481f9"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"1b84957e49fcc34662cf853bfb139234eecc5c57","unresolved":false,"context_lines":[{"line_number":376,"context_line":"            new_port_profile_status \u003d\u003d \u0027migration\u0027)"},{"line_number":377,"context_line":"        no_portbinding_host_change \u003d ("},{"line_number":378,"context_line":"            original_port.get(portbindings."},{"line_number":379,"context_line":"            HOST_ID) \u003d\u003d new_port.get(portbindings.HOST_ID))"},{"line_number":380,"context_line":"        dvr_service_port_on_pre_migration \u003d ("},{"line_number":381,"context_line":"            profile_updated and"},{"line_number":382,"context_line":"            is_migration_profile and no_portbinding_host_change and"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_0ac5008d","line":379,"in_reply_to":"5a5ae5dd_6f5da6e8","updated":"2016-02-03 23:29:25.000000000","message":"yes we might have to tweak a little bit since those two condition checks are not the same.","commit_id":"911210f67bc6cc5ae71c69513f901a0b43a481f9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b8697bcf1d54a3b19541b11d96b9adf962491191","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            l3plugin.dvr_handle_new_service_port("},{"line_number":388,"context_line":"                context, new_port, dest_host\u003ddestination_host)"},{"line_number":389,"context_line":"            l3plugin.update_arp_entry_for_dvr_service_port("},{"line_number":390,"context_line":"                context, new_port)"},{"line_number":391,"context_line":"        is_fixed_ips_changed \u003d ("},{"line_number":392,"context_line":"            \u0027fixed_ips\u0027 in new_port and"},{"line_number":393,"context_line":"            \u0027fixed_ips\u0027 in original_port and"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_6f404657","line":390,"updated":"2016-02-03 23:21:08.000000000","message":"So the plugin will get called here, then again on L401/402 because most of the same conditions are valid - binding host changed and port is DVR serviced.  That just won\u0027t use dest_host argument.  Do we want that or just one call?","commit_id":"911210f67bc6cc5ae71c69513f901a0b43a481f9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6c63174ba43ece1766643702d361923b12f20554","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            l3plugin.dvr_handle_new_service_port("},{"line_number":388,"context_line":"                context, new_port, dest_host\u003ddestination_host)"},{"line_number":389,"context_line":"            l3plugin.update_arp_entry_for_dvr_service_port("},{"line_number":390,"context_line":"                context, new_port)"},{"line_number":391,"context_line":"        is_fixed_ips_changed \u003d ("},{"line_number":392,"context_line":"            \u0027fixed_ips\u0027 in new_port and"},{"line_number":393,"context_line":"            \u0027fixed_ips\u0027 in original_port and"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_56a0829f","line":390,"in_reply_to":"5a5ae5dd_2a70fc71","updated":"2016-02-04 02:02:44.000000000","message":"So is there supposed to be a \u0027return\u0027 here then?  I guess my question is are both necessary?","commit_id":"911210f67bc6cc5ae71c69513f901a0b43a481f9"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"1b84957e49fcc34662cf853bfb139234eecc5c57","unresolved":false,"context_lines":[{"line_number":387,"context_line":"            l3plugin.dvr_handle_new_service_port("},{"line_number":388,"context_line":"                context, new_port, dest_host\u003ddestination_host)"},{"line_number":389,"context_line":"            l3plugin.update_arp_entry_for_dvr_service_port("},{"line_number":390,"context_line":"                context, new_port)"},{"line_number":391,"context_line":"        is_fixed_ips_changed \u003d ("},{"line_number":392,"context_line":"            \u0027fixed_ips\u0027 in new_port and"},{"line_number":393,"context_line":"            \u0027fixed_ips\u0027 in original_port and"}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_2a70fc71","line":390,"in_reply_to":"5a5ae5dd_6f404657","updated":"2016-02-03 23:29:25.000000000","message":"I felt that having each use cases separate will make it more clear and simple.","commit_id":"911210f67bc6cc5ae71c69513f901a0b43a481f9"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"d5cf72deaa427b6360a829490792e8abaffe7572","unresolved":false,"context_lines":[{"line_number":381,"context_line":"            n_utils.is_dvr_serviced(new_device_owner))"},{"line_number":382,"context_line":"        if dvr_service_port_on_pre_migration:"},{"line_number":383,"context_line":"            destination_host \u003d new_port_profile.get(\u0027destination\u0027)"},{"line_number":384,"context_line":"            # Pre create the routers on the destination host"},{"line_number":385,"context_line":"            l3plugin.dvr_handle_new_service_port("},{"line_number":386,"context_line":"                context, new_port, dest_host\u003ddestination_host)"},{"line_number":387,"context_line":"            l3plugin.update_arp_entry_for_dvr_service_port("}],"source_content_type":"text/x-python","patch_set":6,"id":"5a5ae5dd_2d6255ae","line":384,"updated":"2016-02-04 00:23:28.000000000","message":"Brian I have not addressed the comment to tweak the l3plugin call. You mentioned that you had a tweaked one.\n\nI just fixed the \"migration_status\" attribute name conversion from nova.","commit_id":"a241c2dae4a12405b47dc70dc061ee2bc255d06a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"bd85f9bd782afe5223a69d0d75a4a4be3666b516","unresolved":false,"context_lines":[{"line_number":293,"context_line":"                for router_id in (router_ids - result_set):"},{"line_number":294,"context_line":"                    subnet_ids \u003d self.get_subnet_ids_on_router("},{"line_number":295,"context_line":"                        context, router_id)"},{"line_number":296,"context_line":"                    if subnet_ids and self.check_dvr_serviceable_ports_on_host("},{"line_number":297,"context_line":"                            context, agent_db[\u0027host\u0027], list(subnet_ids)):"},{"line_number":298,"context_line":"                        result_set.add(router_id)"},{"line_number":299,"context_line":""}],"source_content_type":"text/x-python","patch_set":8,"id":"5a5ae5dd_12217b9f","line":296,"range":{"start_line":296,"start_character":37,"end_line":296,"end_character":78},"updated":"2016-02-04 23:43:41.000000000","message":"Brian: It is failing here, since this function is checking against the \"portbinding:host_id to the given \"host\".\n\nWe should probably change the filter in that function \"check_dvr_serviceable_ports_on_host\" to filter based on the \n\u0027portbinding:host_id\" or if the \"portbinding:profile has \u0027destination\" \u003d\u003d \u0027host\u0027.\n\nI need some sql experts to provide me some filter/query that would match that scenario.\n\nCan you take a look at it.","commit_id":"0b20eda542f0feb114b7cfe0b6b64168204a2a84"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5ea7cebb03008405f02c535e02ab999864139828","unresolved":false,"context_lines":[{"line_number":313,"context_line":"    no_portbinding_host_change \u003d ("},{"line_number":314,"context_line":"        new_port.get(portbindings.HOST_ID) and"},{"line_number":315,"context_line":"        (original_port.get(portbindings."},{"line_number":316,"context_line":"        HOST_ID) \u003d\u003d new_port.get(portbindings.HOST_ID)))"},{"line_number":317,"context_line":"    dvr_service_port_on_pre_migration \u003d ("},{"line_number":318,"context_line":"        is_migration_profile and no_portbinding_host_change and"},{"line_number":319,"context_line":"        n_utils.is_dvr_serviced(new_port.get(\u0027device_owner\u0027, \u0027\u0027)))"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a57f1b5_50e4393a","line":316,"updated":"2016-02-09 22:33:40.000000000","message":"So this is checking of the hosts are the same","commit_id":"2b0dcb6caf7b66b55ea69d5c9ae1a4171fc716cf"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"0b9a24f6b59a3a17eb6282718a08e1931d485c71","unresolved":false,"context_lines":[{"line_number":313,"context_line":"    no_portbinding_host_change \u003d ("},{"line_number":314,"context_line":"        new_port.get(portbindings.HOST_ID) and"},{"line_number":315,"context_line":"        (original_port.get(portbindings."},{"line_number":316,"context_line":"        HOST_ID) \u003d\u003d new_port.get(portbindings.HOST_ID)))"},{"line_number":317,"context_line":"    dvr_service_port_on_pre_migration \u003d ("},{"line_number":318,"context_line":"        is_migration_profile and no_portbinding_host_change and"},{"line_number":319,"context_line":"        n_utils.is_dvr_serviced(new_port.get(\u0027device_owner\u0027, \u0027\u0027)))"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a57f1b5_90ff1134","line":316,"in_reply_to":"3a57f1b5_50e4393a","updated":"2016-02-09 22:37:00.000000000","message":"Yes this is checking if the port already has the host_binding and it is just a profile update and not a portbinding update.","commit_id":"2b0dcb6caf7b66b55ea69d5c9ae1a4171fc716cf"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5ea7cebb03008405f02c535e02ab999864139828","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        (original_port.get(portbindings."},{"line_number":316,"context_line":"        HOST_ID) \u003d\u003d new_port.get(portbindings.HOST_ID)))"},{"line_number":317,"context_line":"    dvr_service_port_on_pre_migration \u003d ("},{"line_number":318,"context_line":"        is_migration_profile and no_portbinding_host_change and"},{"line_number":319,"context_line":"        n_utils.is_dvr_serviced(new_port.get(\u0027device_owner\u0027, \u0027\u0027)))"},{"line_number":320,"context_line":"    if dvr_service_port_on_pre_migration:"},{"line_number":321,"context_line":"        destination_host \u003d new_port_profile.get(\u0027destination\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a57f1b5_f03685b3","line":318,"updated":"2016-02-09 22:33:40.000000000","message":"And this will then trigger a pre-migration if the hosts are the same?  I\u0027m possibly mis-understanding this step.","commit_id":"2b0dcb6caf7b66b55ea69d5c9ae1a4171fc716cf"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"0b9a24f6b59a3a17eb6282718a08e1931d485c71","unresolved":false,"context_lines":[{"line_number":315,"context_line":"        (original_port.get(portbindings."},{"line_number":316,"context_line":"        HOST_ID) \u003d\u003d new_port.get(portbindings.HOST_ID)))"},{"line_number":317,"context_line":"    dvr_service_port_on_pre_migration \u003d ("},{"line_number":318,"context_line":"        is_migration_profile and no_portbinding_host_change and"},{"line_number":319,"context_line":"        n_utils.is_dvr_serviced(new_port.get(\u0027device_owner\u0027, \u0027\u0027)))"},{"line_number":320,"context_line":"    if dvr_service_port_on_pre_migration:"},{"line_number":321,"context_line":"        destination_host \u003d new_port_profile.get(\u0027destination\u0027)"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a57f1b5_3093bdfc","line":318,"in_reply_to":"3a57f1b5_f03685b3","updated":"2016-02-09 22:37:00.000000000","message":"This is just confirming that it is in a pre-migration state and not just port-binding state.","commit_id":"2b0dcb6caf7b66b55ea69d5c9ae1a4171fc716cf"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"43b3fd86ab82885fef18e77f08c618c712e1588c","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                n_const.DEVICE_OWNER_COMPUTE_PREFIX),"},{"line_number":324,"context_line":"            models_v2.Port.device_owner.in_("},{"line_number":325,"context_line":"                n_utils.get_other_dvr_serviced_device_owners()))"},{"line_number":326,"context_line":"        ports_query \u003d ports_query.filter(owner_filter)"},{"line_number":327,"context_line":"        ports \u003d ["},{"line_number":328,"context_line":"            core_plugin._make_port_dict(port, process_extensions\u003dTrue)"},{"line_number":329,"context_line":"            for port in ports_query.all()"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a57f1b5_fc54c221","line":326,"updated":"2016-02-11 12:31:46.000000000","message":"Question: Can we keep previous quick returning for True here?\nI mean for non-migration case, no need to call _make_port_dict and check destination host in following lines.\n\nI may make a mistake, I think this patch is for live-migration with floatingip scenario. If so, query with filters contains port id in FloatingIP.fixed_port_id may help us get less ports to process in following lines.","commit_id":"a600b73331dcfe3307243ce6872947da707484d7"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"65bb828c78a91d123399c23c9709088d4fde3cca","unresolved":false,"context_lines":[{"line_number":323,"context_line":"                n_const.DEVICE_OWNER_COMPUTE_PREFIX),"},{"line_number":324,"context_line":"            models_v2.Port.device_owner.in_("},{"line_number":325,"context_line":"                n_utils.get_other_dvr_serviced_device_owners()))"},{"line_number":326,"context_line":"        ports_query \u003d ports_query.filter(owner_filter)"},{"line_number":327,"context_line":"        ports \u003d ["},{"line_number":328,"context_line":"            core_plugin._make_port_dict(port, process_extensions\u003dTrue)"},{"line_number":329,"context_line":"            for port in ports_query.all()"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a57f1b5_1797263b","line":326,"in_reply_to":"3a57f1b5_fc54c221","updated":"2016-02-11 16:50:53.000000000","message":"This function is not only for the live migration but it is also used for starting and stoping the routers in the compute node.\n\nIn the case of the previous model, we were filtering based on the \u0027host\u0027 binding, but here if we filter based on the host, in the first place, we might not have a matching host on the port and so we might not get a valid result.\n\nSo we might have to filter based on subnet and then look at the ports host and profile for the data. Either one matches, then we send a true back.\n\nIf there is an easy way to pass a filter similar to the one shown below, I will be happy to add it.\n\nbinding_filter \u003d or_(\n    ml2_model.Portbinding.host \u003d\u003d host,\n    ml2_model.Portbinding.Profile \u003d\u003d {\n        \u0027migration_status\u0027: migration\u0027,\n        \u0027destination\u0027: host})","commit_id":"a600b73331dcfe3307243ce6872947da707484d7"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"43b3fd86ab82885fef18e77f08c618c712e1588c","unresolved":false,"context_lines":[{"line_number":409,"context_line":"                }"},{"line_number":410,"context_line":"                _notify_port_delete("},{"line_number":411,"context_line":"                    event, resource, trigger, **removed_router_args)"},{"line_number":412,"context_line":"            if not is_new_device_dvr_serviced:"},{"line_number":413,"context_line":"                return"},{"line_number":414,"context_line":"        is_fixed_ips_changed \u003d ("},{"line_number":415,"context_line":"            \u0027fixed_ips\u0027 in new_port and"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a57f1b5_223794e4","line":412,"updated":"2016-02-11 12:31:46.000000000","message":"unrelated changing?","commit_id":"a600b73331dcfe3307243ce6872947da707484d7"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"65bb828c78a91d123399c23c9709088d4fde3cca","unresolved":false,"context_lines":[{"line_number":409,"context_line":"                }"},{"line_number":410,"context_line":"                _notify_port_delete("},{"line_number":411,"context_line":"                    event, resource, trigger, **removed_router_args)"},{"line_number":412,"context_line":"            if not is_new_device_dvr_serviced:"},{"line_number":413,"context_line":"                return"},{"line_number":414,"context_line":"        is_fixed_ips_changed \u003d ("},{"line_number":415,"context_line":"            \u0027fixed_ips\u0027 in new_port and"}],"source_content_type":"text/x-python","patch_set":14,"id":"3a57f1b5_770bfa8e","line":412,"in_reply_to":"3a57f1b5_223794e4","updated":"2016-02-11 16:50:53.000000000","message":"This was based on a feedback from the previous review from brian to reduce some of the code.","commit_id":"a600b73331dcfe3307243ce6872947da707484d7"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"9022ee00df319ca580b80d803ff1af8abad5b5f3","unresolved":false,"context_lines":[{"line_number":324,"context_line":"            models_v2.Port.device_owner.in_("},{"line_number":325,"context_line":"                n_utils.get_other_dvr_serviced_device_owners()))"},{"line_number":326,"context_line":"        ports_query \u003d ports_query.filter(owner_filter)"},{"line_number":327,"context_line":"        ports \u003d ["},{"line_number":328,"context_line":"            core_plugin._make_port_dict(port, process_extensions\u003dTrue)"},{"line_number":329,"context_line":"            for port in ports_query.all()"},{"line_number":330,"context_line":"        ]"}],"source_content_type":"text/x-python","patch_set":15,"id":"3a57f1b5_db49b4b8","line":327,"range":{"start_line":327,"start_character":0,"end_line":327,"end_character":8},"updated":"2016-02-11 19:07:09.000000000","message":"I could have prevented the new loop on ports. If this function would have worked better as shown below.\n\n# db query will return ports for all subnets if subnet_ids is empty,\n        # so need to check first\n        if not subnet_ids:\n            return False\n        migration_profile \u003d {\n            \u0027migration_status\u0027: \u0027migration\u0027,\n            \u0027destination\u0027: host}\n        #pdb.set_trace()\n        Binding \u003d ml2_models.PortBinding\n        IPAllocation \u003d models_v2.IPAllocation\n        Port \u003d models_v2.Port\n\n        query \u003d context.session.query(Binding)\n        query \u003d query.join(Binding.port)\n        query \u003d query.join(Port.fixed_ips)\n        query \u003d query.filter(\n            models_v2.IPAllocation.subnet_id.in_(subnet_ids))\n        LOG.warn(_LW(\"SWAMI: SWAMI: Check_dvr: %s\"), query.all())\n        device_filter \u003d or_(\n            models_v2.Port.device_owner.startswith(\n                n_const.DEVICE_OWNER_COMPUTE_PREFIX),\n            models_v2.Port.device_owner.in_(\n                n_utils.get_other_dvr_serviced_device_owners()))\n        orig_query \u003d query.filter(device_filter)\n        LOG.warn(_LW(\"SWAMI: SWAMI: Check_dvr: %s\"), orig_query.all())\n        host_filter \u003d or_(\n            ml2_models.PortBinding.host \u003d\u003d host,\n            ml2_models.PortBinding.profile \u003d\u003d str(migration_profile))\n        new_query \u003d orig_query.filter(host_filter)\n        LOG.warn(_LW(\"SWAMI: SWAMI: Check_dvr: %s\"), new_query.all())\n        return new_query.first() is not None\n\nI am seeing an issue with the string mismatch when trying to filter by \"profile\".\n\nAny ideas.","commit_id":"6a45be0b8a7ba7ccf66dd4e7b3d359d556657b9a"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"525918c7349f44b3fb107a77a3549872be09b4f7","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        query \u003d query.filter(device_filter)"},{"line_number":333,"context_line":"        host_filter \u003d or_("},{"line_number":334,"context_line":"            ml2_models.PortBinding.host \u003d\u003d host,"},{"line_number":335,"context_line":"            ml2_models.PortBinding.profile.contains(host))"},{"line_number":336,"context_line":"        query \u003d query.filter(host_filter)"},{"line_number":337,"context_line":"        return query.first() is not None"},{"line_number":338,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"1a54edaf_c3bb9674","line":335,"updated":"2016-02-13 02:23:35.000000000","message":"Great, contains should work.","commit_id":"c032e5e8d46986e24467acf11eab331d5f7f773a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"a484f653785ba8b0950ffa900f90c26b3dcea587","unresolved":false,"context_lines":[{"line_number":332,"context_line":"        query \u003d query.filter(device_filter)"},{"line_number":333,"context_line":"        host_filter \u003d or_("},{"line_number":334,"context_line":"            ml2_models.PortBinding.host \u003d\u003d host,"},{"line_number":335,"context_line":"            ml2_models.PortBinding.profile.contains(host))"},{"line_number":336,"context_line":"        query \u003d query.filter(host_filter)"},{"line_number":337,"context_line":"        return query.first() is not None"},{"line_number":338,"context_line":""}],"source_content_type":"text/x-python","patch_set":16,"id":"bae84128_21e461aa","line":335,"in_reply_to":"1a54edaf_c3bb9674","updated":"2016-02-23 02:03:01.000000000","message":"Thanks.","commit_id":"c032e5e8d46986e24467acf11eab331d5f7f773a"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"cb45b842c731959de3ebb95af3980faca608a659","unresolved":false,"context_lines":[{"line_number":91,"context_line":"            return"},{"line_number":92,"context_line":""},{"line_number":93,"context_line":"        if dest_host:"},{"line_number":94,"context_line":"            # Makesure we create the floatingip agent gateway port"},{"line_number":95,"context_line":"            # for the destination node if fip is associated with this"},{"line_number":96,"context_line":"            # fixed port"},{"line_number":97,"context_line":"            l3plugin \u003d manager.NeutronManager.get_service_plugins().get("}],"source_content_type":"text/x-python","patch_set":19,"id":"bae84128_bcabe5d5","line":94,"range":{"start_line":94,"start_character":14,"end_line":94,"end_character":22},"updated":"2016-02-25 06:12:52.000000000","message":"nit: \"Make sure\"","commit_id":"e7f22665dbb47f5288278b034863893c5f4106d3"},{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"2d4ca374db922e8ddaa58962fbf3e341f89d4f2a","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            # fixed port"},{"line_number":97,"context_line":"            l3plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":98,"context_line":"                service_constants.L3_ROUTER_NAT)"},{"line_number":99,"context_line":"            l3plugin.\\"},{"line_number":100,"context_line":"                check_for_fip_and_create_agent_gw_port_on_host_if_not_exists("},{"line_number":101,"context_line":"                    context, port, dest_host)"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9aed3d3a_8e922c56","line":99,"updated":"2016-02-26 02:55:50.000000000","message":"small nit: how about use parentheses to avoid using anti-slash.","commit_id":"dd57ca9198a08674df3d440bc38a44d54c690c78"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"cca84a850053df87e8e00cc10dc5df10c7983e16","unresolved":false,"context_lines":[{"line_number":96,"context_line":"            # fixed port"},{"line_number":97,"context_line":"            l3plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":98,"context_line":"                service_constants.L3_ROUTER_NAT)"},{"line_number":99,"context_line":"            l3plugin.\\"},{"line_number":100,"context_line":"                check_for_fip_and_create_agent_gw_port_on_host_if_not_exists("},{"line_number":101,"context_line":"                    context, port, dest_host)"},{"line_number":102,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"9aed3d3a_3d12a109","line":99,"in_reply_to":"9aed3d3a_8e922c56","updated":"2016-02-29 18:39:19.000000000","message":"Done","commit_id":"dd57ca9198a08674df3d440bc38a44d54c690c78"},{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"d643c3997e1a29c70fdd4dbe8e4b74223d89f4a5","unresolved":false,"context_lines":[{"line_number":97,"context_line":"            l3plugin \u003d manager.NeutronManager.get_service_plugins().get("},{"line_number":98,"context_line":"                service_constants.L3_ROUTER_NAT)"},{"line_number":99,"context_line":"            ("},{"line_number":100,"context_line":"                l3plugin."},{"line_number":101,"context_line":"                check_for_fip_and_create_agent_gw_port_on_host_if_not_exists("},{"line_number":102,"context_line":"                    context, port, dest_host))"},{"line_number":103,"context_line":""}],"source_content_type":"text/x-python","patch_set":22,"id":"3afc51ec_14ef48e9","line":100,"updated":"2016-03-11 23:11:38.000000000","message":"this is a weird indentation.","commit_id":"bd01e100fcfe2e4719880940c5be6e80136eacb5"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"cb50c949627e7764af175c04036dd51b86e9ca96","unresolved":false,"context_lines":[{"line_number":98,"context_line":"                service_constants.L3_ROUTER_NAT)"},{"line_number":99,"context_line":"            ("},{"line_number":100,"context_line":"                l3plugin."},{"line_number":101,"context_line":"                check_for_fip_and_create_agent_gw_port_on_host_if_not_exists("},{"line_number":102,"context_line":"                    context, port, dest_host))"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"        subnet_ids \u003d [ip[\u0027subnet_id\u0027] for ip in port[\u0027fixed_ips\u0027]]"}],"source_content_type":"text/x-python","patch_set":25,"id":"3afc51ec_ea7d42b2","line":101,"updated":"2016-03-15 01:27:39.000000000","message":"Guess we should have picked a shorter name :) but just a nit","commit_id":"f0bdb798fa14b7bd5649d98789e71803127dd9f7"}],"neutron/plugins/ml2/plugin.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b8697bcf1d54a3b19541b11d96b9adf962491191","unresolved":false,"context_lines":[{"line_number":1169,"context_line":"        session \u003d context.session"},{"line_number":1170,"context_line":"        bound_mech_contexts \u003d []"},{"line_number":1171,"context_line":"        if attrs and portbindings.PROFILE in attrs:"},{"line_number":1172,"context_line":"            profile \u003d attrs.get(portbindings.PROFILE)"},{"line_number":1173,"context_line":"            if profile:"},{"line_number":1174,"context_line":"                profile_updated \u003d True"},{"line_number":1175,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_8a26d0b8","line":1172,"updated":"2016-02-03 23:21:08.000000000","message":"profile_updated \u003d bool(attrs.get(...))  should do the same thing","commit_id":"911210f67bc6cc5ae71c69513f901a0b43a481f9"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"1b84957e49fcc34662cf853bfb139234eecc5c57","unresolved":false,"context_lines":[{"line_number":1169,"context_line":"        session \u003d context.session"},{"line_number":1170,"context_line":"        bound_mech_contexts \u003d []"},{"line_number":1171,"context_line":"        if attrs and portbindings.PROFILE in attrs:"},{"line_number":1172,"context_line":"            profile \u003d attrs.get(portbindings.PROFILE)"},{"line_number":1173,"context_line":"            if profile:"},{"line_number":1174,"context_line":"                profile_updated \u003d True"},{"line_number":1175,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"5a5ae5dd_ca904898","line":1172,"in_reply_to":"5a5ae5dd_8a26d0b8","updated":"2016-02-03 23:29:25.000000000","message":"is there any advantage to this versus the one in here.","commit_id":"911210f67bc6cc5ae71c69513f901a0b43a481f9"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"5ea7cebb03008405f02c535e02ab999864139828","unresolved":false,"context_lines":[{"line_number":1183,"context_line":"        if attrs and portbindings.PROFILE in attrs:"},{"line_number":1184,"context_line":"            profile \u003d attrs.get(portbindings.PROFILE)"},{"line_number":1185,"context_line":"            if profile:"},{"line_number":1186,"context_line":"                profile_updated \u003d True"},{"line_number":1187,"context_line":""},{"line_number":1188,"context_line":"        with db_api.exc_to_retry(os_db_exception.DBDuplicateEntry),\\"},{"line_number":1189,"context_line":"                session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a57f1b5_707cd520","line":1186,"updated":"2016-02-09 22:33:40.000000000","message":"Can make this a single line:\n\nprofile_updated \u003d bool(attrs.get(portbindings.PROFILE))\n\nI now see you had a question from an early PS, I guess it\u0027s just a style thing to use bool() as it skips the need for the \u0027if\u0027","commit_id":"2b0dcb6caf7b66b55ea69d5c9ae1a4171fc716cf"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"0b9a24f6b59a3a17eb6282718a08e1931d485c71","unresolved":false,"context_lines":[{"line_number":1183,"context_line":"        if attrs and portbindings.PROFILE in attrs:"},{"line_number":1184,"context_line":"            profile \u003d attrs.get(portbindings.PROFILE)"},{"line_number":1185,"context_line":"            if profile:"},{"line_number":1186,"context_line":"                profile_updated \u003d True"},{"line_number":1187,"context_line":""},{"line_number":1188,"context_line":"        with db_api.exc_to_retry(os_db_exception.DBDuplicateEntry),\\"},{"line_number":1189,"context_line":"                session.begin(subtransactions\u003dTrue):"}],"source_content_type":"text/x-python","patch_set":12,"id":"3a57f1b5_f049a58f","line":1186,"in_reply_to":"3a57f1b5_707cd520","updated":"2016-02-09 22:37:00.000000000","message":"ok, makes sense I will address it in the next patch.","commit_id":"2b0dcb6caf7b66b55ea69d5c9ae1a4171fc716cf"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"a92d9999bdb33d01eed937aa36156a010f88699e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"bae84128_045c6f7b","updated":"2016-02-24 13:35:17.000000000","message":"these check should go to the dvr port update handler","commit_id":"f974f22799efa43acb8ab7df4bf4e0703b6d0840"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"a9b24e58413ca343184c86dfaf41c85127b7db7b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"bae84128_6719eb21","in_reply_to":"bae84128_045c6f7b","updated":"2016-02-24 17:10:51.000000000","message":"Done","commit_id":"f974f22799efa43acb8ab7df4bf4e0703b6d0840"}],"neutron/tests/functional/services/l3_router/test_l3_dvr_router_plugin.py":[{"author":{"_account_id":13667,"name":"ZongKai LI","email":"onionpiece@163.com","username":"lzklibj"},"change_message_id":"2d4ca374db922e8ddaa58962fbf3e341f89d4f2a","unresolved":false,"context_lines":[{"line_number":586,"context_line":"                }"},{"line_number":587,"context_line":"                # Update the VM Port with Migration porbinding Profile."},{"line_number":588,"context_line":"                # With this change, it should trigger a notification to"},{"line_number":589,"context_line":"                # the Destination host to create a Router a head of time"},{"line_number":590,"context_line":"                # before the VM Port binding has changed to HOST2."},{"line_number":591,"context_line":"                updated_port \u003d self.core_plugin.update_port("},{"line_number":592,"context_line":"                    self.context, vm_port[\u0027port\u0027][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":21,"id":"9aed3d3a_c9526edd","line":589,"range":{"start_line":589,"start_character":58,"end_line":589,"end_character":72},"updated":"2016-02-26 02:55:50.000000000","message":"nit: ahead of time? Please ignore if I get wrong, for I\u0027m not a native speaker.","commit_id":"dd57ca9198a08674df3d440bc38a44d54c690c78"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"cca84a850053df87e8e00cc10dc5df10c7983e16","unresolved":false,"context_lines":[{"line_number":586,"context_line":"                }"},{"line_number":587,"context_line":"                # Update the VM Port with Migration porbinding Profile."},{"line_number":588,"context_line":"                # With this change, it should trigger a notification to"},{"line_number":589,"context_line":"                # the Destination host to create a Router a head of time"},{"line_number":590,"context_line":"                # before the VM Port binding has changed to HOST2."},{"line_number":591,"context_line":"                updated_port \u003d self.core_plugin.update_port("},{"line_number":592,"context_line":"                    self.context, vm_port[\u0027port\u0027][\u0027id\u0027],"}],"source_content_type":"text/x-python","patch_set":21,"id":"9aed3d3a_9d22cd50","line":589,"range":{"start_line":589,"start_character":58,"end_line":589,"end_character":72},"in_reply_to":"9aed3d3a_c9526edd","updated":"2016-02-29 18:39:19.000000000","message":"Done","commit_id":"dd57ca9198a08674df3d440bc38a44d54c690c78"}],"neutron/tests/unit/db/test_l3_dvr_db.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"ee394698655105026d09255c7ac07eab7b881d30","unresolved":false,"context_lines":[{"line_number":434,"context_line":"                mock.patch.object(l3_dvr_db.l3_db.L3_NAT_db_mixin,"},{"line_number":435,"context_line":"                                  \u0027_update_fip_assoc\u0027):"},{"line_number":436,"context_line":"            grtr.return_value \u003d router_db"},{"line_number":437,"context_line":"            vmp.return_value \u003d \u0027my-host\u0027, \u0027my_future_host\u0027"},{"line_number":438,"context_line":"            self.mixin._update_fip_assoc("},{"line_number":439,"context_line":"                self.ctx, fip, floatingip_db, port)"},{"line_number":440,"context_line":"            return c_fip"}],"source_content_type":"text/x-python","patch_set":16,"id":"bae84128_5a4fd26a","line":437,"updated":"2016-02-22 22:49:23.000000000","message":"super nit: my-future-host ?","commit_id":"c032e5e8d46986e24467acf11eab331d5f7f773a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"a484f653785ba8b0950ffa900f90c26b3dcea587","unresolved":false,"context_lines":[{"line_number":434,"context_line":"                mock.patch.object(l3_dvr_db.l3_db.L3_NAT_db_mixin,"},{"line_number":435,"context_line":"                                  \u0027_update_fip_assoc\u0027):"},{"line_number":436,"context_line":"            grtr.return_value \u003d router_db"},{"line_number":437,"context_line":"            vmp.return_value \u003d \u0027my-host\u0027, \u0027my_future_host\u0027"},{"line_number":438,"context_line":"            self.mixin._update_fip_assoc("},{"line_number":439,"context_line":"                self.ctx, fip, floatingip_db, port)"},{"line_number":440,"context_line":"            return c_fip"}],"source_content_type":"text/x-python","patch_set":16,"id":"bae84128_e1dd59e1","line":437,"in_reply_to":"bae84128_5a4fd26a","updated":"2016-02-23 02:03:01.000000000","message":"Done","commit_id":"c032e5e8d46986e24467acf11eab331d5f7f773a"}],"releasenotes/notes/dvr-support-live-migration-b818b12bd9cbb518.yaml":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"42c19a94279ffa1cd18ad5b78bc2cb3e739abe8c","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    DVR support for service port live migration."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Create DVR routers pro-actively on the destination"},{"line_number":6,"context_line":"    node for migrating dvr service port."},{"line_number":7,"context_line":"  - If the DVR service port has associated floatingip,"}],"source_content_type":"text/x-yaml","patch_set":24,"id":"3afc51ec_34be6fd4","line":4,"updated":"2016-03-14 23:29:38.000000000","message":"strictly speaking this is not a new feature but a fix.\n\nPlease have a look at:\n\nhttp://docs.openstack.org/developer/reno/usage.html#creating-new-release-notes\n\nfor guidelines.","commit_id":"d8b79baa614362acea188a1c4af47382b4424cd5"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"19af3e9a45d439b3a1fda19f394ad6fe7da41c41","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    DVR support for service port live migration."},{"line_number":4,"context_line":"features:"},{"line_number":5,"context_line":"  - Create DVR routers pro-actively on the destination"},{"line_number":6,"context_line":"    node for migrating dvr service port."},{"line_number":7,"context_line":"  - If the DVR service port has associated floatingip,"}],"source_content_type":"text/x-yaml","patch_set":24,"id":"3afc51ec_946e63ff","line":4,"in_reply_to":"3afc51ec_34be6fd4","updated":"2016-03-14 23:49:55.000000000","message":"Yes will fix it.","commit_id":"d8b79baa614362acea188a1c4af47382b4424cd5"}]}
