)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"d2fb03862089269d2c958f8a7e00bc091d9e98d9","unresolved":false,"context_lines":[{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Before neutron-server transitions a port to ACTIVE, it\u0027ll wait"},{"line_number":10,"context_line":"until the metadata service has been provisioned on that hypervisor."},{"line_number":11,"context_line":"If the port doesn\u0027t belong to any IPv4 subnet which DHCP enabled,"},{"line_number":12,"context_line":"there\u0027s no need to wait for it."},{"line_number":13,"context_line":""},{"line_number":14,"context_line":"Change-Id: Iba3969e43c76ca07fe840b84d8f81f34bc7e5cd6"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dfbec78f_f969a7f8","line":11,"range":{"start_line":11,"start_character":46,"end_line":11,"end_character":51},"updated":"2019-05-10 15:00:05.000000000","message":"with","commit_id":"97e0af2ae8b21ae2ca9c193eb2b6f8f21eb92a0e"}],"networking_ovn/ml2/mech_driver.py":[{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"b39b0293fa1705f6f6c2f48820ddc68ce089c619","unresolved":false,"context_lines":[{"line_number":878,"context_line":"                return"},{"line_number":879,"context_line":""},{"line_number":880,"context_line":"            # Check if the port belongs to some IPv4 subnet with DHCP enabled"},{"line_number":881,"context_line":"            # Retrieve all subnets in this network."},{"line_number":882,"context_line":"            context \u003d n_context.get_admin_context()"},{"line_number":883,"context_line":"            port \u003d self._plugin.get_port(context, port_id)"},{"line_number":884,"context_line":"            subnets \u003d self._plugin.get_subnets(context, filters\u003ddict("}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_d91b837e","line":881,"range":{"start_line":881,"start_character":0,"end_line":881,"end_character":51},"updated":"2019-05-10 14:58:33.000000000","message":"I can remove this","commit_id":"97e0af2ae8b21ae2ca9c193eb2b6f8f21eb92a0e"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"7e9742d00ea739176df70ee9829afed4e8d8b655","unresolved":false,"context_lines":[{"line_number":878,"context_line":"                return"},{"line_number":879,"context_line":""},{"line_number":880,"context_line":"            # Check if the port belongs to some IPv4 subnet with DHCP enabled"},{"line_number":881,"context_line":"            # Retrieve all subnets in this network."},{"line_number":882,"context_line":"            context \u003d n_context.get_admin_context()"},{"line_number":883,"context_line":"            port \u003d self._plugin.get_port(context, port_id)"},{"line_number":884,"context_line":"            subnets \u003d self._plugin.get_subnets(context, filters\u003ddict("}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_3fd5dfe5","line":881,"range":{"start_line":881,"start_character":0,"end_line":881,"end_character":51},"in_reply_to":"dfbec78f_d91b837e","updated":"2019-05-10 16:11:51.000000000","message":"Done","commit_id":"97e0af2ae8b21ae2ca9c193eb2b6f8f21eb92a0e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"585b1949aac2220d988deb5df66ded8011bc3f64","unresolved":false,"context_lines":[{"line_number":885,"context_line":"                network_id\u003d[port[\u0027network_id\u0027]], ip_version\u003d[4],"},{"line_number":886,"context_line":"                enable_dhcp\u003dTrue))"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":"            port_subnet_ids \u003d set(ip[\u0027subnet_id\u0027] for ip in port[\u0027fixed_ips\u0027])"},{"line_number":889,"context_line":"            subnet_ids \u003d set("},{"line_number":890,"context_line":"                s[\u0027id\u0027] for s in subnets if s[\u0027id\u0027] in port_subnet_ids)"},{"line_number":891,"context_line":"            if not subnet_ids:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_1c9029ed","line":888,"updated":"2019-05-10 15:39:41.000000000","message":"You\u0027re filtering by IPv4 above, suppose you could do that here.  And if you do you might as well put this above the plugin call to get the subnets since if port_subnet_ids is empty in that case there is no reason to get the subnets, just return.","commit_id":"97e0af2ae8b21ae2ca9c193eb2b6f8f21eb92a0e"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"7e9742d00ea739176df70ee9829afed4e8d8b655","unresolved":false,"context_lines":[{"line_number":885,"context_line":"                network_id\u003d[port[\u0027network_id\u0027]], ip_version\u003d[4],"},{"line_number":886,"context_line":"                enable_dhcp\u003dTrue))"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":"            port_subnet_ids \u003d set(ip[\u0027subnet_id\u0027] for ip in port[\u0027fixed_ips\u0027])"},{"line_number":889,"context_line":"            subnet_ids \u003d set("},{"line_number":890,"context_line":"                s[\u0027id\u0027] for s in subnets if s[\u0027id\u0027] in port_subnet_ids)"},{"line_number":891,"context_line":"            if not subnet_ids:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_df07e381","line":888,"in_reply_to":"dfbec78f_1c9029ed","updated":"2019-05-10 16:11:51.000000000","message":"Done","commit_id":"97e0af2ae8b21ae2ca9c193eb2b6f8f21eb92a0e"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"254e131b60b7736433381b4e8a1b516daa807d0c","unresolved":false,"context_lines":[{"line_number":885,"context_line":"                network_id\u003d[port[\u0027network_id\u0027]], ip_version\u003d[4],"},{"line_number":886,"context_line":"                enable_dhcp\u003dTrue))"},{"line_number":887,"context_line":""},{"line_number":888,"context_line":"            port_subnet_ids \u003d set(ip[\u0027subnet_id\u0027] for ip in port[\u0027fixed_ips\u0027])"},{"line_number":889,"context_line":"            subnet_ids \u003d set("},{"line_number":890,"context_line":"                s[\u0027id\u0027] for s in subnets if s[\u0027id\u0027] in port_subnet_ids)"},{"line_number":891,"context_line":"            if not subnet_ids:"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_5f3d33c2","line":888,"in_reply_to":"dfbec78f_1c9029ed","updated":"2019-05-10 15:48:33.000000000","message":"Good point! This will save one DB query if the port belongs only to IPv6 subs","commit_id":"97e0af2ae8b21ae2ca9c193eb2b6f8f21eb92a0e"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"b6f42121e766bbf4ae379be77d33fa8e4a989bb0","unresolved":false,"context_lines":[{"line_number":883,"context_line":"            port \u003d self._plugin.get_port(context, port_id)"},{"line_number":884,"context_line":"            port_subnet_ids \u003d set("},{"line_number":885,"context_line":"                ip[\u0027subnet_id\u0027] for ip in port[\u0027fixed_ips\u0027] if"},{"line_number":886,"context_line":"                netaddr.IPAddress(ip[\u0027ip_address\u0027]).version \u003d\u003d 4)"},{"line_number":887,"context_line":"            if not port_subnet_ids:"},{"line_number":888,"context_line":"                # The port doesn\u0027t belong to any IPv4 subnet"},{"line_number":889,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_bf6f8ffa","line":886,"updated":"2019-05-10 16:26:13.000000000","message":"I didn\u0027t see you were importing neutron.common.utils, could have used:\n\nn_utils.get_ip_version(ip[\u0027ip_address\u0027]) \u003d\u003d const.IP_VERSION_4","commit_id":"86d895db818d7abda5f3a36aa24fc5fe4ce303d8"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"d92c7a06036e3f203f537689c9fc4f4946927060","unresolved":false,"context_lines":[{"line_number":883,"context_line":"            port \u003d self._plugin.get_port(context, port_id)"},{"line_number":884,"context_line":"            port_subnet_ids \u003d set("},{"line_number":885,"context_line":"                ip[\u0027subnet_id\u0027] for ip in port[\u0027fixed_ips\u0027] if"},{"line_number":886,"context_line":"                netaddr.IPAddress(ip[\u0027ip_address\u0027]).version \u003d\u003d 4)"},{"line_number":887,"context_line":"            if not port_subnet_ids:"},{"line_number":888,"context_line":"                # The port doesn\u0027t belong to any IPv4 subnet"},{"line_number":889,"context_line":"                return"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_b1ca5b4b","line":886,"in_reply_to":"dfbec78f_bf6f8ffa","updated":"2019-05-11 13:45:46.000000000","message":"Done","commit_id":"86d895db818d7abda5f3a36aa24fc5fe4ce303d8"}],"networking_ovn/tests/unit/fakes.py":[{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"d2fb03862089269d2c958f8a7e00bc091d9e98d9","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        self.get_chassis_data_for_ml2_bind_port \u003d mock.Mock()"},{"line_number":152,"context_line":"        self.get_chassis_data_for_ml2_bind_port.return_value \u003d \\"},{"line_number":153,"context_line":"            (\u0027fake\u0027, \u0027\u0027, [\u0027fake-physnet\u0027])"},{"line_number":154,"context_line":"        self.get_logical_port_chassis_and_datapath \u003d mock.Mock()"},{"line_number":155,"context_line":"        self.get_logical_port_chassis_and_datapath.return_value \u003d \\"},{"line_number":156,"context_line":"            (\u0027fake\u0027, \u0027fake-dp\u0027)"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_590f9336","line":154,"updated":"2019-05-10 15:00:05.000000000","message":"I don\u0027t know how its related to the change?","commit_id":"97e0af2ae8b21ae2ca9c193eb2b6f8f21eb92a0e"},{"author":{"_account_id":23804,"name":"Daniel Alvarez","email":"dalvarez@redhat.com","username":"dalvarez"},"change_message_id":"254e131b60b7736433381b4e8a1b516daa807d0c","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        self.get_chassis_data_for_ml2_bind_port \u003d mock.Mock()"},{"line_number":152,"context_line":"        self.get_chassis_data_for_ml2_bind_port.return_value \u003d \\"},{"line_number":153,"context_line":"            (\u0027fake\u0027, \u0027\u0027, [\u0027fake-physnet\u0027])"},{"line_number":154,"context_line":"        self.get_logical_port_chassis_and_datapath \u003d mock.Mock()"},{"line_number":155,"context_line":"        self.get_logical_port_chassis_and_datapath.return_value \u003d \\"},{"line_number":156,"context_line":"            (\u0027fake\u0027, \u0027fake-dp\u0027)"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_dc85b15b","line":154,"in_reply_to":"dfbec78f_590f9336","updated":"2019-05-10 15:48:33.000000000","message":"The whole thing is a bit obscure but:\n\nhttps://opendev.org/openstack/networking-ovn/src/branch/master/networking_ovn/ml2/mech_driver.py#L870","commit_id":"97e0af2ae8b21ae2ca9c193eb2b6f8f21eb92a0e"},{"author":{"_account_id":6773,"name":"Lucas Alvares Gomes","email":"lucasagomes@gmail.com","username":"lucasagomes"},"change_message_id":"e72df08d7dbd8e272d7067fb2d07e008b95d8d70","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        self.get_chassis_data_for_ml2_bind_port \u003d mock.Mock()"},{"line_number":152,"context_line":"        self.get_chassis_data_for_ml2_bind_port.return_value \u003d \\"},{"line_number":153,"context_line":"            (\u0027fake\u0027, \u0027\u0027, [\u0027fake-physnet\u0027])"},{"line_number":154,"context_line":"        self.get_logical_port_chassis_and_datapath \u003d mock.Mock()"},{"line_number":155,"context_line":"        self.get_logical_port_chassis_and_datapath.return_value \u003d \\"},{"line_number":156,"context_line":"            (\u0027fake\u0027, \u0027fake-dp\u0027)"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_dcb931cc","line":154,"in_reply_to":"dfbec78f_590f9336","updated":"2019-05-10 15:28:10.000000000","message":"This method is invoked by _wait_for_metadata_provisioned_if_needed() and it didn\u0027t exist in the fake interface before.\n\nOne thing we could do about these fake interfaces was to inherit from mock.Mock() so we wouldn\u0027t need to explicit add the methods like this. But, this is out of the scope for this patch.","commit_id":"97e0af2ae8b21ae2ca9c193eb2b6f8f21eb92a0e"},{"author":{"_account_id":24791,"name":"Maciej Jozefczyk","email":"jeicam.pl@gmail.com","username":"maciej.jozefczyk"},"change_message_id":"fc6ff239e78db0000d1e29290992d29a72b71a5b","unresolved":false,"context_lines":[{"line_number":151,"context_line":"        self.get_chassis_data_for_ml2_bind_port \u003d mock.Mock()"},{"line_number":152,"context_line":"        self.get_chassis_data_for_ml2_bind_port.return_value \u003d \\"},{"line_number":153,"context_line":"            (\u0027fake\u0027, \u0027\u0027, [\u0027fake-physnet\u0027])"},{"line_number":154,"context_line":"        self.get_logical_port_chassis_and_datapath \u003d mock.Mock()"},{"line_number":155,"context_line":"        self.get_logical_port_chassis_and_datapath.return_value \u003d \\"},{"line_number":156,"context_line":"            (\u0027fake\u0027, \u0027fake-dp\u0027)"},{"line_number":157,"context_line":""}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_504e6f97","line":154,"in_reply_to":"dfbec78f_dc85b15b","updated":"2019-05-13 07:01:14.000000000","message":"Ok, thanks for clarification!","commit_id":"97e0af2ae8b21ae2ca9c193eb2b6f8f21eb92a0e"}]}
