)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"864ec63bad9063d9d56e39a0c48202a49f9cfbbe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"0104c5f2_7c150eda","updated":"2026-04-28 00:58:17.000000000","message":"I was realizing this is not a true functional test, it is rather what we consider a unit test. Which might be OK, we would just want to move it under the unit tests instead of functional.","commit_id":"649dab5176a08666f2269e0c512d3b3b9947ad34"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"288a47560a080343ddd8aead067152d222708c14","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"e2758cf1_1acf51ed","updated":"2026-04-21 18:59:51.000000000","message":"This is looking good, +1 for now while we get the fix patch stacked on top of this one.\n\nWhat you will want to do now is stack https://review.opendev.org/c/openstack/nova/+/983672 on top of this patch. The way you do that is you just have two commits in your working tree instead of only one. Then when you do `git review` it will automatically see this and ask you if you want to upload the two commits.\n\nNote that you will need to incorporate an update to the regression test into your fix patch (to assert the fixed behavior and remove the assert of the buggy behavior).\n\nIf you need to git cherry pick from gerrit you can get a URL to do so from the gerrit web UI on the upper right hand side under \"Download patch\".\n\nPlease make sure the `Change-Id` on each patch don\u0027t change when you make the stack.","commit_id":"649dab5176a08666f2269e0c512d3b3b9947ad34"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"ec9c548456216571d6acceb85d67f08446f52bf9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"ba27a5dd_2fffc0e3","updated":"2026-05-07 23:54:43.000000000","message":"This is exactly what I was looking for, thanks!","commit_id":"5143e6ca637f413539d1e56006e71dd3b1d3442a"}],"nova/tests/functional/regressions/test_bug_2134375.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"864ec63bad9063d9d56e39a0c48202a49f9cfbbe","unresolved":true,"context_lines":[{"line_number":37,"context_line":"                side_effect\u003dexception.PortInUse("},{"line_number":38,"context_line":"                                 port_id\u003duuids.created_port_id))"},{"line_number":39,"context_line":"    @mock.patch(\u0027nova.network.neutron.API._unbind_ports\u0027)"},{"line_number":40,"context_line":"    @mock.patch(\u0027nova.network.neutron.API._delete_ports\u0027)"},{"line_number":41,"context_line":"    def test_update_ports_for_instance_fails_delete_all_created_ports(self,"},{"line_number":42,"context_line":"            mock_delete_ports,"},{"line_number":43,"context_line":"            mock_unbind_ports,"}],"source_content_type":"text/x-python","patch_set":4,"id":"69f522ee_5747f428","line":40,"updated":"2026-04-28 00:58:17.000000000","message":"When I looked at this test again, I realized it is not following the desired pattern for functional tests. With functional tests, the test should look like a \"real\" deployment for the most part, where you will call the Nova API to create a server and then assert things also via the REST APIs. This means that mocking of individual methods like this should be minimal.\n\nI will explain more and hopefully it will make sense.\n\nNote that it might not be reasonably possible to do a functional test that way for this bug. If not, we will probably be better off converting this to a unit test under nova/tests/unit/network/test_neutron.py because what is here is not a true functional test.","commit_id":"649dab5176a08666f2269e0c512d3b3b9947ad34"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"864ec63bad9063d9d56e39a0c48202a49f9cfbbe","unresolved":true,"context_lines":[{"line_number":42,"context_line":"            mock_delete_ports,"},{"line_number":43,"context_line":"            mock_unbind_ports,"},{"line_number":44,"context_line":"            mock_update_port,"},{"line_number":45,"context_line":"            mock_populate_ext_values):"},{"line_number":46,"context_line":"        \"\"\"Makes sure we delete created ports if we fail updating ports\"\"\""},{"line_number":47,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":48,"context_line":"        instance \u003d fake_instance.fake_instance_obj(ctxt)"}],"source_content_type":"text/x-python","patch_set":4,"id":"472cebaf_04bd4475","line":45,"updated":"2026-04-28 00:58:17.000000000","message":"Ideally we would want to only mock _update_port() to raise the exception and not mock anything else. I don\u0027t know off the top of my head whether that will be possible but that is the ideal goal.","commit_id":"649dab5176a08666f2269e0c512d3b3b9947ad34"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"864ec63bad9063d9d56e39a0c48202a49f9cfbbe","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"cb6f4182_7935bc50","line":77,"updated":"2026-04-28 00:58:17.000000000","message":"So instead of this, you would basically want to have something like:\n\n1. Mock patch _update_port() as a context manager\n2. Create a server with more than one network under the mocked context\n3. Check the ports in Neutron, expect to have zero ports. With the bug, there will probably be one port still.\n\nYou can find the helper methods for creating a server in nova/tests/functional/integrated_helpers.py and you can also see the NeutronFixture set up at self.neutron there. For reference, the code for NeutronFixture is located at nova/tests/fixtures/neutron.py.\n\nAnd I found an example of setting up a second network in self.neutron at nova/tests/functional/regressions/test_bug_1896463.py.","commit_id":"649dab5176a08666f2269e0c512d3b3b9947ad34"},{"author":{"_account_id":35674,"name":"ChungWon Lee","display_name":"cw0306-lee","email":"cw0306.lee@samsung.com","username":"cw0306-lee"},"change_message_id":"a93609081b74bed9495cb65b908ca892a32bebb9","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"573f3750_f6dd7dea","line":77,"in_reply_to":"3d79e623_8051d30f","updated":"2026-05-06 11:22:45.000000000","message":"I fixed regression test!\nThank you, @melwittt@gmail.com!","commit_id":"649dab5176a08666f2269e0c512d3b3b9947ad34"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"ec9c548456216571d6acceb85d67f08446f52bf9","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"0f7ecea4_30d01af3","line":77,"in_reply_to":"573f3750_f6dd7dea","updated":"2026-05-07 23:54:43.000000000","message":"Done","commit_id":"649dab5176a08666f2269e0c512d3b3b9947ad34"},{"author":{"_account_id":35674,"name":"ChungWon Lee","display_name":"cw0306-lee","email":"cw0306.lee@samsung.com","username":"cw0306-lee"},"change_message_id":"2ecddc2fd589d3921d2c10617b81a51f603c2d3a","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":4,"id":"3d79e623_8051d30f","line":77,"in_reply_to":"cb6f4182_7935bc50","updated":"2026-04-28 11:03:44.000000000","message":"Thank you for review!\nI\u0027ll try to fix this and maybe this test can be added to unit test.","commit_id":"649dab5176a08666f2269e0c512d3b3b9947ad34"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"ec9c548456216571d6acceb85d67f08446f52bf9","unresolved":true,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # There already two port"},{"line_number":71,"context_line":"        self.assertEqual(2, len(self.neutron.list_ports("},{"line_number":72,"context_line":"            is_admin\u003dTrue)[\u0027ports\u0027]))"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        self._create_server(name\u003d \u0027test01\u0027,"},{"line_number":75,"context_line":"            networks\u003d[{\u0027uuid\u0027: self.neutron.network_1[\u0027id\u0027]},"}],"source_content_type":"text/x-python","patch_set":6,"id":"2fbd6737_e230fe35","line":72,"updated":"2026-05-07 23:54:43.000000000","message":"Note to self: this is interesting, I didn\u0027t know the NeutronFixture sets itself up with two ports already existing.","commit_id":"5143e6ca637f413539d1e56006e71dd3b1d3442a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8dc549e41228ad729b5ad4320b2bb3ed825a7604","unresolved":true,"context_lines":[{"line_number":69,"context_line":""},{"line_number":70,"context_line":"        # There already two port"},{"line_number":71,"context_line":"        self.assertEqual(2, len(self.neutron.list_ports("},{"line_number":72,"context_line":"            is_admin\u003dTrue)[\u0027ports\u0027]))"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"        self._create_server(name\u003d \u0027test01\u0027,"},{"line_number":75,"context_line":"            networks\u003d[{\u0027uuid\u0027: self.neutron.network_1[\u0027id\u0027]},"}],"source_content_type":"text/x-python","patch_set":6,"id":"8948d979_7d4b8ce9","line":72,"in_reply_to":"2fbd6737_e230fe35","updated":"2026-05-18 22:43:10.000000000","message":"i think they might be sriov port bu ya we create a few networks prots and subnets that we reuse in diffent palces. \n\nwe actully have 2 neturon fixture for simple cases and more advance so i dont recall which is whcih\n\nwe do some thign simialr with voluem in the cidner fixture and images in the glance one.","commit_id":"5143e6ca637f413539d1e56006e71dd3b1d3442a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"8dc549e41228ad729b5ad4320b2bb3ed825a7604","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":6,"id":"e386f22e_b504bfef","line":82,"updated":"2026-05-18 22:43:10.000000000","message":"ack ok that makes snse why its 3\n\n2 or 4 could be argured for but 3 is defintly wrong.","commit_id":"5143e6ca637f413539d1e56006e71dd3b1d3442a"}]}
