)]}'
{"neutron/tests/functional/services/portforwarding/test_port_forwarding.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"a970862bb84f645bcaea55053605a6211e433b62","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        self.port \u003d self._create_port("},{"line_number":103,"context_line":"            self.fmt, self.net[\u0027id\u0027],"},{"line_number":104,"context_line":"            fixed_ips\u003d[{\u0027subnet_id\u0027: self.subnet[\u0027id\u0027],"},{"line_number":105,"context_line":"                        \u0027ip_address\u0027: \u002710.0.0.100\u0027}]).json[\u0027port\u0027]"},{"line_number":106,"context_line":"        self.port_forwarding \u003d {"},{"line_number":107,"context_line":"            apidef.RESOURCE_NAME:"},{"line_number":108,"context_line":"                {apidef.EXTERNAL_PORT: 2225,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_4ba8811e","line":105,"updated":"2019-01-21 21:41:28.000000000","message":"I guess I\u0027m surprised the IPAM code didn\u0027t remove the last IP from being usable as it\u0027s a broadcast address, but maybe that\u0027s only in the allocation pool code?","commit_id":"479d32547dc71ef6e2b6bd708b08ba59feaa815e"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a31a0fcc24bcc623a8e6af6814cc105b962aede9","unresolved":false,"context_lines":[{"line_number":102,"context_line":"        self.port \u003d self._create_port("},{"line_number":103,"context_line":"            self.fmt, self.net[\u0027id\u0027],"},{"line_number":104,"context_line":"            fixed_ips\u003d[{\u0027subnet_id\u0027: self.subnet[\u0027id\u0027],"},{"line_number":105,"context_line":"                        \u0027ip_address\u0027: \u002710.0.0.100\u0027}]).json[\u0027port\u0027]"},{"line_number":106,"context_line":"        self.port_forwarding \u003d {"},{"line_number":107,"context_line":"            apidef.RESOURCE_NAME:"},{"line_number":108,"context_line":"                {apidef.EXTERNAL_PORT: 2225,"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_b4838a04","line":105,"in_reply_to":"9fdfeff1_4ba8811e","updated":"2019-01-22 01:41:35.000000000","message":"x.x.x.255 and x.x.x.0 are indeed invlid IPs for IPAM, this issue actually proved that.\nIt is something like this:\nWhen this Port IP was allocated the x.0.254 or x.0.253 address, the next +2 (see line 448) address can be x.0.255 or x.1.0, then IPAM raised that exception.","commit_id":"479d32547dc71ef6e2b6bd708b08ba59feaa815e"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a31a0fcc24bcc623a8e6af6814cc105b962aede9","unresolved":false,"context_lines":[{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def test_concurrent_create_port_forwarding_update_port(self):"},{"line_number":447,"context_line":"        new_ip \u003d str("},{"line_number":448,"context_line":"            netaddr.IPAddress(self.port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]) + 2)"},{"line_number":449,"context_line":"        funcs \u003d [self.pf_plugin.create_floatingip_port_forwarding,"},{"line_number":450,"context_line":"                 self._update_port]"},{"line_number":451,"context_line":"        args_list \u003d [(self.context, self.fip[\u0027id\u0027], self.port_forwarding),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_d4888e20","line":448,"range":{"start_line":448,"start_character":71,"end_line":448,"end_character":74},"updated":"2019-01-22 01:41:35.000000000","message":"here","commit_id":"479d32547dc71ef6e2b6bd708b08ba59feaa815e"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"a2facc1de56f00705a901911454242444de71e88","unresolved":false,"context_lines":[{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def test_concurrent_create_port_forwarding_update_port(self):"},{"line_number":447,"context_line":"        new_ip \u003d str("},{"line_number":448,"context_line":"            netaddr.IPAddress(self.port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]) + 2)"},{"line_number":449,"context_line":"        funcs \u003d [self.pf_plugin.create_floatingip_port_forwarding,"},{"line_number":450,"context_line":"                 self._update_port]"},{"line_number":451,"context_line":"        args_list \u003d [(self.context, self.fip[\u0027id\u0027], self.port_forwarding),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_a0a81a1f","line":448,"range":{"start_line":448,"start_character":71,"end_line":448,"end_character":74},"in_reply_to":"9fdfeff1_a06a5a7d","updated":"2019-01-22 16:06:14.000000000","message":"Done","commit_id":"479d32547dc71ef6e2b6bd708b08ba59feaa815e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"72e7de82ce6555019a19a2647aed38677498e1c0","unresolved":false,"context_lines":[{"line_number":445,"context_line":""},{"line_number":446,"context_line":"    def test_concurrent_create_port_forwarding_update_port(self):"},{"line_number":447,"context_line":"        new_ip \u003d str("},{"line_number":448,"context_line":"            netaddr.IPAddress(self.port[\u0027fixed_ips\u0027][0][\u0027ip_address\u0027]) + 2)"},{"line_number":449,"context_line":"        funcs \u003d [self.pf_plugin.create_floatingip_port_forwarding,"},{"line_number":450,"context_line":"                 self._update_port]"},{"line_number":451,"context_line":"        args_list \u003d [(self.context, self.fip[\u0027id\u0027], self.port_forwarding),"}],"source_content_type":"text/x-python","patch_set":2,"id":"9fdfeff1_a06a5a7d","line":448,"range":{"start_line":448,"start_character":71,"end_line":448,"end_character":74},"in_reply_to":"9fdfeff1_d4888e20","updated":"2019-01-22 15:53:10.000000000","message":"So now it all makes sense, thanks for pointing this line out.  I think we should just add a comment above and here making this obvious, since otherwise noone will know why we did this:\n\n# We choose an IP address in the middle of the subnet so\n# tests that update the IP in the port,\n# like test_concurrent_create_port_forwarding_update_port(),\n# don\u0027t accidentally choose an invalid IP address in\n# the subnet, like the broadcast address.\n\n# The initial IP address of the port is in the middle of the\n# subnet range, so adding 2 to it should also produce a\n# valid IP address.","commit_id":"479d32547dc71ef6e2b6bd708b08ba59feaa815e"}]}
