)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"f9d87e0952dde0485e02c9fa31e1f6dc18ec523e","unresolved":true,"context_lines":[{"line_number":7,"context_line":"Don\u0027t configure dnsmasq entries for \"network\" ports"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Ports with device_owner like e.g. floating_ip or ports which belongs to"},{"line_number":10,"context_line":"the router don\u0027t need to be configured in the dnsmasq file."},{"line_number":11,"context_line":"So there is no need to reload dnsmasq every time when such port is"},{"line_number":12,"context_line":"added/updated to the network."},{"line_number":13,"context_line":"This patch adds skip in such case which should improve load on the"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":3,"id":"693b2b9f_08a7f959","line":10,"updated":"2021-02-03 12:46:39.000000000","message":"This is now incomplete.","commit_id":"7b9bcc80846fd7aa045f19f2a9ff943ef75c906f"}],"neutron/agent/dhcp/agent.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4209313a8ccdc8351b21b8f4ba1c49eed18b04f9","unresolved":true,"context_lines":[{"line_number":579,"context_line":"        \"\"\"Handle the port.update.end notification event.\"\"\""},{"line_number":580,"context_line":"        updated_port \u003d dhcp.DictModel(payload[\u0027port\u0027])"},{"line_number":581,"context_line":"        if not dhcp.port_require_dhcp_configuration(updated_port):"},{"line_number":582,"context_line":"            LOG.debug(\"Port %s don\u0027t needs DHCP entry.\", updated_port)"},{"line_number":583,"context_line":"            return"},{"line_number":584,"context_line":"        if self.cache.is_port_message_stale(updated_port):"},{"line_number":585,"context_line":"            LOG.debug(\"Discarding stale port update: %s\", updated_port)"}],"source_content_type":"text/x-python","patch_set":1,"id":"44b0efd8_e403db07","line":582,"range":{"start_line":582,"start_character":31,"end_line":582,"end_character":36},"updated":"2021-01-26 13:14:32.000000000","message":"nit: doesn\u0027t need","commit_id":"9029c5240dddc1d0d1e062b387ac66c898435723"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"72b1ad4de0b6ee40412ff6462de3af644adf6c64","unresolved":true,"context_lines":[{"line_number":579,"context_line":"        \"\"\"Handle the port.update.end notification event.\"\"\""},{"line_number":580,"context_line":"        updated_port \u003d dhcp.DictModel(payload[\u0027port\u0027])"},{"line_number":581,"context_line":"        if not dhcp.port_require_dhcp_configuration(updated_port):"},{"line_number":582,"context_line":"            LOG.debug(\"Port %s don\u0027t needs DHCP entry.\", updated_port)"},{"line_number":583,"context_line":"            return"},{"line_number":584,"context_line":"        if self.cache.is_port_message_stale(updated_port):"},{"line_number":585,"context_line":"            LOG.debug(\"Discarding stale port update: %s\", updated_port)"}],"source_content_type":"text/x-python","patch_set":1,"id":"7b410f96_174ff415","line":582,"range":{"start_line":582,"start_character":31,"end_line":582,"end_character":36},"in_reply_to":"44b0efd8_e403db07","updated":"2021-01-26 17:25:24.000000000","message":"I would even get rid of the apostrophe and say \"does not need\" - although this isn\u0027t being translated but sometimes causes problems there.","commit_id":"9029c5240dddc1d0d1e062b387ac66c898435723"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2d90f289f154f4c527e85b725f99e9287d3754b3","unresolved":false,"context_lines":[{"line_number":579,"context_line":"        \"\"\"Handle the port.update.end notification event.\"\"\""},{"line_number":580,"context_line":"        updated_port \u003d dhcp.DictModel(payload[\u0027port\u0027])"},{"line_number":581,"context_line":"        if not dhcp.port_require_dhcp_configuration(updated_port):"},{"line_number":582,"context_line":"            LOG.debug(\"Port %s don\u0027t needs DHCP entry.\", updated_port)"},{"line_number":583,"context_line":"            return"},{"line_number":584,"context_line":"        if self.cache.is_port_message_stale(updated_port):"},{"line_number":585,"context_line":"            LOG.debug(\"Discarding stale port update: %s\", updated_port)"}],"source_content_type":"text/x-python","patch_set":1,"id":"c666005c_f19dd91f","line":582,"range":{"start_line":582,"start_character":31,"end_line":582,"end_character":36},"in_reply_to":"7b410f96_174ff415","updated":"2021-01-27 15:31:30.000000000","message":"Done","commit_id":"9029c5240dddc1d0d1e062b387ac66c898435723"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4209313a8ccdc8351b21b8f4ba1c49eed18b04f9","unresolved":true,"context_lines":[{"line_number":607,"context_line":"        LOG.info(\"Trigger reload_allocations for port %s on network %s\","},{"line_number":608,"context_line":"                 port, network)"},{"line_number":609,"context_line":"        if not dhcp.port_require_dhcp_configuration(port):"},{"line_number":610,"context_line":"            LOG.debug(\"Port %s don\u0027t needs DHCP entry. \""},{"line_number":611,"context_line":"                      \"Reload allocation is not necessary\","},{"line_number":612,"context_line":"                      port)"},{"line_number":613,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"382e16c1_eada0560","line":610,"range":{"start_line":610,"start_character":31,"end_line":610,"end_character":42},"updated":"2021-01-26 13:14:32.000000000","message":"ditto","commit_id":"9029c5240dddc1d0d1e062b387ac66c898435723"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2d90f289f154f4c527e85b725f99e9287d3754b3","unresolved":false,"context_lines":[{"line_number":607,"context_line":"        LOG.info(\"Trigger reload_allocations for port %s on network %s\","},{"line_number":608,"context_line":"                 port, network)"},{"line_number":609,"context_line":"        if not dhcp.port_require_dhcp_configuration(port):"},{"line_number":610,"context_line":"            LOG.debug(\"Port %s don\u0027t needs DHCP entry. \""},{"line_number":611,"context_line":"                      \"Reload allocation is not necessary\","},{"line_number":612,"context_line":"                      port)"},{"line_number":613,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":1,"id":"f8ba6739_8be0eef1","line":610,"range":{"start_line":610,"start_character":31,"end_line":610,"end_character":42},"in_reply_to":"382e16c1_eada0560","updated":"2021-01-27 15:31:30.000000000","message":"Done","commit_id":"9029c5240dddc1d0d1e062b387ac66c898435723"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4209313a8ccdc8351b21b8f4ba1c49eed18b04f9","unresolved":true,"context_lines":[{"line_number":650,"context_line":"        \"\"\"Handle the port.create.end notification event.\"\"\""},{"line_number":651,"context_line":"        created_port \u003d dhcp.DictModel(payload[\u0027port\u0027])"},{"line_number":652,"context_line":"        if not dhcp.port_require_dhcp_configuration(created_port):"},{"line_number":653,"context_line":"            LOG.debug(\"Port %s don\u0027t needs DHCP entry.\", created_port)"},{"line_number":654,"context_line":"            return"},{"line_number":655,"context_line":"        update \u003d queue.ResourceUpdate(created_port.network_id,"},{"line_number":656,"context_line":"                                      payload.get(\u0027priority\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"64eb418d_30d69e31","line":653,"range":{"start_line":653,"start_character":31,"end_line":653,"end_character":42},"updated":"2021-01-26 13:14:32.000000000","message":"ditto","commit_id":"9029c5240dddc1d0d1e062b387ac66c898435723"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2d90f289f154f4c527e85b725f99e9287d3754b3","unresolved":false,"context_lines":[{"line_number":650,"context_line":"        \"\"\"Handle the port.create.end notification event.\"\"\""},{"line_number":651,"context_line":"        created_port \u003d dhcp.DictModel(payload[\u0027port\u0027])"},{"line_number":652,"context_line":"        if not dhcp.port_require_dhcp_configuration(created_port):"},{"line_number":653,"context_line":"            LOG.debug(\"Port %s don\u0027t needs DHCP entry.\", created_port)"},{"line_number":654,"context_line":"            return"},{"line_number":655,"context_line":"        update \u003d queue.ResourceUpdate(created_port.network_id,"},{"line_number":656,"context_line":"                                      payload.get(\u0027priority\u0027,"}],"source_content_type":"text/x-python","patch_set":1,"id":"e83430e2_f93d426c","line":653,"range":{"start_line":653,"start_character":31,"end_line":653,"end_character":42},"in_reply_to":"64eb418d_30d69e31","updated":"2021-01-27 15:31:30.000000000","message":"Done","commit_id":"9029c5240dddc1d0d1e062b387ac66c898435723"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"ae5b1d5f63ce68b735f15996ed0c8d7f4eaf3667","unresolved":true,"context_lines":[{"line_number":579,"context_line":"        \"\"\"Handle the port.update.end notification event.\"\"\""},{"line_number":580,"context_line":"        updated_port \u003d dhcp.DictModel(payload[\u0027port\u0027])"},{"line_number":581,"context_line":"        if not dhcp.port_requires_dhcp_configuration(updated_port):"},{"line_number":582,"context_line":"            LOG.debug(\"Port %s does not need DHCP entry.\", updated_port)"},{"line_number":583,"context_line":"            return"},{"line_number":584,"context_line":"        if self.cache.is_port_message_stale(updated_port):"},{"line_number":585,"context_line":"            LOG.debug(\"Discarding stale port update: %s\", updated_port)"}],"source_content_type":"text/x-python","patch_set":2,"id":"c1115d1d_1a661b64","line":582,"updated":"2021-01-27 17:49:07.000000000","message":"Do you really need this log? Seems a lot of messages for something happening regularly during normal operations.","commit_id":"9b23b4f0c88429ab785cdf997a248bbac47f5b77"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4cb14974c3fbfbb65c20c530b5e52dce57484a23","unresolved":false,"context_lines":[{"line_number":579,"context_line":"        \"\"\"Handle the port.update.end notification event.\"\"\""},{"line_number":580,"context_line":"        updated_port \u003d dhcp.DictModel(payload[\u0027port\u0027])"},{"line_number":581,"context_line":"        if not dhcp.port_requires_dhcp_configuration(updated_port):"},{"line_number":582,"context_line":"            LOG.debug(\"Port %s does not need DHCP entry.\", updated_port)"},{"line_number":583,"context_line":"            return"},{"line_number":584,"context_line":"        if self.cache.is_port_message_stale(updated_port):"},{"line_number":585,"context_line":"            LOG.debug(\"Discarding stale port update: %s\", updated_port)"}],"source_content_type":"text/x-python","patch_set":2,"id":"f0719d73_a660953d","line":582,"in_reply_to":"c1115d1d_1a661b64","updated":"2021-02-03 10:36:57.000000000","message":"nope, removed","commit_id":"9b23b4f0c88429ab785cdf997a248bbac47f5b77"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"ae5b1d5f63ce68b735f15996ed0c8d7f4eaf3667","unresolved":true,"context_lines":[{"line_number":607,"context_line":"        LOG.info(\"Trigger reload_allocations for port %s on network %s\","},{"line_number":608,"context_line":"                 port, network)"},{"line_number":609,"context_line":"        if not dhcp.port_requires_dhcp_configuration(port):"},{"line_number":610,"context_line":"            LOG.debug(\"Port %s does not need DHCP entry. \""},{"line_number":611,"context_line":"                      \"Reload allocation is not necessary\","},{"line_number":612,"context_line":"                      port)"},{"line_number":613,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":2,"id":"9771443d_625263c1","line":610,"updated":"2021-01-27 17:49:07.000000000","message":"dito","commit_id":"9b23b4f0c88429ab785cdf997a248bbac47f5b77"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"4cb14974c3fbfbb65c20c530b5e52dce57484a23","unresolved":false,"context_lines":[{"line_number":607,"context_line":"        LOG.info(\"Trigger reload_allocations for port %s on network %s\","},{"line_number":608,"context_line":"                 port, network)"},{"line_number":609,"context_line":"        if not dhcp.port_requires_dhcp_configuration(port):"},{"line_number":610,"context_line":"            LOG.debug(\"Port %s does not need DHCP entry. \""},{"line_number":611,"context_line":"                      \"Reload allocation is not necessary\","},{"line_number":612,"context_line":"                      port)"},{"line_number":613,"context_line":"            return"}],"source_content_type":"text/x-python","patch_set":2,"id":"5245a665_001678a3","line":610,"in_reply_to":"9771443d_625263c1","updated":"2021-02-03 10:36:57.000000000","message":"removed","commit_id":"9b23b4f0c88429ab785cdf997a248bbac47f5b77"}],"neutron/agent/linux/dhcp.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"72b1ad4de0b6ee40412ff6462de3af644adf6c64","unresolved":true,"context_lines":[{"line_number":58,"context_line":"DHCP_OPT_CLIENT_ID_NUM \u003d 61"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def port_require_dhcp_configuration(port):"},{"line_number":62,"context_line":"    if not port.device_owner:"},{"line_number":63,"context_line":"        # We can\u0027t check if port needs dhcp entry, so it will be better"},{"line_number":64,"context_line":"        # to create one"}],"source_content_type":"text/x-python","patch_set":1,"id":"3f21ff1e_fe1a628a","line":61,"range":{"start_line":61,"start_character":9,"end_line":61,"end_character":16},"updated":"2021-01-26 17:25:24.000000000","message":"nit: requires (my native english speaker nit)","commit_id":"9029c5240dddc1d0d1e062b387ac66c898435723"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2d90f289f154f4c527e85b725f99e9287d3754b3","unresolved":false,"context_lines":[{"line_number":58,"context_line":"DHCP_OPT_CLIENT_ID_NUM \u003d 61"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def port_require_dhcp_configuration(port):"},{"line_number":62,"context_line":"    if not port.device_owner:"},{"line_number":63,"context_line":"        # We can\u0027t check if port needs dhcp entry, so it will be better"},{"line_number":64,"context_line":"        # to create one"}],"source_content_type":"text/x-python","patch_set":1,"id":"3ee2faa0_20223e8e","line":61,"range":{"start_line":61,"start_character":9,"end_line":61,"end_character":16},"in_reply_to":"3f21ff1e_fe1a628a","updated":"2021-01-27 15:31:30.000000000","message":"Done","commit_id":"9029c5240dddc1d0d1e062b387ac66c898435723"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"4209313a8ccdc8351b21b8f4ba1c49eed18b04f9","unresolved":true,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def port_require_dhcp_configuration(port):"},{"line_number":62,"context_line":"    if not port.device_owner:"},{"line_number":63,"context_line":"        # We can\u0027t check if port needs dhcp entry, so it will be better"},{"line_number":64,"context_line":"        # to create one"},{"line_number":65,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":1,"id":"5998562a_3511a4a7","line":62,"range":{"start_line":62,"start_character":4,"end_line":62,"end_character":28},"updated":"2021-01-26 13:14:32.000000000","message":"should we check hasattr just in case?","commit_id":"9029c5240dddc1d0d1e062b387ac66c898435723"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"2d90f289f154f4c527e85b725f99e9287d3754b3","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def port_require_dhcp_configuration(port):"},{"line_number":62,"context_line":"    if not port.device_owner:"},{"line_number":63,"context_line":"        # We can\u0027t check if port needs dhcp entry, so it will be better"},{"line_number":64,"context_line":"        # to create one"},{"line_number":65,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":1,"id":"2c1f262a_bf505d58","line":62,"range":{"start_line":62,"start_character":4,"end_line":62,"end_character":28},"in_reply_to":"5998562a_3511a4a7","updated":"2021-01-27 15:31:30.000000000","message":"Done","commit_id":"9029c5240dddc1d0d1e062b387ac66c898435723"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"f0f00d51553cec297d9bc18d3e4efb416c0eb068","unresolved":true,"context_lines":[{"line_number":69,"context_line":"        constants.DEVICE_OWNER_FLOATINGIP,"},{"line_number":70,"context_line":"        constants.DEVICE_OWNER_DHCP,"},{"line_number":71,"context_line":"        constants.DEVICE_OWNER_DISTRIBUTED]"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class DictModel(collections.abc.MutableMapping):"},{"line_number":75,"context_line":"    \"\"\"Convert dict into an object that provides attribute access to values.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"61848154_a5e364ac","line":72,"updated":"2021-02-03 11:11:18.000000000","message":"sad that the tuples like ROUTER_INTERFACE_OWNERS can\u0027t be used, as Router_intf is in that for example\n(https://opendev.org/openstack/neutron-lib/src/branch/master/neutron_lib/constants.py#L76 )","commit_id":"7b9bcc80846fd7aa045f19f2a9ff943ef75c906f"},{"author":{"_account_id":13252,"name":"Dr. Jens Harbott","display_name":"Jens Harbott (frickler)","email":"frickler@offenerstapel.de","username":"jrosenboom"},"change_message_id":"f9d87e0952dde0485e02c9fa31e1f6dc18ec523e","unresolved":true,"context_lines":[{"line_number":69,"context_line":"        constants.DEVICE_OWNER_FLOATINGIP,"},{"line_number":70,"context_line":"        constants.DEVICE_OWNER_DHCP,"},{"line_number":71,"context_line":"        constants.DEVICE_OWNER_DISTRIBUTED]"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class DictModel(collections.abc.MutableMapping):"},{"line_number":75,"context_line":"    \"\"\"Convert dict into an object that provides attribute access to values.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"a24e6a18_bb32ecfa","line":72,"in_reply_to":"61848154_a5e364ac","updated":"2021-02-03 12:46:39.000000000","message":"Maybe it would make sense define a new constant matching the above list instead of having this randomly hidden in the code?\nOr otherwise use the existing ones and treat ROUTER_INTERFACE_OWNERS explicitly before?","commit_id":"7b9bcc80846fd7aa045f19f2a9ff943ef75c906f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"0c33c2db94859264af490c10c4efe47a6ebabfb5","unresolved":true,"context_lines":[{"line_number":69,"context_line":"        constants.DEVICE_OWNER_FLOATINGIP,"},{"line_number":70,"context_line":"        constants.DEVICE_OWNER_DHCP,"},{"line_number":71,"context_line":"        constants.DEVICE_OWNER_DISTRIBUTED]"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class DictModel(collections.abc.MutableMapping):"},{"line_number":75,"context_line":"    \"\"\"Convert dict into an object that provides attribute access to values.\"\"\""}],"source_content_type":"text/x-python","patch_set":3,"id":"47fcefe5_338e6396","line":72,"in_reply_to":"a24e6a18_bb32ecfa","updated":"2021-02-05 15:03:57.000000000","message":"I added todo for now and will propose new list in neutron_lib for that. Is that ok for You?","commit_id":"7b9bcc80846fd7aa045f19f2a9ff943ef75c906f"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"61334e117a7bb63f8285c6b1dbc6d59c1f63cf5c","unresolved":true,"context_lines":[{"line_number":64,"context_line":"        # to create one"},{"line_number":65,"context_line":"        return True"},{"line_number":66,"context_line":"    # TODO(slaweq): define this list as a constant in neutron_lib.constants"},{"line_number":67,"context_line":"    return port.device_owner not in ["},{"line_number":68,"context_line":"        constants.DEVICE_OWNER_ROUTER_HA_INTF,"},{"line_number":69,"context_line":"        constants.DEVICE_OWNER_FLOATINGIP,"},{"line_number":70,"context_line":"        constants.DEVICE_OWNER_DHCP,"}],"source_content_type":"text/x-python","patch_set":6,"id":"739d0a70_258cc6a4","line":67,"range":{"start_line":67,"start_character":33,"end_line":67,"end_character":37},"updated":"2021-02-10 06:06:10.000000000","message":"Just curios why DEVICE_OWNER_HA_REPLICATED_INT was removed from the list?","commit_id":"78d9107dda5bf50eab96fb6fd8e379979d7cdccf"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"6c6470b38dabff4129fae8dacc4013f7552a44b5","unresolved":true,"context_lines":[{"line_number":64,"context_line":"        # to create one"},{"line_number":65,"context_line":"        return True"},{"line_number":66,"context_line":"    # TODO(slaweq): define this list as a constant in neutron_lib.constants"},{"line_number":67,"context_line":"    return port.device_owner not in ["},{"line_number":68,"context_line":"        constants.DEVICE_OWNER_ROUTER_HA_INTF,"},{"line_number":69,"context_line":"        constants.DEVICE_OWNER_FLOATINGIP,"},{"line_number":70,"context_line":"        constants.DEVICE_OWNER_DHCP,"}],"source_content_type":"text/x-python","patch_set":6,"id":"0cccc85f_d5b2b167","line":67,"range":{"start_line":67,"start_character":33,"end_line":67,"end_character":37},"in_reply_to":"141cee74_0397abb7","updated":"2021-02-10 14:29:15.000000000","message":"I see now, thanks a lot for clarification :)","commit_id":"78d9107dda5bf50eab96fb6fd8e379979d7cdccf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"f33c838c13fadb4bef3642bbd208c688554df017","unresolved":true,"context_lines":[{"line_number":64,"context_line":"        # to create one"},{"line_number":65,"context_line":"        return True"},{"line_number":66,"context_line":"    # TODO(slaweq): define this list as a constant in neutron_lib.constants"},{"line_number":67,"context_line":"    return port.device_owner not in ["},{"line_number":68,"context_line":"        constants.DEVICE_OWNER_ROUTER_HA_INTF,"},{"line_number":69,"context_line":"        constants.DEVICE_OWNER_FLOATINGIP,"},{"line_number":70,"context_line":"        constants.DEVICE_OWNER_DHCP,"}],"source_content_type":"text/x-python","patch_set":6,"id":"8be09e51_649f2344","line":67,"range":{"start_line":67,"start_character":33,"end_line":67,"end_character":37},"in_reply_to":"739d0a70_258cc6a4","updated":"2021-02-10 08:06:23.000000000","message":"Because it was added there \"by mistake\". In fact DEVICE_OWNER_HA_REPLICATED_INT is like \"normal\" router interface but for HA routers. I wanted to include on that list just some \"internal\" neutron ports, like e.g. DEVICE_OWNER_ROUTER_HA_INTF which is port used by keepalived in the HA routers. Does it makes sense for You?","commit_id":"78d9107dda5bf50eab96fb6fd8e379979d7cdccf"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"2c3b82a7ad273a7b4ea209ee196300301f3cc1ba","unresolved":true,"context_lines":[{"line_number":64,"context_line":"        # to create one"},{"line_number":65,"context_line":"        return True"},{"line_number":66,"context_line":"    # TODO(slaweq): define this list as a constant in neutron_lib.constants"},{"line_number":67,"context_line":"    return port.device_owner not in ["},{"line_number":68,"context_line":"        constants.DEVICE_OWNER_ROUTER_HA_INTF,"},{"line_number":69,"context_line":"        constants.DEVICE_OWNER_FLOATINGIP,"},{"line_number":70,"context_line":"        constants.DEVICE_OWNER_DHCP,"}],"source_content_type":"text/x-python","patch_set":6,"id":"ab7abb2f_26efb9cd","line":67,"range":{"start_line":67,"start_character":33,"end_line":67,"end_character":37},"in_reply_to":"8be09e51_649f2344","updated":"2021-02-10 08:22:27.000000000","message":"Agree, it\u0027s not purely internal neutron port. Anyway do router interface ports ever request DHCP?","commit_id":"78d9107dda5bf50eab96fb6fd8e379979d7cdccf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"fae6ae62db72aa6e53ed0fe9f1ef7695bf804050","unresolved":true,"context_lines":[{"line_number":64,"context_line":"        # to create one"},{"line_number":65,"context_line":"        return True"},{"line_number":66,"context_line":"    # TODO(slaweq): define this list as a constant in neutron_lib.constants"},{"line_number":67,"context_line":"    return port.device_owner not in ["},{"line_number":68,"context_line":"        constants.DEVICE_OWNER_ROUTER_HA_INTF,"},{"line_number":69,"context_line":"        constants.DEVICE_OWNER_FLOATINGIP,"},{"line_number":70,"context_line":"        constants.DEVICE_OWNER_DHCP,"}],"source_content_type":"text/x-python","patch_set":6,"id":"141cee74_0397abb7","line":67,"range":{"start_line":67,"start_character":33,"end_line":67,"end_character":37},"in_reply_to":"ab7abb2f_26efb9cd","updated":"2021-02-10 12:16:24.000000000","message":"It was raised by Jens in earlier comments here that such ports need to be there to e.g. name resolution e.g. when doing traceroute.\nAnd in fact, the biggest issue which I saw in our case was with floating IP ports as there is many of them and that ports are simply just entries in the DB, nothing else.","commit_id":"78d9107dda5bf50eab96fb6fd8e379979d7cdccf"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"382f7eb8fb85a52079fe91ea6aebb6b1b5ce7435","unresolved":true,"context_lines":[{"line_number":58,"context_line":"DHCP_OPT_CLIENT_ID_NUM \u003d 61"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def port_requires_dhcp_configuration(port):"},{"line_number":62,"context_line":"    if not hasattr(port, \u0027device_owner\u0027) or not port.device_owner:"},{"line_number":63,"context_line":"        # We can\u0027t check if port needs dhcp entry, so it will be better"},{"line_number":64,"context_line":"        # to create one"}],"source_content_type":"text/x-python","patch_set":7,"id":"fff7b278_a9bd484a","line":61,"updated":"2021-02-18 09:15:26.000000000","message":"This is not specific to \"linux\" implementation. When I looked it, I am a bit confused.\nWhy do we need to have it in neutron/agent/linux/dhcp.py rather than neutron/agent/dhcp/agent.py?\nIs it to avoid importing loop?","commit_id":"ca32981425cc1f1a2b1a4d101bed24e81c596516"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7652e7eafba6214a133197efa81085f498460aff","unresolved":true,"context_lines":[{"line_number":58,"context_line":"DHCP_OPT_CLIENT_ID_NUM \u003d 61"},{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def port_requires_dhcp_configuration(port):"},{"line_number":62,"context_line":"    if not hasattr(port, \u0027device_owner\u0027) or not port.device_owner:"},{"line_number":63,"context_line":"        # We can\u0027t check if port needs dhcp entry, so it will be better"},{"line_number":64,"context_line":"        # to create one"}],"source_content_type":"text/x-python","patch_set":7,"id":"3abe8616_649bd382","line":61,"in_reply_to":"fff7b278_a9bd484a","updated":"2021-02-18 12:18:49.000000000","message":"yes, it\u0027s to avoid importing loop. If You have any better place for that, I\u0027m open for propositions 😊","commit_id":"ca32981425cc1f1a2b1a4d101bed24e81c596516"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f6d5fd831f019b1505f49085c5281d52103f9e29","unresolved":true,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def port_requires_dhcp_configuration(port):"},{"line_number":62,"context_line":"    if not hasattr(port, \u0027device_owner\u0027) or not port.device_owner:"},{"line_number":63,"context_line":"        # We can\u0027t check if port needs dhcp entry, so it will be better"},{"line_number":64,"context_line":"        # to create one"},{"line_number":65,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":7,"id":"f6e072c0_26668a3f","line":62,"range":{"start_line":62,"start_character":11,"end_line":62,"end_character":65},"updated":"2021-02-18 09:11:52.000000000","message":"nitty nit: getattr(port, \u0027device_owner\u0027, None)","commit_id":"ca32981425cc1f1a2b1a4d101bed24e81c596516"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7652e7eafba6214a133197efa81085f498460aff","unresolved":false,"context_lines":[{"line_number":59,"context_line":""},{"line_number":60,"context_line":""},{"line_number":61,"context_line":"def port_requires_dhcp_configuration(port):"},{"line_number":62,"context_line":"    if not hasattr(port, \u0027device_owner\u0027) or not port.device_owner:"},{"line_number":63,"context_line":"        # We can\u0027t check if port needs dhcp entry, so it will be better"},{"line_number":64,"context_line":"        # to create one"},{"line_number":65,"context_line":"        return True"}],"source_content_type":"text/x-python","patch_set":7,"id":"56e06759_0eb29634","line":62,"range":{"start_line":62,"start_character":11,"end_line":62,"end_character":65},"in_reply_to":"f6e072c0_26668a3f","updated":"2021-02-18 12:18:49.000000000","message":"Done","commit_id":"ca32981425cc1f1a2b1a4d101bed24e81c596516"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"f6d5fd831f019b1505f49085c5281d52103f9e29","unresolved":true,"context_lines":[{"line_number":62,"context_line":"    if not hasattr(port, \u0027device_owner\u0027) or not port.device_owner:"},{"line_number":63,"context_line":"        # We can\u0027t check if port needs dhcp entry, so it will be better"},{"line_number":64,"context_line":"        # to create one"},{"line_number":65,"context_line":"        return True"},{"line_number":66,"context_line":"    # TODO(slaweq): define this list as a constant in neutron_lib.constants"},{"line_number":67,"context_line":"    return port.device_owner not in ["},{"line_number":68,"context_line":"        constants.DEVICE_OWNER_ROUTER_HA_INTF,"}],"source_content_type":"text/x-python","patch_set":7,"id":"b2d0a0b1_b5086f1c","line":65,"range":{"start_line":65,"start_character":8,"end_line":65,"end_character":14},"updated":"2021-02-18 09:11:52.000000000","message":"I was wondering when this happens.","commit_id":"ca32981425cc1f1a2b1a4d101bed24e81c596516"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7652e7eafba6214a133197efa81085f498460aff","unresolved":true,"context_lines":[{"line_number":62,"context_line":"    if not hasattr(port, \u0027device_owner\u0027) or not port.device_owner:"},{"line_number":63,"context_line":"        # We can\u0027t check if port needs dhcp entry, so it will be better"},{"line_number":64,"context_line":"        # to create one"},{"line_number":65,"context_line":"        return True"},{"line_number":66,"context_line":"    # TODO(slaweq): define this list as a constant in neutron_lib.constants"},{"line_number":67,"context_line":"    return port.device_owner not in ["},{"line_number":68,"context_line":"        constants.DEVICE_OWNER_ROUTER_HA_INTF,"}],"source_content_type":"text/x-python","patch_set":7,"id":"2f6000e4_4c50dcad","line":65,"range":{"start_line":65,"start_character":8,"end_line":65,"end_character":14},"in_reply_to":"31cac53e_9f1f6f15","updated":"2021-02-18 12:18:49.000000000","message":"TBH I\u0027m not sure, I just wanted to be safe here","commit_id":"ca32981425cc1f1a2b1a4d101bed24e81c596516"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"382f7eb8fb85a52079fe91ea6aebb6b1b5ce7435","unresolved":true,"context_lines":[{"line_number":62,"context_line":"    if not hasattr(port, \u0027device_owner\u0027) or not port.device_owner:"},{"line_number":63,"context_line":"        # We can\u0027t check if port needs dhcp entry, so it will be better"},{"line_number":64,"context_line":"        # to create one"},{"line_number":65,"context_line":"        return True"},{"line_number":66,"context_line":"    # TODO(slaweq): define this list as a constant in neutron_lib.constants"},{"line_number":67,"context_line":"    return port.device_owner not in ["},{"line_number":68,"context_line":"        constants.DEVICE_OWNER_ROUTER_HA_INTF,"}],"source_content_type":"text/x-python","patch_set":7,"id":"31cac53e_9f1f6f15","line":65,"range":{"start_line":65,"start_character":8,"end_line":65,"end_character":14},"in_reply_to":"b2d0a0b1_b5086f1c","updated":"2021-02-18 09:15:26.000000000","message":"I think it easily happens just after creating a port.\nWhen creating a port without passing device_owner, device_owner would be an empty string.\nI am not sure when the case where device_owner attribute is missing.","commit_id":"ca32981425cc1f1a2b1a4d101bed24e81c596516"},{"author":{"_account_id":841,"name":"Akihiro Motoki","email":"amotoki@gmail.com","username":"amotoki"},"change_message_id":"382f7eb8fb85a52079fe91ea6aebb6b1b5ce7435","unresolved":true,"context_lines":[{"line_number":68,"context_line":"        constants.DEVICE_OWNER_ROUTER_HA_INTF,"},{"line_number":69,"context_line":"        constants.DEVICE_OWNER_FLOATINGIP,"},{"line_number":70,"context_line":"        constants.DEVICE_OWNER_DHCP,"},{"line_number":71,"context_line":"        constants.DEVICE_OWNER_DISTRIBUTED]"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class DictModel(collections.abc.MutableMapping):"}],"source_content_type":"text/x-python","patch_set":7,"id":"f7d1936e_d06c0b3d","line":71,"updated":"2021-02-18 09:15:26.000000000","message":"I followed the discussion that we cannot list all network ports here (for example, router interfaces is required for name resolution).\n\nIt would really nice to have a code comment (or in the commit message) on why cannot exclude all network ports and we choose only these types of ports. It would be helpful when we consider adding a new type of ports to the list in future.","commit_id":"ca32981425cc1f1a2b1a4d101bed24e81c596516"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"7652e7eafba6214a133197efa81085f498460aff","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        constants.DEVICE_OWNER_ROUTER_HA_INTF,"},{"line_number":69,"context_line":"        constants.DEVICE_OWNER_FLOATINGIP,"},{"line_number":70,"context_line":"        constants.DEVICE_OWNER_DHCP,"},{"line_number":71,"context_line":"        constants.DEVICE_OWNER_DISTRIBUTED]"},{"line_number":72,"context_line":""},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"class DictModel(collections.abc.MutableMapping):"}],"source_content_type":"text/x-python","patch_set":7,"id":"4cf30702_4cb3c2eb","line":71,"in_reply_to":"f7d1936e_d06c0b3d","updated":"2021-02-18 12:18:49.000000000","message":"Done","commit_id":"ca32981425cc1f1a2b1a4d101bed24e81c596516"}],"neutron/tests/unit/agent/linux/test_dhcp.py":[{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"f0f00d51553cec297d9bc18d3e4efb416c0eb068","unresolved":true,"context_lines":[{"line_number":310,"context_line":""},{"line_number":311,"context_line":"class FakeRouterHAPort(object):"},{"line_number":312,"context_line":"    def __init__(self):"},{"line_number":313,"context_line":"        self.id \u003d \u0027hahahaha-haha-haha-haha-hahahahahaha\u0027"},{"line_number":314,"context_line":"        self.admin_state_up \u003d True"},{"line_number":315,"context_line":"        self.device_owner \u003d constants.DEVICE_OWNER_ROUTER_HA_INTF"},{"line_number":316,"context_line":"        self.mac_address \u003d \u002700:00:0f:aa:aa:aa\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"04e2cfd3_e54d92f6","line":313,"range":{"start_line":313,"start_character":19,"end_line":313,"end_character":55},"updated":"2021-02-03 11:11:18.000000000","message":":-)","commit_id":"7b9bcc80846fd7aa045f19f2a9ff943ef75c906f"}],"releasenotes/notes/do-not-create-dhcp-entries-for-all-types-of-ports-39c03b3782d2753e.yaml":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"f663c691486032a3a5d06c3bf504c865e1a69487","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"535310e0_caf5802e","line":7,"updated":"2021-02-11 17:49:22.000000000","message":"I know you\u0027ll kill me but I\u0027d change this to something like:\n\n    To improve performance of the DHCP agent, it will no longer configure the DHCP server\n    for every port type created in Neutron. For example, for floating IP or router HA\n    interfaces there is no need since a client will not make a DHCP request for them.","commit_id":"78d9107dda5bf50eab96fb6fd8e379979d7cdccf"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"6ec0bb5231f460c0e8b31a6e57b4611c6882ed03","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"a945df02_3e9acd89","line":7,"in_reply_to":"535310e0_caf5802e","updated":"2021-02-18 08:49:15.000000000","message":"That sounds much better than mine version. Thx (as always 😊)","commit_id":"78d9107dda5bf50eab96fb6fd8e379979d7cdccf"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"d3165234a21f437d7a0a3477a5a75330be6b2fdf","unresolved":true,"context_lines":[{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    To improve performance of the DHCP agent, it will no longer configure the DHCP server"},{"line_number":5,"context_line":"    for every port type created in Neutron. For example, for floating IP or router HA"},{"line_number":6,"context_line":"    interfaces there is no need since a client will not make a DHCP request for them"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"39db46d3_9523ebe2","line":6,"updated":"2021-02-18 21:05:03.000000000","message":"nit: missing trailing period","commit_id":"e4bbeee2060058d079885339e99ef7e6e366de16"}]}
