)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":748,"name":"Armando Migliaccio","email":"armamig@gmail.com","username":"armando-migliaccio"},"change_message_id":"7230fbb0b4c3bce8e7c7ab62d833461c229ce701","unresolved":false,"context_lines":[{"line_number":9,"context_line":"There is a race condition server-side where a port request containing"},{"line_number":10,"context_line":"a subnet_id is processed at the same time the subnet is being deleted,"},{"line_number":11,"context_line":"the port operation may be successful without having a fixed IP on the"},{"line_number":12,"context_line":"requested subnet. This patch makes the DHCP agent resillient to this"},{"line_number":13,"context_line":"bug by checking the port response and raising a SubnetMismatchForPort"},{"line_number":14,"context_line":"to trigger a resync if it doesn\u0027t have all of the requested subnet IDs."},{"line_number":15,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":10,"id":"5a8bc5a2_ad184e76","line":12,"updated":"2016-09-26 18:21:24.000000000","message":"resilient","commit_id":"d1fb4238306f854ab610204a50c5cdc20ea5c770"}],"neutron/agent/linux/dhcp.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b717f6659ea98757dfcea0d1b9340487e03dd35e","unresolved":false,"context_lines":[{"line_number":1359,"context_line":"        ip_cidrs \u003d []"},{"line_number":1360,"context_line":"        for fixed_ip in port.fixed_ips:"},{"line_number":1361,"context_line":"            subnet \u003d fixed_ip.subnet"},{"line_number":1362,"context_line":"            if not ipv6_utils.is_auto_address_subnet(subnet):"},{"line_number":1363,"context_line":"                net \u003d netaddr.IPNetwork(subnet.cidr)"},{"line_number":1364,"context_line":"                ip_cidr \u003d \u0027%s/%s\u0027 % (fixed_ip.ip_address, net.prefixlen)"},{"line_number":1365,"context_line":"                ip_cidrs.append(ip_cidr)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_94e01e98","side":"PARENT","line":1362,"updated":"2016-09-26 11:36:16.000000000","message":"Hm. Does it mean we were not setting those dhcp-stateful addresses for the dhcp interface? How did it work? No one really needed it to operate on L3 level? Is it because we run dnsmasq on all possible interfaces?","commit_id":"8de9bb4b3b45435ff260f45ff086348b73f1120c"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"50b9e6916844ee4ed62795683054edd786b9ef8c","unresolved":false,"context_lines":[{"line_number":1359,"context_line":"        ip_cidrs \u003d []"},{"line_number":1360,"context_line":"        for fixed_ip in port.fixed_ips:"},{"line_number":1361,"context_line":"            subnet \u003d fixed_ip.subnet"},{"line_number":1362,"context_line":"            if not ipv6_utils.is_auto_address_subnet(subnet):"},{"line_number":1363,"context_line":"                net \u003d netaddr.IPNetwork(subnet.cidr)"},{"line_number":1364,"context_line":"                ip_cidr \u003d \u0027%s/%s\u0027 % (fixed_ip.ip_address, net.prefixlen)"},{"line_number":1365,"context_line":"                ip_cidrs.append(ip_cidr)"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_8549c662","side":"PARENT","line":1362,"in_reply_to":"5a8bc5a2_94e01e98","updated":"2016-09-26 12:02:24.000000000","message":"Stateful addresses were okay. The problem was stateless addresses. In stateless mode, the clients are getting their address some other way so the only thing that was busted was DNS resolution and metadata, which we aren\u0027t testing for v6 I don\u0027t think anywhere.","commit_id":"8de9bb4b3b45435ff260f45ff086348b73f1120c"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b717f6659ea98757dfcea0d1b9340487e03dd35e","unresolved":false,"context_lines":[{"line_number":1286,"context_line":"            expected \u003d set(dhcp_subnets)"},{"line_number":1287,"context_line":"            actual \u003d {fip.subnet_id for fip in dhcp_port.fixed_ips}"},{"line_number":1288,"context_line":"            if expected - actual:"},{"line_number":1289,"context_line":"                LOG.warning(_LW(\"Requested DHCP port with IPs on subnets \""},{"line_number":1290,"context_line":"                                \"%(expected)s but only got IPs on subnets \""},{"line_number":1291,"context_line":"                                \"%(actual)s.\"), {\u0027expected\u0027: expected,"},{"line_number":1292,"context_line":"                                                 \u0027actual\u0027: actual})"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_b14b6c86","line":1289,"range":{"start_line":1289,"start_character":16,"end_line":1289,"end_character":31},"updated":"2016-09-26 11:36:16.000000000","message":"you are using a warning here. what is the operator that will see it supposed to do?\n\nI quote the guidelines spec: \"Warning: Something is not right, should get looked into during the next work week. Administrators should be working through eliminating warnings as part of normal work.\"\n\nShould it be debug?","commit_id":"e6af4c6df44839b2837f1674f08e6aa7751158fa"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"50b9e6916844ee4ed62795683054edd786b9ef8c","unresolved":false,"context_lines":[{"line_number":1286,"context_line":"            expected \u003d set(dhcp_subnets)"},{"line_number":1287,"context_line":"            actual \u003d {fip.subnet_id for fip in dhcp_port.fixed_ips}"},{"line_number":1288,"context_line":"            if expected - actual:"},{"line_number":1289,"context_line":"                LOG.warning(_LW(\"Requested DHCP port with IPs on subnets \""},{"line_number":1290,"context_line":"                                \"%(expected)s but only got IPs on subnets \""},{"line_number":1291,"context_line":"                                \"%(actual)s.\"), {\u0027expected\u0027: expected,"},{"line_number":1292,"context_line":"                                                 \u0027actual\u0027: actual})"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_05b21606","line":1289,"range":{"start_line":1289,"start_character":16,"end_line":1289,"end_character":31},"in_reply_to":"5a8bc5a2_b14b6c86","updated":"2016-09-26 12:02:24.000000000","message":"Yeah, I suppose debug is okay. Had it as warning to motivate us to fix it :)","commit_id":"e6af4c6df44839b2837f1674f08e6aa7751158fa"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b717f6659ea98757dfcea0d1b9340487e03dd35e","unresolved":false,"context_lines":[{"line_number":1290,"context_line":"                                \"%(expected)s but only got IPs on subnets \""},{"line_number":1291,"context_line":"                                \"%(actual)s.\"), {\u0027expected\u0027: expected,"},{"line_number":1292,"context_line":"                                                 \u0027actual\u0027: actual})"},{"line_number":1293,"context_line":"                raise exceptions.Conflict()"},{"line_number":1294,"context_line":"        # Convert subnet_id to subnet dict"},{"line_number":1295,"context_line":"        fixed_ips \u003d [dict(subnet_id\u003dfixed_ip.subnet_id,"},{"line_number":1296,"context_line":"                          ip_address\u003dfixed_ip.ip_address,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_347e6a19","line":1293,"range":{"start_line":1293,"start_character":22,"end_line":1293,"end_character":43},"updated":"2016-09-26 11:36:16.000000000","message":"If I read it correctly, call_driver will not attempt a resync on Conflict, so it does not seem like there will be the next, more successful attempt.","commit_id":"e6af4c6df44839b2837f1674f08e6aa7751158fa"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"50b9e6916844ee4ed62795683054edd786b9ef8c","unresolved":false,"context_lines":[{"line_number":1290,"context_line":"                                \"%(expected)s but only got IPs on subnets \""},{"line_number":1291,"context_line":"                                \"%(actual)s.\"), {\u0027expected\u0027: expected,"},{"line_number":1292,"context_line":"                                                 \u0027actual\u0027: actual})"},{"line_number":1293,"context_line":"                raise exceptions.Conflict()"},{"line_number":1294,"context_line":"        # Convert subnet_id to subnet dict"},{"line_number":1295,"context_line":"        fixed_ips \u003d [dict(subnet_id\u003dfixed_ip.subnet_id,"},{"line_number":1296,"context_line":"                          ip_address\u003dfixed_ip.ip_address,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_a515e2e5","line":1293,"range":{"start_line":1293,"start_character":22,"end_line":1293,"end_character":43},"in_reply_to":"5a8bc5a2_347e6a19","updated":"2016-09-26 12:02:24.000000000","message":"Yeah, I was implicitly relying on whatever caused the race (a subnet delete) to generate another event that would cause another call to the driver. That\u0027s relying on side effects too much. Let me rework to get a resync triggered.","commit_id":"e6af4c6df44839b2837f1674f08e6aa7751158fa"}],"neutron/tests/unit/agent/dhcp/test_agent.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b717f6659ea98757dfcea0d1b9340487e03dd35e","unresolved":false,"context_lines":[{"line_number":1540,"context_line":"        fake_network_copy.ports[0].device_id \u003d dh.get_device_id(fake_network)"},{"line_number":1541,"context_line":"        fake_network_copy.subnets[1].enable_dhcp \u003d True"},{"line_number":1542,"context_line":"        updated_port \u003d copy.deepcopy(fake_network_copy.ports[0])"},{"line_number":1543,"context_line":"        updated_port.fixed_ips.append(fake_fixed_ip_subnet2)"},{"line_number":1544,"context_line":"        plugin.update_dhcp_port.return_value \u003d updated_port"},{"line_number":1545,"context_line":"        dh.setup_dhcp_port(fake_network_copy)"},{"line_number":1546,"context_line":"        port_body \u003d {\u0027port\u0027: {"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_97710047","line":1543,"updated":"2016-09-26 11:36:16.000000000","message":"what\u0027s the case you are trying to validate here? That you get more addresses than you requested? Is it because some subnet may be created during the allocation request?\n\nAnd where is a test case that would validate that dhcp agent will properly resync the network on server returning less addresses than expected? (seems like that\u0027s the primary concern of the patch, right?)","commit_id":"e6af4c6df44839b2837f1674f08e6aa7751158fa"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"50b9e6916844ee4ed62795683054edd786b9ef8c","unresolved":false,"context_lines":[{"line_number":1540,"context_line":"        fake_network_copy.ports[0].device_id \u003d dh.get_device_id(fake_network)"},{"line_number":1541,"context_line":"        fake_network_copy.subnets[1].enable_dhcp \u003d True"},{"line_number":1542,"context_line":"        updated_port \u003d copy.deepcopy(fake_network_copy.ports[0])"},{"line_number":1543,"context_line":"        updated_port.fixed_ips.append(fake_fixed_ip_subnet2)"},{"line_number":1544,"context_line":"        plugin.update_dhcp_port.return_value \u003d updated_port"},{"line_number":1545,"context_line":"        dh.setup_dhcp_port(fake_network_copy)"},{"line_number":1546,"context_line":"        port_body \u003d {\u0027port\u0027: {"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_65dcba73","line":1543,"in_reply_to":"5a8bc5a2_97710047","updated":"2016-09-26 12:02:24.000000000","message":"This is just to make the test not throw a conflict error because it was inadvertently replicating the exact bug we are detecting. I will update with another test-case for the exception.","commit_id":"e6af4c6df44839b2837f1674f08e6aa7751158fa"}],"neutron/tests/unit/agent/linux/test_dhcp.py":[{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"b717f6659ea98757dfcea0d1b9340487e03dd35e","unresolved":false,"context_lines":[{"line_number":2261,"context_line":"            plugin.update_dhcp_port.assert_called_with(reserved_port.id,"},{"line_number":2262,"context_line":"                                                       mock.ANY)"},{"line_number":2263,"context_line":""},{"line_number":2264,"context_line":"            except_ips \u003d [\u0027192.168.0.6/24\u0027, \u0027fdca:3ba5:a17a:4ba3::2/64\u0027]"},{"line_number":2265,"context_line":"            if enable_isolated_metadata or force_metadata:"},{"line_number":2266,"context_line":"                except_ips.append(dhcp.METADATA_DEFAULT_CIDR)"},{"line_number":2267,"context_line":"            mgr.driver.init_l3.assert_called_with(\u0027ns-XXX\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_37dd8ce0","line":2264,"range":{"start_line":2264,"start_character":12,"end_line":2264,"end_character":22},"updated":"2016-09-26 11:36:16.000000000","message":"(No action required) do you grasp what the name of the variable is supposed to mean?","commit_id":"e6af4c6df44839b2837f1674f08e6aa7751158fa"},{"author":{"_account_id":9656,"name":"Ihar Hrachyshka","email":"ihrachys@redhat.com","username":"ihrachys","status":"Red Hat Networking Systems Engineer"},"change_message_id":"0b7b119eecb13e7e5942e0b8c30a03b1be0b1d43","unresolved":false,"context_lines":[{"line_number":2261,"context_line":"            plugin.update_dhcp_port.assert_called_with(reserved_port.id,"},{"line_number":2262,"context_line":"                                                       mock.ANY)"},{"line_number":2263,"context_line":""},{"line_number":2264,"context_line":"            except_ips \u003d [\u0027192.168.0.6/24\u0027, \u0027fdca:3ba5:a17a:4ba3::2/64\u0027]"},{"line_number":2265,"context_line":"            if enable_isolated_metadata or force_metadata:"},{"line_number":2266,"context_line":"                except_ips.append(dhcp.METADATA_DEFAULT_CIDR)"},{"line_number":2267,"context_line":"            mgr.driver.init_l3.assert_called_with(\u0027ns-XXX\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_a5e08297","line":2264,"range":{"start_line":2264,"start_character":12,"end_line":2264,"end_character":22},"in_reply_to":"5a8bc5a2_25447219","updated":"2016-09-26 12:07:53.000000000","message":"Should we fix it? :)","commit_id":"e6af4c6df44839b2837f1674f08e6aa7751158fa"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"50b9e6916844ee4ed62795683054edd786b9ef8c","unresolved":false,"context_lines":[{"line_number":2261,"context_line":"            plugin.update_dhcp_port.assert_called_with(reserved_port.id,"},{"line_number":2262,"context_line":"                                                       mock.ANY)"},{"line_number":2263,"context_line":""},{"line_number":2264,"context_line":"            except_ips \u003d [\u0027192.168.0.6/24\u0027, \u0027fdca:3ba5:a17a:4ba3::2/64\u0027]"},{"line_number":2265,"context_line":"            if enable_isolated_metadata or force_metadata:"},{"line_number":2266,"context_line":"                except_ips.append(dhcp.METADATA_DEFAULT_CIDR)"},{"line_number":2267,"context_line":"            mgr.driver.init_l3.assert_called_with(\u0027ns-XXX\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_25447219","line":2264,"range":{"start_line":2264,"start_character":12,"end_line":2264,"end_character":22},"in_reply_to":"5a8bc5a2_37dd8ce0","updated":"2016-09-26 12:02:24.000000000","message":"I believe it\u0027s a dyslexic interpretation of expect :)","commit_id":"e6af4c6df44839b2837f1674f08e6aa7751158fa"},{"author":{"_account_id":7787,"name":"Kevin Benton","email":"kevin@benton.pub","username":"blak111"},"change_message_id":"dc373633b68b7299a91a440504721eafead8e22d","unresolved":false,"context_lines":[{"line_number":2261,"context_line":"            plugin.update_dhcp_port.assert_called_with(reserved_port.id,"},{"line_number":2262,"context_line":"                                                       mock.ANY)"},{"line_number":2263,"context_line":""},{"line_number":2264,"context_line":"            except_ips \u003d [\u0027192.168.0.6/24\u0027, \u0027fdca:3ba5:a17a:4ba3::2/64\u0027]"},{"line_number":2265,"context_line":"            if enable_isolated_metadata or force_metadata:"},{"line_number":2266,"context_line":"                except_ips.append(dhcp.METADATA_DEFAULT_CIDR)"},{"line_number":2267,"context_line":"            mgr.driver.init_l3.assert_called_with(\u0027ns-XXX\u0027,"}],"source_content_type":"text/x-python","patch_set":9,"id":"5a8bc5a2_80f0d492","line":2264,"range":{"start_line":2264,"start_character":12,"end_line":2264,"end_character":22},"in_reply_to":"5a8bc5a2_a5e08297","updated":"2016-09-26 12:25:38.000000000","message":"I suppose... :)","commit_id":"e6af4c6df44839b2837f1674f08e6aa7751158fa"}]}
