Some news on this front, after some more work and informal discussion:
- currently in NGS, device reconfiguration to account for port creation is done in bind_port(), while port deletion is handled in a postcommit hook. According to the bind_port() specification, we are not supposed to make permanent changes here, which means that the current code does not respect this for port creation. I am preparing an initial patch to move all device reconfiguration to postcommit hooks to fix this. This has the added advantage that postcommit hooks would be easier to parallelize / bulkify / make asynchronous: there is none of the complexity of binding levels or binding retries done by Neutron.
- I discovered the "provisioning blocks" mechanism [1]. It is already used by NGS, but it could probably be used in a more asynchronous way to improve concurrency (e.g. return an answer to the API caller even if the port is still in BUILD state).
Some news on this front, after some more work and informal discussion:
- currently in NGS, device reconfiguration to account for port creation is done in bind_port(), while port deletion is handled in a postcommit hook. According to the bind_port() specification, we are not supposed to make permanent changes here, which means that the current code does not respect this for port creation. I am preparing an initial patch to move all device reconfiguration to postcommit hooks to fix this. This has the added advantage that postcommit hooks would be easier to parallelize / bulkify / make asynchronous: there is none of the complexity of binding levels or binding retries done by Neutron.
- I discovered the "provisioning blocks" mechanism [1]. It is already used by NGS, but it could probably be used in a more asynchronous way to improve concurrency (e.g. return an answer to the API caller even if the port is still in BUILD state).
[1] https:/ /docs.openstack .org/neutron/ latest/ contributor/ internals/ provisioning_ blocks. html