)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"3f001580157ec4df5d3d929ec1c6a24f34770344","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"5309d717_a59f3b39","updated":"2022-01-18 14:32:05.000000000","message":"check experimental","commit_id":"0bd4da745cd3a0b239529f53feda34f14c91152a"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"85791322fadbdfd2115cac2c5eb88ce37b2921e8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"fd5cd02e_7d8b9103","updated":"2022-01-19 16:50:47.000000000","message":"Thanks for the explanation","commit_id":"74a06ab934e37798d8cd96f4106303eae5fb32fd"}],"neutron/db/provisioning_blocks.py":[{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"c26f681824f8615e7c0ba08afdd47dc51a11e44f","unresolved":true,"context_lines":[{"line_number":120,"context_line":"    :param object_type: callback resource type of the object"},{"line_number":121,"context_line":"    :param entity: The entity that has provisioned the object"},{"line_number":122,"context_line":"    :param pblock_used_for_object: True if object is of the type which uses"},{"line_number":123,"context_line":"                                   provisioning locks. There are some port\u0027s"},{"line_number":124,"context_line":"                                   device_owners, like e.g. router or DHCP"},{"line_number":125,"context_line":"                                   ports which don\u0027t really use provisioning"},{"line_number":126,"context_line":"                                   blocks but notification should be still"}],"source_content_type":"text/x-python","patch_set":2,"id":"8485e101_70671907","line":123,"range":{"start_line":123,"start_character":48,"end_line":123,"end_character":53},"updated":"2022-01-18 23:51:01.000000000","message":"blocks","commit_id":"0bd4da745cd3a0b239529f53feda34f14c91152a"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"c26f681824f8615e7c0ba08afdd47dc51a11e44f","unresolved":true,"context_lines":[{"line_number":124,"context_line":"                                   device_owners, like e.g. router or DHCP"},{"line_number":125,"context_line":"                                   ports which don\u0027t really use provisioning"},{"line_number":126,"context_line":"                                   blocks but notification should be still"},{"line_number":127,"context_line":"                                   send for them to allow switch port to be"},{"line_number":128,"context_line":"                                   UP"},{"line_number":129,"context_line":"    \"\"\""},{"line_number":130,"context_line":"    log_dict \u003d {\u0027oid\u0027: object_id, \u0027entity\u0027: entity, \u0027otype\u0027: object_type}"}],"source_content_type":"text/x-python","patch_set":2,"id":"67703c0f_0567dcb7","line":127,"range":{"start_line":127,"start_character":35,"end_line":127,"end_character":39},"updated":"2022-01-18 23:51:01.000000000","message":"sent","commit_id":"0bd4da745cd3a0b239529f53feda34f14c91152a"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"c26f681824f8615e7c0ba08afdd47dc51a11e44f","unresolved":true,"context_lines":[{"line_number":136,"context_line":"                                             object_type)"},{"line_number":137,"context_line":"    if not standard_attr_id:"},{"line_number":138,"context_line":"        return"},{"line_number":139,"context_line":"    if (remove_provisioning_component("},{"line_number":140,"context_line":"            context, object_id, object_type, entity, standard_attr_id) or"},{"line_number":141,"context_line":"            not pblock_used_for_object):"},{"line_number":142,"context_line":"        LOG.debug(\"Provisioning for %(otype)s %(oid)s completed by entity \""},{"line_number":143,"context_line":"                  \"%(entity)s.\", log_dict)"},{"line_number":144,"context_line":"        # now with that committed, check if any records are left. if None, emit"},{"line_number":145,"context_line":"        # an event that provisioning is complete."},{"line_number":146,"context_line":"        if not pb_obj.ProvisioningBlock.objects_exist("},{"line_number":147,"context_line":"                context, standard_attr_id\u003dstandard_attr_id):"},{"line_number":148,"context_line":"            LOG.debug(\"Provisioning complete for %(otype)s %(oid)s triggered \""},{"line_number":149,"context_line":"                      \"by entity %(entity)s.\", log_dict)"},{"line_number":150,"context_line":"            registry.publish(object_type, PROVISIONING_COMPLETE, entity,"},{"line_number":151,"context_line":"                             payload\u003devents.DBEventPayload("},{"line_number":152,"context_line":"                                 context, resource_id\u003dobject_id))"},{"line_number":153,"context_line":"    else:"},{"line_number":154,"context_line":"        log_dict[\u0027notification_type\u0027] \u003d PROVISIONING_COMPLETE"},{"line_number":155,"context_line":"        LOG.debug(\"Provisioning for %(otype)s %(oid)s completed by entity \""},{"line_number":156,"context_line":"                  \"%(entity)s. As there was no provisioning block for that \""},{"line_number":157,"context_line":"                  \"object by entity %(entity)s, %(notification_type)s \""},{"line_number":158,"context_line":"                  \"will not be send.\", log_dict)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"@db_api.retry_if_session_inactive()"}],"source_content_type":"text/x-python","patch_set":2,"id":"d2db334e_1019c7d3","line":158,"range":{"start_line":139,"start_character":0,"end_line":158,"end_character":48},"updated":"2022-01-18 23:51:01.000000000","message":"So this change doesn\u0027t really fix https://bugs.launchpad.net/neutron/+bug/1953478. In this change you are just adding:\n\n1) The provisioning completion for ports that don\u0027t require provisioning blocks\n2) A log statement for the case when we don\u0027t find the provisioning block\n\nWith this, it seems that https://review.opendev.org/c/openstack/neutron/+/824982/2/neutron/agent/dhcp/agent.py#403 is what is going to address https://bugs.launchpad.net/neutron/+bug/1953478\n\nAm I understanding right?","commit_id":"0bd4da745cd3a0b239529f53feda34f14c91152a"},{"author":{"_account_id":4694,"name":"Miguel Lavalle","email":"miguel@mlavalle.com","username":"minsel"},"change_message_id":"85791322fadbdfd2115cac2c5eb88ce37b2921e8","unresolved":false,"context_lines":[{"line_number":136,"context_line":"                                             object_type)"},{"line_number":137,"context_line":"    if not standard_attr_id:"},{"line_number":138,"context_line":"        return"},{"line_number":139,"context_line":"    if (remove_provisioning_component("},{"line_number":140,"context_line":"            context, object_id, object_type, entity, standard_attr_id) or"},{"line_number":141,"context_line":"            not pblock_used_for_object):"},{"line_number":142,"context_line":"        LOG.debug(\"Provisioning for %(otype)s %(oid)s completed by entity \""},{"line_number":143,"context_line":"                  \"%(entity)s.\", log_dict)"},{"line_number":144,"context_line":"        # now with that committed, check if any records are left. if None, emit"},{"line_number":145,"context_line":"        # an event that provisioning is complete."},{"line_number":146,"context_line":"        if not pb_obj.ProvisioningBlock.objects_exist("},{"line_number":147,"context_line":"                context, standard_attr_id\u003dstandard_attr_id):"},{"line_number":148,"context_line":"            LOG.debug(\"Provisioning complete for %(otype)s %(oid)s triggered \""},{"line_number":149,"context_line":"                      \"by entity %(entity)s.\", log_dict)"},{"line_number":150,"context_line":"            registry.publish(object_type, PROVISIONING_COMPLETE, entity,"},{"line_number":151,"context_line":"                             payload\u003devents.DBEventPayload("},{"line_number":152,"context_line":"                                 context, resource_id\u003dobject_id))"},{"line_number":153,"context_line":"    else:"},{"line_number":154,"context_line":"        log_dict[\u0027notification_type\u0027] \u003d PROVISIONING_COMPLETE"},{"line_number":155,"context_line":"        LOG.debug(\"Provisioning for %(otype)s %(oid)s completed by entity \""},{"line_number":156,"context_line":"                  \"%(entity)s. As there was no provisioning block for that \""},{"line_number":157,"context_line":"                  \"object by entity %(entity)s, %(notification_type)s \""},{"line_number":158,"context_line":"                  \"will not be send.\", log_dict)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"@db_api.retry_if_session_inactive()"}],"source_content_type":"text/x-python","patch_set":2,"id":"f3e81b0b_777ec7b7","line":158,"range":{"start_line":139,"start_character":0,"end_line":158,"end_character":48},"in_reply_to":"20f3ca4f_87ff8474","updated":"2022-01-19 16:50:47.000000000","message":"Ack","commit_id":"0bd4da745cd3a0b239529f53feda34f14c91152a"},{"author":{"_account_id":11975,"name":"Slawek Kaplonski","email":"skaplons@redhat.com","username":"slaweq"},"change_message_id":"1f9695b67caaed809ca4b0335b2957e429330cf2","unresolved":true,"context_lines":[{"line_number":136,"context_line":"                                             object_type)"},{"line_number":137,"context_line":"    if not standard_attr_id:"},{"line_number":138,"context_line":"        return"},{"line_number":139,"context_line":"    if (remove_provisioning_component("},{"line_number":140,"context_line":"            context, object_id, object_type, entity, standard_attr_id) or"},{"line_number":141,"context_line":"            not pblock_used_for_object):"},{"line_number":142,"context_line":"        LOG.debug(\"Provisioning for %(otype)s %(oid)s completed by entity \""},{"line_number":143,"context_line":"                  \"%(entity)s.\", log_dict)"},{"line_number":144,"context_line":"        # now with that committed, check if any records are left. if None, emit"},{"line_number":145,"context_line":"        # an event that provisioning is complete."},{"line_number":146,"context_line":"        if not pb_obj.ProvisioningBlock.objects_exist("},{"line_number":147,"context_line":"                context, standard_attr_id\u003dstandard_attr_id):"},{"line_number":148,"context_line":"            LOG.debug(\"Provisioning complete for %(otype)s %(oid)s triggered \""},{"line_number":149,"context_line":"                      \"by entity %(entity)s.\", log_dict)"},{"line_number":150,"context_line":"            registry.publish(object_type, PROVISIONING_COMPLETE, entity,"},{"line_number":151,"context_line":"                             payload\u003devents.DBEventPayload("},{"line_number":152,"context_line":"                                 context, resource_id\u003dobject_id))"},{"line_number":153,"context_line":"    else:"},{"line_number":154,"context_line":"        log_dict[\u0027notification_type\u0027] \u003d PROVISIONING_COMPLETE"},{"line_number":155,"context_line":"        LOG.debug(\"Provisioning for %(otype)s %(oid)s completed by entity \""},{"line_number":156,"context_line":"                  \"%(entity)s. As there was no provisioning block for that \""},{"line_number":157,"context_line":"                  \"object by entity %(entity)s, %(notification_type)s \""},{"line_number":158,"context_line":"                  \"will not be send.\", log_dict)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":""},{"line_number":161,"context_line":"@db_api.retry_if_session_inactive()"}],"source_content_type":"text/x-python","patch_set":2,"id":"20f3ca4f_87ff8474","line":158,"range":{"start_line":139,"start_character":0,"end_line":158,"end_character":48},"in_reply_to":"d2db334e_1019c7d3","updated":"2022-01-19 08:14:48.000000000","message":"Not exactly. This patch is actually fixing the root cause of the https://bugs.launchpad.net/neutron/+bug/1953478 which is: change port\u0027s status when \"unexpected\" provisioning complete message was sent to the server (like in case of the bug it was unexpected provisioning complete by the DHCP entity).\n\nThen, patch https://review.opendev.org/c/openstack/neutron/+/824982/2/neutron/agent/dhcp/agent.py#403 is fixing the cause of this specific, \"unexpected\" provisioning complete message, so I would say that https://review.opendev.org/c/openstack/neutron/+/824982/2/neutron/agent/dhcp/agent.py#403 fixes what triggered that error with shelve/unshelve instance.","commit_id":"0bd4da745cd3a0b239529f53feda34f14c91152a"}]}
