)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"bf59f953196d13bc8e555aa9691c69d5f7c522c7","unresolved":false,"context_lines":[{"line_number":20,"context_line":"for the router. For every router created it will connect the"},{"line_number":21,"context_line":"router namespace to the fip namespace."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Related-Bug: #1577488"},{"line_number":24,"context_line":"DocImpact: Document the change in behavior for fip-agent-gw create"},{"line_number":25,"context_line":"Change-Id: I30c4f7fc250e486fe9a71b68540e783e90a6cf15"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":50,"id":"bff0334d_8b24150f","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":7},"updated":"2017-04-06 09:50:12.000000000","message":"Partial?","commit_id":"61e9565925e9961fa9ae3d11bd0f08a04260059a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"1398f9beb77cfb649c922c3528e9ffcd2866dd9b","unresolved":false,"context_lines":[{"line_number":20,"context_line":"for the router. For every router created it will connect the"},{"line_number":21,"context_line":"router namespace to the fip namespace."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Related-Bug: #1577488"},{"line_number":24,"context_line":"DocImpact: Document the change in behavior for fip-agent-gw create"},{"line_number":25,"context_line":"Change-Id: I30c4f7fc250e486fe9a71b68540e783e90a6cf15"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":50,"id":"bff0334d_8010c458","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":7},"in_reply_to":"bff0334d_52221c54","updated":"2017-04-11 22:14:53.000000000","message":"yes will fix it.","commit_id":"61e9565925e9961fa9ae3d11bd0f08a04260059a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6295a011b130c03d81bc04ecc1217fe3711172ca","unresolved":false,"context_lines":[{"line_number":20,"context_line":"for the router. For every router created it will connect the"},{"line_number":21,"context_line":"router namespace to the fip namespace."},{"line_number":22,"context_line":""},{"line_number":23,"context_line":"Related-Bug: #1577488"},{"line_number":24,"context_line":"DocImpact: Document the change in behavior for fip-agent-gw create"},{"line_number":25,"context_line":"Change-Id: I30c4f7fc250e486fe9a71b68540e783e90a6cf15"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":50,"id":"bff0334d_52221c54","line":23,"range":{"start_line":23,"start_character":0,"end_line":23,"end_character":7},"in_reply_to":"bff0334d_8b24150f","updated":"2017-04-06 21:04:01.000000000","message":"Yes, we can fix that.","commit_id":"61e9565925e9961fa9ae3d11bd0f08a04260059a"}],"neutron/agent/l3/dvr_fip_ns.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"85e247a481754b949e37b2f8608db066a23a57e9","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        if ri.rtr_fip_subnet is None:"},{"line_number":263,"context_line":"            ri.rtr_fip_subnet \u003d self.local_subnets.allocate("},{"line_number":264,"context_line":"                ri.router_id)"},{"line_number":265,"context_line":"        rtr_2_fip, fip_2_rtr \u003d ri.rtr_fip_subnet.get_pair()"},{"line_number":266,"context_line":"        fip_ns_name \u003d self.get_name()"},{"line_number":267,"context_line":"        device \u003d ip_lib.IPDevice("},{"line_number":268,"context_line":"            rtr_2_fip_name, namespace\u003dri.ns_name)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9ad45d7e_868f2d29","line":265,"updated":"2016-08-10 17:39:37.000000000","message":"So are you really just trying to find an existing pair here?  If we create a new one then the device won\u0027t exist on L270 and we did this for nothing.\n\nMaybe the ItemAllocator class needs a lookup() method that is the first few lines of allocate() ?","commit_id":"a8c97260e886f384fad614b85cc2677a5eea2c3f"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"95cd59d82a1304de10bd33d13053d2cfaac8a791","unresolved":false,"context_lines":[{"line_number":262,"context_line":"        if ri.rtr_fip_subnet is None:"},{"line_number":263,"context_line":"            ri.rtr_fip_subnet \u003d self.local_subnets.allocate("},{"line_number":264,"context_line":"                ri.router_id)"},{"line_number":265,"context_line":"        rtr_2_fip, fip_2_rtr \u003d ri.rtr_fip_subnet.get_pair()"},{"line_number":266,"context_line":"        fip_ns_name \u003d self.get_name()"},{"line_number":267,"context_line":"        device \u003d ip_lib.IPDevice("},{"line_number":268,"context_line":"            rtr_2_fip_name, namespace\u003dri.ns_name)"}],"source_content_type":"text/x-python","patch_set":14,"id":"9ad45d7e_b7b7f9f3","line":265,"in_reply_to":"9ad45d7e_868f2d29","updated":"2016-08-10 18:46:27.000000000","message":"Yes I think that is how this part of the code has been used without the lookup function.\n\nDirectly calling rtr_fip_subnet.get_pair() fails, and I think allocate checks internally if the router_id has already associated subnet_pair and returns it.","commit_id":"a8c97260e886f384fad614b85cc2677a5eea2c3f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2a54a93e83fa9883c9ae46affd2cfb4b94012881","unresolved":false,"context_lines":[{"line_number":271,"context_line":"            fns_ip \u003d ip_lib.IPWrapper(namespace\u003dfip_ns_name)"},{"line_number":272,"context_line":"            fpr_device \u003d ip_lib.IPDevice("},{"line_number":273,"context_line":"                fip_2_rtr_name, namespace\u003dfip_ns_name)"},{"line_number":274,"context_line":"            if fpr_device.exists():"},{"line_number":275,"context_line":"                fns_ip.del_veth(fip_2_rtr_name)"},{"line_number":276,"context_line":""},{"line_number":277,"context_line":"    def create_rtr_2_fip_link(self, ri):"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa7ab95a_11b2014c","line":274,"updated":"2016-08-30 21:00:12.000000000","message":"I think you can delete L272 and do:\n\n    if fns_ip.device(fip_2_rtr_name).exists():\n\nYou can then change L271 to use self.get_name() directly since there are no other users.\n\nIt\u0027s a little-known trick.","commit_id":"0274901dd354121ca55c7f724be1d2634a721e34"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"1422bcc22954a09f7d363e1077a5a1431b33ea7b","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        rtr_2_fip_interface \u003d self.get_rtr_ext_device_name(ri.router_id)"},{"line_number":309,"context_line":"        device \u003d ip_lib.IPDevice(rtr_2_fip_interface, namespace\u003dri.ns_name)"},{"line_number":310,"context_line":"        if device.exists():"},{"line_number":311,"context_line":"            if len(ri.get_router_cidrs(device)):"},{"line_number":312,"context_line":"                self.rtr_fip_connect \u003d True"},{"line_number":313,"context_line":"            else:"},{"line_number":314,"context_line":"                self.rtr_fip_connect \u003d False"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_e6466b4e","line":314,"range":{"start_line":311,"start_character":0,"end_line":314,"end_character":44},"updated":"2016-09-01 01:02:05.000000000","message":"Since the floatingip is not counted any more, is this still needed?","commit_id":"0eea82898fbb2436fc313dd6d3fab7ac56707756"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"1ee10d87311330ef5332b50895a5bf945ae26709","unresolved":false,"context_lines":[{"line_number":308,"context_line":"        rtr_2_fip_interface \u003d self.get_rtr_ext_device_name(ri.router_id)"},{"line_number":309,"context_line":"        device \u003d ip_lib.IPDevice(rtr_2_fip_interface, namespace\u003dri.ns_name)"},{"line_number":310,"context_line":"        if device.exists():"},{"line_number":311,"context_line":"            if len(ri.get_router_cidrs(device)):"},{"line_number":312,"context_line":"                self.rtr_fip_connect \u003d True"},{"line_number":313,"context_line":"            else:"},{"line_number":314,"context_line":"                self.rtr_fip_connect \u003d False"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_d503a1b6","line":314,"range":{"start_line":311,"start_character":0,"end_line":314,"end_character":44},"in_reply_to":"fa7ab95a_e6466b4e","updated":"2016-09-01 16:22:36.000000000","message":"Yes this is still needed for agent restart, when agent restarts, it should know if there is already a floatingip namespace or not, otherwise it would try to recreate.\nSo this would tell the agent that the rtr_fip_connect already exists and so this is fine.","commit_id":"0eea82898fbb2436fc313dd6d3fab7ac56707756"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"98bae98d07a329462b3eeebc73e76753b3bc59a1","unresolved":false,"context_lines":[{"line_number":307,"context_line":"            if self.agent_gateway_port:"},{"line_number":308,"context_line":"                interface_name \u003d self.get_ext_device_name("},{"line_number":309,"context_line":"                    self.agent_gateway_port[\u0027id\u0027])"},{"line_number":310,"context_line":"                fip_ns_name \u003d self.get_name()"},{"line_number":311,"context_line":"                fg_device \u003d ip_lib.IPDevice("},{"line_number":312,"context_line":"                    interface_name, namespace\u003dfip_ns_name)"},{"line_number":313,"context_line":"                if fg_device.exists():"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba5da102_87a91e7e","line":310,"updated":"2016-10-31 02:31:38.000000000","message":"Since you\u0027re loading this here and on L335 should just move up to L296","commit_id":"f7b1b95e5df675c7a396281f1069fa26dc6b75ee"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"3a8639bd25b36d9dc9560db49246fd28952e3c29","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        # The lock is used to make sure another thread doesn\u0027t call to"},{"line_number":123,"context_line":"        # update the gateway port before we are done initializing things."},{"line_number":124,"context_line":"        with self._fip_port_lock(interface_name):"},{"line_number":125,"context_line":"            if not self.agent_gateway_port:"},{"line_number":126,"context_line":"                is_first \u003d self.subscribe(agent_gateway_port[\u0027network_id\u0027])"},{"line_number":127,"context_line":"                if is_first:"},{"line_number":128,"context_line":"                    if \u0027subnets\u0027 not in agent_gateway_port:"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a71b18c_1c51200f","line":125,"updated":"2016-12-07 21:49:34.000000000","message":"So is_first was being used to denote this is the first caller and the port needs to be configured, it seems like you\u0027re using self.agent_gateway_port for the same thing now?  I don\u0027t think you need to do this.","commit_id":"6cad1a7070a8021218469fd38118038cf13b6017"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"3690eaf36b0a267b7f9fb5acea4005513b6140aa","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        # The lock is used to make sure another thread doesn\u0027t call to"},{"line_number":123,"context_line":"        # update the gateway port before we are done initializing things."},{"line_number":124,"context_line":"        with self._fip_port_lock(interface_name):"},{"line_number":125,"context_line":"            if not self.agent_gateway_port:"},{"line_number":126,"context_line":"                is_first \u003d self.subscribe(agent_gateway_port[\u0027network_id\u0027])"},{"line_number":127,"context_line":"                if is_first:"},{"line_number":128,"context_line":"                    if \u0027subnets\u0027 not in agent_gateway_port:"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a71b18c_cdd6b8c2","line":125,"in_reply_to":"3a71b18c_1c51200f","updated":"2016-12-09 17:58:35.000000000","message":"I remember seeing an error if I don\u0027t use this check in here, it is while since I wrote this code. \nI will check again and see what are the implications in removing it.","commit_id":"6cad1a7070a8021218469fd38118038cf13b6017"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"56f92ce25763864cf5f5c3ee385bab7cc82fc888","unresolved":false,"context_lines":[{"line_number":122,"context_line":"        # The lock is used to make sure another thread doesn\u0027t call to"},{"line_number":123,"context_line":"        # update the gateway port before we are done initializing things."},{"line_number":124,"context_line":"        with self._fip_port_lock(interface_name):"},{"line_number":125,"context_line":"            if not self.agent_gateway_port:"},{"line_number":126,"context_line":"                is_first \u003d self.subscribe(agent_gateway_port[\u0027network_id\u0027])"},{"line_number":127,"context_line":"                if is_first:"},{"line_number":128,"context_line":"                    if \u0027subnets\u0027 not in agent_gateway_port:"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a71b18c_03195f79","line":125,"in_reply_to":"3a71b18c_cdd6b8c2","updated":"2016-12-09 18:26:55.000000000","message":"I think I remember it.\nSince we update the gateway later and it is not part of the _create_gateway_port anymore, for the first time when we create the gateway_port, we may not be able to configure the default gateway without this check.","commit_id":"6cad1a7070a8021218469fd38118038cf13b6017"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"3a8639bd25b36d9dc9560db49246fd28952e3c29","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            if not self.agent_gateway_port:"},{"line_number":126,"context_line":"                is_first \u003d self.subscribe(agent_gateway_port[\u0027network_id\u0027])"},{"line_number":127,"context_line":"                if is_first:"},{"line_number":128,"context_line":"                    if \u0027subnets\u0027 not in agent_gateway_port:"},{"line_number":129,"context_line":"                        LOG.error(_LE(\u0027Missing subnet/agent_gateway_port\u0027))"},{"line_number":130,"context_line":"                    else:"},{"line_number":131,"context_line":"                        self._create_gateway_port(agent_gateway_port,"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a71b18c_fc3544a8","line":128,"updated":"2016-12-07 21:49:34.000000000","message":"Where is \u0027subnets\u0027 used that this should error-out?  I don\u0027t see it in _create_gateway_port()","commit_id":"6cad1a7070a8021218469fd38118038cf13b6017"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"3690eaf36b0a267b7f9fb5acea4005513b6140aa","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            if not self.agent_gateway_port:"},{"line_number":126,"context_line":"                is_first \u003d self.subscribe(agent_gateway_port[\u0027network_id\u0027])"},{"line_number":127,"context_line":"                if is_first:"},{"line_number":128,"context_line":"                    if \u0027subnets\u0027 not in agent_gateway_port:"},{"line_number":129,"context_line":"                        LOG.error(_LE(\u0027Missing subnet/agent_gateway_port\u0027))"},{"line_number":130,"context_line":"                    else:"},{"line_number":131,"context_line":"                        self._create_gateway_port(agent_gateway_port,"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a71b18c_8d29203a","line":128,"in_reply_to":"3a71b18c_fc3544a8","updated":"2016-12-09 17:58:35.000000000","message":"The port subnet is added in the server side, and basically tested here to validate if the subnet has been populated for the port we have created.","commit_id":"6cad1a7070a8021218469fd38118038cf13b6017"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"3c31828f471e09ab24cdf843df68094eafa3d2ea","unresolved":false,"context_lines":[{"line_number":130,"context_line":"                    else:"},{"line_number":131,"context_line":"                        self._create_gateway_port(agent_gateway_port,"},{"line_number":132,"context_line":"                                                  interface_name)"},{"line_number":133,"context_line":"            else:"},{"line_number":134,"context_line":"                try:"},{"line_number":135,"context_line":"                    self._update_gateway_port("},{"line_number":136,"context_line":"                        agent_gateway_port, interface_name)"}],"source_content_type":"text/x-python","patch_set":36,"id":"3a71b18c_fe46b84d","line":133,"range":{"start_line":133,"start_character":11,"end_line":133,"end_character":17},"updated":"2016-12-09 18:58:15.000000000","message":"Probably this should be \"if self.agent_gateway_port\" instead of else.","commit_id":"6cad1a7070a8021218469fd38118038cf13b6017"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"895915ebe86b1f5d1f95fa2bddf36098fbf539a5","unresolved":false,"context_lines":[{"line_number":125,"context_line":"            is_first \u003d self.subscribe(agent_gateway_port[\u0027network_id\u0027])"},{"line_number":126,"context_line":"            if is_first:"},{"line_number":127,"context_line":"                if \u0027subnets\u0027 not in agent_gateway_port:"},{"line_number":128,"context_line":"                    LOG.error(_LE(\u0027Missing subnet/agent_gateway_port\u0027))"},{"line_number":129,"context_line":"                else:"},{"line_number":130,"context_line":"                    self._create_gateway_port(agent_gateway_port,"},{"line_number":131,"context_line":"                                              interface_name)"}],"source_content_type":"text/x-python","patch_set":41,"id":"7a3c09a3_eb28699c","line":128,"updated":"2017-01-17 22:56:55.000000000","message":"This should do a \u0027return\u0027 instead of assuming nothing will get run below.\n\nAlso, this should do an \u0027unsubscribe\u0027 since we didn\u0027t complete configuration.","commit_id":"b868517893535e4b6a9ccbea93c9eca7a844cd04"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"895915ebe86b1f5d1f95fa2bddf36098fbf539a5","unresolved":false,"context_lines":[{"line_number":371,"context_line":"            if self.agent_gateway_port:"},{"line_number":372,"context_line":"                interface_name \u003d self.get_ext_device_name("},{"line_number":373,"context_line":"                    self.agent_gateway_port[\u0027id\u0027])"},{"line_number":374,"context_line":"                fip_ns_name \u003d self.get_name()"},{"line_number":375,"context_line":"                fg_device \u003d ip_lib.IPDevice("},{"line_number":376,"context_line":"                    interface_name, namespace\u003dfip_ns_name)"},{"line_number":377,"context_line":"                if fg_device.exists():"}],"source_content_type":"text/x-python","patch_set":41,"id":"7a3c09a3_0b121557","line":374,"updated":"2017-01-17 22:56:55.000000000","message":"This can be moved to L360 as it\u0027s also used on L399","commit_id":"b868517893535e4b6a9ccbea93c9eca7a844cd04"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"8a505724f7df6d489ad9dbcd8ccd03202ba261c5","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            if is_first:"},{"line_number":129,"context_line":"                if \u0027subnets\u0027 not in agent_gateway_port:"},{"line_number":130,"context_line":"                    self.unsubscribe(agent_gateway_port[\u0027network_id\u0027])"},{"line_number":131,"context_line":"                    LOG.error(_LE(\u0027DVR: Missing subnet in agent_gateway_port\u0027))"},{"line_number":132,"context_line":"                    return"},{"line_number":133,"context_line":"                self._create_gateway_port(agent_gateway_port, interface_name)"},{"line_number":134,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":50,"id":"bff0334d_56e3cdd9","line":131,"updated":"2017-04-10 20:51:01.000000000","message":"what causes this condition? If it\u0027s some transient thing or user-induced thing, we should probably just be logging this at the debug level. If it is a real error caused by some component being misconfigured/offline or the system being in an unexpected state, then error is fine.\n\nPlease add a comment inline explainin why \u0027subnets\u0027 would be missing either way.","commit_id":"61e9565925e9961fa9ae3d11bd0f08a04260059a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"1398f9beb77cfb649c922c3528e9ffcd2866dd9b","unresolved":false,"context_lines":[{"line_number":128,"context_line":"            if is_first:"},{"line_number":129,"context_line":"                if \u0027subnets\u0027 not in agent_gateway_port:"},{"line_number":130,"context_line":"                    self.unsubscribe(agent_gateway_port[\u0027network_id\u0027])"},{"line_number":131,"context_line":"                    LOG.error(_LE(\u0027DVR: Missing subnet in agent_gateway_port\u0027))"},{"line_number":132,"context_line":"                    return"},{"line_number":133,"context_line":"                self._create_gateway_port(agent_gateway_port, interface_name)"},{"line_number":134,"context_line":"            else:"}],"source_content_type":"text/x-python","patch_set":50,"id":"bff0334d_2028d894","line":131,"in_reply_to":"bff0334d_56e3cdd9","updated":"2017-04-11 22:14:53.000000000","message":"Ok, let me change it to debug. This is based on the old code and it was not introduced in this patch.\nBut let me change it to debug.\n\nThe subnets will be added in the server side when the agent gateway port is created using the populate_subnets on ports.","commit_id":"61e9565925e9961fa9ae3d11bd0f08a04260059a"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"8a505724f7df6d489ad9dbcd8ccd03202ba261c5","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        # Check for namespace before deleting the device"},{"line_number":401,"context_line":"        if not self.destroyed:"},{"line_number":402,"context_line":"            fns_ip \u003d ip_lib.IPWrapper(namespace\u003dfip_ns_name)"},{"line_number":403,"context_line":"            if fns_ip.device(fip_2_rtr_name).exists():"},{"line_number":404,"context_line":"                fns_ip.del_veth(fip_2_rtr_name)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    def create_rtr_2_fip_link(self, ri):"}],"source_content_type":"text/x-python","patch_set":50,"id":"bff0334d_36e4c9df","line":403,"updated":"2017-04-10 20:51:01.000000000","message":"isn\u0027t the result of fns_ip.device(fip_2_rtr_name) an IPDevice which has no \u0027.exists()\u0027 method?","commit_id":"61e9565925e9961fa9ae3d11bd0f08a04260059a"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"8f951376d4bbdf92614fac8252d5bef3f4bf69f1","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        # Check for namespace before deleting the device"},{"line_number":401,"context_line":"        if not self.destroyed:"},{"line_number":402,"context_line":"            fns_ip \u003d ip_lib.IPWrapper(namespace\u003dfip_ns_name)"},{"line_number":403,"context_line":"            if fns_ip.device(fip_2_rtr_name).exists():"},{"line_number":404,"context_line":"                fns_ip.del_veth(fip_2_rtr_name)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    def create_rtr_2_fip_link(self, ri):"}],"source_content_type":"text/x-python","patch_set":50,"id":"bff0334d_761b7180","line":403,"in_reply_to":"bff0334d_36e4c9df","updated":"2017-04-10 21:07:25.000000000","message":"Whoops, not sure how I missed https://github.com/openstack/neutron/blob/master/neutron/agent/linux/ip_lib.py#L290","commit_id":"61e9565925e9961fa9ae3d11bd0f08a04260059a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"1398f9beb77cfb649c922c3528e9ffcd2866dd9b","unresolved":false,"context_lines":[{"line_number":400,"context_line":"        # Check for namespace before deleting the device"},{"line_number":401,"context_line":"        if not self.destroyed:"},{"line_number":402,"context_line":"            fns_ip \u003d ip_lib.IPWrapper(namespace\u003dfip_ns_name)"},{"line_number":403,"context_line":"            if fns_ip.device(fip_2_rtr_name).exists():"},{"line_number":404,"context_line":"                fns_ip.del_veth(fip_2_rtr_name)"},{"line_number":405,"context_line":""},{"line_number":406,"context_line":"    def create_rtr_2_fip_link(self, ri):"}],"source_content_type":"text/x-python","patch_set":50,"id":"bff0334d_e01f9069","line":403,"in_reply_to":"bff0334d_761b7180","updated":"2017-04-11 22:14:53.000000000","message":"Yes it is there.","commit_id":"61e9565925e9961fa9ae3d11bd0f08a04260059a"}],"neutron/agent/l3/dvr_local_router.py":[{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"af03cacb1376c8dd9f181bb98b90947aeda16340","unresolved":false,"context_lines":[{"line_number":457,"context_line":"            LOG.debug(\"FloatingIP agent gateway port received from the \""},{"line_number":458,"context_line":"                \"plugin: %s\", fip_agent_port)"},{"line_number":459,"context_line":"        is_first \u003d False"},{"line_number":460,"context_line":"        if floating_ips:"},{"line_number":461,"context_line":"            is_first \u003d self.fip_ns.subscribe(ex_gw_port[\u0027network_id\u0027])"},{"line_number":462,"context_line":"            if is_first and not fip_agent_port:"},{"line_number":463,"context_line":"                LOG.debug(\"No FloatingIP agent gateway port possibly due to \""}],"source_content_type":"text/x-python","patch_set":1,"id":"bae84128_37762a3e","line":460,"range":{"start_line":460,"start_character":8,"end_line":460,"end_character":24},"updated":"2016-02-23 22:14:18.000000000","message":"Could we simply change this line to look like L429, then do away with creating the method create_dvr_external_gateway_interfaces_on_agent()?","commit_id":"ce85f58b8284fb5d7661fc916cae95dc68f82fe5"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d21266a7284ddda2f49727f2dcb0dcd9d7848fda","unresolved":false,"context_lines":[{"line_number":471,"context_line":"    def create_dvr_external_gateway_interfaces_on_agent(self, ex_gw_port):"},{"line_number":472,"context_line":"        is_first \u003d False"},{"line_number":473,"context_line":"        if not self.fip_ns.agent_gateway_port:"},{"line_number":474,"context_line":"            fip_agent_port \u003d None"},{"line_number":475,"context_line":"            fip_agent_port \u003d self.get_floating_agent_gw_interface("},{"line_number":476,"context_line":"                ex_gw_port[\u0027network_id\u0027])"},{"line_number":477,"context_line":"            if fip_agent_port:"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_66ebbddc","line":474,"updated":"2016-07-07 19:35:31.000000000","message":"Don\u0027t need this","commit_id":"fbc250545a69479306bd734f6f4df4e7d148febb"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d21266a7284ddda2f49727f2dcb0dcd9d7848fda","unresolved":false,"context_lines":[{"line_number":496,"context_line":"                self.fip_ns.create_rtr_2_fip_link(self)"},{"line_number":497,"context_line":"        else:"},{"line_number":498,"context_line":"            fip_agent_port \u003d self.fip_ns.agent_gateway_port"},{"line_number":499,"context_line":"            self.fip_ns.update_gateway_port(fip_agent_port)"},{"line_number":500,"context_line":""},{"line_number":501,"context_line":"    def get_router_cidrs(self, device):"},{"line_number":502,"context_line":"        \"\"\"As no floatingip will be set on the rfp device. Get floatingip from"}],"source_content_type":"text/x-python","patch_set":8,"id":"1aa78d24_a61765a1","line":499,"updated":"2016-07-07 19:35:31.000000000","message":"I\u0027d do this assignment first and move this code to L473","commit_id":"fbc250545a69479306bd734f6f4df4e7d148febb"},{"author":{"_account_id":4187,"name":"Ryan Tidwell","email":"rtidwell@suse.com","username":"ryan-tidwell"},"change_message_id":"6a093925db7524579f4c104cb2ecfd66cb071f6b","unresolved":false,"context_lines":[{"line_number":504,"context_line":"                    self.fip_ns.create_gateway_port(fip_agent_port)"},{"line_number":505,"context_line":"            if (self.fip_ns.agent_gateway_port and"},{"line_number":506,"context_line":"                (self.dist_fip_count \u003d\u003d 0)):"},{"line_number":507,"context_line":"                self.fip_ns.create_rtr_2_fip_link(self)"},{"line_number":508,"context_line":"        else:"},{"line_number":509,"context_line":"            if fip_agent_port:"},{"line_number":510,"context_line":"                self.fip_ns.update_gateway_port(fip_agent_port)"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_23499a8c","line":507,"updated":"2016-07-27 20:08:29.000000000","message":"Wouldn\u0027t this cause us to fail to wire up routers in the case an existing FIP gateway port? The first FIP association would result in that router getting wired up, but couldn\u0027t we miss subsequent routers? I think we may want to pull L505-507 out of the if block here and stick it at L511.","commit_id":"d1b82c2e185c29ef9c03d0afd195460f7a995c48"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"df43db2612782e89bd237182eccabb154204a002","unresolved":false,"context_lines":[{"line_number":504,"context_line":"                    self.fip_ns.create_gateway_port(fip_agent_port)"},{"line_number":505,"context_line":"            if (self.fip_ns.agent_gateway_port and"},{"line_number":506,"context_line":"                (self.dist_fip_count \u003d\u003d 0)):"},{"line_number":507,"context_line":"                self.fip_ns.create_rtr_2_fip_link(self)"},{"line_number":508,"context_line":"        else:"},{"line_number":509,"context_line":"            if fip_agent_port:"},{"line_number":510,"context_line":"                self.fip_ns.update_gateway_port(fip_agent_port)"}],"source_content_type":"text/x-python","patch_set":10,"id":"bacf61ea_2dd4d945","line":507,"in_reply_to":"bacf61ea_23499a8c","updated":"2016-08-02 22:55:43.000000000","message":"Done","commit_id":"d1b82c2e185c29ef9c03d0afd195460f7a995c48"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"cb3d6ad29ce9953bc674fa45328eb056469496b1","unresolved":false,"context_lines":[{"line_number":414,"context_line":"            self.process_floating_ip_addresses(to_fip_interface_name)"},{"line_number":415,"context_line":"            # Remove the router to fip namespace connection after the"},{"line_number":416,"context_line":"            # gateway is removed."},{"line_number":417,"context_line":"            if self.dist_fip_count:"},{"line_number":418,"context_line":"                self.dist_fip_count \u003d self.dist_fip_count - 1"},{"line_number":419,"context_line":"            if self.dist_fip_count \u003d\u003d 0:"},{"line_number":420,"context_line":"                self.fip_ns.delete_rtr_2_fip_link(self)"},{"line_number":421,"context_line":"        for p in self.internal_ports:"},{"line_number":422,"context_line":"            # NOTE: When removing the gateway port, pass in the snat_port"},{"line_number":423,"context_line":"            # cache along with the current ports."}],"source_content_type":"text/x-python","patch_set":20,"id":"fa7ab95a_260aa979","line":420,"range":{"start_line":417,"start_character":0,"end_line":420,"end_character":55},"updated":"2016-08-30 03:23:10.000000000","message":"I think here might not be right, dist_fip_count is used to record the number of floatingips. And it looks like it will still do the same job, because line 528.\n\nBut here you are using it to judge if rtr_2_fip_link should be delete. This makes this attribute complex and maybe some potential race issue.\n\nI think the rtr_2_fip_link should be delete anyway, right? Because the external gateway is being removed. And since the rtr_2_fip_link will be have no relation with num of floatingips, maybe the attribute dist_fip_count can be removed.","commit_id":"c0fc71728f839cf4323ca6f98b25c24619e16695"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"31ae273ef6356af29e841c6a7557ba4c1cdd731c","unresolved":false,"context_lines":[{"line_number":414,"context_line":"            self.process_floating_ip_addresses(to_fip_interface_name)"},{"line_number":415,"context_line":"            # Remove the router to fip namespace connection after the"},{"line_number":416,"context_line":"            # gateway is removed."},{"line_number":417,"context_line":"            if self.dist_fip_count:"},{"line_number":418,"context_line":"                self.dist_fip_count \u003d self.dist_fip_count - 1"},{"line_number":419,"context_line":"            if self.dist_fip_count \u003d\u003d 0:"},{"line_number":420,"context_line":"                self.fip_ns.delete_rtr_2_fip_link(self)"},{"line_number":421,"context_line":"        for p in self.internal_ports:"},{"line_number":422,"context_line":"            # NOTE: When removing the gateway port, pass in the snat_port"},{"line_number":423,"context_line":"            # cache along with the current ports."}],"source_content_type":"text/x-python","patch_set":20,"id":"fa7ab95a_81e5ed09","line":420,"range":{"start_line":417,"start_character":0,"end_line":420,"end_character":55},"in_reply_to":"fa7ab95a_260aa979","updated":"2016-08-30 16:52:22.000000000","message":"Here we are no more using the dist_fip_count to record the number of floating ips, rather it is used to keep track of the router that is configured for gateway.\nIf configured for gateway we assign a \u00271\u0027, if not we assign a \u00270\u0027.\n\nFor additional floatingip ips that are added to the same router, we don\u0027t keep track of the dist_fip_count.\n\nIf the variable name is misleading we can change the variable name to something else. I just used the one that existed.\n\nThe rtr_2_fip_link should be deleted when the gateway is removed, but just to make sure I have second check in here to make sure I am only deleting the rtr_2_fip link when the dist_fip_count is \u00270\u0027.\n\nYes in this case as you mentioned if you need the dist_fip_count to be removed or renamed we can do it. May instead of \u0027count\u0027 we can have \u0027rtr_gw_set\u0027 \u003d False/True.","commit_id":"c0fc71728f839cf4323ca6f98b25c24619e16695"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"cb3d6ad29ce9953bc674fa45328eb056469496b1","unresolved":false,"context_lines":[{"line_number":479,"context_line":"    def create_dvr_external_gateway_interfaces_on_agent(self, ex_gw_port):"},{"line_number":480,"context_line":"        is_first \u003d False"},{"line_number":481,"context_line":"        fip_agent_port \u003d self.get_floating_agent_gw_interface("},{"line_number":482,"context_line":"                ex_gw_port[\u0027network_id\u0027])"},{"line_number":483,"context_line":"        if not fip_agent_port:"},{"line_number":484,"context_line":"            fip_agent_port \u003d self.agent.plugin_rpc.get_agent_gateway_port("},{"line_number":485,"context_line":"                self.agent.context, ex_gw_port[\u0027network_id\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa7ab95a_d01b7ac8","line":482,"range":{"start_line":482,"start_character":8,"end_line":482,"end_character":16},"updated":"2016-08-30 03:23:10.000000000","message":"too much indention?","commit_id":"c0fc71728f839cf4323ca6f98b25c24619e16695"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"31ae273ef6356af29e841c6a7557ba4c1cdd731c","unresolved":false,"context_lines":[{"line_number":479,"context_line":"    def create_dvr_external_gateway_interfaces_on_agent(self, ex_gw_port):"},{"line_number":480,"context_line":"        is_first \u003d False"},{"line_number":481,"context_line":"        fip_agent_port \u003d self.get_floating_agent_gw_interface("},{"line_number":482,"context_line":"                ex_gw_port[\u0027network_id\u0027])"},{"line_number":483,"context_line":"        if not fip_agent_port:"},{"line_number":484,"context_line":"            fip_agent_port \u003d self.agent.plugin_rpc.get_agent_gateway_port("},{"line_number":485,"context_line":"                self.agent.context, ex_gw_port[\u0027network_id\u0027])"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa7ab95a_61d1c922","line":482,"range":{"start_line":482,"start_character":8,"end_line":482,"end_character":16},"in_reply_to":"fa7ab95a_d01b7ac8","updated":"2016-08-30 16:52:22.000000000","message":"will fix it.","commit_id":"c0fc71728f839cf4323ca6f98b25c24619e16695"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"cb3d6ad29ce9953bc674fa45328eb056469496b1","unresolved":false,"context_lines":[{"line_number":494,"context_line":"                    self.fip_ns.create_gateway_port(fip_agent_port)"},{"line_number":495,"context_line":"        else:"},{"line_number":496,"context_line":"            self.fip_ns.update_gateway_port(fip_agent_port)"},{"line_number":497,"context_line":"        if (self.fip_ns.agent_gateway_port and"},{"line_number":498,"context_line":"            (self.dist_fip_count \u003d\u003d 0)):"},{"line_number":499,"context_line":"                self.fip_ns.create_rtr_2_fip_link(self)"},{"line_number":500,"context_line":"                self.dist_fip_count \u003d self.dist_fip_count + 1"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    def get_router_cidrs(self, device):"},{"line_number":503,"context_line":"        \"\"\"As no floatingip will be set on the rfp device. Get floatingip from"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa7ab95a_66b2f195","line":500,"range":{"start_line":497,"start_character":0,"end_line":500,"end_character":61},"updated":"2016-08-30 03:23:10.000000000","message":"Continue the comment above, I think this could be moved to external_gateway_added, since it will always be added when router gateway is added. So, this method is only used to create/update the fip agent gateway.","commit_id":"c0fc71728f839cf4323ca6f98b25c24619e16695"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"31ae273ef6356af29e841c6a7557ba4c1cdd731c","unresolved":false,"context_lines":[{"line_number":494,"context_line":"                    self.fip_ns.create_gateway_port(fip_agent_port)"},{"line_number":495,"context_line":"        else:"},{"line_number":496,"context_line":"            self.fip_ns.update_gateway_port(fip_agent_port)"},{"line_number":497,"context_line":"        if (self.fip_ns.agent_gateway_port and"},{"line_number":498,"context_line":"            (self.dist_fip_count \u003d\u003d 0)):"},{"line_number":499,"context_line":"                self.fip_ns.create_rtr_2_fip_link(self)"},{"line_number":500,"context_line":"                self.dist_fip_count \u003d self.dist_fip_count + 1"},{"line_number":501,"context_line":""},{"line_number":502,"context_line":"    def get_router_cidrs(self, device):"},{"line_number":503,"context_line":"        \"\"\"As no floatingip will be set on the rfp device. Get floatingip from"}],"source_content_type":"text/x-python","patch_set":20,"id":"fa7ab95a_0131dd59","line":500,"range":{"start_line":497,"start_character":0,"end_line":500,"end_character":61},"in_reply_to":"fa7ab95a_66b2f195","updated":"2016-08-30 16:52:22.000000000","message":"create_rtr_2_fip_link might need to reside in this file and I don\u0027t want to move it as part of the external_gateway_added. Since this deals with the fip namespace and the router.","commit_id":"c0fc71728f839cf4323ca6f98b25c24619e16695"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2a54a93e83fa9883c9ae46affd2cfb4b94012881","unresolved":false,"context_lines":[{"line_number":545,"context_line":"        if ex_gw_port:"},{"line_number":546,"context_line":"            self.fip_ns \u003d agent.get_fip_ns(ex_gw_port[\u0027network_id\u0027])"},{"line_number":547,"context_line":"            self.fip_ns.scan_fip_ports(self)"},{"line_number":548,"context_line":""},{"line_number":549,"context_line":"        super(DvrLocalRouter, self).process(agent)"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa7ab95a_519e4963","side":"PARENT","line":548,"updated":"2016-08-30 21:00:12.000000000","message":"whitespace change","commit_id":"84a18731120f4e3b616e9ee066b22a3f57cefcb4"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2a54a93e83fa9883c9ae46affd2cfb4b94012881","unresolved":false,"context_lines":[{"line_number":476,"context_line":"        super(DvrLocalRouter, self).process_external(agent)"},{"line_number":477,"context_line":""},{"line_number":478,"context_line":"    def create_dvr_external_gateway_interfaces_on_agent(self, ex_gw_port):"},{"line_number":479,"context_line":"        is_first \u003d False"},{"line_number":480,"context_line":"        fip_agent_port \u003d self.get_floating_agent_gw_interface("},{"line_number":481,"context_line":"            ex_gw_port[\u0027network_id\u0027])"},{"line_number":482,"context_line":"        if not fip_agent_port:"}],"source_content_type":"text/x-python","patch_set":21,"id":"fa7ab95a_f1459d6e","line":479,"updated":"2016-08-30 21:00:12.000000000","message":"this can go away, is_first only used inside if on L488/489","commit_id":"0274901dd354121ca55c7f724be1d2634a721e34"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"2a54a93e83fa9883c9ae46affd2cfb4b94012881","unresolved":false,"context_lines":[{"line_number":494,"context_line":"        else:"},{"line_number":495,"context_line":"            self.fip_ns.update_gateway_port(fip_agent_port)"},{"line_number":496,"context_line":"        if (self.fip_ns.agent_gateway_port and"},{"line_number":497,"context_line":"            (not self.rtr_fip_connect)):"},{"line_number":498,"context_line":"                self.fip_ns.create_rtr_2_fip_link(self)"},{"line_number":499,"context_line":"                self.rtr_fip_connect \u003d True"},{"line_number":500,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"fa7ab95a_91bc51dd","line":497,"updated":"2016-08-30 21:00:12.000000000","message":"extra () not needed, this can actually all fit on one line","commit_id":"0274901dd354121ca55c7f724be1d2634a721e34"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"1422bcc22954a09f7d363e1077a5a1431b33ea7b","unresolved":false,"context_lines":[{"line_number":414,"context_line":"            self.process_floating_ip_addresses(to_fip_interface_name)"},{"line_number":415,"context_line":"            # Remove the router to fip namespace connection after the"},{"line_number":416,"context_line":"            # gateway is removed."},{"line_number":417,"context_line":"            if self.rtr_fip_connect:"},{"line_number":418,"context_line":"                self.fip_ns.delete_rtr_2_fip_link(self)"},{"line_number":419,"context_line":"                self.rtr_fip_connect \u003d False"},{"line_number":420,"context_line":"        for p in self.internal_ports:"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_260853d9","line":417,"range":{"start_line":417,"start_character":0,"end_line":417,"end_character":36},"updated":"2016-09-01 01:02:05.000000000","message":"What if I removed all the floatingip and then remove the external gateway?(It seems to be the only thing I can do). According to [1], self.rtr_fip_connect will be false. So the rtr_2_fip_link will not be delete, right?\n\n[1] https://review.openstack.org/#/c/283757/22/neutron/agent/l3/dvr_fip_ns.py@314","commit_id":"0eea82898fbb2436fc313dd6d3fab7ac56707756"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"1ee10d87311330ef5332b50895a5bf945ae26709","unresolved":false,"context_lines":[{"line_number":414,"context_line":"            self.process_floating_ip_addresses(to_fip_interface_name)"},{"line_number":415,"context_line":"            # Remove the router to fip namespace connection after the"},{"line_number":416,"context_line":"            # gateway is removed."},{"line_number":417,"context_line":"            if self.rtr_fip_connect:"},{"line_number":418,"context_line":"                self.fip_ns.delete_rtr_2_fip_link(self)"},{"line_number":419,"context_line":"                self.rtr_fip_connect \u003d False"},{"line_number":420,"context_line":"        for p in self.internal_ports:"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_321860d3","line":417,"range":{"start_line":417,"start_character":0,"end_line":417,"end_character":36},"in_reply_to":"fa7ab95a_260853d9","updated":"2016-09-01 16:22:36.000000000","message":"Let me check this out.","commit_id":"0eea82898fbb2436fc313dd6d3fab7ac56707756"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"9cda4ab682f8de938c3778a23b7fcad06942b701","unresolved":false,"context_lines":[{"line_number":414,"context_line":"            self.process_floating_ip_addresses(to_fip_interface_name)"},{"line_number":415,"context_line":"            # Remove the router to fip namespace connection after the"},{"line_number":416,"context_line":"            # gateway is removed."},{"line_number":417,"context_line":"            if self.rtr_fip_connect:"},{"line_number":418,"context_line":"                self.fip_ns.delete_rtr_2_fip_link(self)"},{"line_number":419,"context_line":"                self.rtr_fip_connect \u003d False"},{"line_number":420,"context_line":"        for p in self.internal_ports:"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_3e7adef1","line":417,"range":{"start_line":417,"start_character":0,"end_line":417,"end_character":36},"in_reply_to":"fa7ab95a_321860d3","updated":"2016-09-02 05:30:20.000000000","message":"This should not be an issue. \nWhen you remove the floatingip, then self.rtr_fip_connect will not change.\nIf you have two routers, then when you remove the gateway from one router, the number of \u0027rfp-interface\u0027 for the fip namespace will reduce from 2 -1 . But still the self.rtr_fip_connect will be True.\n\nSo this is a valid check.","commit_id":"0eea82898fbb2436fc313dd6d3fab7ac56707756"},{"author":{"_account_id":11159,"name":"Hong Hui Xiao","email":"honghui_xiao@yeah.net","username":"HongHuiXiao"},"change_message_id":"1422bcc22954a09f7d363e1077a5a1431b33ea7b","unresolved":false,"context_lines":[{"line_number":492,"context_line":"                    self.fip_ns.create_gateway_port(fip_agent_port)"},{"line_number":493,"context_line":"        else:"},{"line_number":494,"context_line":"            self.fip_ns.update_gateway_port(fip_agent_port)"},{"line_number":495,"context_line":"        if self.fip_ns.agent_gateway_port and not self.rtr_fip_connect:"},{"line_number":496,"context_line":"                self.fip_ns.create_rtr_2_fip_link(self)"},{"line_number":497,"context_line":"                self.rtr_fip_connect \u003d True"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    def get_router_cidrs(self, device):"},{"line_number":500,"context_line":"        \"\"\"As no floatingip will be set on the rfp device. Get floatingip from"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_66f6dbfa","line":497,"range":{"start_line":495,"start_character":0,"end_line":497,"end_character":43},"updated":"2016-09-01 01:02:05.000000000","message":"This might not impact the functionality, but if the router has external gateway, everytime updating a router, the code will go through this method and do nothing. It is something that I think can be optimized. Although it is something to do with fip, its logic is tight couple with external gateway add. I makes me think it should be in external_gateway_add method. Just like you place delete_rtr_2_fip_link inside external_gateway_removed.","commit_id":"0eea82898fbb2436fc313dd6d3fab7ac56707756"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"9cda4ab682f8de938c3778a23b7fcad06942b701","unresolved":false,"context_lines":[{"line_number":492,"context_line":"                    self.fip_ns.create_gateway_port(fip_agent_port)"},{"line_number":493,"context_line":"        else:"},{"line_number":494,"context_line":"            self.fip_ns.update_gateway_port(fip_agent_port)"},{"line_number":495,"context_line":"        if self.fip_ns.agent_gateway_port and not self.rtr_fip_connect:"},{"line_number":496,"context_line":"                self.fip_ns.create_rtr_2_fip_link(self)"},{"line_number":497,"context_line":"                self.rtr_fip_connect \u003d True"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    def get_router_cidrs(self, device):"},{"line_number":500,"context_line":"        \"\"\"As no floatingip will be set on the rfp device. Get floatingip from"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_60fe75af","line":497,"range":{"start_line":495,"start_character":0,"end_line":497,"end_character":43},"in_reply_to":"fa7ab95a_66f6dbfa","updated":"2016-09-02 05:30:20.000000000","message":"Hi I checked the feasability, but it seems that if the router gateway port subnet is updated, then it might not go through the same path \u0027external_gateway_updated\u0027, so it is better to leave it here rather than fixing it and have a duplicate code.","commit_id":"0eea82898fbb2436fc313dd6d3fab7ac56707756"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"1ee10d87311330ef5332b50895a5bf945ae26709","unresolved":false,"context_lines":[{"line_number":492,"context_line":"                    self.fip_ns.create_gateway_port(fip_agent_port)"},{"line_number":493,"context_line":"        else:"},{"line_number":494,"context_line":"            self.fip_ns.update_gateway_port(fip_agent_port)"},{"line_number":495,"context_line":"        if self.fip_ns.agent_gateway_port and not self.rtr_fip_connect:"},{"line_number":496,"context_line":"                self.fip_ns.create_rtr_2_fip_link(self)"},{"line_number":497,"context_line":"                self.rtr_fip_connect \u003d True"},{"line_number":498,"context_line":""},{"line_number":499,"context_line":"    def get_router_cidrs(self, device):"},{"line_number":500,"context_line":"        \"\"\"As no floatingip will be set on the rfp device. Get floatingip from"}],"source_content_type":"text/x-python","patch_set":22,"id":"fa7ab95a_55d151cc","line":497,"range":{"start_line":495,"start_character":0,"end_line":497,"end_character":43},"in_reply_to":"fa7ab95a_66f6dbfa","updated":"2016-09-01 16:22:36.000000000","message":"Let me check this out.","commit_id":"0eea82898fbb2436fc313dd6d3fab7ac56707756"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f3a79ca98e2e3baaa69a8ce15fe72d188919dd82","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        if self.rtr_fip_subnet is None:"},{"line_number":131,"context_line":"            self.rtr_fip_subnet \u003d self.fip_ns.local_subnets.lookup("},{"line_number":132,"context_line":"                self.router_id)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        rtr_2_fip, fip_2_rtr \u003d self.rtr_fip_subnet.get_pair()"},{"line_number":135,"context_line":"        fip_ns_name \u003d self.fip_ns.get_name()"},{"line_number":136,"context_line":"        self._remove_floating_ip_rule(floating_ip)"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a89bdaa_bcb96a17","line":133,"updated":"2016-09-07 18:25:29.000000000","message":"I think some of the code below needs to be under an \"if self.rtr_fip_subnet:\" like was done in the dvr_fip_ns code, since a lookup() might not succeed, in which case get_pair() will throw an exception.","commit_id":"e598e907d9eb656e93c45545128af1b89540b752"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"db9529ccfb980472bdc0904aa0d91d5a3565b3dd","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        if self.rtr_fip_subnet is None:"},{"line_number":131,"context_line":"            self.rtr_fip_subnet \u003d self.fip_ns.local_subnets.lookup("},{"line_number":132,"context_line":"                self.router_id)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"        rtr_2_fip, fip_2_rtr \u003d self.rtr_fip_subnet.get_pair()"},{"line_number":135,"context_line":"        fip_ns_name \u003d self.fip_ns.get_name()"},{"line_number":136,"context_line":"        self._remove_floating_ip_rule(floating_ip)"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a89bdaa_6a3d4f8e","line":133,"in_reply_to":"9a89bdaa_bcb96a17","updated":"2016-09-08 15:42:32.000000000","message":"will fix it.","commit_id":"e598e907d9eb656e93c45545128af1b89540b752"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f3a79ca98e2e3baaa69a8ce15fe72d188919dd82","unresolved":false,"context_lines":[{"line_number":522,"context_line":"                    self.fip_ns.create_gateway_port(fip_agent_port)"},{"line_number":523,"context_line":"        else:"},{"line_number":524,"context_line":"            self.fip_ns.update_gateway_port(fip_agent_port)"},{"line_number":525,"context_line":"        if (self.fip_ns.agent_gateway_port and (not self.rtr_fip_connect)):"},{"line_number":526,"context_line":"                self.fip_ns.create_rtr_2_fip_link(self)"},{"line_number":527,"context_line":"                self.rtr_fip_connect \u003d True"},{"line_number":528,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9a89bdaa_bc15eae5","line":525,"updated":"2016-09-07 18:25:29.000000000","message":"shouldn\u0027t need all the () here\n\nActually this can move under the \"else\" and be just:\n\nif not self.rtr_fip_connect:","commit_id":"e598e907d9eb656e93c45545128af1b89540b752"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"db9529ccfb980472bdc0904aa0d91d5a3565b3dd","unresolved":false,"context_lines":[{"line_number":522,"context_line":"                    self.fip_ns.create_gateway_port(fip_agent_port)"},{"line_number":523,"context_line":"        else:"},{"line_number":524,"context_line":"            self.fip_ns.update_gateway_port(fip_agent_port)"},{"line_number":525,"context_line":"        if (self.fip_ns.agent_gateway_port and (not self.rtr_fip_connect)):"},{"line_number":526,"context_line":"                self.fip_ns.create_rtr_2_fip_link(self)"},{"line_number":527,"context_line":"                self.rtr_fip_connect \u003d True"},{"line_number":528,"context_line":""}],"source_content_type":"text/x-python","patch_set":25,"id":"9a89bdaa_9ba4754b","line":525,"in_reply_to":"9a89bdaa_bc15eae5","updated":"2016-09-08 15:42:32.000000000","message":"I think I have an issue combining it with the else loop.\nBecause when _create_gateway_port is called in L522, the self.fip_ns.agent_gateway_port gets a value and so it should go through L526.\n\nBut if we add it to the else loop it fails.","commit_id":"e598e907d9eb656e93c45545128af1b89540b752"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"98bae98d07a329462b3eeebc73e76753b3bc59a1","unresolved":false,"context_lines":[{"line_number":521,"context_line":"            LOG.debug(\"FloatingIP agent gateway port received from the \""},{"line_number":522,"context_line":"                      \"plugin: %s\", fip_agent_port)"},{"line_number":523,"context_line":"        if not self.fip_ns.agent_gateway_port:"},{"line_number":524,"context_line":"            is_first \u003d self.fip_ns.subscribe(ex_gw_port[\u0027network_id\u0027])"},{"line_number":525,"context_line":"            if is_first and fip_agent_port:"},{"line_number":526,"context_line":"                if \u0027subnets\u0027 not in fip_agent_port:"},{"line_number":527,"context_line":"                    LOG.error(_LE(\u0027Missing subnet/agent_gateway_port\u0027))"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba5da102_27277213","line":524,"updated":"2016-10-31 02:31:38.000000000","message":"Is this going to cause another race?  I\u0027m thinking of the other patch we\u0027ve been working on.","commit_id":"f7b1b95e5df675c7a396281f1069fa26dc6b75ee"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"bf59f953196d13bc8e555aa9691c69d5f7c522c7","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        if self.rtr_fip_subnet is None:"},{"line_number":131,"context_line":"            self.rtr_fip_subnet \u003d self.fip_ns.local_subnets.lookup("},{"line_number":132,"context_line":"                self.router_id)"},{"line_number":133,"context_line":"        if self.rtr_fip_subnet:"},{"line_number":134,"context_line":"            rtr_2_fip, fip_2_rtr \u003d self.rtr_fip_subnet.get_pair()"},{"line_number":135,"context_line":"            fip_ns_name \u003d self.fip_ns.get_name()"},{"line_number":136,"context_line":"            self._remove_floating_ip_rule(floating_ip)"}],"source_content_type":"text/x-python","patch_set":50,"id":"bff0334d_b9f28c05","line":133,"range":{"start_line":133,"start_character":8,"end_line":133,"end_character":31},"updated":"2017-04-06 09:50:12.000000000","message":"what if no? Should we just skip, allocate or maybe log something? Asking because old code was allocating if not found","commit_id":"61e9565925e9961fa9ae3d11bd0f08a04260059a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"1398f9beb77cfb649c922c3528e9ffcd2866dd9b","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        if self.rtr_fip_subnet is None:"},{"line_number":131,"context_line":"            self.rtr_fip_subnet \u003d self.fip_ns.local_subnets.lookup("},{"line_number":132,"context_line":"                self.router_id)"},{"line_number":133,"context_line":"        if self.rtr_fip_subnet:"},{"line_number":134,"context_line":"            rtr_2_fip, fip_2_rtr \u003d self.rtr_fip_subnet.get_pair()"},{"line_number":135,"context_line":"            fip_ns_name \u003d self.fip_ns.get_name()"},{"line_number":136,"context_line":"            self._remove_floating_ip_rule(floating_ip)"}],"source_content_type":"text/x-python","patch_set":50,"id":"bff0334d_a015084b","line":133,"range":{"start_line":133,"start_character":8,"end_line":133,"end_character":31},"in_reply_to":"bff0334d_124b7459","updated":"2017-04-11 22:14:53.000000000","message":"So for now can we leave it as such?","commit_id":"61e9565925e9961fa9ae3d11bd0f08a04260059a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6295a011b130c03d81bc04ecc1217fe3711172ca","unresolved":false,"context_lines":[{"line_number":130,"context_line":"        if self.rtr_fip_subnet is None:"},{"line_number":131,"context_line":"            self.rtr_fip_subnet \u003d self.fip_ns.local_subnets.lookup("},{"line_number":132,"context_line":"                self.router_id)"},{"line_number":133,"context_line":"        if self.rtr_fip_subnet:"},{"line_number":134,"context_line":"            rtr_2_fip, fip_2_rtr \u003d self.rtr_fip_subnet.get_pair()"},{"line_number":135,"context_line":"            fip_ns_name \u003d self.fip_ns.get_name()"},{"line_number":136,"context_line":"            self._remove_floating_ip_rule(floating_ip)"}],"source_content_type":"text/x-python","patch_set":50,"id":"bff0334d_124b7459","line":133,"range":{"start_line":133,"start_character":8,"end_line":133,"end_character":31},"in_reply_to":"bff0334d_b9f28c05","updated":"2017-04-06 21:04:01.000000000","message":"The old code was allocating and then releasing, this will now see if there is an entry, and only delete things in that case.  I believe it could happen on a restart, it\u0027s been a while since I added that code to the patch.","commit_id":"61e9565925e9961fa9ae3d11bd0f08a04260059a"}],"neutron/db/l3_dvr_db.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"98bae98d07a329462b3eeebc73e76753b3bc59a1","unresolved":false,"context_lines":[{"line_number":595,"context_line":"                snat_router_intfs \u003d snat_intfs_by_router_id[router[\u0027id\u0027]]"},{"line_number":596,"context_line":"                LOG.debug(\"SNAT ports returned: %s \", snat_router_intfs)"},{"line_number":597,"context_line":"                router[l3_const.SNAT_ROUTER_INTF_KEY] \u003d snat_router_intfs"},{"line_number":598,"context_line":"                LOG.debug(\"FIP Agent : %s \", agent.id)"},{"line_number":599,"context_line":"                fip_sync_interfaces \u003d self._get_fip_sync_interfaces("},{"line_number":600,"context_line":"                        context, agent.id)"},{"line_number":601,"context_line":"                LOG.debug(\"FIP Agent ports: %s\", fip_sync_interfaces)"}],"source_content_type":"text/x-python","patch_set":32,"id":"ba5da102_47cd465c","line":598,"updated":"2016-10-31 02:31:38.000000000","message":"nit: might as well fix the space in front of the : if you\u0027re updating this patch again.","commit_id":"f7b1b95e5df675c7a396281f1069fa26dc6b75ee"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e0ac1fdcfc3992e0991e7d8a6d70767f18237753","unresolved":false,"context_lines":[{"line_number":501,"context_line":"                snat_router_intfs \u003d snat_intfs_by_router_id[router[\u0027id\u0027]]"},{"line_number":502,"context_line":"                LOG.debug(\"SNAT ports returned: %s \", snat_router_intfs)"},{"line_number":503,"context_line":"                router[l3_const.SNAT_ROUTER_INTF_KEY] \u003d snat_router_intfs"},{"line_number":504,"context_line":"                LOG.debug(\"FIP Agent : %s \", agent.id)"},{"line_number":505,"context_line":"                fip_sync_interfaces \u003d self._get_fip_sync_interfaces("},{"line_number":506,"context_line":"                        context, agent.id)"},{"line_number":507,"context_line":"                LOG.debug(\"FIP Agent ports: %s\", fip_sync_interfaces)"}],"source_content_type":"text/x-python","patch_set":47,"id":"ffe62b97_ff28a686","line":504,"range":{"start_line":504,"start_character":36,"end_line":504,"end_character":37},"updated":"2017-03-27 18:12:24.000000000","message":"nit: extra space before \":\"","commit_id":"3bba2a10d04fcd75a8d4d52184659240964547aa"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e0ac1fdcfc3992e0991e7d8a6d70767f18237753","unresolved":false,"context_lines":[{"line_number":503,"context_line":"                router[l3_const.SNAT_ROUTER_INTF_KEY] \u003d snat_router_intfs"},{"line_number":504,"context_line":"                LOG.debug(\"FIP Agent : %s \", agent.id)"},{"line_number":505,"context_line":"                fip_sync_interfaces \u003d self._get_fip_sync_interfaces("},{"line_number":506,"context_line":"                        context, agent.id)"},{"line_number":507,"context_line":"                LOG.debug(\"FIP Agent ports: %s\", fip_sync_interfaces)"},{"line_number":508,"context_line":"                router[l3_const.FLOATINGIP_AGENT_INTF_KEY] \u003d ("},{"line_number":509,"context_line":"                    fip_sync_interfaces)"}],"source_content_type":"text/x-python","patch_set":47,"id":"ffe62b97_ff9b06c6","line":506,"updated":"2017-03-27 18:12:24.000000000","message":"Looks like this call can be outside the for() loop so that it\u0027s only done once, instead of for every router.  Or just do what the code did on L508-526 where this was moved from - set to None before loop, lookup if None here, else use cached value.","commit_id":"3bba2a10d04fcd75a8d4d52184659240964547aa"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"fd24d3273ff1ddd3603b20704e7d2af1f3026871","unresolved":false,"context_lines":[{"line_number":502,"context_line":"                snat_router_intfs \u003d snat_intfs_by_router_id[router[\u0027id\u0027]]"},{"line_number":503,"context_line":"                LOG.debug(\"SNAT ports returned: %s \", snat_router_intfs)"},{"line_number":504,"context_line":"                router[l3_const.SNAT_ROUTER_INTF_KEY] \u003d snat_router_intfs"},{"line_number":505,"context_line":"                LOG.debug(\"FIP Agent: %s \", agent.id)"},{"line_number":506,"context_line":"                if not fip_sync_interfaces:"},{"line_number":507,"context_line":"                    fip_sync_interfaces \u003d self._get_fip_sync_interfaces("},{"line_number":508,"context_line":"                        context, agent.id)"}],"source_content_type":"text/x-python","patch_set":48,"id":"ffe62b97_50b3ca98","line":505,"updated":"2017-03-28 18:46:19.000000000","message":"To be as original code, this should be below L498.","commit_id":"b1fc938acc04b46aa7fbb8f563a633377fee8b9e"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"bf59f953196d13bc8e555aa9691c69d5f7c522c7","unresolved":false,"context_lines":[{"line_number":496,"context_line":"        snat_intfs_by_router_id \u003d self._get_snat_sync_interfaces("},{"line_number":497,"context_line":"            context, [r[\u0027id\u0027] for r in routers])"},{"line_number":498,"context_line":"        fip_sync_interfaces \u003d None"},{"line_number":499,"context_line":"        LOG.debug(\"FIP Agent: %s \", agent.id)"},{"line_number":500,"context_line":"        for router in routers:"},{"line_number":501,"context_line":"            routers_dict[router[\u0027id\u0027]] \u003d router"},{"line_number":502,"context_line":"            if router[\u0027gw_port_id\u0027]:"}],"source_content_type":"text/x-python","patch_set":50,"id":"bff0334d_11ccb233","line":499,"range":{"start_line":499,"start_character":8,"end_line":499,"end_character":45},"updated":"2017-04-06 09:50:12.000000000","message":"nit: do we need this log?","commit_id":"61e9565925e9961fa9ae3d11bd0f08a04260059a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"6295a011b130c03d81bc04ecc1217fe3711172ca","unresolved":false,"context_lines":[{"line_number":496,"context_line":"        snat_intfs_by_router_id \u003d self._get_snat_sync_interfaces("},{"line_number":497,"context_line":"            context, [r[\u0027id\u0027] for r in routers])"},{"line_number":498,"context_line":"        fip_sync_interfaces \u003d None"},{"line_number":499,"context_line":"        LOG.debug(\"FIP Agent: %s \", agent.id)"},{"line_number":500,"context_line":"        for router in routers:"},{"line_number":501,"context_line":"            routers_dict[router[\u0027id\u0027]] \u003d router"},{"line_number":502,"context_line":"            if router[\u0027gw_port_id\u0027]:"}],"source_content_type":"text/x-python","patch_set":50,"id":"bff0334d_120374ba","line":499,"range":{"start_line":499,"start_character":8,"end_line":499,"end_character":45},"in_reply_to":"bff0334d_11ccb233","updated":"2017-04-06 21:04:01.000000000","message":"I think so as it\u0027s only logged indirectly as the device_id of the port otherwise.","commit_id":"61e9565925e9961fa9ae3d11bd0f08a04260059a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"1398f9beb77cfb649c922c3528e9ffcd2866dd9b","unresolved":false,"context_lines":[{"line_number":496,"context_line":"        snat_intfs_by_router_id \u003d self._get_snat_sync_interfaces("},{"line_number":497,"context_line":"            context, [r[\u0027id\u0027] for r in routers])"},{"line_number":498,"context_line":"        fip_sync_interfaces \u003d None"},{"line_number":499,"context_line":"        LOG.debug(\"FIP Agent: %s \", agent.id)"},{"line_number":500,"context_line":"        for router in routers:"},{"line_number":501,"context_line":"            routers_dict[router[\u0027id\u0027]] \u003d router"},{"line_number":502,"context_line":"            if router[\u0027gw_port_id\u0027]:"}],"source_content_type":"text/x-python","patch_set":50,"id":"bff0334d_e3043a17","line":499,"range":{"start_line":499,"start_character":8,"end_line":499,"end_character":45},"in_reply_to":"bff0334d_120374ba","updated":"2017-04-11 22:14:53.000000000","message":"I agree.","commit_id":"61e9565925e9961fa9ae3d11bd0f08a04260059a"}],"neutron/tests/functional/agent/l3/test_dvr_router.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f3a79ca98e2e3baaa69a8ce15fe72d188919dd82","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        if enable_gw:"},{"line_number":366,"context_line":"            external_gw_port \u003d router[\u0027gw_port\u0027]"},{"line_number":367,"context_line":"            router[\u0027gw_port\u0027][portbindings.HOST_ID] \u003d agent.conf.host"},{"line_number":368,"context_line":"            if enable_floating_ip:"},{"line_number":369,"context_line":"                floating_ip[\u0027floating_network_id\u0027] \u003d ("},{"line_number":370,"context_line":"                    external_gw_port[\u0027network_id\u0027])"},{"line_number":371,"context_line":"                floating_ip[\u0027port_id\u0027] \u003d internal_ports[0][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a89bdaa_5c569e5c","line":368,"updated":"2016-09-07 18:25:29.000000000","message":"Just curious if this can all move to L379 to remove so many if\u0027s","commit_id":"e598e907d9eb656e93c45545128af1b89540b752"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"db9529ccfb980472bdc0904aa0d91d5a3565b3dd","unresolved":false,"context_lines":[{"line_number":365,"context_line":"        if enable_gw:"},{"line_number":366,"context_line":"            external_gw_port \u003d router[\u0027gw_port\u0027]"},{"line_number":367,"context_line":"            router[\u0027gw_port\u0027][portbindings.HOST_ID] \u003d agent.conf.host"},{"line_number":368,"context_line":"            if enable_floating_ip:"},{"line_number":369,"context_line":"                floating_ip[\u0027floating_network_id\u0027] \u003d ("},{"line_number":370,"context_line":"                    external_gw_port[\u0027network_id\u0027])"},{"line_number":371,"context_line":"                floating_ip[\u0027port_id\u0027] \u003d internal_ports[0][\u0027id\u0027]"}],"source_content_type":"text/x-python","patch_set":25,"id":"9a89bdaa_1b6f85fc","line":368,"in_reply_to":"9a89bdaa_5c569e5c","updated":"2016-09-08 15:42:32.000000000","message":"will fix it.","commit_id":"e598e907d9eb656e93c45545128af1b89540b752"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"895915ebe86b1f5d1f95fa2bddf36098fbf539a5","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        interface_rules_list_count \u003d 0"},{"line_number":104,"context_line":"        for ip_rule in ip4_rules_list:"},{"line_number":105,"context_line":"            tbl_index \u003d ip_rule[\u0027table\u0027]"},{"line_number":106,"context_line":"            if tbl_index in [\u0027local\u0027, \u0027default\u0027, \u0027main\u0027, \u002716\u0027]:"},{"line_number":107,"context_line":"                default_rules_list_count \u003d default_rules_list_count + 1"},{"line_number":108,"context_line":"            else:"},{"line_number":109,"context_line":"                interface_rules_list_count \u003d interface_rules_list_count + 1"}],"source_content_type":"text/x-python","patch_set":41,"id":"7a3c09a3_4b717d43","line":106,"updated":"2017-01-17 22:56:55.000000000","message":"Should use the constant from dvr_fip_ns.py","commit_id":"b868517893535e4b6a9ccbea93c9eca7a844cd04"}],"releasenotes/notes/dvr-fip-namespace-on-all-nodes-c4da7ccd60ee62f5.yaml":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f3a79ca98e2e3baaa69a8ce15fe72d188919dd82","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Improve DVR FIP Namespace creation event on all nodes,"},{"line_number":4,"context_line":"    irrespective of FloatingIPs."},{"line_number":5,"context_line":"features:"},{"line_number":6,"context_line":"  - Proactively create FIP Namespace on all compute nodes"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"9a89bdaa_5cb21e95","line":3,"updated":"2016-09-07 18:25:29.000000000","message":"Should probably spell this out the first use:\n\nImprove DVR Floating IP (FIP) namespace...\n\nOr just use Floating IP here and L6","commit_id":"e598e907d9eb656e93c45545128af1b89540b752"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"db9529ccfb980472bdc0904aa0d91d5a3565b3dd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Improve DVR FIP Namespace creation event on all nodes,"},{"line_number":4,"context_line":"    irrespective of FloatingIPs."},{"line_number":5,"context_line":"features:"},{"line_number":6,"context_line":"  - Proactively create FIP Namespace on all compute nodes"}],"source_content_type":"text/x-yaml","patch_set":25,"id":"9a89bdaa_5b758dc8","line":3,"in_reply_to":"9a89bdaa_5cb21e95","updated":"2016-09-08 15:42:32.000000000","message":"will fix this.","commit_id":"e598e907d9eb656e93c45545128af1b89540b752"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f3a79ca98e2e3baaa69a8ce15fe72d188919dd82","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Improve DVR FIP Namespace creation event on all nodes,"},{"line_number":4,"context_line":"    irrespective of FloatingIPs."},{"line_number":5,"context_line":"features:"},{"line_number":6,"context_line":"  - Proactively create FIP Namespace on all compute nodes"},{"line_number":7,"context_line":"    when a gateway is configured."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"9a89bdaa_9c9106f4","line":4,"updated":"2016-09-07 18:25:29.000000000","message":"s/FloatingIPs/Floating IPs","commit_id":"e598e907d9eb656e93c45545128af1b89540b752"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"db9529ccfb980472bdc0904aa0d91d5a3565b3dd","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Improve DVR FIP Namespace creation event on all nodes,"},{"line_number":4,"context_line":"    irrespective of FloatingIPs."},{"line_number":5,"context_line":"features:"},{"line_number":6,"context_line":"  - Proactively create FIP Namespace on all compute nodes"},{"line_number":7,"context_line":"    when a gateway is configured."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"9a89bdaa_fb42e166","line":4,"in_reply_to":"9a89bdaa_9c9106f4","updated":"2016-09-08 15:42:32.000000000","message":"will fix this.","commit_id":"e598e907d9eb656e93c45545128af1b89540b752"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f3a79ca98e2e3baaa69a8ce15fe72d188919dd82","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - Proactively create FIP Namespace on all compute nodes"},{"line_number":7,"context_line":"    when a gateway is configured."},{"line_number":8,"context_line":"issues:"},{"line_number":9,"context_line":"  - This might consume a public IP Address, but with the"},{"line_number":10,"context_line":"    service_type networks, consumers can use the private"},{"line_number":11,"context_line":"    ips for floatingip agent gateway ports and need not"},{"line_number":12,"context_line":"    waste the public IP."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"9a89bdaa_5c793ec7","line":9,"updated":"2016-09-07 18:25:29.000000000","message":"s/with the/by using","commit_id":"e598e907d9eb656e93c45545128af1b89540b752"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"db9529ccfb980472bdc0904aa0d91d5a3565b3dd","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - Proactively create FIP Namespace on all compute nodes"},{"line_number":7,"context_line":"    when a gateway is configured."},{"line_number":8,"context_line":"issues:"},{"line_number":9,"context_line":"  - This might consume a public IP Address, but with the"},{"line_number":10,"context_line":"    service_type networks, consumers can use the private"},{"line_number":11,"context_line":"    ips for floatingip agent gateway ports and need not"},{"line_number":12,"context_line":"    waste the public IP."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"9a89bdaa_7b57b125","line":9,"in_reply_to":"9a89bdaa_5c793ec7","updated":"2016-09-08 15:42:32.000000000","message":"will fix this.","commit_id":"e598e907d9eb656e93c45545128af1b89540b752"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f3a79ca98e2e3baaa69a8ce15fe72d188919dd82","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    when a gateway is configured."},{"line_number":8,"context_line":"issues:"},{"line_number":9,"context_line":"  - This might consume a public IP Address, but with the"},{"line_number":10,"context_line":"    service_type networks, consumers can use the private"},{"line_number":11,"context_line":"    ips for floatingip agent gateway ports and need not"},{"line_number":12,"context_line":"    waste the public IP."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"9a89bdaa_7c2442c4","line":10,"updated":"2016-09-07 18:25:29.000000000","message":"s/service_type networks/subnet service-types","commit_id":"e598e907d9eb656e93c45545128af1b89540b752"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"db9529ccfb980472bdc0904aa0d91d5a3565b3dd","unresolved":false,"context_lines":[{"line_number":7,"context_line":"    when a gateway is configured."},{"line_number":8,"context_line":"issues:"},{"line_number":9,"context_line":"  - This might consume a public IP Address, but with the"},{"line_number":10,"context_line":"    service_type networks, consumers can use the private"},{"line_number":11,"context_line":"    ips for floatingip agent gateway ports and need not"},{"line_number":12,"context_line":"    waste the public IP."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"9a89bdaa_db36fd01","line":10,"in_reply_to":"9a89bdaa_7c2442c4","updated":"2016-09-08 15:42:32.000000000","message":"will fix this.","commit_id":"e598e907d9eb656e93c45545128af1b89540b752"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f3a79ca98e2e3baaa69a8ce15fe72d188919dd82","unresolved":false,"context_lines":[{"line_number":8,"context_line":"issues:"},{"line_number":9,"context_line":"  - This might consume a public IP Address, but with the"},{"line_number":10,"context_line":"    service_type networks, consumers can use the private"},{"line_number":11,"context_line":"    ips for floatingip agent gateway ports and need not"},{"line_number":12,"context_line":"    waste the public IP."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"9a89bdaa_5c0e9e3b","line":11,"updated":"2016-09-07 18:25:29.000000000","message":"s/ips/IPs\ns/floatingip/floating IP","commit_id":"e598e907d9eb656e93c45545128af1b89540b752"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"db9529ccfb980472bdc0904aa0d91d5a3565b3dd","unresolved":false,"context_lines":[{"line_number":8,"context_line":"issues:"},{"line_number":9,"context_line":"  - This might consume a public IP Address, but with the"},{"line_number":10,"context_line":"    service_type networks, consumers can use the private"},{"line_number":11,"context_line":"    ips for floatingip agent gateway ports and need not"},{"line_number":12,"context_line":"    waste the public IP."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"9a89bdaa_3b28c999","line":11,"in_reply_to":"9a89bdaa_5c0e9e3b","updated":"2016-09-08 15:42:32.000000000","message":"will fix this.","commit_id":"e598e907d9eb656e93c45545128af1b89540b752"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f3a79ca98e2e3baaa69a8ce15fe72d188919dd82","unresolved":false,"context_lines":[{"line_number":9,"context_line":"  - This might consume a public IP Address, but with the"},{"line_number":10,"context_line":"    service_type networks, consumers can use the private"},{"line_number":11,"context_line":"    ips for floatingip agent gateway ports and need not"},{"line_number":12,"context_line":"    waste the public IP."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"9a89bdaa_ff53e414","line":12,"updated":"2016-09-07 18:25:29.000000000","message":"s/the public IP/any public IP addresses.","commit_id":"e598e907d9eb656e93c45545128af1b89540b752"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"db9529ccfb980472bdc0904aa0d91d5a3565b3dd","unresolved":false,"context_lines":[{"line_number":9,"context_line":"  - This might consume a public IP Address, but with the"},{"line_number":10,"context_line":"    service_type networks, consumers can use the private"},{"line_number":11,"context_line":"    ips for floatingip agent gateway ports and need not"},{"line_number":12,"context_line":"    waste the public IP."}],"source_content_type":"text/x-yaml","patch_set":25,"id":"9a89bdaa_5b23cdbc","line":12,"in_reply_to":"9a89bdaa_ff53e414","updated":"2016-09-08 15:42:32.000000000","message":"will fix this.","commit_id":"e598e907d9eb656e93c45545128af1b89540b752"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"e0ac1fdcfc3992e0991e7d8a6d70767f18237753","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"prelude: \u003e"},{"line_number":3,"context_line":"    Improve DVR Floating IP (FIP) Namespace creation event"},{"line_number":4,"context_line":"    on all nodes, irrespective of Floating IPs."},{"line_number":5,"context_line":"features:"},{"line_number":6,"context_line":"  - Proactively create Floating IP Namespace on all compute nodes"}],"source_content_type":"text/x-yaml","patch_set":47,"id":"ffe62b97_7fe7f613","line":3,"range":{"start_line":3,"start_character":4,"end_line":3,"end_character":11},"updated":"2017-03-27 18:12:24.000000000","message":"Is \"Improve\" the right word?","commit_id":"3bba2a10d04fcd75a8d4d52184659240964547aa"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"64cfd3821895fb86a3ab4830a21d05ed76ee543c","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - Proactively create Floating IP Namespace on all compute nodes"},{"line_number":7,"context_line":"    when a gateway is configured."},{"line_number":8,"context_line":"issues:"},{"line_number":9,"context_line":"  - This might consume public IP Address, but by using"},{"line_number":10,"context_line":"    subnet service-types, consumers can use the private"},{"line_number":11,"context_line":"    IPs for floating IP agent gateway ports and need not"},{"line_number":12,"context_line":"    waste any public IP addresses."}],"source_content_type":"text/x-yaml","patch_set":50,"id":"bff0334d_9f541d23","line":12,"range":{"start_line":9,"start_character":42,"end_line":12,"end_character":33},"updated":"2017-04-07 07:54:00.000000000","message":"is this approach described somewhere in docs?","commit_id":"61e9565925e9961fa9ae3d11bd0f08a04260059a"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"d4ae8b7e182bea1bedcde7780c9ef3adbbcfe936","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - Proactively create Floating IP Namespace on all compute nodes"},{"line_number":7,"context_line":"    when a gateway is configured."},{"line_number":8,"context_line":"issues:"},{"line_number":9,"context_line":"  - This might consume public IP Address, but by using"},{"line_number":10,"context_line":"    subnet service-types, consumers can use the private"},{"line_number":11,"context_line":"    IPs for floating IP agent gateway ports and need not"},{"line_number":12,"context_line":"    waste any public IP addresses."}],"source_content_type":"text/x-yaml","patch_set":50,"id":"bff0334d_10e1f42a","line":12,"range":{"start_line":9,"start_character":42,"end_line":12,"end_character":33},"in_reply_to":"bff0334d_0fc203ea","updated":"2017-04-08 17:58:59.000000000","message":"yeah, that might be useful, but was asking just out of curiosity, saving public IP\u0027s is very interesting for many.","commit_id":"61e9565925e9961fa9ae3d11bd0f08a04260059a"},{"author":{"_account_id":7016,"name":"Swaminathan Vasudevan","email":"swvasude@cisco.com","username":"souminathan"},"change_message_id":"1398f9beb77cfb649c922c3528e9ffcd2866dd9b","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - Proactively create Floating IP Namespace on all compute nodes"},{"line_number":7,"context_line":"    when a gateway is configured."},{"line_number":8,"context_line":"issues:"},{"line_number":9,"context_line":"  - This might consume public IP Address, but by using"},{"line_number":10,"context_line":"    subnet service-types, consumers can use the private"},{"line_number":11,"context_line":"    IPs for floating IP agent gateway ports and need not"},{"line_number":12,"context_line":"    waste any public IP addresses."}],"source_content_type":"text/x-yaml","patch_set":50,"id":"bff0334d_e37b1a89","line":12,"range":{"start_line":9,"start_character":42,"end_line":12,"end_character":33},"in_reply_to":"bff0334d_10e1f42a","updated":"2017-04-11 22:14:53.000000000","message":"Will add the link in here.","commit_id":"61e9565925e9961fa9ae3d11bd0f08a04260059a"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"93afe8cf816dbf34e14a9947901c8790bc9fe915","unresolved":false,"context_lines":[{"line_number":6,"context_line":"  - Proactively create Floating IP Namespace on all compute nodes"},{"line_number":7,"context_line":"    when a gateway is configured."},{"line_number":8,"context_line":"issues:"},{"line_number":9,"context_line":"  - This might consume public IP Address, but by using"},{"line_number":10,"context_line":"    subnet service-types, consumers can use the private"},{"line_number":11,"context_line":"    IPs for floating IP agent gateway ports and need not"},{"line_number":12,"context_line":"    waste any public IP addresses."}],"source_content_type":"text/x-yaml","patch_set":50,"id":"bff0334d_0fc203ea","line":12,"range":{"start_line":9,"start_character":42,"end_line":12,"end_character":33},"in_reply_to":"bff0334d_9f541d23","updated":"2017-04-07 19:45:19.000000000","message":"https://docs.openstack.org/networking-guide/config-service-subnets.html describes how to use subnet service types in a DVR environment, do you want us to add a link to that here?","commit_id":"61e9565925e9961fa9ae3d11bd0f08a04260059a"}]}
