)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"84ee25e6bc176a5ae73b142d68ef9b1e9b10449d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Log when port resource is leaked during port delete"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When a bound port deleted in the neutron nova got notified and the port"},{"line_number":10,"context_line":"is detached from the server. However if the port had resource request"},{"line_number":11,"context_line":"then the resulting allocation is leaked."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dfbec78f_8febdeae","line":9,"range":{"start_line":9,"start_character":46,"end_line":9,"end_character":58},"updated":"2019-05-04 15:23:30.000000000","message":"gets a network-vif-deleted notification","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"84ee25e6bc176a5ae73b142d68ef9b1e9b10449d","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Log when port resource is leaked during port delete"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When a bound port deleted in the neutron nova got notified and the port"},{"line_number":10,"context_line":"is detached from the server. However if the port had resource request"},{"line_number":11,"context_line":"then the resulting allocation is leaked."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dfbec78f_6fe6aaeb","line":9,"range":{"start_line":9,"start_character":26,"end_line":9,"end_character":41},"updated":"2019-05-04 15:23:30.000000000","message":"is deleted in neutron, nova","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a50272d31563a03f51427c3aa9e0c683fa15032","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Log when port resource is leaked during port delete"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When a bound port deleted in the neutron nova got notified and the port"},{"line_number":10,"context_line":"is detached from the server. However if the port had resource request"},{"line_number":11,"context_line":"then the resulting allocation is leaked."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dfbec78f_8aa98ce0","line":9,"range":{"start_line":9,"start_character":26,"end_line":9,"end_character":41},"in_reply_to":"dfbec78f_6fe6aaeb","updated":"2019-05-04 17:11:16.000000000","message":"Done","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a50272d31563a03f51427c3aa9e0c683fa15032","unresolved":false,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Log when port resource is leaked during port delete"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"When a bound port deleted in the neutron nova got notified and the port"},{"line_number":10,"context_line":"is detached from the server. However if the port had resource request"},{"line_number":11,"context_line":"then the resulting allocation is leaked."},{"line_number":12,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dfbec78f_2aae60e7","line":9,"range":{"start_line":9,"start_character":46,"end_line":9,"end_character":58},"in_reply_to":"dfbec78f_8febdeae","updated":"2019-05-04 17:11:16.000000000","message":"Done","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"84ee25e6bc176a5ae73b142d68ef9b1e9b10449d","unresolved":false,"context_lines":[{"line_number":10,"context_line":"is detached from the server. However if the port had resource request"},{"line_number":11,"context_line":"then the resulting allocation is leaked."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch makes sure nova at least logs and ERROR. Also this patch"},{"line_number":14,"context_line":"asserts that the leaked allocation is reclaimed when the server is"},{"line_number":15,"context_line":"deleted."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dfbec78f_2fd0b2f7","line":13,"range":{"start_line":13,"start_character":41,"end_line":13,"end_character":44},"updated":"2019-05-04 15:23:30.000000000","message":"an","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a50272d31563a03f51427c3aa9e0c683fa15032","unresolved":false,"context_lines":[{"line_number":10,"context_line":"is detached from the server. However if the port had resource request"},{"line_number":11,"context_line":"then the resulting allocation is leaked."},{"line_number":12,"context_line":""},{"line_number":13,"context_line":"This patch makes sure nova at least logs and ERROR. Also this patch"},{"line_number":14,"context_line":"asserts that the leaked allocation is reclaimed when the server is"},{"line_number":15,"context_line":"deleted."},{"line_number":16,"context_line":""}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"dfbec78f_eab7e839","line":13,"range":{"start_line":13,"start_character":41,"end_line":13,"end_character":44},"in_reply_to":"dfbec78f_2fd0b2f7","updated":"2019-05-04 17:11:16.000000000","message":"Done","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"}],"nova/compute/manager.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"84ee25e6bc176a5ae73b142d68ef9b1e9b10449d","unresolved":false,"context_lines":[{"line_number":8288,"context_line":"                         \u0027deleting it from the info cache\u0027,"},{"line_number":8289,"context_line":"                         {\u0027intf\u0027: vif[\u0027id\u0027]},"},{"line_number":8290,"context_line":"                         instance\u003dinstance)"},{"line_number":8291,"context_line":"                if (\u0027allocation\u0027 in vif[\u0027profile\u0027]"},{"line_number":8292,"context_line":"                        and vif[\u0027profile\u0027][\u0027allocation\u0027]):"},{"line_number":8293,"context_line":"                    LOG.error("},{"line_number":8294,"context_line":"                        \u0027The bound port %(port_id)s is deleted in Neutron but \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_2fcbd253","line":8291,"range":{"start_line":8291,"start_character":36,"end_line":8291,"end_character":50},"updated":"2019-05-04 15:23:30.000000000","message":"This needs to be more graceful to there not being a profile in the vif, so use vif.get(\u0027profile\u0027, {}), or just:\n\n  if vif.get(\u0027profile\u0027, {}).get(\u0027allocation\u0027):","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a50272d31563a03f51427c3aa9e0c683fa15032","unresolved":false,"context_lines":[{"line_number":8288,"context_line":"                         \u0027deleting it from the info cache\u0027,"},{"line_number":8289,"context_line":"                         {\u0027intf\u0027: vif[\u0027id\u0027]},"},{"line_number":8290,"context_line":"                         instance\u003dinstance)"},{"line_number":8291,"context_line":"                if (\u0027allocation\u0027 in vif[\u0027profile\u0027]"},{"line_number":8292,"context_line":"                        and vif[\u0027profile\u0027][\u0027allocation\u0027]):"},{"line_number":8293,"context_line":"                    LOG.error("},{"line_number":8294,"context_line":"                        \u0027The bound port %(port_id)s is deleted in Neutron but \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_efaa9a17","line":8291,"range":{"start_line":8291,"start_character":36,"end_line":8291,"end_character":50},"in_reply_to":"dfbec78f_2fcbd253","updated":"2019-05-04 17:11:16.000000000","message":"good point. profile can be None as well. Done.","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"84ee25e6bc176a5ae73b142d68ef9b1e9b10449d","unresolved":false,"context_lines":[{"line_number":8290,"context_line":"                         instance\u003dinstance)"},{"line_number":8291,"context_line":"                if (\u0027allocation\u0027 in vif[\u0027profile\u0027]"},{"line_number":8292,"context_line":"                        and vif[\u0027profile\u0027][\u0027allocation\u0027]):"},{"line_number":8293,"context_line":"                    LOG.error("},{"line_number":8294,"context_line":"                        \u0027The bound port %(port_id)s is deleted in Neutron but \u0027"},{"line_number":8295,"context_line":"                        \u0027the resource allocation on the resource provider \u0027"},{"line_number":8296,"context_line":"                        \u0027%(rp_uuid)s is leaked until the server \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_cfe1d6d2","line":8293,"updated":"2019-05-04 15:23:30.000000000","message":"Can we be racing with a server delete in this case? I think that would only happen if nova created the port during server create and then deleted it during server delete, but since you can\u0027t have nova create ports with resource allocations, I think it\u0027s not an issue (for now).","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a50272d31563a03f51427c3aa9e0c683fa15032","unresolved":false,"context_lines":[{"line_number":8290,"context_line":"                         instance\u003dinstance)"},{"line_number":8291,"context_line":"                if (\u0027allocation\u0027 in vif[\u0027profile\u0027]"},{"line_number":8292,"context_line":"                        and vif[\u0027profile\u0027][\u0027allocation\u0027]):"},{"line_number":8293,"context_line":"                    LOG.error("},{"line_number":8294,"context_line":"                        \u0027The bound port %(port_id)s is deleted in Neutron but \u0027"},{"line_number":8295,"context_line":"                        \u0027the resource allocation on the resource provider \u0027"},{"line_number":8296,"context_line":"                        \u0027%(rp_uuid)s is leaked until the server \u0027"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_6f9eaa08","line":8293,"in_reply_to":"dfbec78f_cfe1d6d2","updated":"2019-05-04 17:11:16.000000000","message":"As you said, for now it cannot race. If later server delete causes a port delete that end up here then the  LibvirtDriver.detach_interface() call detects the race and logs a warning. Can we do more than that?","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"719cc1ab53986c8b663a2e417b5b45ad7a49e38f","unresolved":false,"context_lines":[{"line_number":8288,"context_line":"                         \u0027deleting it from the info cache\u0027,"},{"line_number":8289,"context_line":"                         {\u0027intf\u0027: vif[\u0027id\u0027]},"},{"line_number":8290,"context_line":"                         instance\u003dinstance)"},{"line_number":8291,"context_line":"                if vif.get(\u0027profile\u0027, {}) and vif[\u0027profile\u0027].get(\u0027allocation\u0027):"},{"line_number":8292,"context_line":"                    LOG.error("},{"line_number":8293,"context_line":"                        \u0027The bound port %(port_id)s is deleted in Neutron but \u0027"},{"line_number":8294,"context_line":"                        \u0027the resource allocation on the resource provider \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_05bd8eb6","line":8291,"range":{"start_line":8291,"start_character":46,"end_line":8291,"end_character":60},"updated":"2019-05-04 19:18:38.000000000","message":"But if vif[\u0027profile\u0027] does not exist, you\u0027ve passed the first check because of the default {} but failed this with a KeyError, right?\n\nWould it be cleaner to just do this:\n\n  profile \u003d vif.get(\u0027profile\u0027, {}) or {}\n  if profile.get(\u0027allocations\u0027):","commit_id":"935068fd22470d8c76c547c4357e2c6465a19191"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"719cc1ab53986c8b663a2e417b5b45ad7a49e38f","unresolved":false,"context_lines":[{"line_number":8288,"context_line":"                         \u0027deleting it from the info cache\u0027,"},{"line_number":8289,"context_line":"                         {\u0027intf\u0027: vif[\u0027id\u0027]},"},{"line_number":8290,"context_line":"                         instance\u003dinstance)"},{"line_number":8291,"context_line":"                if vif.get(\u0027profile\u0027, {}) and vif[\u0027profile\u0027].get(\u0027allocation\u0027):"},{"line_number":8292,"context_line":"                    LOG.error("},{"line_number":8293,"context_line":"                        \u0027The bound port %(port_id)s is deleted in Neutron but \u0027"},{"line_number":8294,"context_line":"                        \u0027the resource allocation on the resource provider \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_65a24a9d","line":8291,"range":{"start_line":8291,"start_character":19,"end_line":8291,"end_character":45},"updated":"2019-05-04 19:18:38.000000000","message":"So the first part of this is here for the case that vif[\u0027profile\u0027] is None, right?","commit_id":"935068fd22470d8c76c547c4357e2c6465a19191"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"4722ccc8616d96d4de97c7a5f1206d495a093cdc","unresolved":false,"context_lines":[{"line_number":8288,"context_line":"                         \u0027deleting it from the info cache\u0027,"},{"line_number":8289,"context_line":"                         {\u0027intf\u0027: vif[\u0027id\u0027]},"},{"line_number":8290,"context_line":"                         instance\u003dinstance)"},{"line_number":8291,"context_line":"                if vif.get(\u0027profile\u0027, {}) and vif[\u0027profile\u0027].get(\u0027allocation\u0027):"},{"line_number":8292,"context_line":"                    LOG.error("},{"line_number":8293,"context_line":"                        \u0027The bound port %(port_id)s is deleted in Neutron but \u0027"},{"line_number":8294,"context_line":"                        \u0027the resource allocation on the resource provider \u0027"}],"source_content_type":"text/x-python","patch_set":2,"id":"dfbec78f_3fe45bac","line":8291,"range":{"start_line":8291,"start_character":19,"end_line":8291,"end_character":45},"in_reply_to":"dfbec78f_65a24a9d","updated":"2019-05-05 11:56:38.000000000","message":"yes, the first conditional is there to handle when vif[\u0027profile\u0027] \u003d\u003d None","commit_id":"935068fd22470d8c76c547c4357e2c6465a19191"}],"nova/tests/functional/test_servers.py":[{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"84ee25e6bc176a5ae73b142d68ef9b1e9b10449d","unresolved":false,"context_lines":[{"line_number":6654,"context_line":"        self.assertNotIn(\u0027allocation\u0027, binding_profile)"},{"line_number":6655,"context_line":""},{"line_number":6656,"context_line":"    def test_delete_bound_port_in_neutron_with_resource_request(self):"},{"line_number":6657,"context_line":"        \"\"\"Neutron sends a network-vif-deleted os-server-external notification"},{"line_number":6658,"context_line":"        to nova when a bound port is deleted. Nova detach the vif from the"},{"line_number":6659,"context_line":"        server. If the port had resource allocation then that allocation is"},{"line_number":6660,"context_line":"        leaked. This test makes sure that 1) an ERROR is logged when the leak"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_4fcde65b","line":6657,"range":{"start_line":6657,"start_character":47,"end_line":6657,"end_character":65},"updated":"2019-05-04 15:23:30.000000000","message":"os-server-external-events","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a50272d31563a03f51427c3aa9e0c683fa15032","unresolved":false,"context_lines":[{"line_number":6654,"context_line":"        self.assertNotIn(\u0027allocation\u0027, binding_profile)"},{"line_number":6655,"context_line":""},{"line_number":6656,"context_line":"    def test_delete_bound_port_in_neutron_with_resource_request(self):"},{"line_number":6657,"context_line":"        \"\"\"Neutron sends a network-vif-deleted os-server-external notification"},{"line_number":6658,"context_line":"        to nova when a bound port is deleted. Nova detach the vif from the"},{"line_number":6659,"context_line":"        server. If the port had resource allocation then that allocation is"},{"line_number":6660,"context_line":"        leaked. This test makes sure that 1) an ERROR is logged when the leak"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_6f6c6a08","line":6657,"range":{"start_line":6657,"start_character":47,"end_line":6657,"end_character":65},"in_reply_to":"dfbec78f_4fcde65b","updated":"2019-05-04 17:11:16.000000000","message":"Done","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"84ee25e6bc176a5ae73b142d68ef9b1e9b10449d","unresolved":false,"context_lines":[{"line_number":6655,"context_line":""},{"line_number":6656,"context_line":"    def test_delete_bound_port_in_neutron_with_resource_request(self):"},{"line_number":6657,"context_line":"        \"\"\"Neutron sends a network-vif-deleted os-server-external notification"},{"line_number":6658,"context_line":"        to nova when a bound port is deleted. Nova detach the vif from the"},{"line_number":6659,"context_line":"        server. If the port had resource allocation then that allocation is"},{"line_number":6660,"context_line":"        leaked. This test makes sure that 1) an ERROR is logged when the leak"},{"line_number":6661,"context_line":"        happens. 2) the leaked resource is reclaimed when the server is"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_efd93a22","line":6658,"range":{"start_line":6658,"start_character":51,"end_line":6658,"end_character":57},"updated":"2019-05-04 15:23:30.000000000","message":"detaches","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a50272d31563a03f51427c3aa9e0c683fa15032","unresolved":false,"context_lines":[{"line_number":6655,"context_line":""},{"line_number":6656,"context_line":"    def test_delete_bound_port_in_neutron_with_resource_request(self):"},{"line_number":6657,"context_line":"        \"\"\"Neutron sends a network-vif-deleted os-server-external notification"},{"line_number":6658,"context_line":"        to nova when a bound port is deleted. Nova detach the vif from the"},{"line_number":6659,"context_line":"        server. If the port had resource allocation then that allocation is"},{"line_number":6660,"context_line":"        leaked. This test makes sure that 1) an ERROR is logged when the leak"},{"line_number":6661,"context_line":"        happens. 2) the leaked resource is reclaimed when the server is"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_8f719ee3","line":6658,"range":{"start_line":6658,"start_character":51,"end_line":6658,"end_character":57},"in_reply_to":"dfbec78f_efd93a22","updated":"2019-05-04 17:11:16.000000000","message":"Done","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"84ee25e6bc176a5ae73b142d68ef9b1e9b10449d","unresolved":false,"context_lines":[{"line_number":6656,"context_line":"    def test_delete_bound_port_in_neutron_with_resource_request(self):"},{"line_number":6657,"context_line":"        \"\"\"Neutron sends a network-vif-deleted os-server-external notification"},{"line_number":6658,"context_line":"        to nova when a bound port is deleted. Nova detach the vif from the"},{"line_number":6659,"context_line":"        server. If the port had resource allocation then that allocation is"},{"line_number":6660,"context_line":"        leaked. This test makes sure that 1) an ERROR is logged when the leak"},{"line_number":6661,"context_line":"        happens. 2) the leaked resource is reclaimed when the server is"},{"line_number":6662,"context_line":"        deleted."}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_0fd7eeef","line":6659,"range":{"start_line":6659,"start_character":32,"end_line":6659,"end_character":40},"updated":"2019-05-04 15:23:30.000000000","message":"a resource","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a50272d31563a03f51427c3aa9e0c683fa15032","unresolved":false,"context_lines":[{"line_number":6656,"context_line":"    def test_delete_bound_port_in_neutron_with_resource_request(self):"},{"line_number":6657,"context_line":"        \"\"\"Neutron sends a network-vif-deleted os-server-external notification"},{"line_number":6658,"context_line":"        to nova when a bound port is deleted. Nova detach the vif from the"},{"line_number":6659,"context_line":"        server. If the port had resource allocation then that allocation is"},{"line_number":6660,"context_line":"        leaked. This test makes sure that 1) an ERROR is logged when the leak"},{"line_number":6661,"context_line":"        happens. 2) the leaked resource is reclaimed when the server is"},{"line_number":6662,"context_line":"        deleted."}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_0f7daeb0","line":6659,"range":{"start_line":6659,"start_character":32,"end_line":6659,"end_character":40},"in_reply_to":"dfbec78f_0fd7eeef","updated":"2019-05-04 17:11:16.000000000","message":"Done","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"84ee25e6bc176a5ae73b142d68ef9b1e9b10449d","unresolved":false,"context_lines":[{"line_number":6691,"context_line":"        self.assertEqual(self.ovs_bridge_rp_per_host[self.compute1_rp_uuid],"},{"line_number":6692,"context_line":"                         binding_profile[\u0027allocation\u0027])"},{"line_number":6693,"context_line":""},{"line_number":6694,"context_line":"        # neutron is faked in the functional test so this test just send in"},{"line_number":6695,"context_line":"        # a os-server-external notification to trigger the detach + ERROR log."},{"line_number":6696,"context_line":"        events \u003d {"},{"line_number":6697,"context_line":"            \"events\": ["}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_2ff9927f","line":6694,"range":{"start_line":6694,"start_character":68,"end_line":6694,"end_character":72},"updated":"2019-05-04 15:23:30.000000000","message":"sends","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a50272d31563a03f51427c3aa9e0c683fa15032","unresolved":false,"context_lines":[{"line_number":6691,"context_line":"        self.assertEqual(self.ovs_bridge_rp_per_host[self.compute1_rp_uuid],"},{"line_number":6692,"context_line":"                         binding_profile[\u0027allocation\u0027])"},{"line_number":6693,"context_line":""},{"line_number":6694,"context_line":"        # neutron is faked in the functional test so this test just send in"},{"line_number":6695,"context_line":"        # a os-server-external notification to trigger the detach + ERROR log."},{"line_number":6696,"context_line":"        events \u003d {"},{"line_number":6697,"context_line":"            \"events\": ["}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_cf50f635","line":6694,"range":{"start_line":6694,"start_character":68,"end_line":6694,"end_character":72},"in_reply_to":"dfbec78f_2ff9927f","updated":"2019-05-04 17:11:16.000000000","message":"Done","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"84ee25e6bc176a5ae73b142d68ef9b1e9b10449d","unresolved":false,"context_lines":[{"line_number":6692,"context_line":"                         binding_profile[\u0027allocation\u0027])"},{"line_number":6693,"context_line":""},{"line_number":6694,"context_line":"        # neutron is faked in the functional test so this test just send in"},{"line_number":6695,"context_line":"        # a os-server-external notification to trigger the detach + ERROR log."},{"line_number":6696,"context_line":"        events \u003d {"},{"line_number":6697,"context_line":"            \"events\": ["},{"line_number":6698,"context_line":"                {"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_8f043e7d","line":6695,"range":{"start_line":6695,"start_character":12,"end_line":6695,"end_character":30},"updated":"2019-05-04 15:23:30.000000000","message":"os-server-external-events","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a50272d31563a03f51427c3aa9e0c683fa15032","unresolved":false,"context_lines":[{"line_number":6692,"context_line":"                         binding_profile[\u0027allocation\u0027])"},{"line_number":6693,"context_line":""},{"line_number":6694,"context_line":"        # neutron is faked in the functional test so this test just send in"},{"line_number":6695,"context_line":"        # a os-server-external notification to trigger the detach + ERROR log."},{"line_number":6696,"context_line":"        events \u003d {"},{"line_number":6697,"context_line":"            \"events\": ["},{"line_number":6698,"context_line":"                {"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_6f454a70","line":6695,"range":{"start_line":6695,"start_character":12,"end_line":6695,"end_character":30},"in_reply_to":"dfbec78f_8f043e7d","updated":"2019-05-04 17:11:16.000000000","message":"Done","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"},{"author":{"_account_id":6873,"name":"Matt Riedemann","email":"mriedem.os@gmail.com","username":"mriedem"},"change_message_id":"84ee25e6bc176a5ae73b142d68ef9b1e9b10449d","unresolved":false,"context_lines":[{"line_number":6708,"context_line":"        # NOTE(gibi): the os-server-external-events is asynchron and there is"},{"line_number":6709,"context_line":"        # no notification emitted when this event is handled so we can only"},{"line_number":6710,"context_line":"        # do sleep a bit to ensure the thet detach happens"},{"line_number":6711,"context_line":"        time.sleep(2)"},{"line_number":6712,"context_line":""},{"line_number":6713,"context_line":"        allocations \u003d self.placement_api.get("},{"line_number":6714,"context_line":"            \u0027/allocations/%s\u0027 % server[\u0027id\u0027]).body[\u0027allocations\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_4f24060e","line":6711,"range":{"start_line":6711,"start_character":8,"end_line":6711,"end_character":21},"updated":"2019-05-04 15:23:30.000000000","message":"This is going to be too racy IMO, we should think of alternatives. We could poll self.stdlog.logger.output until the error is logged (or timeout), we could stub the driver\u0027s detach_interface method and poll until that\u0027s called (or add our assertion in a stub of that method for the logging - but that\u0027s brittle based on the order of the driver.detach_interface call and the logging). Other ideas? Polling for the error log is probably simplest.","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a50272d31563a03f51427c3aa9e0c683fa15032","unresolved":false,"context_lines":[{"line_number":6708,"context_line":"        # NOTE(gibi): the os-server-external-events is asynchron and there is"},{"line_number":6709,"context_line":"        # no notification emitted when this event is handled so we can only"},{"line_number":6710,"context_line":"        # do sleep a bit to ensure the thet detach happens"},{"line_number":6711,"context_line":"        time.sleep(2)"},{"line_number":6712,"context_line":""},{"line_number":6713,"context_line":"        allocations \u003d self.placement_api.get("},{"line_number":6714,"context_line":"            \u0027/allocations/%s\u0027 % server[\u0027id\u0027]).body[\u0027allocations\u0027]"}],"source_content_type":"text/x-python","patch_set":1,"id":"dfbec78f_8f4afe7d","line":6711,"range":{"start_line":6711,"start_character":8,"end_line":6711,"end_character":21},"in_reply_to":"dfbec78f_4f24060e","updated":"2019-05-04 17:11:16.000000000","message":"Implemented log polling as you suggested.","commit_id":"e408bd50ad705a9b7ae2bac50d4df91b437a1f31"}]}
