)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d079319ebbdb637574e5faeb31f38588954fdc6","unresolved":true,"context_lines":[{"line_number":6,"context_line":""},{"line_number":7,"context_line":"Fix port remain while error on update port with multi network"},{"line_number":8,"context_line":""},{"line_number":9,"context_line":"Create instance with multi network, and if there are error during port update just after port create, there can be port that is not deleted."},{"line_number":10,"context_line":""},{"line_number":11,"context_line":"Closes-Bug: #2134375"},{"line_number":12,"context_line":"Change-Id: Ia9725b0c3a0aab0ee91f8b9ff4783f6c43a1fea0"}],"source_content_type":"text/x-gerrit-commit-message","patch_set":6,"id":"9a7c99d7_4566042b","line":9,"updated":"2026-05-18 22:50:55.000000000","message":"nit: it would be preferable to wrapt thjis","commit_id":"527d899c9bef068c89376faa1113efd42f3ad181"}],"/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"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"b619f6dbd97b4a13d11ebb8e318d5fd8ba991dcf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"f018a63f_fd994619","updated":"2026-05-07 23:54:14.000000000","message":"Just a small issue with the release note not rendering correctly due to syntax. Other than that it looks good!","commit_id":"a121198a1fd26ebadfe6facf2fc4a9a624532a8e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"b35de615c2369cef199fd803b43d2310448a1da6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"d8b33254_4c693194","updated":"2026-05-08 18:46:26.000000000","message":"Release note is rendering correctly now, LGTM","commit_id":"527d899c9bef068c89376faa1113efd42f3ad181"},{"author":{"_account_id":35674,"name":"ChungWon Lee","display_name":"cw0306-lee","email":"cw0306.lee@samsung.com","username":"cw0306-lee"},"change_message_id":"1159c947fe1761607c96ecfac7dca273ccff467a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"a2f5b372_93cdf52a","updated":"2026-05-08 06:59:57.000000000","message":"recheck","commit_id":"527d899c9bef068c89376faa1113efd42f3ad181"}],"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":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"b35de615c2369cef199fd803b43d2310448a1da6","unresolved":false,"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":"00f8913a_1c48b032","line":1401,"in_reply_to":"67c9cd74_e5654a66","updated":"2026-05-08 18:46:26.000000000","message":"Done","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":"b35de615c2369cef199fd803b43d2310448a1da6","unresolved":false,"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":"80c52bea_3d4e1ccd","line":1324,"in_reply_to":"c46a814a_5e1f4cfd","updated":"2026-05-08 18:46:26.000000000","message":"Done","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"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d079319ebbdb637574e5faeb31f38588954fdc6","unresolved":false,"context_lines":[{"line_number":1362,"context_line":""},{"line_number":1363,"context_line":"                if created_port_id:"},{"line_number":1364,"context_line":"                    port_id \u003d created_port_id"},{"line_number":1365,"context_line":"                    created_port_ids.append(port_id)"},{"line_number":1366,"context_line":"                else:"},{"line_number":1367,"context_line":"                    port_id \u003d request.port_id"},{"line_number":1368,"context_line":"                ports_in_requested_order.append(port_id)"}],"source_content_type":"text/x-python","patch_set":6,"id":"5d354565_cd4c5338","side":"PARENT","line":1365,"updated":"2026-05-18 22:50:55.000000000","message":"this append woudl have only been correct if the port creation was done in this loop which isnot how this code works.","commit_id":"5143e6ca637f413539d1e56006e71dd3b1d3442a"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d079319ebbdb637574e5faeb31f38588954fdc6","unresolved":false,"context_lines":[{"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"},{"line_number":1328,"context_line":"        for request, created_port_id in requests_and_created_ports:"},{"line_number":1329,"context_line":"            vifobj \u003d objects.VirtualInterface(context)"},{"line_number":1330,"context_line":"            vifobj.instance_uuid \u003d instance.uuid"},{"line_number":1331,"context_line":"            vifobj.tag \u003d request.tag if \u0027tag\u0027 in request else None"},{"line_number":1332,"context_line":""},{"line_number":1333,"context_line":"            network \u003d nets.get(request.network_id)"},{"line_number":1334,"context_line":"            # if network_id did not pass validate_networks() and not available"},{"line_number":1335,"context_line":"            # here then skip it safely not continuing with a None Network"},{"line_number":1336,"context_line":"            if not network:"},{"line_number":1337,"context_line":"                continue"},{"line_number":1338,"context_line":""},{"line_number":1339,"context_line":"            nets_in_requested_order.append(network)"},{"line_number":1340,"context_line":""},{"line_number":1341,"context_line":"            zone \u003d \u0027compute:%s\u0027 % instance.availability_zone"},{"line_number":1342,"context_line":"            port_req_body \u003d {\u0027port\u0027: {\u0027device_id\u0027: instance.uuid,"},{"line_number":1343,"context_line":"                                      \u0027device_owner\u0027: zone}}"},{"line_number":1344,"context_line":"            if (requested_ports_dict and"},{"line_number":1345,"context_line":"                request.port_id in requested_ports_dict and"},{"line_number":1346,"context_line":"                get_binding_profile(requested_ports_dict[request.port_id])):"},{"line_number":1347,"context_line":"                port_req_body[\u0027port\u0027][constants.BINDING_PROFILE] \u003d \\"},{"line_number":1348,"context_line":"                    get_binding_profile(requested_ports_dict[request.port_id])"},{"line_number":1349,"context_line":"            try:"},{"line_number":1350,"context_line":"                port_arq \u003d None"},{"line_number":1351,"context_line":"                if network_arqs:"}],"source_content_type":"text/x-python","patch_set":6,"id":"4cefc5bb_acbeed9a","line":1348,"range":{"start_line":1325,"start_character":6,"end_line":1348,"end_character":78},"updated":"2026-05-18 22:50:55.000000000","message":"i guess we are guarding against a failures here.","commit_id":"527d899c9bef068c89376faa1113efd42f3ad181"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4d079319ebbdb637574e5faeb31f38588954fdc6","unresolved":false,"context_lines":[{"line_number":1398,"context_line":"                    self._unbind_ports(context,"},{"line_number":1399,"context_line":"                                       preexisting_port_ids,"},{"line_number":1400,"context_line":"                                       neutron, port_client)"},{"line_number":1401,"context_line":"                    self._delete_ports(neutron, instance, created_port_ids)"},{"line_number":1402,"context_line":"                    for vif in created_vifs:"},{"line_number":1403,"context_line":"                        vif.destroy()"},{"line_number":1404,"context_line":""}],"source_content_type":"text/x-python","patch_set":6,"id":"19eebedc_01ae61b0","line":1401,"updated":"2026-05-18 22:50:55.000000000","message":"oh no i see the cleanup logic here assumed that created_port_ids was all of them\n\nso if we had a vm with more then one neutron port created by nova this would have been incommplete\n\nso yes the fix is correct","commit_id":"527d899c9bef068c89376faa1113efd42f3ad181"}],"releasenotes/notes/bug-2134375-580c10cfefc279fd.yaml":[{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"b619f6dbd97b4a13d11ebb8e318d5fd8ba991dcf","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes an bug where ports remains during creating instance"},{"line_number":5,"context_line":"    with multiple network when error occurs updating first port"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    .. _bug #2134375: https://launchpad.net/bugs/2134375"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"a136546f_60b8ab55","line":4,"range":{"start_line":4,"start_character":13,"end_line":4,"end_character":16},"updated":"2026-05-07 23:54:14.000000000","message":"To make this link up, you will need to use this syntax [1] for example:\n\n```\nFixes `bug #2134375`_ where ports remain when creating an instance with\nmultiple networks, if an error occurs updating the first port.\n\n.. _bug #2134375: https://launchpad.net/bugs/2134375\n```\n\nYou can check the result in the \"Docs preview site\" of the build-openstack-releasenotes CI job for example:\n\nhttps://zuul.opendev.org/t/openstack/build/f5680ba8266b4f8e8e85bff46a35635e/artifacts\n\n[1] https://www.sphinx-doc.org/en/master/usage/restructuredtext/basics.html#hyperlinks","commit_id":"a121198a1fd26ebadfe6facf2fc4a9a624532a8e"},{"author":{"_account_id":4690,"name":"melanie witt","display_name":"melwitt","email":"melwittt@gmail.com","username":"melwitt"},"change_message_id":"b35de615c2369cef199fd803b43d2310448a1da6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Fixes an bug where ports remains during creating instance"},{"line_number":5,"context_line":"    with multiple network when error occurs updating first port"},{"line_number":6,"context_line":""},{"line_number":7,"context_line":"    .. _bug #2134375: https://launchpad.net/bugs/2134375"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"eeb792dd_e8deebd1","line":4,"range":{"start_line":4,"start_character":13,"end_line":4,"end_character":16},"in_reply_to":"a136546f_60b8ab55","updated":"2026-05-08 18:46:26.000000000","message":"Done","commit_id":"a121198a1fd26ebadfe6facf2fc4a9a624532a8e"}]}
