)]}'
{"/COMMIT_MSG":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"29fda1894f07ad992b2e4e722b48c20eff7117c1","unresolved":true,"context_lines":[{"line_number":11,"context_line":"RequestSpec object to the instance uuid. But the request_spec_dict"},{"line_number":12,"context_line":"is replaced with a normal dict object, then if server list and"},{"line_number":13,"context_line":"RequestSpec missmatch happens, the List Server API and the List"},{"line_number":14,"context_line":"Server Detail API hit 500 Internal server error because of key error."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This commit updates the req_spec_dict to keep using the defaultdict"},{"line_number":17,"context_line":"object, which doesn\u0027t trigger the key error."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"ee9a92df_0f389dca","line":14,"updated":"2025-01-20 18:47:19.000000000","message":"500 internal errors are valid to fix without a micro-version and this is not\nintroducing any new response code (just moving 500 to 200) so this looks like a valid bugfix candidate to me.","commit_id":"4caec57a65a56e2e0ee7b0289ded8acecc4090a2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"529fc42e979724f02c3216b48a33447ca7f1e34c","unresolved":false,"context_lines":[{"line_number":11,"context_line":"RequestSpec object to the instance uuid. But the request_spec_dict"},{"line_number":12,"context_line":"is replaced with a normal dict object, then if server list and"},{"line_number":13,"context_line":"RequestSpec missmatch happens, the List Server API and the List"},{"line_number":14,"context_line":"Server Detail API hit 500 Internal server error because of key error."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"This commit updates the req_spec_dict to keep using the defaultdict"},{"line_number":17,"context_line":"object, which doesn\u0027t trigger the key error."}],"source_content_type":"text/x-gerrit-commit-message","patch_set":1,"id":"11c2a653_fdc850c0","line":14,"in_reply_to":"ee9a92df_0f389dca","updated":"2025-02-21 04:10:28.000000000","message":"Acknowledged","commit_id":"4caec57a65a56e2e0ee7b0289ded8acecc4090a2"}],"/PATCHSET_LEVEL":[{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"15c48b199d7b9d75097559c6f3018373c759dc15","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"fdb0645b_c1338a46","updated":"2025-01-21 01:13:16.000000000","message":"Hi sean, Thank you for the quick review.","commit_id":"e6f902475a76dd469070b63e21fecc6c94035b53"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"170e94bcab557f997fb8169474e26254934a2fb3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"7c31feee_993725c3","updated":"2025-01-29 08:47:15.000000000","message":"I have some API concerns, but the intention to fix a HTTP500 is valid.","commit_id":"e6f902475a76dd469070b63e21fecc6c94035b53"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"097cb083cbab4057e6abcf47d18ce401e983cb96","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"264c4a4e_eb2b41a7","updated":"2025-01-21 13:50:01.000000000","message":"thanks, this is a relatively simple bug fix with a reproducer test case demonstrating the bug and the resolution as two separate patches.\n\nso this looks good to me.\n\nwe could add a release note but i think this trivial enough not to need one.\n\nas noted on the bug this is changing a 500 internal server error into a 200 so i do not belive this need a microverion and it is valid to adress in a bugfix.","commit_id":"e6f902475a76dd469070b63e21fecc6c94035b53"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"956650972653bcab0b6c225b27266a88f1d6fd9f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"da8b921b_f8d53198","updated":"2025-01-31 08:37:35.000000000","message":"I updated the code to return same `null` value in both case with request_spec object and no pinned az case and without request_spec case.","commit_id":"e7e9b625cf9072512466f7669e816225aee149d0"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"a2b504adc0af59a4cb7777fbb8bbdc0013e64253","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"142c2907_971d00b0","updated":"2025-01-31 13:25:55.000000000","message":"recheck","commit_id":"e7e9b625cf9072512466f7669e816225aee149d0"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"d792acc6c606367d4d2c05ac706cadf6aac3aa3a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"ffb700c9_14f3c27b","updated":"2025-02-03 01:46:03.000000000","message":"recheck","commit_id":"e7e9b625cf9072512466f7669e816225aee149d0"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"ef25d09f736fe178e590abe79c420ec29e6db36b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"03dde461_b1677305","updated":"2025-02-02 06:50:07.000000000","message":"recheck tempest-integrated-compute nova-ovs-hybrid-plug nova-tox-functional-py312 nova-grenade-multinode","commit_id":"e7e9b625cf9072512466f7669e816225aee149d0"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"347d27352ae53f5cae939129edcd87cda7597e1b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"18d53624_9ad3003a","updated":"2025-03-05 16:30:09.000000000","message":"Lgtm. A minor nit in the release note.","commit_id":"1e1626ad5d29fd39725a4a3b0f2184da6f068896"},{"author":{"_account_id":20733,"name":"Rajesh Tailor","email":"ratailor@redhat.com","username":"rajesht"},"change_message_id":"7a9e9e91c981ef9d3cb39e6b2cd11d71b1ebb7c6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"ae4c67a8_1702872e","updated":"2025-03-05 16:22:17.000000000","message":"just a minor nit, otherwise LGTM.","commit_id":"1e1626ad5d29fd39725a4a3b0f2184da6f068896"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"a4e4f9279a26f44421b8335c88fdcf8d3e5bc166","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"16d6a05e_c44efdc4","updated":"2025-03-07 01:24:23.000000000","message":"Thanks. Fixed the releasenote typo.","commit_id":"a6501c0870a2a4c968f183dd97985f8ed439952e"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a4dbc30e6e75af7223192b001e531cc904e007c8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"cc3d5e86_21f2559d","updated":"2025-04-02 22:04:48.000000000","message":"code change is ok but it need some doc and test update.\n\nI agree to fix this as bug and no microverison bump needed.","commit_id":"c1f7b564250e832bf1f4ba9b7e6462c46e33a414"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b20ae2619bd182e2df4b73e2433453aa6fd8c832","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":10,"id":"81ceaef2_114c66ab","updated":"2025-03-24 19:03:24.000000000","message":"i think this is ok but i would like to see gmann gibi or other comment on if we should keep empty string or null.","commit_id":"c1f7b564250e832bf1f4ba9b7e6462c46e33a414"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"a5bf63bf3f067ec3da44dd3c425c0d146352976f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"6aa00a6b_cecf9459","updated":"2025-04-03 09:17:02.000000000","message":"Thanks for the review.","commit_id":"edfd76ec39c525bd3998b1c3221b944405bed5a5"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"7b45962201c6c62b65e8bff616b951d5a5397785","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":12,"id":"766a96ed_ac77b115","updated":"2025-04-03 14:12:07.000000000","message":"I pushed in-progress commit as patchset 11 wrongly. Please review the 12, not the 11.","commit_id":"153ed366b5b977da24a493dc98d00d0372d13748"},{"author":{"_account_id":20733,"name":"Rajesh Tailor","email":"ratailor@redhat.com","username":"rajesht"},"change_message_id":"170665a7d6d171e4f59688f01ce31ad877d1044a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"1224462d_213e71fb","updated":"2025-04-09 05:10:15.000000000","message":"LGTM","commit_id":"509820f156e339e825f799d84b06cb11ac6b6096"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"7681e85a0ceadd912f4d4726ac50751e4b878af8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"8c3360d1_3e2c2644","updated":"2025-04-07 02:48:21.000000000","message":"recheck","commit_id":"509820f156e339e825f799d84b06cb11ac6b6096"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"3004e7d9a0c7d0fc171062e682ee66819096af60","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":13,"id":"a75274c7_95b49165","updated":"2025-04-09 00:59:36.000000000","message":"thanks for updates. lgtm","commit_id":"509820f156e339e825f799d84b06cb11ac6b6096"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"b20ae2619bd182e2df4b73e2433453aa6fd8c832","unresolved":true,"context_lines":[{"line_number":5721,"context_line":"    Also when default_schedule_zone config option set to specific AZ, in that"},{"line_number":5722,"context_line":"    case, instance would be pinned to that specific AZ, and instance will be"},{"line_number":5723,"context_line":"    scheduled on host belonging to pinned AZ."},{"line_number":5724,"context_line":"    In case of no pinned availability zone, this value is set to `null`."},{"line_number":5725,"context_line":"  in: body"},{"line_number":5726,"context_line":"  type: string"},{"line_number":5727,"context_line":"  min_version: 2.96"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"9e613cb5_87ad7a68","line":5724,"updated":"2025-03-24 19:03:24.000000000","message":"so this is the only thing im unsuer about\n\ni.e. sould we set this to null or keep the empty string?\n\nthe schema allows both\n```\nrebuild_response_v296[\u0027properties\u0027][\u0027server\u0027][\u0027properties\u0027].update({\n    \u0027pinned_availability_zone\u0027: {\n        \u0027type\u0027: [\u0027null\u0027, \u0027string\u0027],\n    },\n})\n```\n\nwe have not merged the server show version but its the same schma as rebuild","commit_id":"c1f7b564250e832bf1f4ba9b7e6462c46e33a414"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a4dbc30e6e75af7223192b001e531cc904e007c8","unresolved":true,"context_lines":[{"line_number":5721,"context_line":"    Also when default_schedule_zone config option set to specific AZ, in that"},{"line_number":5722,"context_line":"    case, instance would be pinned to that specific AZ, and instance will be"},{"line_number":5723,"context_line":"    scheduled on host belonging to pinned AZ."},{"line_number":5724,"context_line":"    In case of no pinned availability zone, this value is set to `null`."},{"line_number":5725,"context_line":"  in: body"},{"line_number":5726,"context_line":"  type: string"},{"line_number":5727,"context_line":"  min_version: 2.96"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"ed8a23db_7e1e6945","line":5724,"in_reply_to":"9e613cb5_87ad7a68","updated":"2025-04-02 22:04:48.000000000","message":"I think null make sense and clear view of it is not present.","commit_id":"c1f7b564250e832bf1f4ba9b7e6462c46e33a414"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"a5bf63bf3f067ec3da44dd3c425c0d146352976f","unresolved":false,"context_lines":[{"line_number":5721,"context_line":"    Also when default_schedule_zone config option set to specific AZ, in that"},{"line_number":5722,"context_line":"    case, instance would be pinned to that specific AZ, and instance will be"},{"line_number":5723,"context_line":"    scheduled on host belonging to pinned AZ."},{"line_number":5724,"context_line":"    In case of no pinned availability zone, this value is set to `null`."},{"line_number":5725,"context_line":"  in: body"},{"line_number":5726,"context_line":"  type: string"},{"line_number":5727,"context_line":"  min_version: 2.96"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"d94267e4_44da2e6a","line":5724,"in_reply_to":"ed8a23db_7e1e6945","updated":"2025-04-03 09:17:02.000000000","message":"Done","commit_id":"c1f7b564250e832bf1f4ba9b7e6462c46e33a414"}],"nova/api/openstack/compute/schemas/servers.py":[{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"33e62378820272253b3fe9420d7d55c6f55b39a7","unresolved":true,"context_lines":[{"line_number":1224,"context_line":"rebuild_response_v296 \u003d copy.deepcopy(rebuild_response_v275)"},{"line_number":1225,"context_line":"rebuild_response_v296[\u0027properties\u0027][\u0027server\u0027][\u0027properties\u0027].update({"},{"line_number":1226,"context_line":"    \u0027pinned_availability_zone\u0027: {"},{"line_number":1227,"context_line":"        \u0027type\u0027: [\u0027null\u0027],"},{"line_number":1228,"context_line":"    },"},{"line_number":1229,"context_line":"})"},{"line_number":1230,"context_line":"rebuild_response_v296[\u0027properties\u0027][\u0027server\u0027][\u0027required\u0027].append("}],"source_content_type":"text/x-python","patch_set":12,"id":"720da2a9_f3de0f84","line":1227,"range":{"start_line":1227,"start_character":22,"end_line":1227,"end_character":25},"updated":"2025-04-03 16:53:12.000000000","message":"you still need to allow string as output where we have valid Pinned AZ. it is just we do not return null in place of empty string which you aleady mentioned in doc and this schema does not need any change.\n\nunit test failing capturing this - https://4a20f8a388c723c67628-521219da6460e3aa431901a795d35d09.ssl.cf2.rackcdn.com/openstack/1e04f176b6ee4fa4b04702cc556ad0a2/testr_results.html","commit_id":"153ed366b5b977da24a493dc98d00d0372d13748"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"c8761d27f4a163ea0652495f3a64f1f603540960","unresolved":false,"context_lines":[{"line_number":1224,"context_line":"rebuild_response_v296 \u003d copy.deepcopy(rebuild_response_v275)"},{"line_number":1225,"context_line":"rebuild_response_v296[\u0027properties\u0027][\u0027server\u0027][\u0027properties\u0027].update({"},{"line_number":1226,"context_line":"    \u0027pinned_availability_zone\u0027: {"},{"line_number":1227,"context_line":"        \u0027type\u0027: [\u0027null\u0027],"},{"line_number":1228,"context_line":"    },"},{"line_number":1229,"context_line":"})"},{"line_number":1230,"context_line":"rebuild_response_v296[\u0027properties\u0027][\u0027server\u0027][\u0027required\u0027].append("}],"source_content_type":"text/x-python","patch_set":12,"id":"4ba5e62e_4ef1b5d3","line":1227,"range":{"start_line":1227,"start_character":22,"end_line":1227,"end_character":25},"in_reply_to":"11d28881_1c084491","updated":"2025-04-04 08:08:27.000000000","message":"yeah, it\u0027s definitely true. My mind was sticked to this bug fix somehow. Thanks.","commit_id":"153ed366b5b977da24a493dc98d00d0372d13748"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4f2ec3f2242b149226188cd8558ca1b7d66f09ea","unresolved":true,"context_lines":[{"line_number":1224,"context_line":"rebuild_response_v296 \u003d copy.deepcopy(rebuild_response_v275)"},{"line_number":1225,"context_line":"rebuild_response_v296[\u0027properties\u0027][\u0027server\u0027][\u0027properties\u0027].update({"},{"line_number":1226,"context_line":"    \u0027pinned_availability_zone\u0027: {"},{"line_number":1227,"context_line":"        \u0027type\u0027: [\u0027null\u0027],"},{"line_number":1228,"context_line":"    },"},{"line_number":1229,"context_line":"})"},{"line_number":1230,"context_line":"rebuild_response_v296[\u0027properties\u0027][\u0027server\u0027][\u0027required\u0027].append("}],"source_content_type":"text/x-python","patch_set":12,"id":"11d28881_1c084491","line":1227,"range":{"start_line":1227,"start_character":22,"end_line":1227,"end_character":25},"in_reply_to":"720da2a9_f3de0f84","updated":"2025-04-03 17:30:23.000000000","message":"right my orgiall quetion was shoudl we keep \n\nhttps://review.opendev.org/c/openstack/nova/+/939658/12/nova/api/openstack/compute/views/servers.py#b228\n\nas \u0027\u0027 instead of None\n\nbfu string is still needed when we are pinned ot something as gmann says above.\n\nwe shoudl never be pinned to the empyt string so we have a choice aviabel to use wehn deciding how to model not pinned \n\nwe can use json\u0027s null type which is Python None or we can use the empty string.\n\nbut are valid but we need to allow string for the pinned case.","commit_id":"153ed366b5b977da24a493dc98d00d0372d13748"}],"nova/api/openstack/compute/views/servers.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"29fda1894f07ad992b2e4e722b48c20eff7117c1","unresolved":true,"context_lines":[{"line_number":517,"context_line":"        :returns: Server data in dictionary format"},{"line_number":518,"context_line":"        \"\"\""},{"line_number":519,"context_line":"        req_specs \u003d None"},{"line_number":520,"context_line":"        req_specs_dict \u003d collections.defaultdict(str)"},{"line_number":521,"context_line":"        if api_version_request.is_supported(request, min_version\u003d\u00272.96\u0027):"},{"line_number":522,"context_line":"            context \u003d request.environ[\u0027nova.context\u0027]"},{"line_number":523,"context_line":"            instance_uuids \u003d [s.uuid for s in servers]"}],"source_content_type":"text/x-python","patch_set":1,"id":"9ad3f2a0_06abab58","line":520,"updated":"2025-01-20 18:47:19.000000000","message":"i see so we initalise it here","commit_id":"4caec57a65a56e2e0ee7b0289ded8acecc4090a2"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"956650972653bcab0b6c225b27266a88f1d6fd9f","unresolved":false,"context_lines":[{"line_number":517,"context_line":"        :returns: Server data in dictionary format"},{"line_number":518,"context_line":"        \"\"\""},{"line_number":519,"context_line":"        req_specs \u003d None"},{"line_number":520,"context_line":"        req_specs_dict \u003d collections.defaultdict(str)"},{"line_number":521,"context_line":"        if api_version_request.is_supported(request, min_version\u003d\u00272.96\u0027):"},{"line_number":522,"context_line":"            context \u003d request.environ[\u0027nova.context\u0027]"},{"line_number":523,"context_line":"            instance_uuids \u003d [s.uuid for s in servers]"}],"source_content_type":"text/x-python","patch_set":1,"id":"49ae9d7d_287e45ec","line":520,"in_reply_to":"2f0a2adc_d870b2f4","updated":"2025-01-31 08:37:35.000000000","message":"Updated the code to return `null` in case of no request_spec object case, too.","commit_id":"4caec57a65a56e2e0ee7b0289ded8acecc4090a2"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"c4ed2b81e3a374cf4c36b43115a60365a5274e70","unresolved":false,"context_lines":[{"line_number":517,"context_line":"        :returns: Server data in dictionary format"},{"line_number":518,"context_line":"        \"\"\""},{"line_number":519,"context_line":"        req_specs \u003d None"},{"line_number":520,"context_line":"        req_specs_dict \u003d collections.defaultdict(str)"},{"line_number":521,"context_line":"        if api_version_request.is_supported(request, min_version\u003d\u00272.96\u0027):"},{"line_number":522,"context_line":"            context \u003d request.environ[\u0027nova.context\u0027]"},{"line_number":523,"context_line":"            instance_uuids \u003d [s.uuid for s in servers]"}],"source_content_type":"text/x-python","patch_set":1,"id":"93fc1c12_f92c86ce","line":520,"in_reply_to":"49ae9d7d_287e45ec","updated":"2025-01-31 08:44:48.000000000","message":"I added the one test case to verify the response body value is `null` in the both cases, without pinned_az case and no request_spec case.","commit_id":"4caec57a65a56e2e0ee7b0289ded8acecc4090a2"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"170e94bcab557f997fb8169474e26254934a2fb3","unresolved":true,"context_lines":[{"line_number":517,"context_line":"        :returns: Server data in dictionary format"},{"line_number":518,"context_line":"        \"\"\""},{"line_number":519,"context_line":"        req_specs \u003d None"},{"line_number":520,"context_line":"        req_specs_dict \u003d collections.defaultdict(str)"},{"line_number":521,"context_line":"        if api_version_request.is_supported(request, min_version\u003d\u00272.96\u0027):"},{"line_number":522,"context_line":"            context \u003d request.environ[\u0027nova.context\u0027]"},{"line_number":523,"context_line":"            instance_uuids \u003d [s.uuid for s in servers]"}],"source_content_type":"text/x-python","patch_set":1,"id":"caa606b3_d82a694e","line":520,"in_reply_to":"9ad3f2a0_06abab58","updated":"2025-01-29 08:47:15.000000000","message":"so the default dict(str) will make sure now that if no request spec is available for the instance then the API response will have\n\n```\n              \u0027pinned_availability_zone\u0027: \u0027\u0027,\n```\n\nThe original spec only used None in the example instead of \u0027\u0027, and I checked the current json output is null in the response if no pinning was requested. So this introduces a new possible value to the response. \n\n* I\u0027m wondering what is the good move here. The original spec did not described what is expected in case of no request spec found. The user might interpret \u0027\u0027 response as no pinning (i.e. same as null) but in this case this is not exactly no pinning.\n\n* Also I\u0027m wondering what will happen to that instance that has no request spec. Sure we should show them without HTTP 500, but I guess that instance will have problems in other future lifecycle operations as well. \n\n@masahito.muroi@linecorp.com could you please add a release note to the patch describing the fix and the new possible value for the field. Also I suggest to describe the two values null and \u0027\u0027 in the API reference.","commit_id":"4caec57a65a56e2e0ee7b0289ded8acecc4090a2"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"ae8c95038ca3927935de18332c2f18ffc78a01f3","unresolved":true,"context_lines":[{"line_number":517,"context_line":"        :returns: Server data in dictionary format"},{"line_number":518,"context_line":"        \"\"\""},{"line_number":519,"context_line":"        req_specs \u003d None"},{"line_number":520,"context_line":"        req_specs_dict \u003d collections.defaultdict(str)"},{"line_number":521,"context_line":"        if api_version_request.is_supported(request, min_version\u003d\u00272.96\u0027):"},{"line_number":522,"context_line":"            context \u003d request.environ[\u0027nova.context\u0027]"},{"line_number":523,"context_line":"            instance_uuids \u003d [s.uuid for s in servers]"}],"source_content_type":"text/x-python","patch_set":1,"id":"08991d8e_d49cf399","line":520,"in_reply_to":"caa606b3_d82a694e","updated":"2025-01-29 17:36:14.000000000","message":"Added the release note.\n\nI checked the response body pattern and I found the difference in the response among detail list API, show server API with/without request spec. The patchset 3 works same with the show server API case response body.\n\n- List Server API and List Server Detail API with request spec and no pinned az case : null\n- List Server API and List Server Detail API without request spec case: 500 error\n\n- Show Server API with request spec and no pinned_availability_zone case: null\n- Show Server API with no request spec case: \"\" (empty string)\n\nIf this patch requires to update the show server API case, I have idea to update the code to return `null` in the all above cases, so please feel free to comment.","commit_id":"4caec57a65a56e2e0ee7b0289ded8acecc4090a2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"92a21b8978f4286ed8646906daa45ca8b31023f5","unresolved":true,"context_lines":[{"line_number":517,"context_line":"        :returns: Server data in dictionary format"},{"line_number":518,"context_line":"        \"\"\""},{"line_number":519,"context_line":"        req_specs \u003d None"},{"line_number":520,"context_line":"        req_specs_dict \u003d collections.defaultdict(str)"},{"line_number":521,"context_line":"        if api_version_request.is_supported(request, min_version\u003d\u00272.96\u0027):"},{"line_number":522,"context_line":"            context \u003d request.environ[\u0027nova.context\u0027]"},{"line_number":523,"context_line":"            instance_uuids \u003d [s.uuid for s in servers]"}],"source_content_type":"text/x-python","patch_set":1,"id":"2f0a2adc_d870b2f4","line":520,"in_reply_to":"caa606b3_d82a694e","updated":"2025-01-29 18:06:23.000000000","message":"that is a good point\n\nwe also cant default to None so that it will render as \"null\"\nbecause  other filed might default to \"\"\n\nthe only time a instnace can exist without a request_sepc is before it scheduled.\n\nin which case we shoudl ahve a build_request. its never valid for an active instance ot not have one.\n\nonce its scheduled even if we put the instance in error and bury it in cell0 it should have a request spec.\n\nso only lifecycle operator that is valid on an instance without a request spec is delete.\n\n\ni think we can adress this in a more specific way \n\nso first  we dont want or need the default dict behavior.\n\n```suggestion\n        req_specs_dict \u003d {}\n```","commit_id":"4caec57a65a56e2e0ee7b0289ded8acecc4090a2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"29fda1894f07ad992b2e4e722b48c20eff7117c1","unresolved":true,"context_lines":[{"line_number":525,"context_line":"                    context, instance_uuids)"},{"line_number":526,"context_line":"            req_specs_dict.update({req.instance_uuid: req.availability_zone"},{"line_number":527,"context_line":"                                   for req in req_specs})"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"        server_list \u003d [func(request, server,"},{"line_number":530,"context_line":"                            show_extra_specs\u003dshow_extra_specs,"},{"line_number":531,"context_line":"                            show_extended_attr\u003dshow_extended_attr,"}],"source_content_type":"text/x-python","patch_set":1,"id":"af93a90b_975dbabe","line":528,"updated":"2025-01-20 18:47:19.000000000","message":"and prevciously we were redefinign it via the assignement here loosign the defaultign provideded by collections.defaultdict","commit_id":"4caec57a65a56e2e0ee7b0289ded8acecc4090a2"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"956650972653bcab0b6c225b27266a88f1d6fd9f","unresolved":false,"context_lines":[{"line_number":525,"context_line":"                    context, instance_uuids)"},{"line_number":526,"context_line":"            req_specs_dict.update({req.instance_uuid: req.availability_zone"},{"line_number":527,"context_line":"                                   for req in req_specs})"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"        server_list \u003d [func(request, server,"},{"line_number":530,"context_line":"                            show_extra_specs\u003dshow_extra_specs,"},{"line_number":531,"context_line":"                            show_extended_attr\u003dshow_extended_attr,"}],"source_content_type":"text/x-python","patch_set":1,"id":"970b195d_9594d478","line":528,"in_reply_to":"a6acd7eb_60083fc6","updated":"2025-01-31 08:37:35.000000000","message":"Updated the `req_specs_dict` as normal dict.","commit_id":"4caec57a65a56e2e0ee7b0289ded8acecc4090a2"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"15c48b199d7b9d75097559c6f3018373c759dc15","unresolved":true,"context_lines":[{"line_number":525,"context_line":"                    context, instance_uuids)"},{"line_number":526,"context_line":"            req_specs_dict.update({req.instance_uuid: req.availability_zone"},{"line_number":527,"context_line":"                                   for req in req_specs})"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"        server_list \u003d [func(request, server,"},{"line_number":530,"context_line":"                            show_extra_specs\u003dshow_extra_specs,"},{"line_number":531,"context_line":"                            show_extended_attr\u003dshow_extended_attr,"}],"source_content_type":"text/x-python","patch_set":1,"id":"bd8aff5d_77470352","line":528,"in_reply_to":"af93a90b_975dbabe","updated":"2025-01-21 01:13:16.000000000","message":"Yes. This causes API failure with the 500 error only if API request specifying microversion v2.96.","commit_id":"4caec57a65a56e2e0ee7b0289ded8acecc4090a2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"92a21b8978f4286ed8646906daa45ca8b31023f5","unresolved":true,"context_lines":[{"line_number":525,"context_line":"                    context, instance_uuids)"},{"line_number":526,"context_line":"            req_specs_dict.update({req.instance_uuid: req.availability_zone"},{"line_number":527,"context_line":"                                   for req in req_specs})"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"        server_list \u003d [func(request, server,"},{"line_number":530,"context_line":"                            show_extra_specs\u003dshow_extra_specs,"},{"line_number":531,"context_line":"                            show_extended_attr\u003dshow_extended_attr,"}],"source_content_type":"text/x-python","patch_set":1,"id":"a6acd7eb_60083fc6","line":528,"in_reply_to":"bd8aff5d_77470352","updated":"2025-01-29 18:06:23.000000000","message":"thinking about this more based on gibi\u0027s observation i think this is not the best fix for a few reasons.\n\nsets keep this line as it was orginally\n\n```\nreq_specs_dict \u003d {req.instance_uuid: req.availability_zone\n                              for req in req_specs}\n```","commit_id":"4caec57a65a56e2e0ee7b0289ded8acecc4090a2"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"92a21b8978f4286ed8646906daa45ca8b31023f5","unresolved":true,"context_lines":[{"line_number":526,"context_line":"            req_specs_dict.update({req.instance_uuid: req.availability_zone"},{"line_number":527,"context_line":"                                   for req in req_specs})"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"        server_list \u003d [func(request, server,"},{"line_number":530,"context_line":"                            show_extra_specs\u003dshow_extra_specs,"},{"line_number":531,"context_line":"                            show_extended_attr\u003dshow_extended_attr,"},{"line_number":532,"context_line":"                            show_host_status\u003dshow_host_status,"},{"line_number":533,"context_line":"                            show_sec_grp\u003dshow_sec_grp, bdms\u003dbdms,"},{"line_number":534,"context_line":"                            cell_down_support\u003dcell_down_support,"},{"line_number":535,"context_line":"                            provided_az\u003dreq_specs_dict[server.uuid])[\"server\"]"},{"line_number":536,"context_line":"                       for server in servers"},{"line_number":537,"context_line":"                       # Filter out the fake marker instance created by the"},{"line_number":538,"context_line":"                       # fill_virtual_interface_list online data migration."},{"line_number":539,"context_line":"                       if server.uuid !\u003d virtual_interface.FAKE_UUID]"},{"line_number":540,"context_line":"        servers_links \u003d self._get_collection_links(request,"},{"line_number":541,"context_line":"                                                   servers,"},{"line_number":542,"context_line":"                                                   coll_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"fe329bf6_c1e0d5d6","line":539,"range":{"start_line":529,"start_character":8,"end_line":539,"end_character":69},"updated":"2025-01-29 18:06:23.000000000","message":"and fix the bug here.\n\n```suggestion\n        server_list \u003d [\n            func(request, server,\n                 show_extra_specs\u003dshow_extra_specs,\n                 show_extended_attr\u003dshow_extended_attr,\n                 show_host_status\u003dshow_host_status,\n                 show_sec_grp\u003dshow_sec_grp, bdms\u003dbdms,\n                 cell_down_support\u003dcell_down_support,\n                 provided_az\u003dreq_specs_dict.get(server.uuid, None)[\"server\"]\n            for server in servers\n            # Filter out the fake marker instance created by the\n            # fill_virtual_interface_list online data migration.\n            if server.uuid !\u003d virtual_interface.FAKE_UUID]\n```\n\nby using get we shoudl be able to properly set this to none if we dont have a request spec or if the request spec does not have a pinning request.","commit_id":"7d6cabba74cdaf60e7bfb3cfdad2d8356efce327"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"956650972653bcab0b6c225b27266a88f1d6fd9f","unresolved":false,"context_lines":[{"line_number":526,"context_line":"            req_specs_dict.update({req.instance_uuid: req.availability_zone"},{"line_number":527,"context_line":"                                   for req in req_specs})"},{"line_number":528,"context_line":""},{"line_number":529,"context_line":"        server_list \u003d [func(request, server,"},{"line_number":530,"context_line":"                            show_extra_specs\u003dshow_extra_specs,"},{"line_number":531,"context_line":"                            show_extended_attr\u003dshow_extended_attr,"},{"line_number":532,"context_line":"                            show_host_status\u003dshow_host_status,"},{"line_number":533,"context_line":"                            show_sec_grp\u003dshow_sec_grp, bdms\u003dbdms,"},{"line_number":534,"context_line":"                            cell_down_support\u003dcell_down_support,"},{"line_number":535,"context_line":"                            provided_az\u003dreq_specs_dict[server.uuid])[\"server\"]"},{"line_number":536,"context_line":"                       for server in servers"},{"line_number":537,"context_line":"                       # Filter out the fake marker instance created by the"},{"line_number":538,"context_line":"                       # fill_virtual_interface_list online data migration."},{"line_number":539,"context_line":"                       if server.uuid !\u003d virtual_interface.FAKE_UUID]"},{"line_number":540,"context_line":"        servers_links \u003d self._get_collection_links(request,"},{"line_number":541,"context_line":"                                                   servers,"},{"line_number":542,"context_line":"                                                   coll_name)"}],"source_content_type":"text/x-python","patch_set":3,"id":"003b23d2_76438923","line":539,"range":{"start_line":529,"start_character":8,"end_line":539,"end_character":69},"in_reply_to":"fe329bf6_c1e0d5d6","updated":"2025-01-31 08:37:35.000000000","message":"Thank you for the suggested change.  I add small improvement to this suggestion.\n\nThe prefetching pinned az information using `get_by_instance_uuids` here is performance improvement by avoiding show() view builder method calling `get_by_instance_uuid` to all instance one by one.","commit_id":"7d6cabba74cdaf60e7bfb3cfdad2d8356efce327"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"de9cb13ce9cc43c4042d6b87078a6fc227d06c4d","unresolved":true,"context_lines":[{"line_number":219,"context_line":"        return unknown_only"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def _get_pinned_az(self, context, instance, provided_az):"},{"line_number":222,"context_line":"        if provided_az is False:"},{"line_number":223,"context_line":"            # Case the provided_az is pre fetched, but not specified"},{"line_number":224,"context_line":"            pinned_az \u003d None"},{"line_number":225,"context_line":"        elif provided_az is not None:"}],"source_content_type":"text/x-python","patch_set":6,"id":"ce19994b_9fcb8d02","line":222,"updated":"2025-02-21 04:08:00.000000000","message":"we chatted about this on irc a bit \n\nthis is a very specific test using False as a sentenal value outside the starad set\n\nbefore this patch the data type of provided_az\nwas union[None|str] or an OPTIONAL[str]\n\nwith this change its expanded to union[None|False|str]\n\nFalse is being used as an addtiona sentenial outside the allowable set fo values of str\n\nthis is why this if is doing an is check and not an equalty check.","commit_id":"8c31eb2b00dc11f066a125d2c3b65b0515e6ff00"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"529fc42e979724f02c3216b48a33447ca7f1e34c","unresolved":false,"context_lines":[{"line_number":219,"context_line":"        return unknown_only"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"    def _get_pinned_az(self, context, instance, provided_az):"},{"line_number":222,"context_line":"        if provided_az is False:"},{"line_number":223,"context_line":"            # Case the provided_az is pre fetched, but not specified"},{"line_number":224,"context_line":"            pinned_az \u003d None"},{"line_number":225,"context_line":"        elif provided_az is not None:"}],"source_content_type":"text/x-python","patch_set":6,"id":"073ddc75_81a1a47f","line":222,"in_reply_to":"ce19994b_9fcb8d02","updated":"2025-02-21 04:10:28.000000000","message":"Acknowledged","commit_id":"8c31eb2b00dc11f066a125d2c3b65b0515e6ff00"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"de9cb13ce9cc43c4042d6b87078a6fc227d06c4d","unresolved":true,"context_lines":[{"line_number":241,"context_line":"             show_keypair\u003dTrue, show_srv_usg\u003dTrue, show_sec_grp\u003dTrue,"},{"line_number":242,"context_line":"             show_extended_status\u003dTrue, show_extended_volumes\u003dTrue,"},{"line_number":243,"context_line":"             bdms\u003dNone, cell_down_support\u003dFalse, show_server_groups\u003dFalse,"},{"line_number":244,"context_line":"             show_user_data\u003dTrue, provided_az\u003dNone):"},{"line_number":245,"context_line":"        \"\"\"Detailed view of a single instance.\"\"\""},{"line_number":246,"context_line":"        if show_extra_specs is None:"},{"line_number":247,"context_line":"            # detail will pre-calculate this for us. If we\u0027re doing show,"}],"source_content_type":"text/x-python","patch_set":6,"id":"e0017a3d_8436138a","line":244,"updated":"2025-02-21 04:08:00.000000000","message":"None is passed into _get_pinned_az when it not prefectec\n\nin which case we need ot looks it up form the request spec in line 231","commit_id":"8c31eb2b00dc11f066a125d2c3b65b0515e6ff00"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"529fc42e979724f02c3216b48a33447ca7f1e34c","unresolved":false,"context_lines":[{"line_number":241,"context_line":"             show_keypair\u003dTrue, show_srv_usg\u003dTrue, show_sec_grp\u003dTrue,"},{"line_number":242,"context_line":"             show_extended_status\u003dTrue, show_extended_volumes\u003dTrue,"},{"line_number":243,"context_line":"             bdms\u003dNone, cell_down_support\u003dFalse, show_server_groups\u003dFalse,"},{"line_number":244,"context_line":"             show_user_data\u003dTrue, provided_az\u003dNone):"},{"line_number":245,"context_line":"        \"\"\"Detailed view of a single instance.\"\"\""},{"line_number":246,"context_line":"        if show_extra_specs is None:"},{"line_number":247,"context_line":"            # detail will pre-calculate this for us. If we\u0027re doing show,"}],"source_content_type":"text/x-python","patch_set":6,"id":"875d42c4_83caf3e4","line":244,"in_reply_to":"e0017a3d_8436138a","updated":"2025-02-21 04:10:28.000000000","message":"Acknowledged","commit_id":"8c31eb2b00dc11f066a125d2c3b65b0515e6ff00"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"de9cb13ce9cc43c4042d6b87078a6fc227d06c4d","unresolved":true,"context_lines":[{"line_number":536,"context_line":"                 show_host_status\u003dshow_host_status,"},{"line_number":537,"context_line":"                 show_sec_grp\u003dshow_sec_grp, bdms\u003dbdms,"},{"line_number":538,"context_line":"                 cell_down_support\u003dcell_down_support,"},{"line_number":539,"context_line":"                 provided_az\u003dreq_specs_dict.get(server.uuid, False))[\"server\"]"},{"line_number":540,"context_line":"            for server in servers"},{"line_number":541,"context_line":"            # Filter out the fake marker instance created by the"},{"line_number":542,"context_line":"            # fill_virtual_interface_list online data migration."}],"source_content_type":"text/x-python","patch_set":6,"id":"346954be_f355fcdd","line":539,"updated":"2025-02-21 04:08:00.000000000","message":"False is used as a sentinel to indcate that the isntace is not pinned.\n\nwe discussed we coudl make this clear by using the sential object pattern\n\nhttps://python-patterns.guide/python/sentinel-object/#sentinel-objects","commit_id":"8c31eb2b00dc11f066a125d2c3b65b0515e6ff00"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"529fc42e979724f02c3216b48a33447ca7f1e34c","unresolved":false,"context_lines":[{"line_number":536,"context_line":"                 show_host_status\u003dshow_host_status,"},{"line_number":537,"context_line":"                 show_sec_grp\u003dshow_sec_grp, bdms\u003dbdms,"},{"line_number":538,"context_line":"                 cell_down_support\u003dcell_down_support,"},{"line_number":539,"context_line":"                 provided_az\u003dreq_specs_dict.get(server.uuid, False))[\"server\"]"},{"line_number":540,"context_line":"            for server in servers"},{"line_number":541,"context_line":"            # Filter out the fake marker instance created by the"},{"line_number":542,"context_line":"            # fill_virtual_interface_list online data migration."}],"source_content_type":"text/x-python","patch_set":6,"id":"b5e9e876_68d8a151","line":539,"in_reply_to":"346954be_f355fcdd","updated":"2025-02-21 04:10:28.000000000","message":"Done","commit_id":"8c31eb2b00dc11f066a125d2c3b65b0515e6ff00"}],"nova/tests/unit/api/openstack/compute/test_servers.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"29fda1894f07ad992b2e4e722b48c20eff7117c1","unresolved":true,"context_lines":[{"line_number":8410,"context_line":"        self.assertThat(output, matchers.DictMatches(expected))"},{"line_number":8411,"context_line":""},{"line_number":8412,"context_line":""},{"line_number":8413,"context_line":"class ServersViewBuilderTestV296(_ServersViewBuilderTest):"},{"line_number":8414,"context_line":"    \"\"\"Server ViewBuilder test for microversion 2.96"},{"line_number":8415,"context_line":""},{"line_number":8416,"context_line":"    The test targets of this class is regression test for bugs"}],"source_content_type":"text/x-python","patch_set":1,"id":"79fdeaa0_97ff0501","line":8413,"updated":"2025-01-20 18:47:19.000000000","message":"we gernerally prefer to have 2 pathces per bugfix.\n\nwhere a bug is repoducable consitienty ideally yoru first patch woudl add\na test demonstrating the bug and the second path that fixes the but woudl update it.\n\ncould you add a second patch before this in the series showing the 500 that was returned before? then it will be self evident that this change which woudl be on top fixes the issue without introducing another regressions or unexpected change in behvior.","commit_id":"4caec57a65a56e2e0ee7b0289ded8acecc4090a2"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"15c48b199d7b9d75097559c6f3018373c759dc15","unresolved":false,"context_lines":[{"line_number":8410,"context_line":"        self.assertThat(output, matchers.DictMatches(expected))"},{"line_number":8411,"context_line":""},{"line_number":8412,"context_line":""},{"line_number":8413,"context_line":"class ServersViewBuilderTestV296(_ServersViewBuilderTest):"},{"line_number":8414,"context_line":"    \"\"\"Server ViewBuilder test for microversion 2.96"},{"line_number":8415,"context_line":""},{"line_number":8416,"context_line":"    The test targets of this class is regression test for bugs"}],"source_content_type":"text/x-python","patch_set":1,"id":"2f04e580_c5ea82ac","line":8413,"in_reply_to":"79fdeaa0_97ff0501","updated":"2025-01-21 01:13:16.000000000","message":"It makes sense to me. Done.\n\nThe two patches are pushed to the gerrit as a related chain.\n\n1. Bug reproduce commit: https://review.opendev.org/c/openstack/nova/+/939673\n2. This bug fix patch: https://review.opendev.org/c/openstack/nova/+/939658","commit_id":"4caec57a65a56e2e0ee7b0289ded8acecc4090a2"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a4dbc30e6e75af7223192b001e531cc904e007c8","unresolved":true,"context_lines":[{"line_number":8497,"context_line":"                         output[\u0027servers\u0027][0][\u0027pinned_availability_zone\u0027])"},{"line_number":8498,"context_line":"        # second or later has no pinned az"},{"line_number":8499,"context_line":"        for s in output[\u0027servers\u0027][1:]:"},{"line_number":8500,"context_line":"            self.assertIsNone(s[\u0027pinned_availability_zone\u0027])"},{"line_number":8501,"context_line":""},{"line_number":8502,"context_line":""},{"line_number":8503,"context_line":"class ServersViewBuilderTestV2100(_ServersViewBuilderTest):"}],"source_content_type":"text/x-python","patch_set":10,"id":"e288ef6b_324a9fb8","line":8500,"range":{"start_line":8500,"start_character":59,"end_line":8500,"end_character":60},"updated":"2025-04-02 22:04:48.000000000","message":"let\u0027s add similar test cases (instance1- has req spec with pinned AZ, instance2 - no pinned AZ, instance3- no request spec) for the show method also which will cover SHOW, UPDATE, REBUILD APIs response.\n\nI know this change fix the List API 500 error but as we are touiching the common code used by SHOW method also and its coverage also missing, it will be good to make sure no regression in SHOW method output.","commit_id":"c1f7b564250e832bf1f4ba9b7e6462c46e33a414"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"a5bf63bf3f067ec3da44dd3c425c0d146352976f","unresolved":false,"context_lines":[{"line_number":8497,"context_line":"                         output[\u0027servers\u0027][0][\u0027pinned_availability_zone\u0027])"},{"line_number":8498,"context_line":"        # second or later has no pinned az"},{"line_number":8499,"context_line":"        for s in output[\u0027servers\u0027][1:]:"},{"line_number":8500,"context_line":"            self.assertIsNone(s[\u0027pinned_availability_zone\u0027])"},{"line_number":8501,"context_line":""},{"line_number":8502,"context_line":""},{"line_number":8503,"context_line":"class ServersViewBuilderTestV2100(_ServersViewBuilderTest):"}],"source_content_type":"text/x-python","patch_set":10,"id":"f02f018e_87842f86","line":8500,"range":{"start_line":8500,"start_character":59,"end_line":8500,"end_character":60},"in_reply_to":"e288ef6b_324a9fb8","updated":"2025-04-03 09:17:02.000000000","message":"Done","commit_id":"c1f7b564250e832bf1f4ba9b7e6462c46e33a414"}],"releasenotes/notes/bug-2095364-ffbf67c0ae3f53b5.yaml":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"de9cb13ce9cc43c4042d6b87078a6fc227d06c4d","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    one or more instance has no request spec object. One usecase was when cloud"},{"line_number":7,"context_line":"    user tried to create instance which exceeded their quota, the request"},{"line_number":8,"context_line":"    created no request spec instance. After the operation, the user couldn\u0027t"},{"line_number":9,"context_line":"    call the 2 API due to the bug. The v2.96 or later returns `null` at the"},{"line_number":10,"context_line":"    `pinned_availability_zone` value if not specified."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    .. _Bug #2095364: https://launchpad.net/bugs/2095364"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"5e7d334f_a4c64012","line":9,"range":{"start_line":9,"start_character":13,"end_line":9,"end_character":14},"updated":"2025-02-21 04:08:00.000000000","message":"delete or 2.96","commit_id":"8c31eb2b00dc11f066a125d2c3b65b0515e6ff00"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"9bef5e4cb0105f0e73f20d07a22b525efb18dddc","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    one or more instance has no request spec object. One usecase was when cloud"},{"line_number":7,"context_line":"    user tried to create instance which exceeded their quota, the request"},{"line_number":8,"context_line":"    created no request spec instance. After the operation, the user couldn\u0027t"},{"line_number":9,"context_line":"    call the 2 API due to the bug. The v2.96 or later returns `null` at the"},{"line_number":10,"context_line":"    `pinned_availability_zone` value if not specified."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    .. _Bug #2095364: https://launchpad.net/bugs/2095364"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"c4f289dc_f34dc512","line":9,"range":{"start_line":9,"start_character":13,"end_line":9,"end_character":14},"in_reply_to":"30d64b25_d5042a7b","updated":"2025-02-21 04:16:51.000000000","message":"ah, I meant it two API, list and list details. If it confuses others, I\u0027ll remove the 2.","commit_id":"8c31eb2b00dc11f066a125d2c3b65b0515e6ff00"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"529fc42e979724f02c3216b48a33447ca7f1e34c","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    one or more instance has no request spec object. One usecase was when cloud"},{"line_number":7,"context_line":"    user tried to create instance which exceeded their quota, the request"},{"line_number":8,"context_line":"    created no request spec instance. After the operation, the user couldn\u0027t"},{"line_number":9,"context_line":"    call the 2 API due to the bug. The v2.96 or later returns `null` at the"},{"line_number":10,"context_line":"    `pinned_availability_zone` value if not specified."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    .. _Bug #2095364: https://launchpad.net/bugs/2095364"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"30d64b25_d5042a7b","line":9,"range":{"start_line":9,"start_character":13,"end_line":9,"end_character":14},"in_reply_to":"5e7d334f_a4c64012","updated":"2025-02-21 04:10:28.000000000","message":"this is a nit","commit_id":"8c31eb2b00dc11f066a125d2c3b65b0515e6ff00"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"a4e4f9279a26f44421b8335c88fdcf8d3e5bc166","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    one or more instance has no request spec object. One usecase was when cloud"},{"line_number":7,"context_line":"    user tried to create instance which exceeded their quota, the request"},{"line_number":8,"context_line":"    created no request spec instance. After the operation, the user couldn\u0027t"},{"line_number":9,"context_line":"    call the 2 API due to the bug. The v2.96 or later returns `null` at the"},{"line_number":10,"context_line":"    `pinned_availability_zone` value if not specified."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    .. _Bug #2095364: https://launchpad.net/bugs/2095364"}],"source_content_type":"text/x-yaml","patch_set":6,"id":"91de25e0_d92339b0","line":9,"range":{"start_line":9,"start_character":13,"end_line":9,"end_character":14},"in_reply_to":"c4f289dc_f34dc512","updated":"2025-03-07 01:24:23.000000000","message":"Done","commit_id":"8c31eb2b00dc11f066a125d2c3b65b0515e6ff00"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"347d27352ae53f5cae939129edcd87cda7597e1b","unresolved":true,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    `Bug #2095364`_: Fixed the List Server API and the List Server Detail API"},{"line_number":5,"context_line":"    500 Internal Server Error issue in v2.96 or later micro API ver version if"},{"line_number":6,"context_line":"    one or more instance has no request spec object. One usecase was when cloud"},{"line_number":7,"context_line":"    user tried to create instance which exceeded their quota, the request"},{"line_number":8,"context_line":"    created no request spec instance. After the operation, the user couldn\u0027t"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"f85db71f_514fbd15","line":5,"range":{"start_line":5,"start_character":63,"end_line":5,"end_character":67},"updated":"2025-03-05 16:30:09.000000000","message":"nit: \u0027ver\u0027","commit_id":"1e1626ad5d29fd39725a4a3b0f2184da6f068896"},{"author":{"_account_id":20733,"name":"Rajesh Tailor","email":"ratailor@redhat.com","username":"rajesht"},"change_message_id":"7a9e9e91c981ef9d3cb39e6b2cd11d71b1ebb7c6","unresolved":true,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    `Bug #2095364`_: Fixed the List Server API and the List Server Detail API"},{"line_number":5,"context_line":"    500 Internal Server Error issue in v2.96 or later micro API ver version if"},{"line_number":6,"context_line":"    one or more instance has no request spec object. One usecase was when cloud"},{"line_number":7,"context_line":"    user tried to create instance which exceeded their quota, the request"},{"line_number":8,"context_line":"    created no request spec instance. After the operation, the user couldn\u0027t"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"b48d1172_e5f583dd","line":5,"range":{"start_line":5,"start_character":54,"end_line":5,"end_character":75},"updated":"2025-03-05 16:22:17.000000000","message":"nit: please replace this with \u0027API microversion\u0027.","commit_id":"1e1626ad5d29fd39725a4a3b0f2184da6f068896"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"a4e4f9279a26f44421b8335c88fdcf8d3e5bc166","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    `Bug #2095364`_: Fixed the List Server API and the List Server Detail API"},{"line_number":5,"context_line":"    500 Internal Server Error issue in v2.96 or later micro API ver version if"},{"line_number":6,"context_line":"    one or more instance has no request spec object. One usecase was when cloud"},{"line_number":7,"context_line":"    user tried to create instance which exceeded their quota, the request"},{"line_number":8,"context_line":"    created no request spec instance. After the operation, the user couldn\u0027t"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"13720277_82d881c0","line":5,"range":{"start_line":5,"start_character":54,"end_line":5,"end_character":75},"in_reply_to":"b48d1172_e5f583dd","updated":"2025-03-07 01:24:23.000000000","message":"Done","commit_id":"1e1626ad5d29fd39725a4a3b0f2184da6f068896"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"a4e4f9279a26f44421b8335c88fdcf8d3e5bc166","unresolved":false,"context_lines":[{"line_number":2,"context_line":"fixes:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    `Bug #2095364`_: Fixed the List Server API and the List Server Detail API"},{"line_number":5,"context_line":"    500 Internal Server Error issue in v2.96 or later micro API ver version if"},{"line_number":6,"context_line":"    one or more instance has no request spec object. One usecase was when cloud"},{"line_number":7,"context_line":"    user tried to create instance which exceeded their quota, the request"},{"line_number":8,"context_line":"    created no request spec instance. After the operation, the user couldn\u0027t"}],"source_content_type":"text/x-yaml","patch_set":8,"id":"2b30a297_8b6ca1b4","line":5,"range":{"start_line":5,"start_character":63,"end_line":5,"end_character":67},"in_reply_to":"f85db71f_514fbd15","updated":"2025-03-07 01:24:23.000000000","message":"Done","commit_id":"1e1626ad5d29fd39725a4a3b0f2184da6f068896"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a4dbc30e6e75af7223192b001e531cc904e007c8","unresolved":true,"context_lines":[{"line_number":4,"context_line":"    `Bug #2095364`_: Fixed the List Server API and the List Server Detail API"},{"line_number":5,"context_line":"    500 Internal Server Error issue in v2.96 or later API microversion if"},{"line_number":6,"context_line":"    one or more instance has no request spec object. One usecase was when cloud"},{"line_number":7,"context_line":"    user tried to create instance which exceeded their quota, the request"},{"line_number":8,"context_line":"    created no request spec instance. After the operation, the user couldn\u0027t"},{"line_number":9,"context_line":"    call the API due to the bug. The v2.96 or later returns `null` at the"},{"line_number":10,"context_line":"    `pinned_availability_zone` value if not specified."},{"line_number":11,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":10,"id":"3de83c11_9cf72aeb","line":8,"range":{"start_line":7,"start_character":62,"end_line":8,"end_character":36},"updated":"2025-04-02 22:04:48.000000000","message":"s/the request created no request spec instance./the request does not create instance request spec.","commit_id":"c1f7b564250e832bf1f4ba9b7e6462c46e33a414"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"a5bf63bf3f067ec3da44dd3c425c0d146352976f","unresolved":false,"context_lines":[{"line_number":4,"context_line":"    `Bug #2095364`_: Fixed the List Server API and the List Server Detail API"},{"line_number":5,"context_line":"    500 Internal Server Error issue in v2.96 or later API microversion if"},{"line_number":6,"context_line":"    one or more instance has no request spec object. One usecase was when cloud"},{"line_number":7,"context_line":"    user tried to create instance which exceeded their quota, the request"},{"line_number":8,"context_line":"    created no request spec instance. After the operation, the user couldn\u0027t"},{"line_number":9,"context_line":"    call the API due to the bug. The v2.96 or later returns `null` at the"},{"line_number":10,"context_line":"    `pinned_availability_zone` value if not specified."},{"line_number":11,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":10,"id":"04bf8db4_5686b23b","line":8,"range":{"start_line":7,"start_character":62,"end_line":8,"end_character":36},"in_reply_to":"3de83c11_9cf72aeb","updated":"2025-04-03 09:17:02.000000000","message":"Done","commit_id":"c1f7b564250e832bf1f4ba9b7e6462c46e33a414"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a4dbc30e6e75af7223192b001e531cc904e007c8","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    one or more instance has no request spec object. One usecase was when cloud"},{"line_number":7,"context_line":"    user tried to create instance which exceeded their quota, the request"},{"line_number":8,"context_line":"    created no request spec instance. After the operation, the user couldn\u0027t"},{"line_number":9,"context_line":"    call the API due to the bug. The v2.96 or later returns `null` at the"},{"line_number":10,"context_line":"    `pinned_availability_zone` value if not specified."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    .. _Bug #2095364: https://launchpad.net/bugs/2095364"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"66637d5a_69b2ac0d","line":9,"range":{"start_line":9,"start_character":33,"end_line":9,"end_character":36},"updated":"2025-04-02 22:04:48.000000000","message":"After this fix, the v2.96 or later........","commit_id":"c1f7b564250e832bf1f4ba9b7e6462c46e33a414"},{"author":{"_account_id":8556,"name":"Ghanshyam Maan","display_name":"Ghanshyam Maan","email":"gmaan.os14@gmail.com","username":"ghanshyam"},"change_message_id":"a4dbc30e6e75af7223192b001e531cc904e007c8","unresolved":true,"context_lines":[{"line_number":5,"context_line":"    500 Internal Server Error issue in v2.96 or later API microversion if"},{"line_number":6,"context_line":"    one or more instance has no request spec object. One usecase was when cloud"},{"line_number":7,"context_line":"    user tried to create instance which exceeded their quota, the request"},{"line_number":8,"context_line":"    created no request spec instance. After the operation, the user couldn\u0027t"},{"line_number":9,"context_line":"    call the API due to the bug. The v2.96 or later returns `null` at the"},{"line_number":10,"context_line":"    `pinned_availability_zone` value if not specified."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    .. _Bug #2095364: https://launchpad.net/bugs/2095364"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"60e0fc77_662b9c73","line":9,"range":{"start_line":8,"start_character":38,"end_line":9,"end_character":32},"updated":"2025-04-02 22:04:48.000000000","message":"I could not get this completely. what exactly you mean by \u0027user couldn\u0027t call the API\u0027? There is 500 error but is any API/other operation is blocked for users to call once this requsest is 500?","commit_id":"c1f7b564250e832bf1f4ba9b7e6462c46e33a414"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"a5bf63bf3f067ec3da44dd3c425c0d146352976f","unresolved":false,"context_lines":[{"line_number":5,"context_line":"    500 Internal Server Error issue in v2.96 or later API microversion if"},{"line_number":6,"context_line":"    one or more instance has no request spec object. One usecase was when cloud"},{"line_number":7,"context_line":"    user tried to create instance which exceeded their quota, the request"},{"line_number":8,"context_line":"    created no request spec instance. After the operation, the user couldn\u0027t"},{"line_number":9,"context_line":"    call the API due to the bug. The v2.96 or later returns `null` at the"},{"line_number":10,"context_line":"    `pinned_availability_zone` value if not specified."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    .. _Bug #2095364: https://launchpad.net/bugs/2095364"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"d96ce068_75080e0c","line":9,"range":{"start_line":8,"start_character":38,"end_line":9,"end_character":32},"in_reply_to":"60e0fc77_662b9c73","updated":"2025-04-03 09:17:02.000000000","message":"I meant to after creating no request spec instance, the list api returns 500. Rephrased.","commit_id":"c1f7b564250e832bf1f4ba9b7e6462c46e33a414"},{"author":{"_account_id":8878,"name":"Masahito Muroi","email":"masahito.muroi@linecorp.com","username":"masa"},"change_message_id":"a5bf63bf3f067ec3da44dd3c425c0d146352976f","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    one or more instance has no request spec object. One usecase was when cloud"},{"line_number":7,"context_line":"    user tried to create instance which exceeded their quota, the request"},{"line_number":8,"context_line":"    created no request spec instance. After the operation, the user couldn\u0027t"},{"line_number":9,"context_line":"    call the API due to the bug. The v2.96 or later returns `null` at the"},{"line_number":10,"context_line":"    `pinned_availability_zone` value if not specified."},{"line_number":11,"context_line":""},{"line_number":12,"context_line":"    .. _Bug #2095364: https://launchpad.net/bugs/2095364"}],"source_content_type":"text/x-yaml","patch_set":10,"id":"11079d54_338beeb4","line":9,"range":{"start_line":9,"start_character":33,"end_line":9,"end_character":36},"in_reply_to":"66637d5a_69b2ac0d","updated":"2025-04-03 09:17:02.000000000","message":"Done","commit_id":"c1f7b564250e832bf1f4ba9b7e6462c46e33a414"}]}
