)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"1cffaa8e16341edc14b9d30aba84e7944607758c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"2cf07980_355c5525","updated":"2022-07-20 16:48:14.000000000","message":"I didn\u0027t look into the test failures","commit_id":"298f30a3dd7dd9cb7b4c2524fda586074d81bb5f"},{"author":{"_account_id":9531,"name":"liuyulong","display_name":"LIU Yulong","email":"i@liuyulong.me","username":"LIU-Yulong"},"change_message_id":"84963c195c4c5daf91059dde14eb690b26db340e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"938430cf_0377360b","updated":"2022-07-25 07:51:43.000000000","message":"If nova VMs are during evacuate or migration, while neutron side is updating network or subnet, seems there is also a race conditon. It can also cause problems. Because no DHCP or L2 provisioning block, PROVISIONING_COMPLETE will be sent after DHCP agent\u0027s work, and finally notify Nova port is UP.","commit_id":"06ddcaf4368ce054a8d396e70880f7dd1abe0562"}],"neutron/api/rpc/agentnotifiers/dhcp_rpc_agent_api.py":[{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7a78057751277c37aeb19855e7d4acbd481be1f8","unresolved":true,"context_lines":[{"line_number":298,"context_line":"        method_name \u003d \u0027.\u0027.join((resource, action, \u0027end\u0027))"},{"line_number":299,"context_line":"        data \u003d {resource: payload.latest_state}"},{"line_number":300,"context_line":"        if resource \u003d\u003d resources.PORT and event \u003d\u003d events.AFTER_UPDATE:"},{"line_number":301,"context_line":"            if not self._notification_is_needed(payload.states[0],"},{"line_number":302,"context_line":"                                                payload.latest_state):"},{"line_number":303,"context_line":"                # don\u0027t waste time updating the DHCP agent for status updates"},{"line_number":304,"context_line":"                return"},{"line_number":305,"context_line":"        self.notify(payload.context, data, method_name)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def _notification_is_needed(self, orig, new):"},{"line_number":308,"context_line":"        # notification to the DHCP agent should be send only if fixed_ips or"}],"source_content_type":"text/x-python","patch_set":1,"id":"a568a03e_c859b4c2","line":305,"range":{"start_line":301,"start_character":12,"end_line":305,"end_character":55},"updated":"2022-07-21 06:15:51.000000000","message":"nit:\n\n if self._notification_is_needed:\n   self.notify(...)","commit_id":"298f30a3dd7dd9cb7b4c2524fda586074d81bb5f"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"caa575135f71d31ff4c118aadc738e2694fc3b93","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        method_name \u003d \u0027.\u0027.join((resource, action, \u0027end\u0027))"},{"line_number":299,"context_line":"        data \u003d {resource: payload.latest_state}"},{"line_number":300,"context_line":"        if resource \u003d\u003d resources.PORT and event \u003d\u003d events.AFTER_UPDATE:"},{"line_number":301,"context_line":"            if not self._notification_is_needed(payload.states[0],"},{"line_number":302,"context_line":"                                                payload.latest_state):"},{"line_number":303,"context_line":"                # don\u0027t waste time updating the DHCP agent for status updates"},{"line_number":304,"context_line":"                return"},{"line_number":305,"context_line":"        self.notify(payload.context, data, method_name)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def _notification_is_needed(self, orig, new):"},{"line_number":308,"context_line":"        # notification to the DHCP agent should be send only if fixed_ips or"}],"source_content_type":"text/x-python","patch_set":1,"id":"8612bd14_e42d2c52","line":305,"range":{"start_line":301,"start_character":12,"end_line":305,"end_character":55},"in_reply_to":"743c2b3a_2edc4e01","updated":"2022-07-22 06:17:29.000000000","message":"Indeed! :)","commit_id":"298f30a3dd7dd9cb7b4c2524fda586074d81bb5f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e044f1008d17b11c3f5361bec8b254692ac28815","unresolved":false,"context_lines":[{"line_number":298,"context_line":"        method_name \u003d \u0027.\u0027.join((resource, action, \u0027end\u0027))"},{"line_number":299,"context_line":"        data \u003d {resource: payload.latest_state}"},{"line_number":300,"context_line":"        if resource \u003d\u003d resources.PORT and event \u003d\u003d events.AFTER_UPDATE:"},{"line_number":301,"context_line":"            if not self._notification_is_needed(payload.states[0],"},{"line_number":302,"context_line":"                                                payload.latest_state):"},{"line_number":303,"context_line":"                # don\u0027t waste time updating the DHCP agent for status updates"},{"line_number":304,"context_line":"                return"},{"line_number":305,"context_line":"        self.notify(payload.context, data, method_name)"},{"line_number":306,"context_line":""},{"line_number":307,"context_line":"    def _notification_is_needed(self, orig, new):"},{"line_number":308,"context_line":"        # notification to the DHCP agent should be send only if fixed_ips or"}],"source_content_type":"text/x-python","patch_set":1,"id":"743c2b3a_2edc4e01","line":305,"range":{"start_line":301,"start_character":12,"end_line":305,"end_character":55},"in_reply_to":"a568a03e_c859b4c2","updated":"2022-07-21 10:13:06.000000000","message":"nope because _notification_is_needed() is called only for port after_update event but notify() can be send also for other events","commit_id":"298f30a3dd7dd9cb7b4c2524fda586074d81bb5f"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"7a78057751277c37aeb19855e7d4acbd481be1f8","unresolved":true,"context_lines":[{"line_number":310,"context_line":"        # waste DHCP agent\u0027s time for doing updates"},{"line_number":311,"context_line":"        if not orig or not new:"},{"line_number":312,"context_line":"            return True"},{"line_number":313,"context_line":"        return any(orig[k] !\u003d new[k] for k in (\u0027fixed_ips\u0027, \u0027mac_address\u0027))"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    def _send_dhcp_notification(self, resource, event, trigger, payload\u003dNone):"},{"line_number":316,"context_line":"        action \u003d payload.action.split(\u0027_\u0027)[0]"}],"source_content_type":"text/x-python","patch_set":1,"id":"fce22729_02091bf3","line":313,"range":{"start_line":313,"start_character":8,"end_line":313,"end_character":75},"updated":"2022-07-21 06:15:51.000000000","message":"what about \u0027extra_dhcp_opt\u0027 or maybe anything else? Also probably \u0027if set(orig.keys()) !\u003d set(new.keys())\u0027 check should stay?","commit_id":"298f30a3dd7dd9cb7b4c2524fda586074d81bb5f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e044f1008d17b11c3f5361bec8b254692ac28815","unresolved":false,"context_lines":[{"line_number":310,"context_line":"        # waste DHCP agent\u0027s time for doing updates"},{"line_number":311,"context_line":"        if not orig or not new:"},{"line_number":312,"context_line":"            return True"},{"line_number":313,"context_line":"        return any(orig[k] !\u003d new[k] for k in (\u0027fixed_ips\u0027, \u0027mac_address\u0027))"},{"line_number":314,"context_line":""},{"line_number":315,"context_line":"    def _send_dhcp_notification(self, resource, event, trigger, payload\u003dNone):"},{"line_number":316,"context_line":"        action \u003d payload.action.split(\u0027_\u0027)[0]"}],"source_content_type":"text/x-python","patch_set":1,"id":"40999787_846bf118","line":313,"range":{"start_line":313,"start_character":8,"end_line":313,"end_character":75},"in_reply_to":"fce22729_02091bf3","updated":"2022-07-21 10:13:06.000000000","message":"True, I added few more attributes to that list :)","commit_id":"298f30a3dd7dd9cb7b4c2524fda586074d81bb5f"},{"author":{"_account_id":7730,"name":"Sahid Orentino Ferdjaoui","email":"sahid.ferdjaoui@industrialdiscipline.com","username":"sahid"},"change_message_id":"0d8d53c25b946dfa093ffc8086c5f8838053eb73","unresolved":true,"context_lines":[{"line_number":312,"context_line":"        # updates."},{"line_number":313,"context_line":"        if not orig or not new:"},{"line_number":314,"context_line":"            return True"},{"line_number":315,"context_line":"        return any(orig.get(k) !\u003d new.get(k) for k in ("},{"line_number":316,"context_line":"            \u0027fixed_ips\u0027, \u0027mac_address\u0027, \u0027extra_dhcp_opts\u0027,"},{"line_number":317,"context_line":"            \u0027dns_name\u0027, \u0027dns_assignment\u0027, \u0027dns_domain\u0027))"},{"line_number":318,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"b44b8eb4_629157e3","line":315,"updated":"2022-07-21 15:42:46.000000000","message":"nit: I would have added this list in the header of the file or the class, like it seems to be the case for other things.","commit_id":"06ddcaf4368ce054a8d396e70880f7dd1abe0562"},{"author":{"_account_id":8313,"name":"Lajos Katona","display_name":"lajoskatona","email":"katonalala@gmail.com","username":"elajkat","status":"Ericsson Software Technology"},"change_message_id":"5284bdbd80e47264e426b3f7483d17c4bcc8d52e","unresolved":true,"context_lines":[{"line_number":312,"context_line":"        # updates."},{"line_number":313,"context_line":"        if not orig or not new:"},{"line_number":314,"context_line":"            return True"},{"line_number":315,"context_line":"        return any(orig.get(k) !\u003d new.get(k) for k in ("},{"line_number":316,"context_line":"            \u0027fixed_ips\u0027, \u0027mac_address\u0027, \u0027extra_dhcp_opts\u0027,"},{"line_number":317,"context_line":"            \u0027dns_name\u0027, \u0027dns_assignment\u0027, \u0027dns_domain\u0027))"},{"line_number":318,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"c665803a_1eb49121","line":315,"in_reply_to":"598724d8_d88df585","updated":"2022-07-22 07:16:55.000000000","message":"+1\nLet\u0027s wait if others find anything to change, and that can be changed then","commit_id":"06ddcaf4368ce054a8d396e70880f7dd1abe0562"},{"author":{"_account_id":5948,"name":"Oleg Bondarev","email":"obondarev@mirantis.com","username":"obondarev"},"change_message_id":"caa575135f71d31ff4c118aadc738e2694fc3b93","unresolved":true,"context_lines":[{"line_number":312,"context_line":"        # updates."},{"line_number":313,"context_line":"        if not orig or not new:"},{"line_number":314,"context_line":"            return True"},{"line_number":315,"context_line":"        return any(orig.get(k) !\u003d new.get(k) for k in ("},{"line_number":316,"context_line":"            \u0027fixed_ips\u0027, \u0027mac_address\u0027, \u0027extra_dhcp_opts\u0027,"},{"line_number":317,"context_line":"            \u0027dns_name\u0027, \u0027dns_assignment\u0027, \u0027dns_domain\u0027))"},{"line_number":318,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"598724d8_d88df585","line":315,"in_reply_to":"b44b8eb4_629157e3","updated":"2022-07-22 06:17:29.000000000","message":"Makes sense, could be done once needed in one more place","commit_id":"06ddcaf4368ce054a8d396e70880f7dd1abe0562"},{"author":{"_account_id":16688,"name":"Rodolfo Alonso","email":"ralonsoh@redhat.com","username":"rodolfo-alonso-hernandez"},"change_message_id":"d70b64bd5749444055e24e4557971ee202b38a16","unresolved":false,"context_lines":[{"line_number":312,"context_line":"        # updates."},{"line_number":313,"context_line":"        if not orig or not new:"},{"line_number":314,"context_line":"            return True"},{"line_number":315,"context_line":"        return any(orig.get(k) !\u003d new.get(k) for k in ("},{"line_number":316,"context_line":"            \u0027fixed_ips\u0027, \u0027mac_address\u0027, \u0027extra_dhcp_opts\u0027,"},{"line_number":317,"context_line":"            \u0027dns_name\u0027, \u0027dns_assignment\u0027, \u0027dns_domain\u0027))"},{"line_number":318,"context_line":""}],"source_content_type":"text/x-python","patch_set":2,"id":"7d68e50c_45bbf742","line":315,"in_reply_to":"c665803a_1eb49121","updated":"2022-07-29 10:20:01.000000000","message":"Let\u0027s handle this in a follow-up patch. But yes, this set of parameters should be a constant.","commit_id":"06ddcaf4368ce054a8d396e70880f7dd1abe0562"}],"neutron/tests/unit/api/rpc/agentnotifiers/test_dhcp_rpc_agent_api.py":[{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"1cffaa8e16341edc14b9d30aba84e7944607758c","unresolved":true,"context_lines":[{"line_number":299,"context_line":"        p2[\u0027mac_address\u0027] \u003d \u002711:22:33:44:55:66\u0027"},{"line_number":300,"context_line":"        self.assertTrue(self.notifier._notification_is_needed(p1, p2))"},{"line_number":301,"context_line":"        p2[\u0027fixed_ips\u0027] \u003d [{\u0027ip_address\u0027: \u002710.0.0.11\u0027, \u0027subnet_id\u0027: \u0027aaa\u0027}]"},{"line_number":302,"context_line":"        self.assertTrue(self.notifier._notification_is_needed(p1, p2))"}],"source_content_type":"text/x-python","patch_set":1,"id":"2e9a1a1b_b98629a3","line":302,"updated":"2022-07-20 16:48:14.000000000","message":"nit: technically this last test is testing both conditions, not just fixed_ips changed, since p2 isn\u0027t reset after each test to a copy of p1.","commit_id":"298f30a3dd7dd9cb7b4c2524fda586074d81bb5f"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"e044f1008d17b11c3f5361bec8b254692ac28815","unresolved":false,"context_lines":[{"line_number":299,"context_line":"        p2[\u0027mac_address\u0027] \u003d \u002711:22:33:44:55:66\u0027"},{"line_number":300,"context_line":"        self.assertTrue(self.notifier._notification_is_needed(p1, p2))"},{"line_number":301,"context_line":"        p2[\u0027fixed_ips\u0027] \u003d [{\u0027ip_address\u0027: \u002710.0.0.11\u0027, \u0027subnet_id\u0027: \u0027aaa\u0027}]"},{"line_number":302,"context_line":"        self.assertTrue(self.notifier._notification_is_needed(p1, p2))"}],"source_content_type":"text/x-python","patch_set":1,"id":"8d89505c_3a084e82","line":302,"in_reply_to":"2e9a1a1b_b98629a3","updated":"2022-07-21 10:13:06.000000000","message":"True, fixed :)","commit_id":"298f30a3dd7dd9cb7b4c2524fda586074d81bb5f"},{"author":{"_account_id":1131,"name":"Brian Haley","email":"haleyb.dev@gmail.com","username":"brian-haley"},"change_message_id":"866036bbef4df7c0c90852fb2d8c53db33f8ab03","unresolved":true,"context_lines":[{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        p2[\u0027dns_domain\u0027] \u003d \u0027test-dns-domain\u0027"},{"line_number":323,"context_line":"        self.assertTrue(self.notifier._notification_is_needed(p1, p2))"},{"line_number":324,"context_line":"        p2.pop(\u0027dns_domain\u0027)"}],"source_content_type":"text/x-python","patch_set":2,"id":"8a87d06c_15326bf6","line":324,"updated":"2022-07-22 16:26:33.000000000","message":"nit: this last one isn\u0027t necessary as the test is over :) but useful if another test gets added since it will be forgotten.","commit_id":"06ddcaf4368ce054a8d396e70880f7dd1abe0562"}]}
