)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"fd3d49ee31188b9ec823a22077fc3a66f85a5dbe","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"189a05e1_14ceec98","updated":"2026-04-15 21:05:46.000000000","message":"Thanks for proposing a patch. This will need regression test coverage along with the fix, under nova/tests/functional/regressions.\n\nThe pattern to use is to write a new functional test patch which reproduces the bug and asserts the buggy behavior with a FIXME comment to update when the bug is fixed. Then, stack your fix patch on top of the func test patch and remove the FIXME comment and update the assert to assert the fixed behavior.\n\nI\u0027m not sure if you are familiar with this already, if not, this is a recent example:\n\n* func test https://review.opendev.org/c/openstack/nova/+/965927\n* fix https://review.opendev.org/c/openstack/nova/+/934984","commit_id":"1d6db5c1c1aa2034ee431b51e14245f180da9497"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"e1f1c6ea3811ddb8a6552f4f8506d729cb50203e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"bda60eb6_43d860f4","updated":"2026-04-24 21:37:58.000000000","message":"Hi, your code update looks good. Now you will need to rebase this patch onto \nyour regression test patch https://review.opendev.org/c/openstack/nova/+/984900\n\nI believe this doc explains how to most easily do it:\n\nhttps://docs.opendev.org/opendev/infra-manual/latest/developers.html#adding-a-dependency\n\n\u003e Fetch and checkout the parent change:\n\u003e\n\u003e git review -d $PARENT_CHANGE_NUMBER\n\u003e Cherry-pick your commit on top of it:\n\u003e\n\u003e git review -x $CHILD_CHANGE_NUMBER\n\u003e Submit rebased change for review:\n\u003e\n\u003e git review\n\nBasically\n```\ngit review -d 984900\ngit review -x 983672\n```\nNote you will need to modify the child change functional test to uncomment the fixed behavior assert and remove the buggy behavior assert. When you have the updated regression test passing, you are ready to upload.\n```\ngit review\n```\nAnd that should prompt you to upload 2 commits and when you say \"yes\" it will upload them. Let me know if you have any questions.","commit_id":"ccb3982abdb06ea417a7c80110aacee3a13439a7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"7bdebbdec4373fa3ae114a5d5b17805a289eaaa5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"8654e955_86b96f35","updated":"2026-04-28 00:04:13.000000000","message":"recheck bug 2149850","commit_id":"d5fc07a7291c1b8359d9da702b7b052f3b779bf2"}],"nova/network/neutron.py":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"fd3d49ee31188b9ec823a22077fc3a66f85a5dbe","unresolved":true,"context_lines":[{"line_number":1398,"context_line":"                        if (remain_port_id and"},{"line_number":1399,"context_line":"                                remain_port_id not in created_port_ids):"},{"line_number":1400,"context_line":"                            created_port_ids.append(remain_port_id)"},{"line_number":1401,"context_line":""},{"line_number":1402,"context_line":"                    self._unbind_ports(context,"},{"line_number":1403,"context_line":"                                       preexisting_port_ids,"},{"line_number":1404,"context_line":"                                       neutron, port_client)"}],"source_content_type":"text/x-python","patch_set":1,"id":"19988673_29450487","line":1401,"updated":"2026-04-15 21:05:46.000000000","message":"This would work but I think it would be cleaner if we removed the created_port_ids.append() entirely and from the beginning where created_port_ids is defined, set it to something like [port_id for port_id in requests_and_created_ports.values() if port_id is not None]. If we already have the list of created ports in the beginning, we should just set it there unless I\u0027m missing something.\n\nThe appending to the created_port_ids list one-by-one doesn\u0027t seem to have any usefulness if we already had access to a list of created port IDs. And actually it is misleading IMHO because it implies that a port has not been created _until_ the append is done. Which is not true.","commit_id":"1d6db5c1c1aa2034ee431b51e14245f180da9497"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"61434fd706bfbefe7b034f2e84f30058ca144d8b","unresolved":true,"context_lines":[{"line_number":1398,"context_line":"                        if (remain_port_id and"},{"line_number":1399,"context_line":"                                remain_port_id not in created_port_ids):"},{"line_number":1400,"context_line":"                            created_port_ids.append(remain_port_id)"},{"line_number":1401,"context_line":""},{"line_number":1402,"context_line":"                    self._unbind_ports(context,"},{"line_number":1403,"context_line":"                                       preexisting_port_ids,"},{"line_number":1404,"context_line":"                                       neutron, port_client)"}],"source_content_type":"text/x-python","patch_set":1,"id":"440db975_9bc5b384","line":1401,"in_reply_to":"19988673_29450487","updated":"2026-04-15 21:08:59.000000000","message":"Sorry, I didn\u0027t realize requests_and_created_ports is a list of tuples, not a dict -- so please ignore my pseudocode.\n\nThe same concept applies, extract the list of created ports and set created_port_ids with it.","commit_id":"1d6db5c1c1aa2034ee431b51e14245f180da9497"},{"author":{"_account_id":35674,"name":"ChungWon Lee","display_name":"cw0306-lee","email":"cw0306.lee@samsung.com","username":"cw0306-lee"},"change_message_id":"bef53f8cd9ecb07ca9797754e7aa41920c9bfc38","unresolved":true,"context_lines":[{"line_number":1398,"context_line":"                        if (remain_port_id and"},{"line_number":1399,"context_line":"                                remain_port_id not in created_port_ids):"},{"line_number":1400,"context_line":"                            created_port_ids.append(remain_port_id)"},{"line_number":1401,"context_line":""},{"line_number":1402,"context_line":"                    self._unbind_ports(context,"},{"line_number":1403,"context_line":"                                       preexisting_port_ids,"},{"line_number":1404,"context_line":"                                       neutron, port_client)"}],"source_content_type":"text/x-python","patch_set":1,"id":"b2121e83_bae0fc49","line":1401,"in_reply_to":"440db975_9bc5b384","updated":"2026-04-16 05:05:27.000000000","message":"Hi, @melwittt@gmail.com! Thank you for your review!\nI\u0027ll try to create regression test.","commit_id":"1d6db5c1c1aa2034ee431b51e14245f180da9497"},{"author":{"_account_id":35674,"name":"ChungWon Lee","display_name":"cw0306-lee","email":"cw0306.lee@samsung.com","username":"cw0306-lee"},"change_message_id":"82d6d61c4a0441777391107a5e6db51692a9dccd","unresolved":true,"context_lines":[{"line_number":1398,"context_line":"                        if (remain_port_id and"},{"line_number":1399,"context_line":"                                remain_port_id not in created_port_ids):"},{"line_number":1400,"context_line":"                            created_port_ids.append(remain_port_id)"},{"line_number":1401,"context_line":""},{"line_number":1402,"context_line":"                    self._unbind_ports(context,"},{"line_number":1403,"context_line":"                                       preexisting_port_ids,"},{"line_number":1404,"context_line":"                                       neutron, port_client)"}],"source_content_type":"text/x-python","patch_set":1,"id":"67c9cd74_e5654a66","line":1401,"in_reply_to":"b2121e83_bae0fc49","updated":"2026-04-17 01:41:27.000000000","message":"https://review.opendev.org/c/openstack/nova/+/984900\nI created regression test. Can you review it? Thank you!","commit_id":"1d6db5c1c1aa2034ee431b51e14245f180da9497"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"e1f1c6ea3811ddb8a6552f4f8506d729cb50203e","unresolved":true,"context_lines":[{"line_number":1321,"context_line":"        preexisting_port_ids \u003d []"},{"line_number":1322,"context_line":"        created_port_ids \u003d ["},{"line_number":1323,"context_line":"            port_id for _, port_id in requests_and_created_ports"},{"line_number":1324,"context_line":"            if port_id is not None]"},{"line_number":1325,"context_line":"        ports_in_requested_order \u003d []"},{"line_number":1326,"context_line":"        nets_in_requested_order \u003d []"},{"line_number":1327,"context_line":"        created_vifs \u003d []   # this list is for cleanups if we fail"}],"source_content_type":"text/x-python","patch_set":2,"id":"be178f61_00986c1f","line":1324,"updated":"2026-04-24 21:37:58.000000000","message":"++ thank you for updating, this looks good.","commit_id":"ccb3982abdb06ea417a7c80110aacee3a13439a7"},{"author":{"_account_id":35674,"name":"ChungWon Lee","display_name":"cw0306-lee","email":"cw0306.lee@samsung.com","username":"cw0306-lee"},"change_message_id":"8445435e4cde5444c2f621f32475e7eab156ef1e","unresolved":true,"context_lines":[{"line_number":1321,"context_line":"        preexisting_port_ids \u003d []"},{"line_number":1322,"context_line":"        created_port_ids \u003d ["},{"line_number":1323,"context_line":"            port_id for _, port_id in requests_and_created_ports"},{"line_number":1324,"context_line":"            if port_id is not None]"},{"line_number":1325,"context_line":"        ports_in_requested_order \u003d []"},{"line_number":1326,"context_line":"        nets_in_requested_order \u003d []"},{"line_number":1327,"context_line":"        created_vifs \u003d []   # this list is for cleanups if we fail"}],"source_content_type":"text/x-python","patch_set":2,"id":"c654b968_28a34880","line":1324,"in_reply_to":"3a568c42_83516ba9","updated":"2026-04-27 06:12:19.000000000","message":"I fixed as you guide, @melwittt@gmail.com! Thank you!\nI have a question that should I add release note and also add regression test to unit test?","commit_id":"ccb3982abdb06ea417a7c80110aacee3a13439a7"},{"author":{"_account_id":35674,"name":"ChungWon Lee","display_name":"cw0306-lee","email":"cw0306.lee@samsung.com","username":"cw0306-lee"},"change_message_id":"5c23eb1e388a9776650f93df196a4545376bc063","unresolved":true,"context_lines":[{"line_number":1321,"context_line":"        preexisting_port_ids \u003d []"},{"line_number":1322,"context_line":"        created_port_ids \u003d ["},{"line_number":1323,"context_line":"            port_id for _, port_id in requests_and_created_ports"},{"line_number":1324,"context_line":"            if port_id is not None]"},{"line_number":1325,"context_line":"        ports_in_requested_order \u003d []"},{"line_number":1326,"context_line":"        nets_in_requested_order \u003d []"},{"line_number":1327,"context_line":"        created_vifs \u003d []   # this list is for cleanups if we fail"}],"source_content_type":"text/x-python","patch_set":2,"id":"3a568c42_83516ba9","line":1324,"in_reply_to":"be178f61_00986c1f","updated":"2026-04-27 04:13:25.000000000","message":"Thank you for your kind guide!\nI\u0027ll try to do it!","commit_id":"ccb3982abdb06ea417a7c80110aacee3a13439a7"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"7bdebbdec4373fa3ae114a5d5b17805a289eaaa5","unresolved":true,"context_lines":[{"line_number":1321,"context_line":"        preexisting_port_ids \u003d []"},{"line_number":1322,"context_line":"        created_port_ids \u003d ["},{"line_number":1323,"context_line":"            port_id for _, port_id in requests_and_created_ports"},{"line_number":1324,"context_line":"            if port_id is not None]"},{"line_number":1325,"context_line":"        ports_in_requested_order \u003d []"},{"line_number":1326,"context_line":"        nets_in_requested_order \u003d []"},{"line_number":1327,"context_line":"        created_vifs \u003d []   # this list is for cleanups if we fail"}],"source_content_type":"text/x-python","patch_set":2,"id":"c46a814a_5e1f4cfd","line":1324,"in_reply_to":"c654b968_28a34880","updated":"2026-04-28 00:04:13.000000000","message":"For a release note, IMHO think it is up to you -- there is no specific rule about it for bugs. Basically if you/we think it\u0027s something helpful to highlight to cloud operators, so that they know a particular pain point is fixed, we add a release note. You can always wait for a reviewer to ask for one, if you are neutral about it.\n\nThe functional test is good enough (and is usually better) for regression test coverage.\n\nLooking at it again with a fresh brain though, I am wondering if we can do the asserts without mocking the internal methods. Mocking of the methods is more of a unit test style of verifying the result, whereas for functional tests we are trying to verify things more like we would in a real deployment. I will comment on the functional test patch below with my thought.","commit_id":"ccb3982abdb06ea417a7c80110aacee3a13439a7"}]}
