)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"b2f037bfef139aa609cb7b01d09bf097f6ce0e90","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"9db72f4c_a2f97460","updated":"2022-08-06 07:47:44.000000000","message":"Nova API Reference should be updated.\n\nhttps://docs.openstack.org/api-ref/compute/","commit_id":"440b679421406a437fd4a6f63734ca20a326f2b5"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"84222d5f8f3085851e3e121829f63dc47c219a2b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":9,"id":"43e9a5e9_2dda2aa9","in_reply_to":"6376eada_2476ea8d","updated":"2023-02-08 12:56:31.000000000","message":"Done","commit_id":"440b679421406a437fd4a6f63734ca20a326f2b5"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2c2a5120d8c2b828a511689db916fef3a54e9dfd","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":9,"id":"6376eada_2476ea8d","in_reply_to":"9db72f4c_a2f97460","updated":"2022-09-14 13:32:01.000000000","message":"Of course. I\u0027m just waiting to have enough distance to write it correctly.","commit_id":"440b679421406a437fd4a6f63734ca20a326f2b5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b6abb7ec4aae650b2223c8c4a2ca6537b728207b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"c00dbf9d_2da83ef5","updated":"2023-01-25 18:03:29.000000000","message":"I have couple of requests inline","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b7912971c2da15791a09fabacecc627af082d8eb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":21,"id":"30ecfe0f_ab4fe459","updated":"2023-01-25 18:07:32.000000000","message":"One more thing. As this is the patch that enables the feature for the end user it would be nice to have the release notes about the feature part of this patch.","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7b6b4bd7cb2c4e60d7f16d61d5e48c825b07e8c3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"8557b730_929e5e10","updated":"2023-03-13 15:23:20.000000000","message":"Just a quick note.","commit_id":"b9b235977bbd8618b9d0cb329bbb7e239dcdb087"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"b37a0840180fec033871b39e131905042b201d71","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":27,"id":"93e7fa68_406f24a1","updated":"2023-03-08 14:54:28.000000000","message":"recheck","commit_id":"b9b235977bbd8618b9d0cb329bbb7e239dcdb087"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"521db50b429e2c2b1b8141cefc6b283bebc71e33","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":56,"id":"bcf66649_a04bccf3","updated":"2024-07-17 14:21:49.000000000","message":"I found a misleading error message returned to the user when an instance is not found.","commit_id":"8c41f9d4ae843f7dea24781d55ac50475a374dfd"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7df8be62caaae01272655033490d553579c54775","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":56,"id":"93d1a25f_1e414f51","updated":"2024-07-02 11:47:42.000000000","message":"only a small refactoring nit remains.","commit_id":"8c41f9d4ae843f7dea24781d55ac50475a374dfd"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"a3c7c40e918a14f5b618eb1e6a11bc936c59aac5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":57,"id":"66772b63_05fccdd0","updated":"2024-07-31 14:21:26.000000000","message":"I don\u0027t see where you modify the API reference for explaining the new parameters. You created JSON examples, that\u0027s cool but you also need to update the servers refpage.","commit_id":"9fb400751274336e13389923fee21b1a997447b9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eedc7d3806df51ba7d46e83a56330b2ad1dbc39e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":57,"id":"4160a62f_0e25bfec","updated":"2024-08-05 15:19:27.000000000","message":"two more error cases that needs to be handled","commit_id":"9fb400751274336e13389923fee21b1a997447b9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8a531b1311f1690eabc81cbcafd0778b91e56667","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":59,"id":"ffb2872f_bb9bb4c1","updated":"2024-08-28 13:39:54.000000000","message":"I can still reproduce on of the previously reported bugs about share in error.","commit_id":"2d20726b7fbf320141994e75775faf064a73850e"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"91cf73ffe93bf3a2b52546d3366a799e90adee5e","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":59,"id":"7d0dff3a_167a9a8a","updated":"2024-08-28 12:37:38.000000000","message":"restating my -1 since I continue to not see the right API reference for the new parameters.","commit_id":"2d20726b7fbf320141994e75775faf064a73850e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8a531b1311f1690eabc81cbcafd0778b91e56667","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":59,"id":"a3aebb68_6b051e28","in_reply_to":"7d0dff3a_167a9a8a","updated":"2024-08-28 13:39:54.000000000","message":"https://review.opendev.org/c/openstack/nova/+/871642/41 I think this has the API doc","commit_id":"2d20726b7fbf320141994e75775faf064a73850e"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"1349a11bbd00171f63c6b305cba87452bd5bf36d","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":59,"id":"cd8b00ed_d024728d","in_reply_to":"a3aebb68_6b051e28","updated":"2024-09-25 13:25:42.000000000","message":"API-ref documentation is now attached to this patch, as discussed.","commit_id":"2d20726b7fbf320141994e75775faf064a73850e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"29e34c152e91bfa9e92bef30467e5805eedb805a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":64,"id":"bf93de6a_00f264ab","updated":"2024-10-11 12:07:00.000000000","message":"couple of doc suggestions and a small issue of error message.","commit_id":"cc3ff16d82cb522b39fe74bf9337c2e52587b71a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2d6ec393b725b3a1e2ce8112e5db225e056314da","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":65,"id":"86cd6bad_461cf452","updated":"2024-11-04 12:08:23.000000000","message":"not supported protocol now returns a proper error message:\n```\n{\"conflictingRequest\": {\"code\": 409, \"message\": \"Share protocol CIFS is not supported.\"}}\n```","commit_id":"01ef9a3bec8da722efe85984479de1671d0070a4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"51ac8ae56b1a27b255362119a4da145a498341ea","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":65,"id":"4b1987f4_2835e269","updated":"2024-11-05 13:16:02.000000000","message":"recent changes looks good but small nits from PS64 remains.","commit_id":"01ef9a3bec8da722efe85984479de1671d0070a4"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ab03949cf6ee576b73997477bf8b04b9b09aacdf","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":66,"id":"12f3415f_9a1090fb","updated":"2024-11-19 14:00:22.000000000","message":"+2 with a sake of awaiting rene\u0027s last patch revision that will drop the comment","commit_id":"06c81c36bf22dbd129dcb6bf99b5b01ad600d2ed"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c0865e7d401af1d5bffaefbf8a8c85e65d44a76c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":66,"id":"29490569_78214847","updated":"2024-11-19 14:03:43.000000000","message":"FWIW, even if the api-ref job failed, the issue is unrelated and the preview site shows that the doc is fine.\nhttps://storage.bhs.cloud.ovh.net/v1/AUTH_dcaab5e32b234d56b626f72581e3644c/zuul_opendev_logs_d25/836830/66/check/build-openstack-api-ref/d250a5c/docs/#servers-with-shares-attachments-servers-shares","commit_id":"06c81c36bf22dbd129dcb6bf99b5b01ad600d2ed"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"55684220f2848ff70311452b21989000d9a4d5e5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":66,"id":"d2f0b00d_6e282ac6","updated":"2024-11-15 10:43:34.000000000","message":"My original doc comments have been fixed. The change to not allow tag update via POST looks good to me.\n\nI see two nits in the test changes. I won\u0027t hold the series up for those. Please either fix them here and ask me to add +2, or propose a follow up patch top of the series with the fix and ask me to upgrade my +1 to +2.","commit_id":"06c81c36bf22dbd129dcb6bf99b5b01ad600d2ed"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2959e8651ae6aa5ebf6d7d62205b0ada68f36a65","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":67,"id":"6eeeef16_623c6714","updated":"2024-11-20 15:08:23.000000000","message":"Thanks for fixing my nits. Still looks good.","commit_id":"738e91905c505c62d92ca6d83c95dad1d308fad3"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6aa2dbb4480bd8fb8e4c2298d8ba3d1a9b1bd11a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":67,"id":"351072e5_fc1f899e","updated":"2024-11-21 09:27:20.000000000","message":"thanks for the fix\n\nfwiw, we have a os-api-ref issue that\u0027s fixed in https://review.opendev.org/c/openstack/releases/+/934416","commit_id":"738e91905c505c62d92ca6d83c95dad1d308fad3"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"c32b1b50af25e3ed2126a96db29a09d39384e7f4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":69,"id":"6eec7a5d_d8f3bffc","updated":"2024-11-21 21:29:33.000000000","message":"Late LGTM. Thanks Rene!","commit_id":"cd89638592809c490c329e96d88e8db636b6293f"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"4311e31b0d1023dd6715cb8122d578dfc01e5126","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":70,"id":"595e5f5e_1cd80fe2","updated":"2024-11-26 09:03:26.000000000","message":"René, please update this patch given Stephen\u0027s point.","commit_id":"4397861bdd3156ae414e7cac6ca5f0760659f551"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d6cd76414ec04443849371ee71be7aad6b2037e7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":70,"id":"47832131_b36acda4","updated":"2024-11-23 09:20:17.000000000","message":"recheck POST_FAILURE\n```\nHost key for 104.130.253.237 has changed and you have requested strict checking.\n```","commit_id":"4397861bdd3156ae414e7cac6ca5f0760659f551"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"1dfa1d4e9513dc0aad42aeb328ca6e2db321c660","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":71,"id":"6a9e8e92_f400a2b2","updated":"2024-11-27 15:07:59.000000000","message":"(also, sticking to +1 since I haven\u0027t reviewed everything and I expect gibi to come back to this)","commit_id":"5e508a09b392130813d543b6f121129ffc1ce7f9"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1e8267dc14a8caa86804f145278d39c7e99fe825","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":71,"id":"646b1f28_9c2dbb27","updated":"2024-11-27 13:59:18.000000000","message":"I\u0027m now OK","commit_id":"5e508a09b392130813d543b6f121129ffc1ce7f9"},{"author":{"_account_id":29632,"name":"Carlos Eduardo","email":"ces.eduardo98@gmail.com","username":"silvacarlos"},"change_message_id":"94f12915c6fb0165b2f3956aea6728e98023b562","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":71,"id":"123ec2b3_0ff22573","updated":"2024-11-28 17:30:36.000000000","message":"LGTM, thank you!","commit_id":"5e508a09b392130813d543b6f121129ffc1ce7f9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2e8ef5b923912d9ed4b0eea16d9cc55e45838858","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":71,"id":"551a4cf1_e2585b7a","updated":"2024-11-28 08:57:37.000000000","message":"Still looks good to me. @rene.ribaud@gmail.com please push a follow up fixing the nits top of the series.","commit_id":"5e508a09b392130813d543b6f121129ffc1ce7f9"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"236a196fcb0c8c09102640fca0c8165a90de1177","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":71,"id":"82e0179f_3cd09a64","updated":"2024-12-06 17:29:09.000000000","message":"recheck https://review.opendev.org/885751 is merged now","commit_id":"5e508a09b392130813d543b6f121129ffc1ce7f9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"21e064cf318ae3ec17d8ca7557ae8fa75d1477ad","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":71,"id":"6573ffe7_a7f78e9b","updated":"2024-12-06 12:12:00.000000000","message":"recheck parent merged","commit_id":"5e508a09b392130813d543b6f121129ffc1ce7f9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f5c5e50d36d89053ac5760a5b72af38273c07dce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":71,"id":"3df922e5_e8ebed32","updated":"2024-11-27 15:07:34.000000000","message":"some minor nits but nothing significant enough to warrant a respin, I suspect.","commit_id":"5e508a09b392130813d543b6f121129ffc1ce7f9"}],"api-ref/source/os-server-shares.inc":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"29e34c152e91bfa9e92bef30467e5805eedb805a","unresolved":true,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"Error response codes: badRequest(400), forbidden(403), itemNotFound(404), conflict(409)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":".. note:: This action is only valid when the server is in ``STOPPED`` state."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"Request"}],"source_content_type":"text/x-c++src","patch_set":64,"id":"f51fdbad_2b0512c1","line":149,"updated":"2024-10-11 12:07:00.000000000","message":"Can we detach a share if the VM is in ERROR?","commit_id":"cc3ff16d82cb522b39fe74bf9337c2e52587b71a"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"6bdfc19e37a3422ce8640decdb8e3cb2325ec57b","unresolved":false,"context_lines":[{"line_number":146,"context_line":""},{"line_number":147,"context_line":"Error response codes: badRequest(400), forbidden(403), itemNotFound(404), conflict(409)"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":".. note:: This action is only valid when the server is in ``STOPPED`` state."},{"line_number":150,"context_line":""},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"Request"}],"source_content_type":"text/x-c++src","patch_set":64,"id":"fb5b5108_118547a8","line":149,"in_reply_to":"f51fdbad_2b0512c1","updated":"2024-11-13 20:38:27.000000000","message":"Yes, I have added the ERROR state too.","commit_id":"cc3ff16d82cb522b39fe74bf9337c2e52587b71a"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"29e34c152e91bfa9e92bef30467e5805eedb805a","unresolved":true,"context_lines":[{"line_number":6836,"context_line":"  type: string"},{"line_number":6837,"context_line":"share_status_body:"},{"line_number":6838,"context_line":"  description: |"},{"line_number":6839,"context_line":"    The status of the share."},{"line_number":6840,"context_line":"  in: body"},{"line_number":6841,"context_line":"  required: true"},{"line_number":6842,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"c4d03bae_b4d18869","line":6839,"updated":"2024-10-11 12:07:00.000000000","message":"You could add a bit more explaining that what attaching, detaching, inactive, active, error means.","commit_id":"cc3ff16d82cb522b39fe74bf9337c2e52587b71a"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"6bdfc19e37a3422ce8640decdb8e3cb2325ec57b","unresolved":false,"context_lines":[{"line_number":6836,"context_line":"  type: string"},{"line_number":6837,"context_line":"share_status_body:"},{"line_number":6838,"context_line":"  description: |"},{"line_number":6839,"context_line":"    The status of the share."},{"line_number":6840,"context_line":"  in: body"},{"line_number":6841,"context_line":"  required: true"},{"line_number":6842,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"3be7a6d2_0ee9b1e6","line":6839,"in_reply_to":"c4d03bae_b4d18869","updated":"2024-11-13 20:38:27.000000000","message":"Done","commit_id":"cc3ff16d82cb522b39fe74bf9337c2e52587b71a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"29e34c152e91bfa9e92bef30467e5805eedb805a","unresolved":true,"context_lines":[{"line_number":6842,"context_line":"  type: string"},{"line_number":6843,"context_line":"share_tag_body:"},{"line_number":6844,"context_line":"  description: |"},{"line_number":6845,"context_line":"    The device tag to be used by users to mount the share within the instance."},{"line_number":6846,"context_line":"  in: body"},{"line_number":6847,"context_line":"  required: true"},{"line_number":6848,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"0a2bc691_d30c65ab","line":6845,"updated":"2024-10-11 12:07:00.000000000","message":"if not provided then the share UUID will be used automatically.","commit_id":"cc3ff16d82cb522b39fe74bf9337c2e52587b71a"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"6bdfc19e37a3422ce8640decdb8e3cb2325ec57b","unresolved":false,"context_lines":[{"line_number":6842,"context_line":"  type: string"},{"line_number":6843,"context_line":"share_tag_body:"},{"line_number":6844,"context_line":"  description: |"},{"line_number":6845,"context_line":"    The device tag to be used by users to mount the share within the instance."},{"line_number":6846,"context_line":"  in: body"},{"line_number":6847,"context_line":"  required: true"},{"line_number":6848,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":64,"id":"d1177708_46d1ef65","line":6845,"in_reply_to":"0a2bc691_d30c65ab","updated":"2024-11-13 20:38:27.000000000","message":"Done","commit_id":"cc3ff16d82cb522b39fe74bf9337c2e52587b71a"}],"nova/api/openstack/api_version_request.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"b2f037bfef139aa609cb7b01d09bf097f6ce0e90","unresolved":true,"context_lines":[{"line_number":262,"context_line":"# Note(cyeoh): This only applies for the v2.1 API once microversions"},{"line_number":263,"context_line":"# support is fully merged. It does not affect the V2 API."},{"line_number":264,"context_line":"_MIN_API_VERSION \u003d \u00272.1\u0027"},{"line_number":265,"context_line":"_MAX_API_VERSION \u003d \u00272.92\u0027"},{"line_number":266,"context_line":"DEFAULT_API_VERSION \u003d _MIN_API_VERSION"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"# Almost all proxy APIs which are related to network, images and baremetal"}],"source_content_type":"text/x-python","patch_set":9,"id":"1b687c9a_bf15ed6f","line":265,"range":{"start_line":265,"start_character":20,"end_line":265,"end_character":24},"updated":"2022-08-06 07:47:44.000000000","message":"2.93","commit_id":"440b679421406a437fd4a6f63734ca20a326f2b5"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2c2a5120d8c2b828a511689db916fef3a54e9dfd","unresolved":true,"context_lines":[{"line_number":262,"context_line":"# Note(cyeoh): This only applies for the v2.1 API once microversions"},{"line_number":263,"context_line":"# support is fully merged. It does not affect the V2 API."},{"line_number":264,"context_line":"_MIN_API_VERSION \u003d \u00272.1\u0027"},{"line_number":265,"context_line":"_MAX_API_VERSION \u003d \u00272.92\u0027"},{"line_number":266,"context_line":"DEFAULT_API_VERSION \u003d _MIN_API_VERSION"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"# Almost all proxy APIs which are related to network, images and baremetal"}],"source_content_type":"text/x-python","patch_set":9,"id":"82223d72_9656b8a2","line":265,"range":{"start_line":265,"start_character":20,"end_line":265,"end_character":24},"in_reply_to":"1b687c9a_bf15ed6f","updated":"2022-09-14 13:32:01.000000000","message":"This is in a next patch. But as the microversion to use is not fully defined this is a \"change\" pending.","commit_id":"440b679421406a437fd4a6f63734ca20a326f2b5"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"84222d5f8f3085851e3e121829f63dc47c219a2b","unresolved":false,"context_lines":[{"line_number":262,"context_line":"# Note(cyeoh): This only applies for the v2.1 API once microversions"},{"line_number":263,"context_line":"# support is fully merged. It does not affect the V2 API."},{"line_number":264,"context_line":"_MIN_API_VERSION \u003d \u00272.1\u0027"},{"line_number":265,"context_line":"_MAX_API_VERSION \u003d \u00272.92\u0027"},{"line_number":266,"context_line":"DEFAULT_API_VERSION \u003d _MIN_API_VERSION"},{"line_number":267,"context_line":""},{"line_number":268,"context_line":"# Almost all proxy APIs which are related to network, images and baremetal"}],"source_content_type":"text/x-python","patch_set":9,"id":"84057e82_568af7b2","line":265,"range":{"start_line":265,"start_character":20,"end_line":265,"end_character":24},"in_reply_to":"82223d72_9656b8a2","updated":"2023-02-08 12:56:31.000000000","message":"Done","commit_id":"440b679421406a437fd4a6f63734ca20a326f2b5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b6abb7ec4aae650b2223c8c4a2ca6537b728207b","unresolved":true,"context_lines":[{"line_number":254,"context_line":"             in keypair name."},{"line_number":255,"context_line":"    * 2.93 - Add support for volume backed server rebuild."},{"line_number":256,"context_line":"    * 2.94 - Allow FQDN in server hostname."},{"line_number":257,"context_line":"    * 2.95 - Adds new API ``GET /servers/{server_id}/shares`` which shows"},{"line_number":258,"context_line":"             shares attachements of a given server."},{"line_number":259,"context_line":"\"\"\""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":21,"id":"df24d745_c2c7bd5e","line":258,"range":{"start_line":257,"start_character":13,"end_line":258,"end_character":51},"updated":"2023-01-25 18:03:29.000000000","message":"this adds a lot more than only GET of shares, 2.95 allows creating and deleting shares as well.","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2e035ab116d8e1c12242d7c04255c4f679c11df2","unresolved":false,"context_lines":[{"line_number":254,"context_line":"             in keypair name."},{"line_number":255,"context_line":"    * 2.93 - Add support for volume backed server rebuild."},{"line_number":256,"context_line":"    * 2.94 - Allow FQDN in server hostname."},{"line_number":257,"context_line":"    * 2.95 - Adds new API ``GET /servers/{server_id}/shares`` which shows"},{"line_number":258,"context_line":"             shares attachements of a given server."},{"line_number":259,"context_line":"\"\"\""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":21,"id":"b94a8e43_c1eec9c7","line":258,"range":{"start_line":257,"start_character":13,"end_line":258,"end_character":51},"in_reply_to":"2588ee5c_128ab412","updated":"2023-02-08 14:31:02.000000000","message":"It seems it is done now.","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"8c88a5412e4aa84b1f6548a4bed92604dd43bbe2","unresolved":true,"context_lines":[{"line_number":254,"context_line":"             in keypair name."},{"line_number":255,"context_line":"    * 2.93 - Add support for volume backed server rebuild."},{"line_number":256,"context_line":"    * 2.94 - Allow FQDN in server hostname."},{"line_number":257,"context_line":"    * 2.95 - Adds new API ``GET /servers/{server_id}/shares`` which shows"},{"line_number":258,"context_line":"             shares attachements of a given server."},{"line_number":259,"context_line":"\"\"\""},{"line_number":260,"context_line":""},{"line_number":261,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":21,"id":"2588ee5c_128ab412","line":258,"range":{"start_line":257,"start_character":13,"end_line":258,"end_character":51},"in_reply_to":"df24d745_c2c7bd5e","updated":"2023-01-30 10:16:11.000000000","message":"I have left the doc and \"microversion\" update in the 2 latest patches on top of the series. My goal was to squash these 2 patches in the API one as soon as the microversion will be defined.\nSo for this description, you will find:\n    * 2.95 - Adds new API ``GET /servers/{server_id}/shares`` which shows\n             shares attachements of a given server.\n             ``GET /servers/{server_id}/shares/{share_id} which gives details\n             about a share attachement.\n             ``POST /servers/{server_id}/shares/{share_id} which create an\n             attachement.\n             ``DELETE /servers/{server_id}/shares/{share_id} which delete an\n             attachement.\n\nI thought it would have been more convenient to separate the doc and microversion update to keep this patch smaller.\nBut maybe I\u0027m wrong, so please let me know if you want me to squash these patches.","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"}],"nova/api/openstack/compute/migrate_server.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"fd422c9a377e25f6524798601f7d7399e768f5b7","unresolved":true,"context_lines":[{"line_number":82,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":83,"context_line":"        except ("},{"line_number":84,"context_line":"            exception.ForbiddenSharesNotSupported,"},{"line_number":85,"context_line":"            exception.ForbiddenWithShare) as e:"},{"line_number":86,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @wsgi.response(202)"}],"source_content_type":"text/x-python","patch_set":54,"id":"f6dd2403_51b3f0dc","line":85,"updated":"2024-06-18 12:27:19.000000000","message":"nit: here and in other api files in this change. please break the line before \u0027)\u0027 so that the raise and the list of exception are visually separated.\n\n```\n        except (\n            exception.ForbiddenSharesNotSupported,\n            exception.ForbiddenWithShare\n        ) as e:\n            raise exc.HTTPConflict(explanation\u003de.format_message())\n```","commit_id":"67ede2764220742a58bf958c07b75b45bb6a4d0c"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"946d0c5c51849c632de584a1e0d2212b0fba171f","unresolved":false,"context_lines":[{"line_number":82,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":83,"context_line":"        except ("},{"line_number":84,"context_line":"            exception.ForbiddenSharesNotSupported,"},{"line_number":85,"context_line":"            exception.ForbiddenWithShare) as e:"},{"line_number":86,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"},{"line_number":87,"context_line":""},{"line_number":88,"context_line":"    @wsgi.response(202)"}],"source_content_type":"text/x-python","patch_set":54,"id":"c02cc59c_676c7c8d","line":85,"in_reply_to":"f6dd2403_51b3f0dc","updated":"2024-06-20 08:24:16.000000000","message":"Done","commit_id":"67ede2764220742a58bf958c07b75b45bb6a4d0c"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"fd422c9a377e25f6524798601f7d7399e768f5b7","unresolved":true,"context_lines":[{"line_number":161,"context_line":"        except ("},{"line_number":162,"context_line":"            exception.ForbiddenSharesNotSupported,"},{"line_number":163,"context_line":"            exception.ForbiddenWithShare) as e:"},{"line_number":164,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def _get_force_param_for_live_migration(self, body, host):"},{"line_number":167,"context_line":"        force \u003d body[\"os-migrateLive\"].get(\"force\", False)"}],"source_content_type":"text/x-python","patch_set":54,"id":"4a99fe7d_8c7b260f","line":164,"updated":"2024-06-18 12:27:19.000000000","message":"ditto","commit_id":"67ede2764220742a58bf958c07b75b45bb6a4d0c"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"946d0c5c51849c632de584a1e0d2212b0fba171f","unresolved":false,"context_lines":[{"line_number":161,"context_line":"        except ("},{"line_number":162,"context_line":"            exception.ForbiddenSharesNotSupported,"},{"line_number":163,"context_line":"            exception.ForbiddenWithShare) as e:"},{"line_number":164,"context_line":"            raise exc.HTTPConflict(explanation\u003de.format_message())"},{"line_number":165,"context_line":""},{"line_number":166,"context_line":"    def _get_force_param_for_live_migration(self, body, host):"},{"line_number":167,"context_line":"        force \u003d body[\"os-migrateLive\"].get(\"force\", False)"}],"source_content_type":"text/x-python","patch_set":54,"id":"1a98739a_6f0a4ff6","line":164,"in_reply_to":"4a99fe7d_8c7b260f","updated":"2024-06-20 08:24:16.000000000","message":"Done","commit_id":"67ede2764220742a58bf958c07b75b45bb6a4d0c"}],"nova/api/openstack/compute/rest_api_version_history.rst":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"b2f037bfef139aa609cb7b01d09bf097f6ce0e90","unresolved":true,"context_lines":[{"line_number":1220,"context_line":"The ``POST /os-keypairs`` API now forbids to generate a keypair and allows new"},{"line_number":1221,"context_line":"safe characters, specifically \u0027@\u0027 and \u0027.\u0027 (dot character)."},{"line_number":1222,"context_line":""},{"line_number":1223,"context_line":".. _microversion 2.92:"},{"line_number":1224,"context_line":""},{"line_number":1225,"context_line":"2.93"},{"line_number":1226,"context_line":"----"}],"source_content_type":"text/x-rst","patch_set":9,"id":"01417f50_3aae2cf9","line":1223,"range":{"start_line":1223,"start_character":17,"end_line":1223,"end_character":21},"updated":"2022-08-06 07:47:44.000000000","message":"2.93","commit_id":"440b679421406a437fd4a6f63734ca20a326f2b5"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"ffda336a9a68c1b8ef9fd935bf6d2be05ce2ceb6","unresolved":false,"context_lines":[{"line_number":1220,"context_line":"The ``POST /os-keypairs`` API now forbids to generate a keypair and allows new"},{"line_number":1221,"context_line":"safe characters, specifically \u0027@\u0027 and \u0027.\u0027 (dot character)."},{"line_number":1222,"context_line":""},{"line_number":1223,"context_line":".. _microversion 2.92:"},{"line_number":1224,"context_line":""},{"line_number":1225,"context_line":"2.93"},{"line_number":1226,"context_line":"----"}],"source_content_type":"text/x-rst","patch_set":9,"id":"e00d1110_058b9f38","line":1223,"range":{"start_line":1223,"start_character":17,"end_line":1223,"end_character":21},"in_reply_to":"01417f50_3aae2cf9","updated":"2023-02-02 17:25:26.000000000","message":"Done","commit_id":"440b679421406a437fd4a6f63734ca20a326f2b5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ab1b4aa40f1dd8ed9b8e14b40e35da4fac707371","unresolved":true,"context_lines":[{"line_number":1225,"context_line":"2.93"},{"line_number":1226,"context_line":"----"},{"line_number":1227,"context_line":""},{"line_number":1228,"context_line":"Blabla"}],"source_content_type":"text/x-rst","patch_set":10,"id":"9a33748d_ce8dc83c","line":1228,"updated":"2022-08-26 12:44:20.000000000","message":";)","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"8c88a5412e4aa84b1f6548a4bed92604dd43bbe2","unresolved":true,"context_lines":[{"line_number":1225,"context_line":"2.93"},{"line_number":1226,"context_line":"----"},{"line_number":1227,"context_line":""},{"line_number":1228,"context_line":"Blabla"}],"source_content_type":"text/x-rst","patch_set":10,"id":"38671734_82f62ad4","line":1228,"in_reply_to":"0501cab2_821c3b01","updated":"2023-01-30 10:16:11.000000000","message":"Same reason as #258","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"973fe8e4fc2df66874dc35c87938c8ca919de637","unresolved":true,"context_lines":[{"line_number":1225,"context_line":"2.93"},{"line_number":1226,"context_line":"----"},{"line_number":1227,"context_line":""},{"line_number":1228,"context_line":"Blabla"}],"source_content_type":"text/x-rst","patch_set":10,"id":"e5fd836c_783ef6f5","line":1228,"in_reply_to":"38671734_82f62ad4","updated":"2024-01-30 12:40:43.000000000","message":"this is still unfilled.","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b6abb7ec4aae650b2223c8c4a2ca6537b728207b","unresolved":true,"context_lines":[{"line_number":1225,"context_line":"2.93"},{"line_number":1226,"context_line":"----"},{"line_number":1227,"context_line":""},{"line_number":1228,"context_line":"Blabla"}],"source_content_type":"text/x-rst","patch_set":10,"id":"0501cab2_821c3b01","line":1228,"in_reply_to":"9a33748d_ce8dc83c","updated":"2023-01-25 18:03:29.000000000","message":"This is still not filled","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2dc229817a00997931167e7971d31db1424f609c","unresolved":true,"context_lines":[{"line_number":1225,"context_line":"2.93"},{"line_number":1226,"context_line":"----"},{"line_number":1227,"context_line":""},{"line_number":1228,"context_line":"Blabla"}],"source_content_type":"text/x-rst","patch_set":10,"id":"c0001355_ed3c7db3","line":1228,"in_reply_to":"a84c49e8_36608a53","updated":"2024-02-19 17:09:56.000000000","message":"then please drop the placeholder from here as well","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"dec74d7a3f61aed89aaed12fcc14e787c497c11e","unresolved":false,"context_lines":[{"line_number":1225,"context_line":"2.93"},{"line_number":1226,"context_line":"----"},{"line_number":1227,"context_line":""},{"line_number":1228,"context_line":"Blabla"}],"source_content_type":"text/x-rst","patch_set":10,"id":"166bcd2a_81bdc117","line":1228,"in_reply_to":"c0001355_ed3c7db3","updated":"2024-02-28 13:50:03.000000000","message":"Done","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"1d37ecd85d5d2387e2fdb2f59b7fb4448677f831","unresolved":true,"context_lines":[{"line_number":1225,"context_line":"2.93"},{"line_number":1226,"context_line":"----"},{"line_number":1227,"context_line":""},{"line_number":1228,"context_line":"Blabla"}],"source_content_type":"text/x-rst","patch_set":10,"id":"a84c49e8_36608a53","line":1228,"in_reply_to":"e5fd836c_783ef6f5","updated":"2024-02-16 16:20:24.000000000","message":"All the docs are in a separate commit (latest one) in order to make this patch a bit smaller.","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"973fe8e4fc2df66874dc35c87938c8ca919de637","unresolved":true,"context_lines":[{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":".. _microversion 2.92:"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"2.93"},{"line_number":1218,"context_line":"----"},{"line_number":1219,"context_line":""},{"line_number":1220,"context_line":"The ``POST /os-keypairs`` API now forbids to generate a keypair and allows new"}],"source_content_type":"text/x-rst","patch_set":42,"id":"25ca8477_6f155d4d","line":1217,"updated":"2024-01-30 12:40:43.000000000","message":"why?","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2dc229817a00997931167e7971d31db1424f609c","unresolved":true,"context_lines":[{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":".. _microversion 2.92:"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"2.93"},{"line_number":1218,"context_line":"----"},{"line_number":1219,"context_line":""},{"line_number":1220,"context_line":"The ``POST /os-keypairs`` API now forbids to generate a keypair and allows new"}],"source_content_type":"text/x-rst","patch_set":42,"id":"7fc699ff_b304b220","line":1217,"in_reply_to":"10af1150_f56361cc","updated":"2024-02-19 17:09:56.000000000","message":"my question here is why did you renumbered the already merged microversion","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"1d37ecd85d5d2387e2fdb2f59b7fb4448677f831","unresolved":true,"context_lines":[{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":".. _microversion 2.92:"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"2.93"},{"line_number":1218,"context_line":"----"},{"line_number":1219,"context_line":""},{"line_number":1220,"context_line":"The ``POST /os-keypairs`` API now forbids to generate a keypair and allows new"}],"source_content_type":"text/x-rst","patch_set":42,"id":"10af1150_f56361cc","line":1217,"in_reply_to":"25ca8477_6f155d4d","updated":"2024-02-16 16:20:24.000000000","message":"My intention here is to wait until the last moment to update it. Because I have already changed this number too many times for nothing and it is boring.","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"dec74d7a3f61aed89aaed12fcc14e787c497c11e","unresolved":false,"context_lines":[{"line_number":1214,"context_line":""},{"line_number":1215,"context_line":".. _microversion 2.92:"},{"line_number":1216,"context_line":""},{"line_number":1217,"context_line":"2.93"},{"line_number":1218,"context_line":"----"},{"line_number":1219,"context_line":""},{"line_number":1220,"context_line":"The ``POST /os-keypairs`` API now forbids to generate a keypair and allows new"}],"source_content_type":"text/x-rst","patch_set":42,"id":"0970d882_2fd320cc","line":1217,"in_reply_to":"7fc699ff_b304b220","updated":"2024-02-28 13:50:03.000000000","message":"Done","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"29e34c152e91bfa9e92bef30467e5805eedb805a","unresolved":true,"context_lines":[{"line_number":1267,"context_line":"display shares. For detailed insights and usage instructions, please refer"},{"line_number":1268,"context_line":"to the `manage-shares documentation`_."},{"line_number":1269,"context_line":""},{"line_number":1270,"context_line":".. _manage-shares documentation: https://docs.openstack.org/nova/latest/admin/manage-shares.html"}],"source_content_type":"text/x-rst","patch_set":64,"id":"c788845f_428e8d2c","line":1270,"updated":"2024-10-11 12:07:00.000000000","message":"this will be a dead link until the corresponding patch lands, but that is OK to me.","commit_id":"cc3ff16d82cb522b39fe74bf9337c2e52587b71a"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"6bdfc19e37a3422ce8640decdb8e3cb2325ec57b","unresolved":false,"context_lines":[{"line_number":1267,"context_line":"display shares. For detailed insights and usage instructions, please refer"},{"line_number":1268,"context_line":"to the `manage-shares documentation`_."},{"line_number":1269,"context_line":""},{"line_number":1270,"context_line":".. _manage-shares documentation: https://docs.openstack.org/nova/latest/admin/manage-shares.html"}],"source_content_type":"text/x-rst","patch_set":64,"id":"6d2da9db_35bc8dac","line":1270,"in_reply_to":"c788845f_428e8d2c","updated":"2024-11-13 20:38:27.000000000","message":"Acknowledged","commit_id":"cc3ff16d82cb522b39fe74bf9337c2e52587b71a"}],"nova/api/openstack/compute/schemas/server_shares.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b6abb7ec4aae650b2223c8c4a2ca6537b728207b","unresolved":true,"context_lines":[{"line_number":22,"context_line":"            \u0027tag\u0027: parameter_types.share_tag,"},{"line_number":23,"context_line":"        }"},{"line_number":24,"context_line":"    },"},{"line_number":25,"context_line":"    \u0027required\u0027: [\u0027share\u0027],"},{"line_number":26,"context_line":"    \u0027additionalProperties\u0027: False"},{"line_number":27,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":21,"id":"2335518e_a349db4d","line":25,"updated":"2023-01-25 18:03:29.000000000","message":"Does this enforce that shareId is required in share? (tag is optional I know)","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"fd405445ca8d612ba90e9a03831f81c686c70d46","unresolved":true,"context_lines":[{"line_number":22,"context_line":"            \u0027tag\u0027: parameter_types.share_tag,"},{"line_number":23,"context_line":"        }"},{"line_number":24,"context_line":"    },"},{"line_number":25,"context_line":"    \u0027required\u0027: [\u0027share\u0027],"},{"line_number":26,"context_line":"    \u0027additionalProperties\u0027: False"},{"line_number":27,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":21,"id":"c8339fa8_1c40c84c","line":25,"in_reply_to":"22fa6469_ee97cbff","updated":"2023-02-08 13:06:54.000000000","message":"I tried it with www.jsonschemavalidator.net.\nshare is required ( { \u0027share\u0027: ... }\nbut neither shareId nor tag are required.\n\nI\u0027m gonna have a look to enforce shareId","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"8c88a5412e4aa84b1f6548a4bed92604dd43bbe2","unresolved":true,"context_lines":[{"line_number":22,"context_line":"            \u0027tag\u0027: parameter_types.share_tag,"},{"line_number":23,"context_line":"        }"},{"line_number":24,"context_line":"    },"},{"line_number":25,"context_line":"    \u0027required\u0027: [\u0027share\u0027],"},{"line_number":26,"context_line":"    \u0027additionalProperties\u0027: False"},{"line_number":27,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":21,"id":"22fa6469_ee97cbff","line":25,"in_reply_to":"2335518e_a349db4d","updated":"2023-01-30 10:16:11.000000000","message":"Yes, I think so. But you have just given me a doubt.","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"acdb251f1322ab9bc55c3e7206464ad6e2f70f05","unresolved":false,"context_lines":[{"line_number":22,"context_line":"            \u0027tag\u0027: parameter_types.share_tag,"},{"line_number":23,"context_line":"        }"},{"line_number":24,"context_line":"    },"},{"line_number":25,"context_line":"    \u0027required\u0027: [\u0027share\u0027],"},{"line_number":26,"context_line":"    \u0027additionalProperties\u0027: False"},{"line_number":27,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":21,"id":"4be81458_297eb315","line":25,"in_reply_to":"c8339fa8_1c40c84c","updated":"2023-02-08 14:08:17.000000000","message":"Done","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2e035ab116d8e1c12242d7c04255c4f679c11df2","unresolved":true,"context_lines":[{"line_number":22,"context_line":"            \u0027tag\u0027: parameter_types.share_tag,"},{"line_number":23,"context_line":"        }"},{"line_number":24,"context_line":"    },"},{"line_number":25,"context_line":"    \u0027required\u0027: [\u0027share\u0027],"},{"line_number":26,"context_line":"    \u0027additionalProperties\u0027: False"},{"line_number":27,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":21,"id":"f73b6dec_41e5d1d1","line":25,"in_reply_to":"c8339fa8_1c40c84c","updated":"2023-02-08 14:31:02.000000000","message":"I think you need something like:\n\n```\n{\n  \"type\": \"object\",\n  \"properties\": {\n    \"share\": {\n      \"type\": \"object\",\n      \"properties\":{\n\t\"shareId\": ...\n    \t\"tag\": ...\n      },\n      \"required\": [\"shareId\"],\n      \"additionalProperties\": false,\n    },\n  },\n  \"required\": [\"share\"],\n  \"additionalProperties\": false,\n}\n```\n\nto make the \"shareId\" required.","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"50cf7955d71cb7d8d4c963317b850bc65c18c793","unresolved":false,"context_lines":[{"line_number":22,"context_line":"            \u0027tag\u0027: parameter_types.share_tag,"},{"line_number":23,"context_line":"        }"},{"line_number":24,"context_line":"    },"},{"line_number":25,"context_line":"    \u0027required\u0027: [\u0027share\u0027],"},{"line_number":26,"context_line":"    \u0027additionalProperties\u0027: False"},{"line_number":27,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":21,"id":"069a3e39_53bb26b0","line":25,"in_reply_to":"f73b6dec_41e5d1d1","updated":"2023-03-06 10:17:56.000000000","message":"Done","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2e035ab116d8e1c12242d7c04255c4f679c11df2","unresolved":true,"context_lines":[{"line_number":24,"context_line":"    },"},{"line_number":25,"context_line":"    \u0027required\u0027: [\u0027share\u0027],"},{"line_number":26,"context_line":"    \u0027additionalProperties\u0027: False"},{"line_number":27,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":24,"id":"f5409344_7462e1e0","line":27,"updated":"2023-02-08 14:31:02.000000000","message":"I think this is still not correct. See my reply in PS21","commit_id":"9212beed32618f424e014c58c1e323ef5a2dc4a2"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"50cf7955d71cb7d8d4c963317b850bc65c18c793","unresolved":false,"context_lines":[{"line_number":24,"context_line":"    },"},{"line_number":25,"context_line":"    \u0027required\u0027: [\u0027share\u0027],"},{"line_number":26,"context_line":"    \u0027additionalProperties\u0027: False"},{"line_number":27,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":24,"id":"ceaa4910_94a76168","line":27,"in_reply_to":"f5409344_7462e1e0","updated":"2023-03-06 10:17:56.000000000","message":"Done","commit_id":"9212beed32618f424e014c58c1e323ef5a2dc4a2"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b5420d2bc7d055df88cd961886fcd3bfc310606","unresolved":true,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"index_query \u003d {"},{"line_number":34,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":35,"context_line":"    \u0027properties\u0027: {},"},{"line_number":36,"context_line":"}"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"show_query \u003d {"}],"source_content_type":"text/x-python","patch_set":70,"id":"eac58917_fb43e72c","line":35,"updated":"2024-11-25 14:55:48.000000000","message":"This is missing `additionalProperties`:\n\n```\n\u0027additionalProperties\u0027: False,\n```","commit_id":"4397861bdd3156ae414e7cac6ca5f0760659f551"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"a26ed90858309c5d9d9418e670ac20f10a95e4ba","unresolved":false,"context_lines":[{"line_number":32,"context_line":""},{"line_number":33,"context_line":"index_query \u003d {"},{"line_number":34,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":35,"context_line":"    \u0027properties\u0027: {},"},{"line_number":36,"context_line":"}"},{"line_number":37,"context_line":""},{"line_number":38,"context_line":"show_query \u003d {"}],"source_content_type":"text/x-python","patch_set":70,"id":"03635b21_67f8c8cb","line":35,"in_reply_to":"eac58917_fb43e72c","updated":"2024-11-27 13:41:16.000000000","message":"Done","commit_id":"4397861bdd3156ae414e7cac6ca5f0760659f551"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b5420d2bc7d055df88cd961886fcd3bfc310606","unresolved":true,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"show_query \u003d {"},{"line_number":39,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":40,"context_line":"    \u0027properties\u0027: {},"},{"line_number":41,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":70,"id":"d46e81c1_746725aa","line":40,"updated":"2024-11-25 14:55:48.000000000","message":"ditto","commit_id":"4397861bdd3156ae414e7cac6ca5f0760659f551"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"a26ed90858309c5d9d9418e670ac20f10a95e4ba","unresolved":false,"context_lines":[{"line_number":37,"context_line":""},{"line_number":38,"context_line":"show_query \u003d {"},{"line_number":39,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":40,"context_line":"    \u0027properties\u0027: {},"},{"line_number":41,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":70,"id":"da5f28c2_ee6d638a","line":40,"in_reply_to":"d46e81c1_746725aa","updated":"2024-11-27 13:41:16.000000000","message":"Done","commit_id":"4397861bdd3156ae414e7cac6ca5f0760659f551"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"9b5420d2bc7d055df88cd961886fcd3bfc310606","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":70,"id":"b6bc5f42_0c8371e4","line":42,"updated":"2024-11-25 14:55:48.000000000","message":"Optionally, it would be good to add response body schemas here. It will avoid me doing this and should be relatively trivial, given you don\u0027t have multiple microversions to worry about.","commit_id":"4397861bdd3156ae414e7cac6ca5f0760659f551"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"a26ed90858309c5d9d9418e670ac20f10a95e4ba","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":70,"id":"1aecef0b_82861c86","line":42,"in_reply_to":"b6bc5f42_0c8371e4","updated":"2024-11-27 13:41:16.000000000","message":"Done","commit_id":"4397861bdd3156ae414e7cac6ca5f0760659f551"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f5c5e50d36d89053ac5760a5b72af38273c07dce","unresolved":true,"context_lines":[{"line_number":50,"context_line":"#   \"tag\": \"e8debdc0-447a-4376-a10a-4cd9122d7986\""},{"line_number":51,"context_line":"# }"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"share_response \u003d {"},{"line_number":54,"context_line":"    \u0027title\u0027: \u0027Server share\u0027,"},{"line_number":55,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":56,"context_line":"    \u0027properties\u0027: {"}],"source_content_type":"text/x-python","patch_set":71,"id":"c5192215_076e30af","line":53,"range":{"start_line":53,"start_character":0,"end_line":53,"end_character":14},"updated":"2024-11-27 15:07:34.000000000","message":"nit:\n\n```suggestion\nshow_response \u003d {\n```","commit_id":"5e508a09b392130813d543b6f121129ffc1ce7f9"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"c5044263710b9432c0f0354756e3a2cb5793b2ae","unresolved":false,"context_lines":[{"line_number":50,"context_line":"#   \"tag\": \"e8debdc0-447a-4376-a10a-4cd9122d7986\""},{"line_number":51,"context_line":"# }"},{"line_number":52,"context_line":""},{"line_number":53,"context_line":"share_response \u003d {"},{"line_number":54,"context_line":"    \u0027title\u0027: \u0027Server share\u0027,"},{"line_number":55,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":56,"context_line":"    \u0027properties\u0027: {"}],"source_content_type":"text/x-python","patch_set":71,"id":"92cfbaff_e33a962f","line":53,"range":{"start_line":53,"start_character":0,"end_line":53,"end_character":14},"in_reply_to":"c5192215_076e30af","updated":"2024-11-28 18:27:29.000000000","message":"Done in a FUP: https://review.opendev.org/c/openstack/nova/+/936656","commit_id":"5e508a09b392130813d543b6f121129ffc1ce7f9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f5c5e50d36d89053ac5760a5b72af38273c07dce","unresolved":true,"context_lines":[{"line_number":55,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":56,"context_line":"    \u0027properties\u0027: {"},{"line_number":57,"context_line":"        \u0027share\u0027: {"},{"line_number":58,"context_line":"            \u0027type\u0027: \u0027object\u0027,"},{"line_number":59,"context_line":"            \u0027properties\u0027: {"},{"line_number":60,"context_line":"                \u0027uuid\u0027: parameter_types.share_id,"},{"line_number":61,"context_line":"                \u0027export_location\u0027: parameter_types.share_export_location,"},{"line_number":62,"context_line":"                \u0027share_id\u0027: parameter_types.share_id,"},{"line_number":63,"context_line":"                \u0027status\u0027: parameter_types.share_status,"},{"line_number":64,"context_line":"                \u0027tag\u0027: parameter_types.share_tag,"},{"line_number":65,"context_line":"            },"},{"line_number":66,"context_line":"            \u0027required\u0027: [\u0027share_id\u0027, \u0027status\u0027, \u0027tag\u0027],"},{"line_number":67,"context_line":"            \u0027additionalProperties\u0027: False"},{"line_number":68,"context_line":"        }"},{"line_number":69,"context_line":"    },"},{"line_number":70,"context_line":"    \u0027required\u0027: [\u0027share\u0027],"}],"source_content_type":"text/x-python","patch_set":71,"id":"a25446aa_cdb16fb8","line":67,"range":{"start_line":58,"start_character":0,"end_line":67,"end_character":41},"updated":"2024-11-27 15:07:34.000000000","message":"nit: Given these are common between the two responses, you could move this out to a variable e.g. `_share_response` and reuse it. It would also be great to have these alphabetically ordered.","commit_id":"5e508a09b392130813d543b6f121129ffc1ce7f9"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"c5044263710b9432c0f0354756e3a2cb5793b2ae","unresolved":false,"context_lines":[{"line_number":55,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":56,"context_line":"    \u0027properties\u0027: {"},{"line_number":57,"context_line":"        \u0027share\u0027: {"},{"line_number":58,"context_line":"            \u0027type\u0027: \u0027object\u0027,"},{"line_number":59,"context_line":"            \u0027properties\u0027: {"},{"line_number":60,"context_line":"                \u0027uuid\u0027: parameter_types.share_id,"},{"line_number":61,"context_line":"                \u0027export_location\u0027: parameter_types.share_export_location,"},{"line_number":62,"context_line":"                \u0027share_id\u0027: parameter_types.share_id,"},{"line_number":63,"context_line":"                \u0027status\u0027: parameter_types.share_status,"},{"line_number":64,"context_line":"                \u0027tag\u0027: parameter_types.share_tag,"},{"line_number":65,"context_line":"            },"},{"line_number":66,"context_line":"            \u0027required\u0027: [\u0027share_id\u0027, \u0027status\u0027, \u0027tag\u0027],"},{"line_number":67,"context_line":"            \u0027additionalProperties\u0027: False"},{"line_number":68,"context_line":"        }"},{"line_number":69,"context_line":"    },"},{"line_number":70,"context_line":"    \u0027required\u0027: [\u0027share\u0027],"}],"source_content_type":"text/x-python","patch_set":71,"id":"2bd63d42_3287f8a3","line":67,"range":{"start_line":58,"start_character":0,"end_line":67,"end_character":41},"in_reply_to":"a25446aa_cdb16fb8","updated":"2024-11-28 18:27:29.000000000","message":"Done","commit_id":"5e508a09b392130813d543b6f121129ffc1ce7f9"},{"author":{"_account_id":15334,"name":"Stephen Finucane","display_name":"stephenfin","email":"stephenfin@redhat.com","username":"sfinucan"},"change_message_id":"f5c5e50d36d89053ac5760a5b72af38273c07dce","unresolved":true,"context_lines":[{"line_number":71,"context_line":"    \u0027additionalProperties\u0027: False"},{"line_number":72,"context_line":"}"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"share_list_response \u003d {"},{"line_number":75,"context_line":"    \u0027title\u0027: \u0027Server shares\u0027,"},{"line_number":76,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":77,"context_line":"    \u0027properties\u0027: {"}],"source_content_type":"text/x-python","patch_set":71,"id":"747b91b7_8abf1595","line":74,"updated":"2024-11-27 15:07:34.000000000","message":"nit:\n\n```suggestion\nindex_response \u003d {\n```","commit_id":"5e508a09b392130813d543b6f121129ffc1ce7f9"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"c5044263710b9432c0f0354756e3a2cb5793b2ae","unresolved":false,"context_lines":[{"line_number":71,"context_line":"    \u0027additionalProperties\u0027: False"},{"line_number":72,"context_line":"}"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"share_list_response \u003d {"},{"line_number":75,"context_line":"    \u0027title\u0027: \u0027Server shares\u0027,"},{"line_number":76,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":77,"context_line":"    \u0027properties\u0027: {"}],"source_content_type":"text/x-python","patch_set":71,"id":"65012e7c_ef322676","line":74,"in_reply_to":"747b91b7_8abf1595","updated":"2024-11-28 18:27:29.000000000","message":"Done","commit_id":"5e508a09b392130813d543b6f121129ffc1ce7f9"}],"nova/api/openstack/compute/server_shares.py":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"b2f037bfef139aa609cb7b01d09bf097f6ce0e90","unresolved":true,"context_lines":[{"line_number":26,"context_line":"from nova.objects import share_mapping as sm"},{"line_number":27,"context_line":"from nova.policies import server_shares as ss_policies"},{"line_number":28,"context_line":"from nova.share import manila"},{"line_number":29,"context_line":"from oslo_utils import uuidutils"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def _get_instance_mapping(context, server_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"133bbb7a_178fa991","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":32},"updated":"2022-08-06 07:47:44.000000000","message":"This import statement should be before nova import statements.\n\nSee https://docs.openstack.org/hacking/latest/user/hacking.html#import-order-template","commit_id":"440b679421406a437fd4a6f63734ca20a326f2b5"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2c2a5120d8c2b828a511689db916fef3a54e9dfd","unresolved":false,"context_lines":[{"line_number":26,"context_line":"from nova.objects import share_mapping as sm"},{"line_number":27,"context_line":"from nova.policies import server_shares as ss_policies"},{"line_number":28,"context_line":"from nova.share import manila"},{"line_number":29,"context_line":"from oslo_utils import uuidutils"},{"line_number":30,"context_line":""},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"def _get_instance_mapping(context, server_id):"}],"source_content_type":"text/x-python","patch_set":9,"id":"ce051820_59178a7d","line":29,"range":{"start_line":29,"start_character":0,"end_line":29,"end_character":32},"in_reply_to":"133bbb7a_178fa991","updated":"2022-09-14 13:32:01.000000000","message":"Done","commit_id":"440b679421406a437fd4a6f63734ca20a326f2b5"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ab1b4aa40f1dd8ed9b8e14b40e35da4fac707371","unresolved":true,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def _get_instance_host_ip(self, context, server_id):"},{"line_number":53,"context_line":"        instance \u003d self._get_instance_from_server_uuid(context, server_id)"},{"line_number":54,"context_line":"        return socket.gethostbyname(instance.host)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _check_instance_in_valid_state(self, context, server_id, action):"},{"line_number":57,"context_line":"        instance \u003d self._get_instance_from_server_uuid(context, server_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"336bd95f_c8ba3975","line":54,"updated":"2022-08-26 12:44:20.000000000","message":"I\u0027m not sure about this.\n1) this only works for ipv4 addresses\n2) there might be different network for manila shares than for the compute RPC\n3) the api might not able to resolve the compute hostname directly\n\nWe should have an IP defined in the configuration on the compute side instead. I\u0027m not sure when we need this IP during the workflow. Hopefully it is only need on the compute side.\n\nSee also https://meetings.opendev.org/irclogs/%23openstack-nova/%23openstack-nova.2022-08-26.log.html#t2022-08-26T12:26:08","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"aa446a43b9150b548d22efb80e52928a17f99d3a","unresolved":false,"context_lines":[{"line_number":51,"context_line":""},{"line_number":52,"context_line":"    def _get_instance_host_ip(self, context, server_id):"},{"line_number":53,"context_line":"        instance \u003d self._get_instance_from_server_uuid(context, server_id)"},{"line_number":54,"context_line":"        return socket.gethostbyname(instance.host)"},{"line_number":55,"context_line":""},{"line_number":56,"context_line":"    def _check_instance_in_valid_state(self, context, server_id, action):"},{"line_number":57,"context_line":"        instance \u003d self._get_instance_from_server_uuid(context, server_id)"}],"source_content_type":"text/x-python","patch_set":10,"id":"1fc1f47f_0ce92fe5","line":54,"in_reply_to":"336bd95f_c8ba3975","updated":"2022-10-05 08:50:02.000000000","message":"This was completely reviewed and https://docs.openstack.org/nova/latest/configuration/config.html#DEFAULT.my_block_storage_ip is used as proposed by Sean.","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ab1b4aa40f1dd8ed9b8e14b40e35da4fac707371","unresolved":true,"context_lines":[{"line_number":74,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":75,"context_line":"        # Get instance mapping to query the required cell database"},{"line_number":76,"context_line":"        im \u003d _get_instance_mapping(context, server_id)"},{"line_number":77,"context_line":"        context.can(ss_policies.POLICY_ROOT % \u0027index\u0027,"},{"line_number":78,"context_line":"                    target\u003d{\u0027project_id\u0027: im.project_id})"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        with nova_context.target_cell(context, im.cell_mapping) as cctxt:"}],"source_content_type":"text/x-python","patch_set":10,"id":"548f6d62_bbf8a4d1","line":77,"updated":"2022-08-26 12:44:20.000000000","message":"move this before the DB query","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b6abb7ec4aae650b2223c8c4a2ca6537b728207b","unresolved":false,"context_lines":[{"line_number":74,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":75,"context_line":"        # Get instance mapping to query the required cell database"},{"line_number":76,"context_line":"        im \u003d _get_instance_mapping(context, server_id)"},{"line_number":77,"context_line":"        context.can(ss_policies.POLICY_ROOT % \u0027index\u0027,"},{"line_number":78,"context_line":"                    target\u003d{\u0027project_id\u0027: im.project_id})"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        with nova_context.target_cell(context, im.cell_mapping) as cctxt:"}],"source_content_type":"text/x-python","patch_set":10,"id":"0c67a99c_d2769534","line":77,"in_reply_to":"40017702_f7b1440e","updated":"2023-01-25 18:03:29.000000000","message":"you are right. sorry.","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2c2a5120d8c2b828a511689db916fef3a54e9dfd","unresolved":true,"context_lines":[{"line_number":74,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":75,"context_line":"        # Get instance mapping to query the required cell database"},{"line_number":76,"context_line":"        im \u003d _get_instance_mapping(context, server_id)"},{"line_number":77,"context_line":"        context.can(ss_policies.POLICY_ROOT % \u0027index\u0027,"},{"line_number":78,"context_line":"                    target\u003d{\u0027project_id\u0027: im.project_id})"},{"line_number":79,"context_line":""},{"line_number":80,"context_line":"        with nova_context.target_cell(context, im.cell_mapping) as cctxt:"}],"source_content_type":"text/x-python","patch_set":10,"id":"40017702_f7b1440e","line":77,"in_reply_to":"548f6d62_bbf8a4d1","updated":"2022-09-14 13:32:01.000000000","message":"context.can requires the im object.\nSo I think it can not be moved. Am i missing something ?","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ab1b4aa40f1dd8ed9b8e14b40e35da4fac707371","unresolved":true,"context_lines":[{"line_number":110,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":111,"context_line":"        # Get instance mapping to query the required cell database"},{"line_number":112,"context_line":"        im \u003d _get_instance_mapping(context, server_id)"},{"line_number":113,"context_line":"        context.can(ss_policies.POLICY_ROOT % \u0027create\u0027,"},{"line_number":114,"context_line":"                    target\u003d{\u0027project_id\u0027: im.project_id})"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        share_dict \u003d body[\u0027share\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"855cc95d_5868a39b","line":113,"updated":"2022-08-26 12:44:20.000000000","message":"move this as the first step to avoid a mapping DB query if the request is not authorized","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b6abb7ec4aae650b2223c8c4a2ca6537b728207b","unresolved":false,"context_lines":[{"line_number":110,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":111,"context_line":"        # Get instance mapping to query the required cell database"},{"line_number":112,"context_line":"        im \u003d _get_instance_mapping(context, server_id)"},{"line_number":113,"context_line":"        context.can(ss_policies.POLICY_ROOT % \u0027create\u0027,"},{"line_number":114,"context_line":"                    target\u003d{\u0027project_id\u0027: im.project_id})"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        share_dict \u003d body[\u0027share\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"769dd63a_04f88e62","line":113,"in_reply_to":"788f3699_abe7426e","updated":"2023-01-25 18:03:29.000000000","message":"Ack","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2c2a5120d8c2b828a511689db916fef3a54e9dfd","unresolved":true,"context_lines":[{"line_number":110,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":111,"context_line":"        # Get instance mapping to query the required cell database"},{"line_number":112,"context_line":"        im \u003d _get_instance_mapping(context, server_id)"},{"line_number":113,"context_line":"        context.can(ss_policies.POLICY_ROOT % \u0027create\u0027,"},{"line_number":114,"context_line":"                    target\u003d{\u0027project_id\u0027: im.project_id})"},{"line_number":115,"context_line":""},{"line_number":116,"context_line":"        share_dict \u003d body[\u0027share\u0027]"}],"source_content_type":"text/x-python","patch_set":10,"id":"788f3699_abe7426e","line":113,"in_reply_to":"855cc95d_5868a39b","updated":"2022-09-14 13:32:01.000000000","message":"See https://review.opendev.org/c/openstack/nova/+/836830/comments/548f6d62_bbf8a4d1\nAnd the above lines are a closure, that will be run after can().","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ab1b4aa40f1dd8ed9b8e14b40e35da4fac707371","unresolved":true,"context_lines":[{"line_number":157,"context_line":"                            self._get_instance_host_ip(cctxt, server_id),"},{"line_number":158,"context_line":"                            \u0027rw\u0027)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"                db_share.attach(db_share.status)"},{"line_number":161,"context_line":"                view \u003d self._view_builder._show_view(cctxt, db_share)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"            except (exception.ShareNotFound) as e:"}],"source_content_type":"text/x-python","patch_set":10,"id":"1345ff6f_9e13b3af","line":160,"range":{"start_line":160,"start_character":32,"end_line":160,"end_character":47},"updated":"2022-08-26 12:44:20.000000000","message":"why we need to pass status?","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2aa51e934a337622bdccf96d6b43e79aa1999eb3","unresolved":true,"context_lines":[{"line_number":157,"context_line":"                            self._get_instance_host_ip(cctxt, server_id),"},{"line_number":158,"context_line":"                            \u0027rw\u0027)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"                db_share.attach(db_share.status)"},{"line_number":161,"context_line":"                view \u003d self._view_builder._show_view(cctxt, db_share)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"            except (exception.ShareNotFound) as e:"}],"source_content_type":"text/x-python","patch_set":10,"id":"67d1c348_e77c07c1","line":160,"range":{"start_line":160,"start_character":32,"end_line":160,"end_character":47},"in_reply_to":"1345ff6f_9e13b3af","updated":"2022-09-01 09:22:54.000000000","message":"So this basically a noop now as the sharemapping already in inactive state.","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2c2a5120d8c2b828a511689db916fef3a54e9dfd","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                            self._get_instance_host_ip(cctxt, server_id),"},{"line_number":158,"context_line":"                            \u0027rw\u0027)"},{"line_number":159,"context_line":""},{"line_number":160,"context_line":"                db_share.attach(db_share.status)"},{"line_number":161,"context_line":"                view \u003d self._view_builder._show_view(cctxt, db_share)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"            except (exception.ShareNotFound) as e:"}],"source_content_type":"text/x-python","patch_set":10,"id":"51d4f83d_a0375a09","line":160,"range":{"start_line":160,"start_character":32,"end_line":160,"end_character":47},"in_reply_to":"67d1c348_e77c07c1","updated":"2022-09-14 13:32:01.000000000","message":"Done","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ab1b4aa40f1dd8ed9b8e14b40e35da4fac707371","unresolved":true,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"                db_share.attach(db_share.status)"},{"line_number":161,"context_line":"                view \u003d self._view_builder._show_view(cctxt, db_share)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"            except (exception.ShareNotFound) as e:"},{"line_number":164,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":165,"context_line":"            except (exception.UnsupportedManilaAPIVersion) as e:"}],"source_content_type":"text/x-python","patch_set":10,"id":"5bc101cd_c03fb189","line":162,"updated":"2022-08-26 12:44:20.000000000","message":"I think you have to call db_share.save() to persist the object","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b6abb7ec4aae650b2223c8c4a2ca6537b728207b","unresolved":false,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"                db_share.attach(db_share.status)"},{"line_number":161,"context_line":"                view \u003d self._view_builder._show_view(cctxt, db_share)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"            except (exception.ShareNotFound) as e:"},{"line_number":164,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":165,"context_line":"            except (exception.UnsupportedManilaAPIVersion) as e:"}],"source_content_type":"text/x-python","patch_set":10,"id":"1bc2dd12_a0c76914","line":162,"in_reply_to":"0391d46e_e27bdbd6","updated":"2023-01-25 18:03:29.000000000","message":"OK there is an explicit `share_mapping.create()` now here so this is OK.","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2c2a5120d8c2b828a511689db916fef3a54e9dfd","unresolved":true,"context_lines":[{"line_number":159,"context_line":""},{"line_number":160,"context_line":"                db_share.attach(db_share.status)"},{"line_number":161,"context_line":"                view \u003d self._view_builder._show_view(cctxt, db_share)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"            except (exception.ShareNotFound) as e:"},{"line_number":164,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":165,"context_line":"            except (exception.UnsupportedManilaAPIVersion) as e:"}],"source_content_type":"text/x-python","patch_set":10,"id":"0391d46e_e27bdbd6","line":162,"in_reply_to":"5bc101cd_c03fb189","updated":"2022-09-14 13:32:01.000000000","message":"This is handled by the attach method that, at the end called db.share_mapping_update method that will update or create the DB record.","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ab1b4aa40f1dd8ed9b8e14b40e35da4fac707371","unresolved":true,"context_lines":[{"line_number":176,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":177,"context_line":"        # Get instance mapping to query the required cell database"},{"line_number":178,"context_line":"        im \u003d _get_instance_mapping(context, server_id)"},{"line_number":179,"context_line":"        context.can(ss_policies.POLICY_ROOT % \u0027show\u0027,"},{"line_number":180,"context_line":"                    target\u003d{\u0027project_id\u0027: im.project_id})"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        with nova_context.target_cell(context, im.cell_mapping) as cctxt:"}],"source_content_type":"text/x-python","patch_set":10,"id":"a49cef15_cb7c2d3b","line":179,"updated":"2022-08-26 12:44:20.000000000","message":"ditto","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b6abb7ec4aae650b2223c8c4a2ca6537b728207b","unresolved":false,"context_lines":[{"line_number":176,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":177,"context_line":"        # Get instance mapping to query the required cell database"},{"line_number":178,"context_line":"        im \u003d _get_instance_mapping(context, server_id)"},{"line_number":179,"context_line":"        context.can(ss_policies.POLICY_ROOT % \u0027show\u0027,"},{"line_number":180,"context_line":"                    target\u003d{\u0027project_id\u0027: im.project_id})"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        with nova_context.target_cell(context, im.cell_mapping) as cctxt:"}],"source_content_type":"text/x-python","patch_set":10,"id":"4766537b_7e993a23","line":179,"in_reply_to":"0c56e56c_2ecc9527","updated":"2023-01-25 18:03:29.000000000","message":"Ack","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2c2a5120d8c2b828a511689db916fef3a54e9dfd","unresolved":true,"context_lines":[{"line_number":176,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":177,"context_line":"        # Get instance mapping to query the required cell database"},{"line_number":178,"context_line":"        im \u003d _get_instance_mapping(context, server_id)"},{"line_number":179,"context_line":"        context.can(ss_policies.POLICY_ROOT % \u0027show\u0027,"},{"line_number":180,"context_line":"                    target\u003d{\u0027project_id\u0027: im.project_id})"},{"line_number":181,"context_line":""},{"line_number":182,"context_line":"        with nova_context.target_cell(context, im.cell_mapping) as cctxt:"}],"source_content_type":"text/x-python","patch_set":10,"id":"0c56e56c_2ecc9527","line":179,"in_reply_to":"a49cef15_cb7c2d3b","updated":"2022-09-14 13:32:01.000000000","message":"Please look at: https://review.opendev.org/c/openstack/nova/+/836830/comments/548f6d62_bbf8a4d1","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ab1b4aa40f1dd8ed9b8e14b40e35da4fac707371","unresolved":true,"context_lines":[{"line_number":201,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":202,"context_line":"        # Get instance mapping to query the required cell database"},{"line_number":203,"context_line":"        im \u003d _get_instance_mapping(context, server_id)"},{"line_number":204,"context_line":"        context.can(ss_policies.POLICY_ROOT % \u0027delete\u0027,"},{"line_number":205,"context_line":"                    target\u003d{\u0027project_id\u0027: im.project_id})"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        with nova_context.target_cell(context, im.cell_mapping) as cctxt:"}],"source_content_type":"text/x-python","patch_set":10,"id":"25b4c1e9_04c3cdb4","line":204,"updated":"2022-08-26 12:44:20.000000000","message":"ditto","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2c2a5120d8c2b828a511689db916fef3a54e9dfd","unresolved":true,"context_lines":[{"line_number":201,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":202,"context_line":"        # Get instance mapping to query the required cell database"},{"line_number":203,"context_line":"        im \u003d _get_instance_mapping(context, server_id)"},{"line_number":204,"context_line":"        context.can(ss_policies.POLICY_ROOT % \u0027delete\u0027,"},{"line_number":205,"context_line":"                    target\u003d{\u0027project_id\u0027: im.project_id})"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        with nova_context.target_cell(context, im.cell_mapping) as cctxt:"}],"source_content_type":"text/x-python","patch_set":10,"id":"269a7d94_858ac574","line":204,"in_reply_to":"25b4c1e9_04c3cdb4","updated":"2022-09-14 13:32:01.000000000","message":"Please look at: https://review.opendev.org/c/openstack/nova/+/836830/comments/548f6d62_bbf8a4d1","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b6abb7ec4aae650b2223c8c4a2ca6537b728207b","unresolved":false,"context_lines":[{"line_number":201,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":202,"context_line":"        # Get instance mapping to query the required cell database"},{"line_number":203,"context_line":"        im \u003d _get_instance_mapping(context, server_id)"},{"line_number":204,"context_line":"        context.can(ss_policies.POLICY_ROOT % \u0027delete\u0027,"},{"line_number":205,"context_line":"                    target\u003d{\u0027project_id\u0027: im.project_id})"},{"line_number":206,"context_line":""},{"line_number":207,"context_line":"        with nova_context.target_cell(context, im.cell_mapping) as cctxt:"}],"source_content_type":"text/x-python","patch_set":10,"id":"e1ccf028_aa4ec741","line":204,"in_reply_to":"269a7d94_858ac574","updated":"2023-01-25 18:03:29.000000000","message":"Ack","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ab1b4aa40f1dd8ed9b8e14b40e35da4fac707371","unresolved":true,"context_lines":[{"line_number":217,"context_line":"                    id)"},{"line_number":218,"context_line":"                )"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"                # Check if this share is used by other VMs"},{"line_number":221,"context_line":"                # If yes, then we should not deny this access"},{"line_number":222,"context_line":"                if len(sm.ShareMappingList.get_by_share_id("},{"line_number":223,"context_line":"                        cctxt, share.share_id)) \u003c 2:"},{"line_number":224,"context_line":"                    self.manila.deny("},{"line_number":225,"context_line":"                            cctxt,"},{"line_number":226,"context_line":"                            share.share_id,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9393edb0_a34480fb","line":223,"range":{"start_line":220,"start_character":0,"end_line":223,"end_character":52},"updated":"2022-08-26 12:44:20.000000000","message":"If there are two VMs on different compute hosts (VM1: host1, VM2: host2) and the share is removed from VM1, then we can remove the access on host1.","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2c2a5120d8c2b828a511689db916fef3a54e9dfd","unresolved":true,"context_lines":[{"line_number":217,"context_line":"                    id)"},{"line_number":218,"context_line":"                )"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"                # Check if this share is used by other VMs"},{"line_number":221,"context_line":"                # If yes, then we should not deny this access"},{"line_number":222,"context_line":"                if len(sm.ShareMappingList.get_by_share_id("},{"line_number":223,"context_line":"                        cctxt, share.share_id)) \u003c 2:"},{"line_number":224,"context_line":"                    self.manila.deny("},{"line_number":225,"context_line":"                            cctxt,"},{"line_number":226,"context_line":"                            share.share_id,"}],"source_content_type":"text/x-python","patch_set":10,"id":"9a737bad_bbcbc3f2","line":223,"range":{"start_line":220,"start_character":0,"end_line":223,"end_character":52},"in_reply_to":"9393edb0_a34480fb","updated":"2022-09-14 13:32:01.000000000","message":"If it is a different hosts, it means we have 2 different accesses.\n1 x for host1 ip.\n1 x for host2 ip.\n\nSo I think we can delete it.","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"84222d5f8f3085851e3e121829f63dc47c219a2b","unresolved":false,"context_lines":[{"line_number":217,"context_line":"                    id)"},{"line_number":218,"context_line":"                )"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"                # Check if this share is used by other VMs"},{"line_number":221,"context_line":"                # If yes, then we should not deny this access"},{"line_number":222,"context_line":"                if len(sm.ShareMappingList.get_by_share_id("},{"line_number":223,"context_line":"                        cctxt, share.share_id)) \u003c 2:"},{"line_number":224,"context_line":"                    self.manila.deny("},{"line_number":225,"context_line":"                            cctxt,"},{"line_number":226,"context_line":"                            share.share_id,"}],"source_content_type":"text/x-python","patch_set":10,"id":"a9925e1f_b1ea4552","line":223,"range":{"start_line":220,"start_character":0,"end_line":223,"end_character":52},"in_reply_to":"9a737bad_bbcbc3f2","updated":"2023-02-08 12:56:31.000000000","message":"Done","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ab1b4aa40f1dd8ed9b8e14b40e35da4fac707371","unresolved":true,"context_lines":[{"line_number":228,"context_line":"                            self._get_instance_host_ip(cctxt, server_id)"},{"line_number":229,"context_line":"                            )"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"                share.detach()"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"            except (exception.ShareNotFound) as e:"},{"line_number":234,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":10,"id":"b2669cf9_527b98c2","line":231,"updated":"2022-08-26 12:44:20.000000000","message":"I guess you have to also delete the ShareMapping object from the DB here","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b6abb7ec4aae650b2223c8c4a2ca6537b728207b","unresolved":false,"context_lines":[{"line_number":228,"context_line":"                            self._get_instance_host_ip(cctxt, server_id)"},{"line_number":229,"context_line":"                            )"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"                share.detach()"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"            except (exception.ShareNotFound) as e:"},{"line_number":234,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":10,"id":"e96a8b1b_d71136de","line":231,"in_reply_to":"0d984f38_9f28c3d8","updated":"2023-01-25 18:03:29.000000000","message":"Ack","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2c2a5120d8c2b828a511689db916fef3a54e9dfd","unresolved":true,"context_lines":[{"line_number":228,"context_line":"                            self._get_instance_host_ip(cctxt, server_id)"},{"line_number":229,"context_line":"                            )"},{"line_number":230,"context_line":""},{"line_number":231,"context_line":"                share.detach()"},{"line_number":232,"context_line":""},{"line_number":233,"context_line":"            except (exception.ShareNotFound) as e:"},{"line_number":234,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":10,"id":"0d984f38_9f28c3d8","line":231,"in_reply_to":"b2669cf9_527b98c2","updated":"2022-09-14 13:32:01.000000000","message":"This is handled by the detach method.","commit_id":"6b2fa49282067851f3a0d4b228b833b2db305ae0"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2aa51e934a337622bdccf96d6b43e79aa1999eb3","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                db_share.uuid \u003d uuidutils.generate_uuid()"},{"line_number":136,"context_line":"                db_share.instance_uuid \u003d server_id"},{"line_number":137,"context_line":"                db_share.share_id \u003d manila_share_data[\u0027id\u0027]"},{"line_number":138,"context_line":"                db_share.status \u003d \u0027inactive\u0027"},{"line_number":139,"context_line":"                if share_tag:"},{"line_number":140,"context_line":"                    db_share.tag \u003d share_tag"},{"line_number":141,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":14,"id":"52ed4ec5_73a9afaf","line":138,"updated":"2022-09-01 09:22:54.000000000","message":"so this sets it to inactive by default. good.","commit_id":"e6d02ee8d0c6e51a8481d7faf527fe731b6e7e4b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b6abb7ec4aae650b2223c8c4a2ca6537b728207b","unresolved":true,"context_lines":[{"line_number":115,"context_line":"        share_id \u003d share_dict.get(\u0027shareId\u0027)"},{"line_number":116,"context_line":"        share_tag \u003d share_dict.get(\u0027tag\u0027)"},{"line_number":117,"context_line":"        with nova_context.target_cell(context, im.cell_mapping) as cctxt:"},{"line_number":118,"context_line":"            instance \u003d self._check_instance_in_valid_state("},{"line_number":119,"context_line":"                cctxt,"},{"line_number":120,"context_line":"                server_id,"},{"line_number":121,"context_line":"                \"create share\""}],"source_content_type":"text/x-python","patch_set":21,"id":"3c0d250d_09393ede","line":118,"updated":"2023-01-25 18:03:29.000000000","message":"This allows to add a share to an instance in ERROR state. I agree that we should be allow trying to detach a share from an instance in ERROR state but attaching a new one in ERROR might be problematic. For example if the VM failed to schedule it will be in ERROR, then if the user tries to add a share to it the code below will try to call `self.compute_api.mount_share` at L147 but that assumes instance.host points to a valid host. But an instance that was never scheduled successfully instance.host is None. That will probably raises \n\n  exception.NovaException(_(\u0027Unable to find host for Instance %s\u0027) % instance.uuid)\n\nfrom `nova.compute.rpcapi._compute_host`. Which will probably translate to HTTP 500. But it is more like a HTTP Conflict.\n\nI think we should simply forbid adding a share to an instance in ERROR state.","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"8c88a5412e4aa84b1f6548a4bed92604dd43bbe2","unresolved":true,"context_lines":[{"line_number":115,"context_line":"        share_id \u003d share_dict.get(\u0027shareId\u0027)"},{"line_number":116,"context_line":"        share_tag \u003d share_dict.get(\u0027tag\u0027)"},{"line_number":117,"context_line":"        with nova_context.target_cell(context, im.cell_mapping) as cctxt:"},{"line_number":118,"context_line":"            instance \u003d self._check_instance_in_valid_state("},{"line_number":119,"context_line":"                cctxt,"},{"line_number":120,"context_line":"                server_id,"},{"line_number":121,"context_line":"                \"create share\""}],"source_content_type":"text/x-python","patch_set":21,"id":"fb9a7511_0b3d527e","line":118,"in_reply_to":"3c0d250d_09393ede","updated":"2023-01-30 10:16:11.000000000","message":"OK make sens.","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"84222d5f8f3085851e3e121829f63dc47c219a2b","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        share_id \u003d share_dict.get(\u0027shareId\u0027)"},{"line_number":116,"context_line":"        share_tag \u003d share_dict.get(\u0027tag\u0027)"},{"line_number":117,"context_line":"        with nova_context.target_cell(context, im.cell_mapping) as cctxt:"},{"line_number":118,"context_line":"            instance \u003d self._check_instance_in_valid_state("},{"line_number":119,"context_line":"                cctxt,"},{"line_number":120,"context_line":"                server_id,"},{"line_number":121,"context_line":"                \"create share\""}],"source_content_type":"text/x-python","patch_set":21,"id":"037463db_f9db827a","line":118,"in_reply_to":"fb9a7511_0b3d527e","updated":"2023-02-08 12:56:31.000000000","message":"Done","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b6abb7ec4aae650b2223c8c4a2ca6537b728207b","unresolved":true,"context_lines":[{"line_number":216,"context_line":"                # Check if this share is used by other VMs"},{"line_number":217,"context_line":"                # If yes, then we should not deny this access"},{"line_number":218,"context_line":"                if len(sm.ShareMappingList.get_by_share_id("},{"line_number":219,"context_line":"                        cctxt, share_mapping.share_id)) \u003c 2:"},{"line_number":220,"context_line":"                    self.compute_api.umount_share("},{"line_number":221,"context_line":"                        cctxt, instance, share_mapping)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"                share_mapping.detach()"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"5de905c9_56f75a16","line":221,"range":{"start_line":219,"start_character":0,"end_line":221,"end_character":55},"updated":"2023-01-25 18:03:29.000000000","message":"Can it be that we have two ShareMapping objects with the same share_id but mounted to two different hosts? If so then the condition at L219 will return 2 and therefore we don\u0027t unmount the share from instance.host even though on that host this is the only instance needing this share.","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"8c88a5412e4aa84b1f6548a4bed92604dd43bbe2","unresolved":true,"context_lines":[{"line_number":216,"context_line":"                # Check if this share is used by other VMs"},{"line_number":217,"context_line":"                # If yes, then we should not deny this access"},{"line_number":218,"context_line":"                if len(sm.ShareMappingList.get_by_share_id("},{"line_number":219,"context_line":"                        cctxt, share_mapping.share_id)) \u003c 2:"},{"line_number":220,"context_line":"                    self.compute_api.umount_share("},{"line_number":221,"context_line":"                        cctxt, instance, share_mapping)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"                share_mapping.detach()"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"ff7445f4_c24269bf","line":221,"range":{"start_line":219,"start_character":0,"end_line":221,"end_character":55},"in_reply_to":"5de905c9_56f75a16","updated":"2023-01-30 10:16:11.000000000","message":"Not especially on different hosts. Many VMs could use the same share.\nAssuming we have 2 VMs using the same share on the compute host.\nIf the first one wants to remove the share, this code will remove it in the database but leave the share mounted on the compute host for the other one.\nWhen the second one wants to remove it, this VM is the only \"user\" of the share and so the share can be safely unmounted.","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"ffda336a9a68c1b8ef9fd935bf6d2be05ce2ceb6","unresolved":true,"context_lines":[{"line_number":216,"context_line":"                # Check if this share is used by other VMs"},{"line_number":217,"context_line":"                # If yes, then we should not deny this access"},{"line_number":218,"context_line":"                if len(sm.ShareMappingList.get_by_share_id("},{"line_number":219,"context_line":"                        cctxt, share_mapping.share_id)) \u003c 2:"},{"line_number":220,"context_line":"                    self.compute_api.umount_share("},{"line_number":221,"context_line":"                        cctxt, instance, share_mapping)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"                share_mapping.detach()"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"cca4b304_822ed354","line":221,"range":{"start_line":219,"start_character":0,"end_line":221,"end_character":55},"in_reply_to":"6fda95f1_dc22c908","updated":"2023-02-02 17:25:26.000000000","message":"Oh ok got your point. You are right. I\u0027m gonna try to change that.","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"84222d5f8f3085851e3e121829f63dc47c219a2b","unresolved":true,"context_lines":[{"line_number":216,"context_line":"                # Check if this share is used by other VMs"},{"line_number":217,"context_line":"                # If yes, then we should not deny this access"},{"line_number":218,"context_line":"                if len(sm.ShareMappingList.get_by_share_id("},{"line_number":219,"context_line":"                        cctxt, share_mapping.share_id)) \u003c 2:"},{"line_number":220,"context_line":"                    self.compute_api.umount_share("},{"line_number":221,"context_line":"                        cctxt, instance, share_mapping)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"                share_mapping.detach()"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"cde7158a_995ae230","line":221,"range":{"start_line":219,"start_character":0,"end_line":221,"end_character":55},"in_reply_to":"cca4b304_822ed354","updated":"2023-02-08 12:56:31.000000000","message":"I have added a check in order to know if the instances are on the same compute.\nSo if there is only one remaining instance on the compute using the share, it is umounted. Otherwise, the share is kept.","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"946d0c5c51849c632de584a1e0d2212b0fba171f","unresolved":false,"context_lines":[{"line_number":216,"context_line":"                # Check if this share is used by other VMs"},{"line_number":217,"context_line":"                # If yes, then we should not deny this access"},{"line_number":218,"context_line":"                if len(sm.ShareMappingList.get_by_share_id("},{"line_number":219,"context_line":"                        cctxt, share_mapping.share_id)) \u003c 2:"},{"line_number":220,"context_line":"                    self.compute_api.umount_share("},{"line_number":221,"context_line":"                        cctxt, instance, share_mapping)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"                share_mapping.detach()"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"65bad96d_d24bb7b0","line":221,"range":{"start_line":219,"start_character":0,"end_line":221,"end_character":55},"in_reply_to":"cde7158a_995ae230","updated":"2024-06-20 08:24:16.000000000","message":"Acknowledged","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"065b9b94b8c7c9dd9bf523f8b45a659ab065e122","unresolved":true,"context_lines":[{"line_number":216,"context_line":"                # Check if this share is used by other VMs"},{"line_number":217,"context_line":"                # If yes, then we should not deny this access"},{"line_number":218,"context_line":"                if len(sm.ShareMappingList.get_by_share_id("},{"line_number":219,"context_line":"                        cctxt, share_mapping.share_id)) \u003c 2:"},{"line_number":220,"context_line":"                    self.compute_api.umount_share("},{"line_number":221,"context_line":"                        cctxt, instance, share_mapping)"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":"                share_mapping.detach()"},{"line_number":224,"context_line":""}],"source_content_type":"text/x-python","patch_set":21,"id":"6fda95f1_dc22c908","line":221,"range":{"start_line":219,"start_character":0,"end_line":221,"end_character":55},"in_reply_to":"ff7445f4_c24269bf","updated":"2023-01-31 16:32:06.000000000","message":"So what will happen the user wants to attach a single manila share to two VMs that are on two different compute hosts? \n\nSorry for being stuck on this but `ShareMappingList.get_by_share_id` does not filter on any compute host, but self.compute_api.umount_share will use the instance.host to send the RPC to a given compute host. So if there are two ShareMapping objects with the same share_id attached to two different VMs on different hosts then the number of ShareMapping object here is not equal to the number of VMs using that share on instance.host","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2e035ab116d8e1c12242d7c04255c4f679c11df2","unresolved":true,"context_lines":[{"line_number":219,"context_line":"                # Check if this share is used by other VMs on the same compute"},{"line_number":220,"context_line":"                # If yes, then we should not deny this access"},{"line_number":221,"context_line":"                nb_instances_on_compute \u003d 0"},{"line_number":222,"context_line":"                smlist \u003d sm.ShareMappingList.get_by_share_id("},{"line_number":223,"context_line":"                    cctxt, share_mapping.share_id)"},{"line_number":224,"context_line":"                for share_mapping in smlist:"},{"line_number":225,"context_line":"                    host_sm_instance \u003d self.compute_api.get("}],"source_content_type":"text/x-python","patch_set":24,"id":"6af1e8db_47ada035","line":222,"updated":"2023-02-08 14:31:02.000000000","message":"Now the logic looks better, but:\n\n1) Please filter on compute nodes instead of host as the instance is running on the node and the share is attached to the node. The host is just where the nova-compute runs. (The node and the host happens to be the same thing for the libvirt driver, but just becuase libvirt driver handles a single hypervisor per nova-compute).\n\n2) Could yo create a `ShareMappingList.get_by_share_id_node_id(cctx, share_mapping.share_id, instance.node) to hide this complexity?","commit_id":"9212beed32618f424e014c58c1e323ef5a2dc4a2"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"50cf7955d71cb7d8d4c963317b850bc65c18c793","unresolved":false,"context_lines":[{"line_number":219,"context_line":"                # Check if this share is used by other VMs on the same compute"},{"line_number":220,"context_line":"                # If yes, then we should not deny this access"},{"line_number":221,"context_line":"                nb_instances_on_compute \u003d 0"},{"line_number":222,"context_line":"                smlist \u003d sm.ShareMappingList.get_by_share_id("},{"line_number":223,"context_line":"                    cctxt, share_mapping.share_id)"},{"line_number":224,"context_line":"                for share_mapping in smlist:"},{"line_number":225,"context_line":"                    host_sm_instance \u003d self.compute_api.get("}],"source_content_type":"text/x-python","patch_set":24,"id":"b739a643_a62b63e4","line":222,"in_reply_to":"6af1e8db_47ada035","updated":"2023-03-06 10:17:56.000000000","message":"Done","commit_id":"9212beed32618f424e014c58c1e323ef5a2dc4a2"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a91884b1b919a11844cc8be9f9ad01f6eabace8","unresolved":true,"context_lines":[{"line_number":137,"context_line":"                share_mapping.uuid \u003d uuidutils.generate_uuid()"},{"line_number":138,"context_line":"                share_mapping.instance_uuid \u003d server_id"},{"line_number":139,"context_line":"                share_mapping.share_id \u003d manila_share_data.id"},{"line_number":140,"context_line":"                share_mapping.status \u003d \u0027inactive\u0027"},{"line_number":141,"context_line":"                if share_tag:"},{"line_number":142,"context_line":"                    share_mapping.tag \u003d share_tag"},{"line_number":143,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":27,"id":"a2cd218b_f98e7af0","line":140,"updated":"2023-03-10 16:55:06.000000000","message":"we have a ShareMappingStatus for that so you can use ShareMappingStatus.INACTIVE instead","commit_id":"b9b235977bbd8618b9d0cb329bbb7e239dcdb087"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"5315442fdf04757fa6822435abedbc5b8e080fd7","unresolved":false,"context_lines":[{"line_number":137,"context_line":"                share_mapping.uuid \u003d uuidutils.generate_uuid()"},{"line_number":138,"context_line":"                share_mapping.instance_uuid \u003d server_id"},{"line_number":139,"context_line":"                share_mapping.share_id \u003d manila_share_data.id"},{"line_number":140,"context_line":"                share_mapping.status \u003d \u0027inactive\u0027"},{"line_number":141,"context_line":"                if share_tag:"},{"line_number":142,"context_line":"                    share_mapping.tag \u003d share_tag"},{"line_number":143,"context_line":"                else:"}],"source_content_type":"text/x-python","patch_set":27,"id":"a9da9fe1_571e95ea","line":140,"in_reply_to":"a2cd218b_f98e7af0","updated":"2023-04-11 17:47:48.000000000","message":"Done","commit_id":"b9b235977bbd8618b9d0cb329bbb7e239dcdb087"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a91884b1b919a11844cc8be9f9ad01f6eabace8","unresolved":true,"context_lines":[{"line_number":146,"context_line":"                    manila_share_data.export_location)"},{"line_number":147,"context_line":"                share_mapping.share_proto \u003d manila_share_data.share_proto"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"                share_mapping.create()"},{"line_number":150,"context_line":"                self.compute_api.mount_share(cctxt, instance, share_mapping)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"                view \u003d self._view_builder._show_view(cctxt, share_mapping)"}],"source_content_type":"text/x-python","patch_set":27,"id":"8f6daea5_ec81f9c6","line":149,"updated":"2023-03-10 16:55:06.000000000","message":"OK so this will do the creation in the DB","commit_id":"b9b235977bbd8618b9d0cb329bbb7e239dcdb087"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"5315442fdf04757fa6822435abedbc5b8e080fd7","unresolved":false,"context_lines":[{"line_number":146,"context_line":"                    manila_share_data.export_location)"},{"line_number":147,"context_line":"                share_mapping.share_proto \u003d manila_share_data.share_proto"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"                share_mapping.create()"},{"line_number":150,"context_line":"                self.compute_api.mount_share(cctxt, instance, share_mapping)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"                view \u003d self._view_builder._show_view(cctxt, share_mapping)"}],"source_content_type":"text/x-python","patch_set":27,"id":"9c4c21c5_c26ea8a6","line":149,"in_reply_to":"8f6daea5_ec81f9c6","updated":"2023-04-11 17:47:48.000000000","message":"Done","commit_id":"b9b235977bbd8618b9d0cb329bbb7e239dcdb087"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a91884b1b919a11844cc8be9f9ad01f6eabace8","unresolved":true,"context_lines":[{"line_number":147,"context_line":"                share_mapping.share_proto \u003d manila_share_data.share_proto"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"                share_mapping.create()"},{"line_number":150,"context_line":"                self.compute_api.mount_share(cctxt, instance, share_mapping)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"                view \u003d self._view_builder._show_view(cctxt, share_mapping)"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"2a412768_c169b490","line":150,"updated":"2023-03-10 16:55:06.000000000","message":"this will mount the manila share on the hypervisor.\n\nBTW, what happens if I associate the same share to a second VM on the same host? Will this try to mount the same share the second time? Will that fail, or detect that it is already mounted and reuse the mountpoint, or we use separate mount points per VM?","commit_id":"b9b235977bbd8618b9d0cb329bbb7e239dcdb087"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"5315442fdf04757fa6822435abedbc5b8e080fd7","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                share_mapping.share_proto \u003d manila_share_data.share_proto"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"                share_mapping.create()"},{"line_number":150,"context_line":"                self.compute_api.mount_share(cctxt, instance, share_mapping)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"                view \u003d self._view_builder._show_view(cctxt, share_mapping)"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":27,"id":"0c9adbd3_b836d05e","line":150,"in_reply_to":"2a412768_c169b490","updated":"2023-04-11 17:47:48.000000000","message":"Done","commit_id":"b9b235977bbd8618b9d0cb329bbb7e239dcdb087"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a91884b1b919a11844cc8be9f9ad01f6eabace8","unresolved":true,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"            except (exception.ShareNotFound) as e:"},{"line_number":155,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":156,"context_line":"            except (exception.ShareMountError) as e:"},{"line_number":157,"context_line":"                raise webob.exc.HTTPInternalServerError("},{"line_number":158,"context_line":"                    explanation\u003de.filter_format_message())"},{"line_number":159,"context_line":"            except (exception.UnsupportedManilaAPIVersion) as e:"},{"line_number":160,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":161,"context_line":"            except (exception.ShareMappingAlreadyExists) as e:"}],"source_content_type":"text/x-python","patch_set":27,"id":"af7a1632_648dfa04","line":158,"range":{"start_line":156,"start_character":0,"end_line":158,"end_character":58},"updated":"2023-03-10 16:55:06.000000000","message":"At this point do we want to keep the ShareMapping in INACTIVE or do we want to move it to ERROR status. I think the latter. And also I think we need logic that if the ShareMapping is in ERROR state then the subsequent instance hard reboot should not try to add the fs to the domain XML as that fs is not mounted on the hypervisor.","commit_id":"b9b235977bbd8618b9d0cb329bbb7e239dcdb087"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"1d37ecd85d5d2387e2fdb2f59b7fb4448677f831","unresolved":true,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"            except (exception.ShareNotFound) as e:"},{"line_number":155,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":156,"context_line":"            except (exception.ShareMountError) as e:"},{"line_number":157,"context_line":"                raise webob.exc.HTTPInternalServerError("},{"line_number":158,"context_line":"                    explanation\u003de.filter_format_message())"},{"line_number":159,"context_line":"            except (exception.UnsupportedManilaAPIVersion) as e:"},{"line_number":160,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":161,"context_line":"            except (exception.ShareMappingAlreadyExists) as e:"}],"source_content_type":"text/x-python","patch_set":27,"id":"4dc9711e_a731ec7b","line":158,"range":{"start_line":156,"start_character":0,"end_line":158,"end_character":58},"in_reply_to":"359f4008_5a9b2c06","updated":"2024-02-16 16:20:24.000000000","message":"Not anymore relevant.","commit_id":"b9b235977bbd8618b9d0cb329bbb7e239dcdb087"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"946d0c5c51849c632de584a1e0d2212b0fba171f","unresolved":false,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"            except (exception.ShareNotFound) as e:"},{"line_number":155,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":156,"context_line":"            except (exception.ShareMountError) as e:"},{"line_number":157,"context_line":"                raise webob.exc.HTTPInternalServerError("},{"line_number":158,"context_line":"                    explanation\u003de.filter_format_message())"},{"line_number":159,"context_line":"            except (exception.UnsupportedManilaAPIVersion) as e:"},{"line_number":160,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":161,"context_line":"            except (exception.ShareMappingAlreadyExists) as e:"}],"source_content_type":"text/x-python","patch_set":27,"id":"84b10fa0_598972ab","line":158,"range":{"start_line":156,"start_character":0,"end_line":158,"end_character":58},"in_reply_to":"4dc9711e_a731ec7b","updated":"2024-06-20 08:24:16.000000000","message":"Done","commit_id":"b9b235977bbd8618b9d0cb329bbb7e239dcdb087"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"5315442fdf04757fa6822435abedbc5b8e080fd7","unresolved":true,"context_lines":[{"line_number":153,"context_line":""},{"line_number":154,"context_line":"            except (exception.ShareNotFound) as e:"},{"line_number":155,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":156,"context_line":"            except (exception.ShareMountError) as e:"},{"line_number":157,"context_line":"                raise webob.exc.HTTPInternalServerError("},{"line_number":158,"context_line":"                    explanation\u003de.filter_format_message())"},{"line_number":159,"context_line":"            except (exception.UnsupportedManilaAPIVersion) as e:"},{"line_number":160,"context_line":"                raise webob.exc.HTTPBadRequest(explanation\u003de.format_message())"},{"line_number":161,"context_line":"            except (exception.ShareMappingAlreadyExists) as e:"}],"source_content_type":"text/x-python","patch_set":27,"id":"359f4008_5a9b2c06","line":158,"range":{"start_line":156,"start_character":0,"end_line":158,"end_character":58},"in_reply_to":"af7a1632_648dfa04","updated":"2023-04-11 17:47:48.000000000","message":"Yes, this is part of the manager _get_share_info(), if we have an error on the share, then the instance starts without the share, and a warning is raised.\n\n            if share_mapping.status \u003d\u003d fields.ShareMappingStatus.ERROR:\n                LOG.warning(\n                    \"Share id \u0027%s\u0027 attached to server id \u0027%s\u0027 is in \"\n                    \"error state. So skipping it to avoid VM errors.\",\n                    share_mapping.share_id,\n                    instance.id\n                )","commit_id":"b9b235977bbd8618b9d0cb329bbb7e239dcdb087"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"7b6b4bd7cb2c4e60d7f16d61d5e48c825b07e8c3","unresolved":true,"context_lines":[{"line_number":218,"context_line":"                # Check if this share is used by other VMs on the same compute"},{"line_number":219,"context_line":"                # If yes, then we should not deny this access"},{"line_number":220,"context_line":"                if len(sm.ShareMappingList.get_by_share_id_node_id("},{"line_number":221,"context_line":"                    cctxt, share_mapping.share_id, instance.node)"},{"line_number":222,"context_line":"                ) \u003c 2:"},{"line_number":223,"context_line":"                    self.compute_api.umount_share("},{"line_number":224,"context_line":"                        cctxt, instance, share_mapping)"}],"source_content_type":"text/x-python","patch_set":27,"id":"e42806a7_81343272","line":221,"updated":"2023-03-13 15:23:20.000000000","message":"IMHO, instead of having an object method that would call the compute API inside (and then creating a dependency on some private API method, ie. compute.get()), I\u0027d rather try to get the list of instances from the compute node found with instance.node and then try to get all the ShareMappings from this list of instances (you should then need to add another object remotable method for getting a list of share mappings from a list of instances)\n\nThat said, this check is indeed nice to have, but as a reminder, the below RPC call to umount also needs to make sure we don\u0027t race (with a semaphore on the share ID), as eventually we could have another instance using the same share *after* this verification.","commit_id":"b9b235977bbd8618b9d0cb329bbb7e239dcdb087"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"946d0c5c51849c632de584a1e0d2212b0fba171f","unresolved":false,"context_lines":[{"line_number":218,"context_line":"                # Check if this share is used by other VMs on the same compute"},{"line_number":219,"context_line":"                # If yes, then we should not deny this access"},{"line_number":220,"context_line":"                if len(sm.ShareMappingList.get_by_share_id_node_id("},{"line_number":221,"context_line":"                    cctxt, share_mapping.share_id, instance.node)"},{"line_number":222,"context_line":"                ) \u003c 2:"},{"line_number":223,"context_line":"                    self.compute_api.umount_share("},{"line_number":224,"context_line":"                        cctxt, instance, share_mapping)"}],"source_content_type":"text/x-python","patch_set":27,"id":"2095d1a9_35fbc647","line":221,"in_reply_to":"e42806a7_81343272","updated":"2024-06-20 08:24:16.000000000","message":"Acknowledged","commit_id":"b9b235977bbd8618b9d0cb329bbb7e239dcdb087"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a91884b1b919a11844cc8be9f9ad01f6eabace8","unresolved":true,"context_lines":[{"line_number":220,"context_line":"                if len(sm.ShareMappingList.get_by_share_id_node_id("},{"line_number":221,"context_line":"                    cctxt, share_mapping.share_id, instance.node)"},{"line_number":222,"context_line":"                ) \u003c 2:"},{"line_number":223,"context_line":"                    self.compute_api.umount_share("},{"line_number":224,"context_line":"                        cctxt, instance, share_mapping)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"                share_mapping.detach()"}],"source_content_type":"text/x-python","patch_set":27,"id":"360d6cec_4b6607d6","line":223,"updated":"2023-03-10 16:55:06.000000000","message":"So we remove the mount from the hypervisor.\n\nIt think you need to do the umount_share() and share_mapping.delete() steps during instance delete as well but I don\u0027t see that in the codebase. So I think we leak the mount when an ACTIVE instance using the share is deleted. \n\nThe delete codepath can be extra complicated as we support deleting an instance from the API perspective while the compute host hosting the instance is unavailable ( it is called local delete). And then when the compute comes back later, it detects that and instance was deleted and do the cleanup. So the delete codepath in the API cannot directly rely on calling umount_share().","commit_id":"b9b235977bbd8618b9d0cb329bbb7e239dcdb087"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"946d0c5c51849c632de584a1e0d2212b0fba171f","unresolved":false,"context_lines":[{"line_number":220,"context_line":"                if len(sm.ShareMappingList.get_by_share_id_node_id("},{"line_number":221,"context_line":"                    cctxt, share_mapping.share_id, instance.node)"},{"line_number":222,"context_line":"                ) \u003c 2:"},{"line_number":223,"context_line":"                    self.compute_api.umount_share("},{"line_number":224,"context_line":"                        cctxt, instance, share_mapping)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"                share_mapping.detach()"}],"source_content_type":"text/x-python","patch_set":27,"id":"15de2a18_0c2cb898","line":223,"in_reply_to":"360d6cec_4b6607d6","updated":"2024-06-20 08:24:16.000000000","message":"Acknowledged","commit_id":"b9b235977bbd8618b9d0cb329bbb7e239dcdb087"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2a91884b1b919a11844cc8be9f9ad01f6eabace8","unresolved":true,"context_lines":[{"line_number":223,"context_line":"                    self.compute_api.umount_share("},{"line_number":224,"context_line":"                        cctxt, instance, share_mapping)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"                share_mapping.detach()"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"            except (exception.ShareNotFound) as e:"},{"line_number":229,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":27,"id":"d25e674b_ae555a83","line":226,"updated":"2023-03-10 16:55:06.000000000","message":"I would call share_mapping.delete() instead. See my comment on ShareMapping.detach()","commit_id":"b9b235977bbd8618b9d0cb329bbb7e239dcdb087"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"5315442fdf04757fa6822435abedbc5b8e080fd7","unresolved":false,"context_lines":[{"line_number":223,"context_line":"                    self.compute_api.umount_share("},{"line_number":224,"context_line":"                        cctxt, instance, share_mapping)"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"                share_mapping.detach()"},{"line_number":227,"context_line":""},{"line_number":228,"context_line":"            except (exception.ShareNotFound) as e:"},{"line_number":229,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":27,"id":"4032b3a8_0f89b86d","line":226,"in_reply_to":"d25e674b_ae555a83","updated":"2023-04-11 17:47:48.000000000","message":"Done","commit_id":"b9b235977bbd8618b9d0cb329bbb7e239dcdb087"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"1b9d0fa1a7eb38d6b8b67688fc6b48944c9c982a","unresolved":true,"context_lines":[{"line_number":115,"context_line":"        )"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        share_dict \u003d body[\u0027share\u0027]"},{"line_number":118,"context_line":"        share_id \u003d share_dict.get(\u0027shareId\u0027)"},{"line_number":119,"context_line":"        share_tag \u003d share_dict.get(\u0027tag\u0027)"},{"line_number":120,"context_line":"        with nova_context.target_cell(context, im.cell_mapping) as cctxt:"},{"line_number":121,"context_line":"            instance \u003d self._check_instance_in_valid_state("}],"source_content_type":"text/x-python","patch_set":35,"id":"a40ecda5_38a3a620","line":118,"range":{"start_line":118,"start_character":35,"end_line":118,"end_character":42},"updated":"2023-06-07 14:01:47.000000000","message":"please don\u0027t use Camelcase here :\nhttps://specs.openstack.org/openstack/api-wg/guidelines/naming.html#fields-in-an-api-request-or-response-body\n\n(I won\u0027t tell publicly who shared this secret information, shhhht ;) )","commit_id":"12e0c11795a28be83e8647143044872cf668c5a1"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2842ca0b8d975fabc161de4f77b18b1ee38ba947","unresolved":true,"context_lines":[{"line_number":115,"context_line":"        )"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        share_dict \u003d body[\u0027share\u0027]"},{"line_number":118,"context_line":"        share_id \u003d share_dict.get(\u0027shareId\u0027)"},{"line_number":119,"context_line":"        share_tag \u003d share_dict.get(\u0027tag\u0027)"},{"line_number":120,"context_line":"        with nova_context.target_cell(context, im.cell_mapping) as cctxt:"},{"line_number":121,"context_line":"            instance \u003d self._check_instance_in_valid_state("}],"source_content_type":"text/x-python","patch_set":35,"id":"c7699028_9b17d6be","line":118,"range":{"start_line":118,"start_character":35,"end_line":118,"end_character":42},"in_reply_to":"a40ecda5_38a3a620","updated":"2023-06-07 16:20:14.000000000","message":"Sounds like \"l\u0027arroseur arrosé\". ;)\n\nI keep it in French as revenge for all the English                         expressions I had to search for meaning. ;)","commit_id":"12e0c11795a28be83e8647143044872cf668c5a1"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"946d0c5c51849c632de584a1e0d2212b0fba171f","unresolved":false,"context_lines":[{"line_number":115,"context_line":"        )"},{"line_number":116,"context_line":""},{"line_number":117,"context_line":"        share_dict \u003d body[\u0027share\u0027]"},{"line_number":118,"context_line":"        share_id \u003d share_dict.get(\u0027shareId\u0027)"},{"line_number":119,"context_line":"        share_tag \u003d share_dict.get(\u0027tag\u0027)"},{"line_number":120,"context_line":"        with nova_context.target_cell(context, im.cell_mapping) as cctxt:"},{"line_number":121,"context_line":"            instance \u003d self._check_instance_in_valid_state("}],"source_content_type":"text/x-python","patch_set":35,"id":"d140851b_6bf0ada5","line":118,"range":{"start_line":118,"start_character":35,"end_line":118,"end_character":42},"in_reply_to":"c7699028_9b17d6be","updated":"2024-06-20 08:24:16.000000000","message":"Done","commit_id":"12e0c11795a28be83e8647143044872cf668c5a1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"973fe8e4fc2df66874dc35c87938c8ca919de637","unresolved":true,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @wsgi.Controller.api_version(\"2.96\")"},{"line_number":70,"context_line":"    @wsgi.response(200)"},{"line_number":71,"context_line":"    @wsgi.expected_errors((400, 401, 403, 404, 409))"},{"line_number":72,"context_line":"    def index(self, req, server_id):"},{"line_number":73,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":74,"context_line":"        # Get instance mapping to query the required cell database"}],"source_content_type":"text/x-python","patch_set":42,"id":"7cfcf7b1_7e249778","line":71,"updated":"2024-01-30 12:40:43.000000000","message":"when we get 409 from this API?","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d7fb0158c49044dd226e401f7a5dd013cbd44fea","unresolved":false,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @wsgi.Controller.api_version(\"2.96\")"},{"line_number":70,"context_line":"    @wsgi.response(200)"},{"line_number":71,"context_line":"    @wsgi.expected_errors((400, 401, 403, 404, 409))"},{"line_number":72,"context_line":"    def index(self, req, server_id):"},{"line_number":73,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":74,"context_line":"        # Get instance mapping to query the required cell database"}],"source_content_type":"text/x-python","patch_set":42,"id":"a92bbb8b_886a510d","line":71,"in_reply_to":"51450932_8a55efdc","updated":"2024-06-11 15:29:43.000000000","message":"I see there is a check_shares_supported that can cause 409, lets discuss it separately if we want that in index.","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"1d37ecd85d5d2387e2fdb2f59b7fb4448677f831","unresolved":true,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @wsgi.Controller.api_version(\"2.96\")"},{"line_number":70,"context_line":"    @wsgi.response(200)"},{"line_number":71,"context_line":"    @wsgi.expected_errors((400, 401, 403, 404, 409))"},{"line_number":72,"context_line":"    def index(self, req, server_id):"},{"line_number":73,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":74,"context_line":"        # Get instance mapping to query the required cell database"}],"source_content_type":"text/x-python","patch_set":42,"id":"851290ae_3bcae0ad","line":71,"in_reply_to":"7cfcf7b1_7e249778","updated":"2024-02-16 16:20:24.000000000","message":"We get a 409 if the instance is not configured correctly and actions are blocked.","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2dc229817a00997931167e7971d31db1424f609c","unresolved":true,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @wsgi.Controller.api_version(\"2.96\")"},{"line_number":70,"context_line":"    @wsgi.response(200)"},{"line_number":71,"context_line":"    @wsgi.expected_errors((400, 401, 403, 404, 409))"},{"line_number":72,"context_line":"    def index(self, req, server_id):"},{"line_number":73,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":74,"context_line":"        # Get instance mapping to query the required cell database"}],"source_content_type":"text/x-python","patch_set":42,"id":"ef660af3_be6ffdfc","line":71,"in_reply_to":"851290ae_3bcae0ad","updated":"2024-02-19 17:09:56.000000000","message":"but this is API is listing the share mappings. do we check the instance status there?","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"dec74d7a3f61aed89aaed12fcc14e787c497c11e","unresolved":true,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @wsgi.Controller.api_version(\"2.96\")"},{"line_number":70,"context_line":"    @wsgi.response(200)"},{"line_number":71,"context_line":"    @wsgi.expected_errors((400, 401, 403, 404, 409))"},{"line_number":72,"context_line":"    def index(self, req, server_id):"},{"line_number":73,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":74,"context_line":"        # Get instance mapping to query the required cell database"}],"source_content_type":"text/x-python","patch_set":42,"id":"a0292135_81a11c58","line":71,"in_reply_to":"ef660af3_be6ffdfc","updated":"2024-02-28 13:50:03.000000000","message":"Sorry, maybe I was unclear.\nAs an example, all share API routes will be blocked","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"64a7f19c4843f27d63fd2ea03e86c908f43250b2","unresolved":true,"context_lines":[{"line_number":68,"context_line":""},{"line_number":69,"context_line":"    @wsgi.Controller.api_version(\"2.96\")"},{"line_number":70,"context_line":"    @wsgi.response(200)"},{"line_number":71,"context_line":"    @wsgi.expected_errors((400, 401, 403, 404, 409))"},{"line_number":72,"context_line":"    def index(self, req, server_id):"},{"line_number":73,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":74,"context_line":"        # Get instance mapping to query the required cell database"}],"source_content_type":"text/x-python","patch_set":42,"id":"51450932_8a55efdc","line":71,"in_reply_to":"ef660af3_be6ffdfc","updated":"2024-02-28 14:16:51.000000000","message":"this is still open","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"973fe8e4fc2df66874dc35c87938c8ca919de637","unresolved":true,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    @wsgi.Controller.api_version(\"2.96\")"},{"line_number":93,"context_line":"    @wsgi.response(201)"},{"line_number":94,"context_line":"    @wsgi.expected_errors((400, 401, 403, 404, 409, 500))"},{"line_number":95,"context_line":"    @validation.schema(schema.create, min_version\u003d\u00272.96\u0027)"},{"line_number":96,"context_line":"    def create(self, req, server_id, body):"},{"line_number":97,"context_line":"        def sm_exists():"}],"source_content_type":"text/x-python","patch_set":42,"id":"a3c601a4_4c88758f","line":94,"updated":"2024-01-30 12:40:43.000000000","message":"we should never expect 500 as 500 means a bug in our implementation.","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"946d0c5c51849c632de584a1e0d2212b0fba171f","unresolved":false,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    @wsgi.Controller.api_version(\"2.96\")"},{"line_number":93,"context_line":"    @wsgi.response(201)"},{"line_number":94,"context_line":"    @wsgi.expected_errors((400, 401, 403, 404, 409, 500))"},{"line_number":95,"context_line":"    @validation.schema(schema.create, min_version\u003d\u00272.96\u0027)"},{"line_number":96,"context_line":"    def create(self, req, server_id, body):"},{"line_number":97,"context_line":"        def sm_exists():"}],"source_content_type":"text/x-python","patch_set":42,"id":"15b8be5a_7a68dfa6","line":94,"in_reply_to":"36736532_cb76fe3c","updated":"2024-06-20 08:24:16.000000000","message":"Done","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"1d37ecd85d5d2387e2fdb2f59b7fb4448677f831","unresolved":true,"context_lines":[{"line_number":91,"context_line":""},{"line_number":92,"context_line":"    @wsgi.Controller.api_version(\"2.96\")"},{"line_number":93,"context_line":"    @wsgi.response(201)"},{"line_number":94,"context_line":"    @wsgi.expected_errors((400, 401, 403, 404, 409, 500))"},{"line_number":95,"context_line":"    @validation.schema(schema.create, min_version\u003d\u00272.96\u0027)"},{"line_number":96,"context_line":"    def create(self, req, server_id, body):"},{"line_number":97,"context_line":"        def sm_exists():"}],"source_content_type":"text/x-python","patch_set":42,"id":"36736532_cb76fe3c","line":94,"in_reply_to":"a3c601a4_4c88758f","updated":"2024-02-16 16:20:24.000000000","message":"ok make sens.","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8b06d952c00affa4ba6839313fca91202ba94ae8","unresolved":true,"context_lines":[{"line_number":147,"context_line":"                share_mapping.share_proto \u003d manila_share_data.share_proto"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"                share_mapping.create()"},{"line_number":150,"context_line":"                self.compute_api.mount_share(cctxt, instance, share_mapping)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"                view \u003d self._view_builder._show_view(cctxt, share_mapping)"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"ac1b1f5f_024fa843","line":150,"updated":"2024-01-29 18:07:11.000000000","message":"So this makes the attach share REST API waiting for the mounting of the manila share on the hypervisor. This is a deviation from the spec:\n```\nShare attachment/detachment can only be done if the VM state is ``STOPPED``\nor ``ERROR``.\nThese are operations only on the database, and no RPC calls will be required\nto the compute API. This is an intentional design for this spec.\nAs a result, this could lead to situation where the VM start operation fails\nas an underlying share attach fails.\n```\nAnd this has at leas the consequence that the manila share access retry loop should not be configured (via share_apply_policy_timeout)  to take more time than our RPC call timeout otherwise the API will return HTTP 500.","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6ac466ee694c932ef431c0acc47f931f7021ee","unresolved":false,"context_lines":[{"line_number":147,"context_line":"                share_mapping.share_proto \u003d manila_share_data.share_proto"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"                share_mapping.create()"},{"line_number":150,"context_line":"                self.compute_api.mount_share(cctxt, instance, share_mapping)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"                view \u003d self._view_builder._show_view(cctxt, share_mapping)"},{"line_number":153,"context_line":""}],"source_content_type":"text/x-python","patch_set":42,"id":"657ebb17_7f7e0b28","line":150,"in_reply_to":"ac1b1f5f_024fa843","updated":"2024-02-13 15:14:58.000000000","message":"it is a cast now.","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"973fe8e4fc2df66874dc35c87938c8ca919de637","unresolved":true,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    @wsgi.Controller.api_version(\"2.96\")"},{"line_number":170,"context_line":"    @wsgi.response(200)"},{"line_number":171,"context_line":"    @wsgi.expected_errors((400, 401, 403, 404, 409))"},{"line_number":172,"context_line":"    def show(self, req, server_id, id):"},{"line_number":173,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":174,"context_line":"        # Get instance mapping to query the required cell database"}],"source_content_type":"text/x-python","patch_set":42,"id":"cf53ff47_7515edc0","line":171,"updated":"2024-01-30 12:40:43.000000000","message":"when we return 409 here?","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2dc229817a00997931167e7971d31db1424f609c","unresolved":true,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    @wsgi.Controller.api_version(\"2.96\")"},{"line_number":170,"context_line":"    @wsgi.response(200)"},{"line_number":171,"context_line":"    @wsgi.expected_errors((400, 401, 403, 404, 409))"},{"line_number":172,"context_line":"    def show(self, req, server_id, id):"},{"line_number":173,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":174,"context_line":"        # Get instance mapping to query the required cell database"}],"source_content_type":"text/x-python","patch_set":42,"id":"3daa669e_3b327233","line":171,"in_reply_to":"3047d738_037cbcea","updated":"2024-02-19 17:09:56.000000000","message":"but this API shows a single share mapping","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d7fb0158c49044dd226e401f7a5dd013cbd44fea","unresolved":true,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    @wsgi.Controller.api_version(\"2.96\")"},{"line_number":170,"context_line":"    @wsgi.response(200)"},{"line_number":171,"context_line":"    @wsgi.expected_errors((400, 401, 403, 404, 409))"},{"line_number":172,"context_line":"    def show(self, req, server_id, id):"},{"line_number":173,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":174,"context_line":"        # Get instance mapping to query the required cell database"}],"source_content_type":"text/x-python","patch_set":42,"id":"5507fccc_7edf6547","line":171,"in_reply_to":"3daa669e_3b327233","updated":"2024-06-11 15:29:43.000000000","message":"This is still open. I suggest to drop the check_shares_supported check. Showing a share on an instance that does not support shares should simply result in 404 as the share mapping will never exists in the DB for these instances. This would allow dropping 409 from the list of codes as well.","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"ce1531fe9839dc055753e119c8e852a4254e9ba3","unresolved":false,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    @wsgi.Controller.api_version(\"2.96\")"},{"line_number":170,"context_line":"    @wsgi.response(200)"},{"line_number":171,"context_line":"    @wsgi.expected_errors((400, 401, 403, 404, 409))"},{"line_number":172,"context_line":"    def show(self, req, server_id, id):"},{"line_number":173,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":174,"context_line":"        # Get instance mapping to query the required cell database"}],"source_content_type":"text/x-python","patch_set":42,"id":"bb1602d6_14c42ffd","line":171,"in_reply_to":"46dbea0f_95e8e5dd","updated":"2024-06-26 16:12:35.000000000","message":"Done","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"946d0c5c51849c632de584a1e0d2212b0fba171f","unresolved":true,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    @wsgi.Controller.api_version(\"2.96\")"},{"line_number":170,"context_line":"    @wsgi.response(200)"},{"line_number":171,"context_line":"    @wsgi.expected_errors((400, 401, 403, 404, 409))"},{"line_number":172,"context_line":"    def show(self, req, server_id, id):"},{"line_number":173,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":174,"context_line":"        # Get instance mapping to query the required cell database"}],"source_content_type":"text/x-python","patch_set":42,"id":"46dbea0f_95e8e5dd","line":171,"in_reply_to":"5507fccc_7edf6547","updated":"2024-06-20 08:24:16.000000000","message":"See #85.\n\nBtw is there an issue to answer with a 409 ?","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"1d37ecd85d5d2387e2fdb2f59b7fb4448677f831","unresolved":true,"context_lines":[{"line_number":168,"context_line":""},{"line_number":169,"context_line":"    @wsgi.Controller.api_version(\"2.96\")"},{"line_number":170,"context_line":"    @wsgi.response(200)"},{"line_number":171,"context_line":"    @wsgi.expected_errors((400, 401, 403, 404, 409))"},{"line_number":172,"context_line":"    def show(self, req, server_id, id):"},{"line_number":173,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":174,"context_line":"        # Get instance mapping to query the required cell database"}],"source_content_type":"text/x-python","patch_set":42,"id":"3047d738_037cbcea","line":171,"in_reply_to":"cf53ff47_7515edc0","updated":"2024-02-16 16:20:24.000000000","message":"Action blocked.","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"973fe8e4fc2df66874dc35c87938c8ca919de637","unresolved":true,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @wsgi.Controller.api_version(\"2.96\")"},{"line_number":197,"context_line":"    @wsgi.response(200)"},{"line_number":198,"context_line":"    @wsgi.expected_errors((400, 401, 403, 404, 409, 500))"},{"line_number":199,"context_line":"    def delete(self, req, server_id, id):"},{"line_number":200,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":201,"context_line":"        # Get instance mapping to query the required cell database"}],"source_content_type":"text/x-python","patch_set":42,"id":"bc1759fb_128779aa","line":198,"updated":"2024-01-30 12:40:43.000000000","message":"we should never expect 500","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"946d0c5c51849c632de584a1e0d2212b0fba171f","unresolved":false,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @wsgi.Controller.api_version(\"2.96\")"},{"line_number":197,"context_line":"    @wsgi.response(200)"},{"line_number":198,"context_line":"    @wsgi.expected_errors((400, 401, 403, 404, 409, 500))"},{"line_number":199,"context_line":"    def delete(self, req, server_id, id):"},{"line_number":200,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":201,"context_line":"        # Get instance mapping to query the required cell database"}],"source_content_type":"text/x-python","patch_set":42,"id":"339341d1_b42e4876","line":198,"in_reply_to":"19eea736_291843dd","updated":"2024-06-20 08:24:16.000000000","message":"Done","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"1d37ecd85d5d2387e2fdb2f59b7fb4448677f831","unresolved":true,"context_lines":[{"line_number":195,"context_line":""},{"line_number":196,"context_line":"    @wsgi.Controller.api_version(\"2.96\")"},{"line_number":197,"context_line":"    @wsgi.response(200)"},{"line_number":198,"context_line":"    @wsgi.expected_errors((400, 401, 403, 404, 409, 500))"},{"line_number":199,"context_line":"    def delete(self, req, server_id, id):"},{"line_number":200,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":201,"context_line":"        # Get instance mapping to query the required cell database"}],"source_content_type":"text/x-python","patch_set":42,"id":"19eea736_291843dd","line":198,"in_reply_to":"bc1759fb_128779aa","updated":"2024-02-16 16:20:24.000000000","message":"ok","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ac6ac466ee694c932ef431c0acc47f931f7021ee","unresolved":true,"context_lines":[{"line_number":157,"context_line":"                    objects.ShareMapping.get_by_instance_uuid_and_share_id("},{"line_number":158,"context_line":"                        cctxt, server_id, manila_share_data.id"},{"line_number":159,"context_line":"                    )"},{"line_number":160,"context_line":"                )"},{"line_number":161,"context_line":"                view \u003d self._view_builder._show_view(cctxt, share_mapping)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"            except (exception.ShareNotFound) as e:"}],"source_content_type":"text/x-python","patch_set":43,"id":"87db7625_204c2091","line":160,"updated":"2024-02-13 15:14:58.000000000","message":"While this refresh will not cause any trouble I don\u0027t see the reason to have it. There is only a very minor chance that the compute already got and processed the RPC cast before we return from the REST API request. So I think it is totally OK to return the already loaded mapping in ATTACHING state. The user needs to poll for the status in most of the cases anyhow.","commit_id":"3e978c6b40cb64233ac20f4baa2c0535760fb788"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"946d0c5c51849c632de584a1e0d2212b0fba171f","unresolved":false,"context_lines":[{"line_number":157,"context_line":"                    objects.ShareMapping.get_by_instance_uuid_and_share_id("},{"line_number":158,"context_line":"                        cctxt, server_id, manila_share_data.id"},{"line_number":159,"context_line":"                    )"},{"line_number":160,"context_line":"                )"},{"line_number":161,"context_line":"                view \u003d self._view_builder._show_view(cctxt, share_mapping)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"            except (exception.ShareNotFound) as e:"}],"source_content_type":"text/x-python","patch_set":43,"id":"7378a9b1_21ccab28","line":160,"in_reply_to":"77774565_119a7b78","updated":"2024-06-20 08:24:16.000000000","message":"Done","commit_id":"3e978c6b40cb64233ac20f4baa2c0535760fb788"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"1d37ecd85d5d2387e2fdb2f59b7fb4448677f831","unresolved":true,"context_lines":[{"line_number":157,"context_line":"                    objects.ShareMapping.get_by_instance_uuid_and_share_id("},{"line_number":158,"context_line":"                        cctxt, server_id, manila_share_data.id"},{"line_number":159,"context_line":"                    )"},{"line_number":160,"context_line":"                )"},{"line_number":161,"context_line":"                view \u003d self._view_builder._show_view(cctxt, share_mapping)"},{"line_number":162,"context_line":""},{"line_number":163,"context_line":"            except (exception.ShareNotFound) as e:"}],"source_content_type":"text/x-python","patch_set":43,"id":"77774565_119a7b78","line":160,"in_reply_to":"87db7625_204c2091","updated":"2024-02-16 16:20:24.000000000","message":"I agree. Gonna remove it.","commit_id":"3e978c6b40cb64233ac20f4baa2c0535760fb788"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"65503b9965f268547bb891a8aa4bca0291aa3295","unresolved":true,"context_lines":[{"line_number":219,"context_line":"                    )"},{"line_number":220,"context_line":"                )"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"                self.compute_api.umount_share(cctxt, instance, share_mapping)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"                share_mapping.delete()"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"            except (exception.ShareNotFound) as e:"},{"line_number":227,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":43,"id":"a8c5b936_f2218f89","line":224,"range":{"start_line":222,"start_character":0,"end_line":224,"end_character":38},"updated":"2024-02-13 10:18:03.000000000","message":"as unmount_share is async the deletion of the sharemapping here might is too early as the compute manager will try to save status to the sharemapping later when handling the RPC https://review.opendev.org/c/openstack/nova/+/833090/41/nova/compute/manager.py#4729","commit_id":"3e978c6b40cb64233ac20f4baa2c0535760fb788"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"1d37ecd85d5d2387e2fdb2f59b7fb4448677f831","unresolved":true,"context_lines":[{"line_number":219,"context_line":"                    )"},{"line_number":220,"context_line":"                )"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"                self.compute_api.umount_share(cctxt, instance, share_mapping)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"                share_mapping.delete()"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"            except (exception.ShareNotFound) as e:"},{"line_number":227,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":43,"id":"e1192460_ff3b8a65","line":224,"range":{"start_line":222,"start_character":0,"end_line":224,"end_character":38},"in_reply_to":"a8c5b936_f2218f89","updated":"2024-02-16 16:20:24.000000000","message":"We need to discuss that. Maybe the RPC should not handle anything about the status.\nBy deleting from the API, it avoids to be in a deadlock situation if \"deny\" or umount fails.","commit_id":"3e978c6b40cb64233ac20f4baa2c0535760fb788"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"bc1ab32bef1273370de3957976bf6403d2346649","unresolved":false,"context_lines":[{"line_number":219,"context_line":"                    )"},{"line_number":220,"context_line":"                )"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"                self.compute_api.umount_share(cctxt, instance, share_mapping)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"                share_mapping.delete()"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"            except (exception.ShareNotFound) as e:"},{"line_number":227,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":43,"id":"6893e0a8_6a3f713f","line":224,"range":{"start_line":222,"start_character":0,"end_line":224,"end_character":38},"in_reply_to":"ba6644cf_ef5c4d5d","updated":"2024-03-11 15:46:45.000000000","message":"Done","commit_id":"3e978c6b40cb64233ac20f4baa2c0535760fb788"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2dc229817a00997931167e7971d31db1424f609c","unresolved":true,"context_lines":[{"line_number":219,"context_line":"                    )"},{"line_number":220,"context_line":"                )"},{"line_number":221,"context_line":""},{"line_number":222,"context_line":"                self.compute_api.umount_share(cctxt, instance, share_mapping)"},{"line_number":223,"context_line":""},{"line_number":224,"context_line":"                share_mapping.delete()"},{"line_number":225,"context_line":""},{"line_number":226,"context_line":"            except (exception.ShareNotFound) as e:"},{"line_number":227,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":43,"id":"ba6644cf_ef5c4d5d","line":224,"range":{"start_line":222,"start_character":0,"end_line":224,"end_character":38},"in_reply_to":"e1192460_ff3b8a65","updated":"2024-02-19 17:09:56.000000000","message":"I would rather let the compute delete the mapping after the successful unmount. This way, the failure can be retryied with another API call.","commit_id":"3e978c6b40cb64233ac20f4baa2c0535760fb788"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"64a7f19c4843f27d63fd2ea03e86c908f43250b2","unresolved":true,"context_lines":[{"line_number":138,"context_line":"                share_mapping.instance_uuid \u003d server_id"},{"line_number":139,"context_line":"                share_mapping.share_id \u003d manila_share_data.id"},{"line_number":140,"context_line":"                share_mapping.status \u003d fields.ShareMappingStatus.ATTACHING"},{"line_number":141,"context_line":"                if share_tag:"},{"line_number":142,"context_line":"                    share_mapping.tag \u003d share_tag"},{"line_number":143,"context_line":"                else:"},{"line_number":144,"context_line":"                    share_mapping.tag \u003d manila_share_data.id"},{"line_number":145,"context_line":"                share_mapping.export_location \u003d ("},{"line_number":146,"context_line":"                    manila_share_data.export_location)"},{"line_number":147,"context_line":"                share_mapping.share_proto \u003d manila_share_data.share_proto"}],"source_content_type":"text/x-python","patch_set":46,"id":"dd75c11a_bb037e8f","line":144,"range":{"start_line":141,"start_character":0,"end_line":144,"end_character":60},"updated":"2024-02-28 14:16:51.000000000","message":"nit: this can be written simply as:\n```\nshare_mapping.tag \u003d share_dict.get(\u0027tag\u0027, manila_share_data.id)\n```","commit_id":"71368110db130c64fafa6874e34091abe0ad9ec3"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"bc1ab32bef1273370de3957976bf6403d2346649","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                share_mapping.instance_uuid \u003d server_id"},{"line_number":139,"context_line":"                share_mapping.share_id \u003d manila_share_data.id"},{"line_number":140,"context_line":"                share_mapping.status \u003d fields.ShareMappingStatus.ATTACHING"},{"line_number":141,"context_line":"                if share_tag:"},{"line_number":142,"context_line":"                    share_mapping.tag \u003d share_tag"},{"line_number":143,"context_line":"                else:"},{"line_number":144,"context_line":"                    share_mapping.tag \u003d manila_share_data.id"},{"line_number":145,"context_line":"                share_mapping.export_location \u003d ("},{"line_number":146,"context_line":"                    manila_share_data.export_location)"},{"line_number":147,"context_line":"                share_mapping.share_proto \u003d manila_share_data.share_proto"}],"source_content_type":"text/x-python","patch_set":46,"id":"5a4dbe7b_33603eb8","line":144,"range":{"start_line":141,"start_character":0,"end_line":144,"end_character":60},"in_reply_to":"dd75c11a_bb037e8f","updated":"2024-03-11 15:46:45.000000000","message":"Done","commit_id":"71368110db130c64fafa6874e34091abe0ad9ec3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"64a7f19c4843f27d63fd2ea03e86c908f43250b2","unresolved":true,"context_lines":[{"line_number":127,"context_line":"            try:"},{"line_number":128,"context_line":"                # Check if this share mapping already exists in the database."},{"line_number":129,"context_line":"                # Prevent user error, requesting an already associated share."},{"line_number":130,"context_line":"                if sm_exists():"},{"line_number":131,"context_line":"                    raise exception.ShareMappingAlreadyExists("},{"line_number":132,"context_line":"                        share_id\u003dshare_id)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"                manila_share_data \u003d self.manila.get(share_id)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"                share_mapping \u003d objects.ShareMapping(cctxt)"},{"line_number":137,"context_line":"                share_mapping.uuid \u003d uuidutils.generate_uuid()"},{"line_number":138,"context_line":"                share_mapping.instance_uuid \u003d server_id"},{"line_number":139,"context_line":"                share_mapping.share_id \u003d manila_share_data.id"},{"line_number":140,"context_line":"                share_mapping.status \u003d fields.ShareMappingStatus.ATTACHING"},{"line_number":141,"context_line":"                if share_tag:"},{"line_number":142,"context_line":"                    share_mapping.tag \u003d share_tag"},{"line_number":143,"context_line":"                else:"},{"line_number":144,"context_line":"                    share_mapping.tag \u003d manila_share_data.id"},{"line_number":145,"context_line":"                share_mapping.export_location \u003d ("},{"line_number":146,"context_line":"                    manila_share_data.export_location)"},{"line_number":147,"context_line":"                share_mapping.share_proto \u003d manila_share_data.share_proto"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"                share_mapping.create()"},{"line_number":150,"context_line":"                self.compute_api.allow_share(cctxt, instance, share_mapping)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"                view \u003d self._view_builder._show_view(cctxt, share_mapping)"}],"source_content_type":"text/x-python","patch_set":46,"id":"2e865a26_e0419210","line":149,"range":{"start_line":130,"start_character":0,"end_line":149,"end_character":38},"updated":"2024-02-28 14:16:51.000000000","message":"will this be racy? If two API requests come in parallel for the same instance and share and both see that there is no mapping yet, the both can end up creating a mapping. We should have protection against it in the DB(i.e. a unique constraint on the instance_uuid and share_is pair)","commit_id":"71368110db130c64fafa6874e34091abe0ad9ec3"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"bc1ab32bef1273370de3957976bf6403d2346649","unresolved":true,"context_lines":[{"line_number":127,"context_line":"            try:"},{"line_number":128,"context_line":"                # Check if this share mapping already exists in the database."},{"line_number":129,"context_line":"                # Prevent user error, requesting an already associated share."},{"line_number":130,"context_line":"                if sm_exists():"},{"line_number":131,"context_line":"                    raise exception.ShareMappingAlreadyExists("},{"line_number":132,"context_line":"                        share_id\u003dshare_id)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"                manila_share_data \u003d self.manila.get(share_id)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"                share_mapping \u003d objects.ShareMapping(cctxt)"},{"line_number":137,"context_line":"                share_mapping.uuid \u003d uuidutils.generate_uuid()"},{"line_number":138,"context_line":"                share_mapping.instance_uuid \u003d server_id"},{"line_number":139,"context_line":"                share_mapping.share_id \u003d manila_share_data.id"},{"line_number":140,"context_line":"                share_mapping.status \u003d fields.ShareMappingStatus.ATTACHING"},{"line_number":141,"context_line":"                if share_tag:"},{"line_number":142,"context_line":"                    share_mapping.tag \u003d share_tag"},{"line_number":143,"context_line":"                else:"},{"line_number":144,"context_line":"                    share_mapping.tag \u003d manila_share_data.id"},{"line_number":145,"context_line":"                share_mapping.export_location \u003d ("},{"line_number":146,"context_line":"                    manila_share_data.export_location)"},{"line_number":147,"context_line":"                share_mapping.share_proto \u003d manila_share_data.share_proto"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"                share_mapping.create()"},{"line_number":150,"context_line":"                self.compute_api.allow_share(cctxt, instance, share_mapping)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"                view \u003d self._view_builder._show_view(cctxt, share_mapping)"}],"source_content_type":"text/x-python","patch_set":46,"id":"c8540981_7f933c3a","line":149,"range":{"start_line":130,"start_character":0,"end_line":149,"end_character":38},"in_reply_to":"2e865a26_e0419210","updated":"2024-03-11 15:46:45.000000000","message":"Done, but I\u0027m not sure about test_migration.","commit_id":"71368110db130c64fafa6874e34091abe0ad9ec3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d7fb0158c49044dd226e401f7a5dd013cbd44fea","unresolved":false,"context_lines":[{"line_number":127,"context_line":"            try:"},{"line_number":128,"context_line":"                # Check if this share mapping already exists in the database."},{"line_number":129,"context_line":"                # Prevent user error, requesting an already associated share."},{"line_number":130,"context_line":"                if sm_exists():"},{"line_number":131,"context_line":"                    raise exception.ShareMappingAlreadyExists("},{"line_number":132,"context_line":"                        share_id\u003dshare_id)"},{"line_number":133,"context_line":""},{"line_number":134,"context_line":"                manila_share_data \u003d self.manila.get(share_id)"},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"                share_mapping \u003d objects.ShareMapping(cctxt)"},{"line_number":137,"context_line":"                share_mapping.uuid \u003d uuidutils.generate_uuid()"},{"line_number":138,"context_line":"                share_mapping.instance_uuid \u003d server_id"},{"line_number":139,"context_line":"                share_mapping.share_id \u003d manila_share_data.id"},{"line_number":140,"context_line":"                share_mapping.status \u003d fields.ShareMappingStatus.ATTACHING"},{"line_number":141,"context_line":"                if share_tag:"},{"line_number":142,"context_line":"                    share_mapping.tag \u003d share_tag"},{"line_number":143,"context_line":"                else:"},{"line_number":144,"context_line":"                    share_mapping.tag \u003d manila_share_data.id"},{"line_number":145,"context_line":"                share_mapping.export_location \u003d ("},{"line_number":146,"context_line":"                    manila_share_data.export_location)"},{"line_number":147,"context_line":"                share_mapping.share_proto \u003d manila_share_data.share_proto"},{"line_number":148,"context_line":""},{"line_number":149,"context_line":"                share_mapping.create()"},{"line_number":150,"context_line":"                self.compute_api.allow_share(cctxt, instance, share_mapping)"},{"line_number":151,"context_line":""},{"line_number":152,"context_line":"                view \u003d self._view_builder._show_view(cctxt, share_mapping)"}],"source_content_type":"text/x-python","patch_set":46,"id":"002a851d_328b464d","line":149,"range":{"start_line":130,"start_character":0,"end_line":149,"end_character":38},"in_reply_to":"c8540981_7f933c3a","updated":"2024-06-11 15:29:43.000000000","message":"Done in a separate patch before this that added a unique constraint on the share_mapping table.","commit_id":"71368110db130c64fafa6874e34091abe0ad9ec3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"64a7f19c4843f27d63fd2ea03e86c908f43250b2","unresolved":true,"context_lines":[{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    @wsgi.Controller.api_version(\"2.96\")"},{"line_number":162,"context_line":"    @wsgi.response(200)"},{"line_number":163,"context_line":"    @wsgi.expected_errors((400, 401, 403, 404, 409))"},{"line_number":164,"context_line":"    def show(self, req, server_id, id):"},{"line_number":165,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":166,"context_line":"        # Get instance mapping to query the required cell database"}],"source_content_type":"text/x-python","patch_set":46,"id":"d6e26ad0_9647f78b","line":163,"updated":"2024-02-28 14:16:51.000000000","message":"how can show return 409?","commit_id":"71368110db130c64fafa6874e34091abe0ad9ec3"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"ce1531fe9839dc055753e119c8e852a4254e9ba3","unresolved":false,"context_lines":[{"line_number":160,"context_line":""},{"line_number":161,"context_line":"    @wsgi.Controller.api_version(\"2.96\")"},{"line_number":162,"context_line":"    @wsgi.response(200)"},{"line_number":163,"context_line":"    @wsgi.expected_errors((400, 401, 403, 404, 409))"},{"line_number":164,"context_line":"    def show(self, req, server_id, id):"},{"line_number":165,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":166,"context_line":"        # Get instance mapping to query the required cell database"}],"source_content_type":"text/x-python","patch_set":46,"id":"b4508093_18026a75","line":163,"in_reply_to":"d6e26ad0_9647f78b","updated":"2024-06-26 16:12:35.000000000","message":"Done","commit_id":"71368110db130c64fafa6874e34091abe0ad9ec3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"64a7f19c4843f27d63fd2ea03e86c908f43250b2","unresolved":true,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"                self.compute_api.deny_share(cctxt, instance, share_mapping)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"                share_mapping.delete()"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"            except (exception.ShareNotFound) as e:"},{"line_number":218,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":46,"id":"639c5d42_c086c552","line":215,"updated":"2024-02-28 14:16:51.000000000","message":"the deny_share RPC above might try to manipulate the share_mapping deleted here (e.g. trying to set ERROR state on it if the manila interaction fails). I would rather let the RPC handler delete the db record after the manila cleanup succeeded. That way if the manila interaction fails, then we can still have a record by which we can retry.","commit_id":"71368110db130c64fafa6874e34091abe0ad9ec3"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"bc1ab32bef1273370de3957976bf6403d2346649","unresolved":false,"context_lines":[{"line_number":212,"context_line":""},{"line_number":213,"context_line":"                self.compute_api.deny_share(cctxt, instance, share_mapping)"},{"line_number":214,"context_line":""},{"line_number":215,"context_line":"                share_mapping.delete()"},{"line_number":216,"context_line":""},{"line_number":217,"context_line":"            except (exception.ShareNotFound) as e:"},{"line_number":218,"context_line":"                raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":46,"id":"4c920b06_62e5b9b6","line":215,"in_reply_to":"639c5d42_c086c552","updated":"2024-03-11 15:46:45.000000000","message":"Done","commit_id":"71368110db130c64fafa6874e34091abe0ad9ec3"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d7fb0158c49044dd226e401f7a5dd013cbd44fea","unresolved":true,"context_lines":[{"line_number":82,"context_line":"                instance \u003d self._get_instance_from_server_uuid("},{"line_number":83,"context_line":"                    cctxt, server_id"},{"line_number":84,"context_line":"                )"},{"line_number":85,"context_line":"                hw.check_shares_supported(cctxt, instance)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"                db_shares \u003d objects.ShareMappingList.get_by_instance_uuid("},{"line_number":88,"context_line":"                        cctxt, server_id"}],"source_content_type":"text/x-python","patch_set":53,"id":"ed3660ad_b8693e2a","line":85,"updated":"2024-06-11 15:29:43.000000000","message":"Do we need to check the share support while what we only do is listing the share mappings from the db? That db call itself does not depend on any prereqs checked by check_shares_supported. \nI think it would be a nicer UX to drop the check_shares_supported and let the db query return what is in the db, which will be empty list anyhow for the not supported instances. (also it would allow dropping 409 return code)","commit_id":"5006a8c845973549ece3455c6c15ed2d76fcedd4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"ce1531fe9839dc055753e119c8e852a4254e9ba3","unresolved":false,"context_lines":[{"line_number":82,"context_line":"                instance \u003d self._get_instance_from_server_uuid("},{"line_number":83,"context_line":"                    cctxt, server_id"},{"line_number":84,"context_line":"                )"},{"line_number":85,"context_line":"                hw.check_shares_supported(cctxt, instance)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"                db_shares \u003d objects.ShareMappingList.get_by_instance_uuid("},{"line_number":88,"context_line":"                        cctxt, server_id"}],"source_content_type":"text/x-python","patch_set":53,"id":"f0ae9324_9ffd7087","line":85,"in_reply_to":"c18649de_7d702b66","updated":"2024-06-26 16:12:35.000000000","message":"After our discussion, Gibi convinced me.","commit_id":"5006a8c845973549ece3455c6c15ed2d76fcedd4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"946d0c5c51849c632de584a1e0d2212b0fba171f","unresolved":true,"context_lines":[{"line_number":82,"context_line":"                instance \u003d self._get_instance_from_server_uuid("},{"line_number":83,"context_line":"                    cctxt, server_id"},{"line_number":84,"context_line":"                )"},{"line_number":85,"context_line":"                hw.check_shares_supported(cctxt, instance)"},{"line_number":86,"context_line":""},{"line_number":87,"context_line":"                db_shares \u003d objects.ShareMappingList.get_by_instance_uuid("},{"line_number":88,"context_line":"                        cctxt, server_id"}],"source_content_type":"text/x-python","patch_set":53,"id":"c18649de_7d702b66","line":85,"in_reply_to":"ed3660ad_b8693e2a","updated":"2024-06-20 08:24:16.000000000","message":"As a user, I would rather be warned that the feature is not configured properly, regardless of the action I will take.\n\nBut that\u0027s my personal preference; let\u0027s discuss with Sylvain what his preference is.","commit_id":"5006a8c845973549ece3455c6c15ed2d76fcedd4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d7fb0158c49044dd226e401f7a5dd013cbd44fea","unresolved":true,"context_lines":[{"line_number":133,"context_line":"                hw.check_shares_supported(cctxt, instance)"},{"line_number":134,"context_line":"                # Check if this share mapping already exists in the database."},{"line_number":135,"context_line":"                # Prevent user error, requesting an already associated share."},{"line_number":136,"context_line":"                if sm_exists():"},{"line_number":137,"context_line":"                    raise exception.ShareMappingAlreadyExists("},{"line_number":138,"context_line":"                        share_id\u003dshare_id)"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":53,"id":"9c72e333_6c7be668","line":136,"updated":"2024-06-11 15:29:43.000000000","message":"this is not needed any more the db.create will fail due to the unique constraint if the mapping already exists for the instance.","commit_id":"5006a8c845973549ece3455c6c15ed2d76fcedd4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"ce1531fe9839dc055753e119c8e852a4254e9ba3","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                hw.check_shares_supported(cctxt, instance)"},{"line_number":134,"context_line":"                # Check if this share mapping already exists in the database."},{"line_number":135,"context_line":"                # Prevent user error, requesting an already associated share."},{"line_number":136,"context_line":"                if sm_exists():"},{"line_number":137,"context_line":"                    raise exception.ShareMappingAlreadyExists("},{"line_number":138,"context_line":"                        share_id\u003dshare_id)"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":53,"id":"bd1e2cd5_d4fe306b","line":136,"in_reply_to":"04bc4f40_509b7310","updated":"2024-06-26 16:12:35.000000000","message":"Done","commit_id":"5006a8c845973549ece3455c6c15ed2d76fcedd4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"946d0c5c51849c632de584a1e0d2212b0fba171f","unresolved":true,"context_lines":[{"line_number":133,"context_line":"                hw.check_shares_supported(cctxt, instance)"},{"line_number":134,"context_line":"                # Check if this share mapping already exists in the database."},{"line_number":135,"context_line":"                # Prevent user error, requesting an already associated share."},{"line_number":136,"context_line":"                if sm_exists():"},{"line_number":137,"context_line":"                    raise exception.ShareMappingAlreadyExists("},{"line_number":138,"context_line":"                        share_id\u003dshare_id)"},{"line_number":139,"context_line":""}],"source_content_type":"text/x-python","patch_set":53,"id":"04bc4f40_509b7310","line":136,"in_reply_to":"9c72e333_6c7be668","updated":"2024-06-20 08:24:16.000000000","message":"I have transformed the DB exception to ShareMappingAlreadyExists because I think it is more explicit for users.\n\nLet me know what you think about it.","commit_id":"5006a8c845973549ece3455c6c15ed2d76fcedd4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"d7fb0158c49044dd226e401f7a5dd013cbd44fea","unresolved":true,"context_lines":[{"line_number":219,"context_line":"                \"delete share\""},{"line_number":220,"context_line":"            )"},{"line_number":221,"context_line":"            try:"},{"line_number":222,"context_line":"                hw.check_shares_supported(cctxt, instance)"},{"line_number":223,"context_line":"                share_mapping \u003d ("},{"line_number":224,"context_line":"                    objects.ShareMapping.get_by_instance_uuid_and_share_id("},{"line_number":225,"context_line":"                        cctxt, server_id, id"}],"source_content_type":"text/x-python","patch_set":53,"id":"d27b3edf_8968482c","line":222,"updated":"2024-06-11 15:29:43.000000000","message":"I would drop this too. Deleting a share from and instance that does not support shares will simply result in 404 as the share mapping cannot exists on the instance.","commit_id":"5006a8c845973549ece3455c6c15ed2d76fcedd4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"ce1531fe9839dc055753e119c8e852a4254e9ba3","unresolved":false,"context_lines":[{"line_number":219,"context_line":"                \"delete share\""},{"line_number":220,"context_line":"            )"},{"line_number":221,"context_line":"            try:"},{"line_number":222,"context_line":"                hw.check_shares_supported(cctxt, instance)"},{"line_number":223,"context_line":"                share_mapping \u003d ("},{"line_number":224,"context_line":"                    objects.ShareMapping.get_by_instance_uuid_and_share_id("},{"line_number":225,"context_line":"                        cctxt, server_id, id"}],"source_content_type":"text/x-python","patch_set":53,"id":"6a0c2e60_6b5fd475","line":222,"in_reply_to":"d27b3edf_8968482c","updated":"2024-06-26 16:12:35.000000000","message":"Done","commit_id":"5006a8c845973549ece3455c6c15ed2d76fcedd4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"521db50b429e2c2b1b8141cefc6b283bebc71e33","unresolved":true,"context_lines":[{"line_number":35,"context_line":"    try:"},{"line_number":36,"context_line":"        return objects.InstanceMapping.get_by_instance_uuid(context, server_id)"},{"line_number":37,"context_line":"    except exception.InstanceMappingNotFound as e:"},{"line_number":38,"context_line":"        raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class ServerSharesController(wsgi.Controller):"}],"source_content_type":"text/x-python","patch_set":56,"id":"94be13a5_6d924f8d","line":38,"updated":"2024-07-17 14:21:49.000000000","message":"translate this to InstanceNotFound to avoid leaking cell mapping related message. (see below)","commit_id":"8c41f9d4ae843f7dea24781d55ac50475a374dfd"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ef424ba8c753b47d34931fb0c30171ec0d17d773","unresolved":false,"context_lines":[{"line_number":35,"context_line":"    try:"},{"line_number":36,"context_line":"        return objects.InstanceMapping.get_by_instance_uuid(context, server_id)"},{"line_number":37,"context_line":"    except exception.InstanceMappingNotFound as e:"},{"line_number":38,"context_line":"        raise webob.exc.HTTPNotFound(explanation\u003de.format_message())"},{"line_number":39,"context_line":""},{"line_number":40,"context_line":""},{"line_number":41,"context_line":"class ServerSharesController(wsgi.Controller):"}],"source_content_type":"text/x-python","patch_set":56,"id":"35ce5b22_5a044f03","line":38,"in_reply_to":"94be13a5_6d924f8d","updated":"2024-07-31 12:00:44.000000000","message":"this is fixed now.","commit_id":"8c41f9d4ae843f7dea24781d55ac50475a374dfd"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"521db50b429e2c2b1b8141cefc6b283bebc71e33","unresolved":true,"context_lines":[{"line_number":76,"context_line":"    def index(self, req, server_id):"},{"line_number":77,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":78,"context_line":"        # Get instance mapping to query the required cell database"},{"line_number":79,"context_line":"        im \u003d _get_instance_mapping(context, server_id)"},{"line_number":80,"context_line":"        context.can(ss_policies.POLICY_ROOT % \u0027index\u0027,"},{"line_number":81,"context_line":"                    target\u003d{\u0027project_id\u0027: im.project_id})"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"c3347842_24dfc1bd","line":79,"updated":"2024-07-17 14:21:49.000000000","message":"here and below in the other API handlers: If called with a non existing instance uuid then this raise an exception that results in the following message to the user which will confuse the user:\n```\n{\"itemNotFound\": {\"code\": 404, \"message\": \"Instance 891d1f36-44f3-48fd-b685-525be221b2bc has no mapping to a cell.\"}}\n```\nWe should translate translate that to a simple \"Instance 891d1f36-44f3-48fd-b685-525be221b2bc not found.\" as the user has no idea about cell mappings.","commit_id":"8c41f9d4ae843f7dea24781d55ac50475a374dfd"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"ef424ba8c753b47d34931fb0c30171ec0d17d773","unresolved":false,"context_lines":[{"line_number":76,"context_line":"    def index(self, req, server_id):"},{"line_number":77,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":78,"context_line":"        # Get instance mapping to query the required cell database"},{"line_number":79,"context_line":"        im \u003d _get_instance_mapping(context, server_id)"},{"line_number":80,"context_line":"        context.can(ss_policies.POLICY_ROOT % \u0027index\u0027,"},{"line_number":81,"context_line":"                    target\u003d{\u0027project_id\u0027: im.project_id})"},{"line_number":82,"context_line":""}],"source_content_type":"text/x-python","patch_set":56,"id":"084328d8_7b3bf669","line":79,"in_reply_to":"c3347842_24dfc1bd","updated":"2024-07-31 12:00:44.000000000","message":"this is fixed now.","commit_id":"8c41f9d4ae843f7dea24781d55ac50475a374dfd"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"7df8be62caaae01272655033490d553579c54775","unresolved":true,"context_lines":[{"line_number":135,"context_line":"                    manila_share_data.export_location)"},{"line_number":136,"context_line":"                share_mapping.share_proto \u003d manila_share_data.share_proto"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"                _try_create_share_mapping(share_mapping)"},{"line_number":139,"context_line":"                self.compute_api.allow_share(cctxt, instance, share_mapping)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"                view \u003d self._view_builder._show_view(cctxt, share_mapping)"}],"source_content_type":"text/x-python","patch_set":56,"id":"e38262ba_4c736ba2","line":138,"updated":"2024-07-02 11:47:42.000000000","message":"you can inline this and include the `db_exc.DBDuplicateEntry` to the exception handler below.","commit_id":"8c41f9d4ae843f7dea24781d55ac50475a374dfd"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"ab03949cf6ee576b73997477bf8b04b9b09aacdf","unresolved":false,"context_lines":[{"line_number":135,"context_line":"                    manila_share_data.export_location)"},{"line_number":136,"context_line":"                share_mapping.share_proto \u003d manila_share_data.share_proto"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"                _try_create_share_mapping(share_mapping)"},{"line_number":139,"context_line":"                self.compute_api.allow_share(cctxt, instance, share_mapping)"},{"line_number":140,"context_line":""},{"line_number":141,"context_line":"                view \u003d self._view_builder._show_view(cctxt, share_mapping)"}],"source_content_type":"text/x-python","patch_set":56,"id":"fbc5a697_e031aba5","line":138,"in_reply_to":"e38262ba_4c736ba2","updated":"2024-11-19 14:00:22.000000000","message":"Done","commit_id":"8c41f9d4ae843f7dea24781d55ac50475a374dfd"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eedc7d3806df51ba7d46e83a56330b2ad1dbc39e","unresolved":true,"context_lines":[{"line_number":123,"context_line":"            try:"},{"line_number":124,"context_line":"                hw.check_shares_supported(cctxt, instance)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"                manila_share_data \u003d self.manila.get(cctxt, share_id)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"                share_mapping \u003d objects.ShareMapping(cctxt)"},{"line_number":129,"context_line":"                share_mapping.uuid \u003d uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":57,"id":"edf88148_9826bf0e","line":126,"updated":"2024-08-05 15:19:27.000000000","message":"If I try to attach a manila share that is is error state then nova returns 500 instead of 400 or 409.\n\n```\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi [None req-0d386931-d017-4f06-a763-65c41438111f demo demo] Unexpected exception in API method: IndexError: list index out of range\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi Traceback (most recent call last):\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/nova/nova/api/openstack/wsgi.py\", line 678, in wrapped\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi     return f(*args, **kwargs)\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/nova/nova/api/validation/__init__.py\", line 110, in wrapper\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi     return func(*args, **kwargs)\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/nova/nova/api/openstack/compute/server_shares.py\", line 126, in create\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi     manila_share_data \u003d self.manila.get(cctxt, share_id)\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/nova/nova/share/manila.py\", line 128, in wrapper\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi     res \u003d method(self, *args, **kwargs)\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/nova/nova/share/manila.py\", line 146, in wrapper\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi     res \u003d method(self, *args, **kwargs)\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/nova/nova/share/manila.py\", line 214, in get\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi     export_location \u003d filter_export_locations(export_locations)\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/nova/nova/share/manila.py\", line 208, in filter_export_locations\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi     return paths[0]\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi IndexError: list index out of range\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi \nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: INFO nova.api.openstack.wsgi [None req-0d386931-d017-4f06-a763-65c41438111f demo demo] HTTP exception thrown: Unexpected API Error. Please report this at http://bugs.launchpad.net/nova/ and attach the Nova API log if possible.\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: \u003cclass \u0027IndexError\u0027\u003e\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: DEBUG nova.api.openstack.wsgi [None req-0d386931-d017-4f06-a763-65c41438111f demo demo] Returning 500 to user: Unexpected API Error. Please report this at http://bugs.launchpad.net/nova/ and attach the Nova API log if possible.\nAug 05 15:14:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: \u003cclass \u0027IndexError\u0027\u003e {{(pid\u003d3624719) __call__ /opt/stack/nova/nova/api/openstack/wsgi.py:956}}\n```\n\n```\nstack@gibi-devstack-aio-jammy:~/nova$ openstack share create NFS 1000\n+---------------------------------------+--------------------------------------+\n| Field                                 | Value                                |\n+---------------------------------------+--------------------------------------+\n| access_rules_status                   | active                               |\n| availability_zone                     | None                                 |\n| create_share_from_snapshot_support    | True                                 |\n| created_at                            | 2024-08-05T15:13:38.854859           |\n| description                           | None                                 |\n| has_replicas                          | False                                |\n| id                                    | 561f066e-94dd-4f2f-926e-72f5bec6d18a |\n| is_public                             | False                                |\n| is_soft_deleted                       | False                                |\n| metadata                              | {}                                   |\n| mount_snapshot_support                | True                                 |\n| name                                  | None                                 |\n| progress                              | None                                 |\n| project_id                            | e20ffcd42d424a739fa224589aa0fa06     |\n| replication_type                      | None                                 |\n| revert_to_snapshot_support            | True                                 |\n| scheduled_to_be_deleted_at            | None                                 |\n| share_group_id                        | None                                 |\n| share_network_id                      | None                                 |\n| share_proto                           | NFS                                  |\n| share_type                            | d68b6837-a6b0-452b-947e-0ec4e0f999fc |\n| share_type_name                       | default                              |\n| size                                  | 1000                                 |\n| snapshot_id                           | None                                 |\n| snapshot_support                      | True                                 |\n| source_backup_id                      | None                                 |\n| source_share_group_snapshot_member_id | None                                 |\n| status                                | creating                             |\n| task_state                            | None                                 |\n| user_id                               | f1bff943dae94122a196e67a5fc0b276     |\n| volume_type                           | default                              |\n+---------------------------------------+--------------------------------------+\nstack@gibi-devstack-aio-jammy:~/nova$ openstack share list\n+--------------------------------------+------+------+-------------+--------+-----------+-----------------+------+-------------------+\n| ID                                   | Name | Size | Share Proto | Status | Is Public | Share Type Name | Host | Availability Zone |\n+--------------------------------------+------+------+-------------+--------+-----------+-----------------+------+-------------------+\n| 561f066e-94dd-4f2f-926e-72f5bec6d18a | None | 1000 | NFS         | error  | False     | default         |      | None              |\n+--------------------------------------+------+------+-------------+--------+-----------+-----------------+------+-------------------+\n```\n```\nstack@gibi-devstack-aio-jammy:~/nova$ curl -g -i -POST X http://10.0.76.222/compute/v2.1/servers/$VM/shares -H \"Accept: application/json\" -H \"Content-Type: application/json\" -H \"X-Auth-Token: $TOKEN\" -H \"X-OpenStack-Nova-API-Version: 2.97\" -d \u0027{\"share\": {\"share_id\":\"561f066e-94dd-4f2f-926e-72f5bec6d18a\"}}\u0027\ncurl: (6) Could not resolve host: X\nHTTP/1.1 500 Internal Server Error\nDate: Mon, 05 Aug 2024 15:14:12 GMT\nServer: Apache/2.4.52 (Ubuntu)\nOpenStack-API-Version: compute 2.97\nX-OpenStack-Nova-API-Version: 2.97\nVary: OpenStack-API-Version,X-OpenStack-Nova-API-Version\nContent-Type: application/json; charset\u003dUTF-8\nContent-Length: 184\nx-openstack-request-id: req-0d386931-d017-4f06-a763-65c41438111f\nx-compute-request-id: req-0d386931-d017-4f06-a763-65c41438111f\nConnection: close\n\n{\"computeFault\": {\"code\": 500, \"message\": \"Unexpected API Error. Please report this at http://bugs.launchpad.net/nova/ and attach the Nova API log if possible.\\n\u003cclass \u0027IndexError\u0027\u003e\"}}stack@gibi-devstack-aio-jammystack@gibi-devstack-aio-jammy:~/nova$ \n```","commit_id":"9fb400751274336e13389923fee21b1a997447b9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"29e34c152e91bfa9e92bef30467e5805eedb805a","unresolved":false,"context_lines":[{"line_number":123,"context_line":"            try:"},{"line_number":124,"context_line":"                hw.check_shares_supported(cctxt, instance)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"                manila_share_data \u003d self.manila.get(cctxt, share_id)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"                share_mapping \u003d objects.ShareMapping(cctxt)"},{"line_number":129,"context_line":"                share_mapping.uuid \u003d uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":57,"id":"288accce_2d69a674","line":126,"in_reply_to":"90a4484c_0a280b0e","updated":"2024-10-11 12:07:00.000000000","message":"yepp. Tested today. It works as expected now.","commit_id":"9fb400751274336e13389923fee21b1a997447b9"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"7e1d296f1e875e36b21a49da2bdeee59db11960f","unresolved":true,"context_lines":[{"line_number":123,"context_line":"            try:"},{"line_number":124,"context_line":"                hw.check_shares_supported(cctxt, instance)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"                manila_share_data \u003d self.manila.get(cctxt, share_id)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"                share_mapping \u003d objects.ShareMapping(cctxt)"},{"line_number":129,"context_line":"                share_mapping.uuid \u003d uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":57,"id":"90a4484c_0a280b0e","line":126,"in_reply_to":"dd486863_2ebd540d","updated":"2024-09-09 16:13:41.000000000","message":"Should be fixed","commit_id":"9fb400751274336e13389923fee21b1a997447b9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8a531b1311f1690eabc81cbcafd0778b91e56667","unresolved":true,"context_lines":[{"line_number":123,"context_line":"            try:"},{"line_number":124,"context_line":"                hw.check_shares_supported(cctxt, instance)"},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"                manila_share_data \u003d self.manila.get(cctxt, share_id)"},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"                share_mapping \u003d objects.ShareMapping(cctxt)"},{"line_number":129,"context_line":"                share_mapping.uuid \u003d uuidutils.generate_uuid()"}],"source_content_type":"text/x-python","patch_set":57,"id":"dd486863_2ebd540d","line":126,"in_reply_to":"edf88148_9826bf0e","updated":"2024-08-28 13:39:54.000000000","message":"I can still reproduce this with the latest PS 59. The _check_manila_share is ineffective as it would only called later. The manila client code fails to get the export location before it returns.\n\nAlso a variant of this is when manila is down when the share is being attached:\n```\nAug 28 12:10:40 gibi-devstack-aio-jammy devstack@n-api.service[1820794]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/nova/nova/api/openstack/compute/server_shares.py\", line 144, in create\nAug 28 12:10:40 gibi-devstack-aio-jammy devstack@n-api.service[1820794]: ERROR nova.api.openstack.wsgi     manila_share_data \u003d self.manila.get(cctxt, share_id)\nAug 28 12:10:40 gibi-devstack-aio-jammy devstack@n-api.service[1820794]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/nova/nova/share/manila.py\", line 128, in wrapper\nAug 28 12:10:40 gibi-devstack-aio-jammy devstack@n-api.service[1820794]: ERROR nova.api.openstack.wsgi     res \u003d method(self, *args, **kwargs)\nAug 28 12:10:40 gibi-devstack-aio-jammy devstack@n-api.service[1820794]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/nova/nova/share/manila.py\", line 146, in wrapper\nAug 28 12:10:40 gibi-devstack-aio-jammy devstack@n-api.service[1820794]: ERROR nova.api.openstack.wsgi     res \u003d method(self, *args, **kwargs)\nAug 28 12:10:40 gibi-devstack-aio-jammy devstack@n-api.service[1820794]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/nova/nova/share/manila.py\", line 213, in get\nAug 28 12:10:40 gibi-devstack-aio-jammy devstack@n-api.service[1820794]: ERROR nova.api.openstack.wsgi     client \u003d _manilaclient(context, False)\nAug 28 12:10:40 gibi-devstack-aio-jammy devstack@n-api.service[1820794]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/nova/nova/share/manila.py\", line 42, in _manilaclient\nAug 28 12:10:40 gibi-devstack-aio-jammy devstack@n-api.service[1820794]: ERROR nova.api.openstack.wsgi     return utils.get_sdk_adapter(\nAug 28 12:10:40 gibi-devstack-aio-jammy devstack@n-api.service[1820794]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/nova/nova/utils.py\", line 1033, in get_sdk_adapter\nAug 28 12:10:40 gibi-devstack-aio-jammy devstack@n-api.service[1820794]: ERROR nova.api.openstack.wsgi     return getattr(conn, service_type.replace(\u0027-\u0027, \u0027_\u0027))\nAug 28 12:10:40 gibi-devstack-aio-jammy devstack@n-api.service[1820794]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/openstacksdk/openstack/service_description.py\", line 110, in __get__\nAug 28 12:10:40 gibi-devstack-aio-jammy devstack@n-api.service[1820794]: ERROR nova.api.openstack.wsgi     self._validate_proxy(proxy, endpoint)\nAug 28 12:10:40 gibi-devstack-aio-jammy devstack@n-api.service[1820794]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/openstacksdk/openstack/service_description.py\", line 136, in _validate_proxy\nAug 28 12:10:40 gibi-devstack-aio-jammy devstack@n-api.service[1820794]: ERROR nova.api.openstack.wsgi     raise exceptions.ServiceDiscoveryException(\nAug 28 12:10:40 gibi-devstack-aio-jammy devstack@n-api.service[1820794]: ERROR nova.api.openstack.wsgi openstack.exceptions.ServiceDiscoveryException: Failed to create a working proxy for service shared-file-system: No valid endpoint was discoverable.\n```","commit_id":"9fb400751274336e13389923fee21b1a997447b9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"eedc7d3806df51ba7d46e83a56330b2ad1dbc39e","unresolved":true,"context_lines":[{"line_number":133,"context_line":"                share_mapping.tag \u003d share_dict.get(\u0027tag\u0027, manila_share_data.id)"},{"line_number":134,"context_line":"                share_mapping.export_location \u003d ("},{"line_number":135,"context_line":"                    manila_share_data.export_location)"},{"line_number":136,"context_line":"                share_mapping.share_proto \u003d manila_share_data.share_proto"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"                _try_create_share_mapping(share_mapping)"},{"line_number":139,"context_line":"                self.compute_api.allow_share(cctxt, instance, share_mapping)"}],"source_content_type":"text/x-python","patch_set":57,"id":"80b451f5_c12cfbad","line":136,"updated":"2024-08-05 15:19:27.000000000","message":"Trying to attach a CIFS share will result in HTTP500. It should result in 400 as the type is not supported.\n\n```\nAug 05 15:08:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi [None req-061afec4-8603-4f42-9562-ce1caabaf7bb demo demo] Unexpected exception in API method: ValueError: Field value CIFS is invalid\nAug 05 15:08:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi Traceback (most recent call last):\nAug 05 15:08:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/nova/nova/api/openstack/wsgi.py\", line 678, in wrapped\nAug 05 15:08:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi     return f(*args, **kwargs)\nAug 05 15:08:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/nova/nova/api/validation/__init__.py\", line 110, in wrapper\nAug 05 15:08:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi     return func(*args, **kwargs)\nAug 05 15:08:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/nova/nova/api/openstack/compute/server_shares.py\", line 136, in create\nAug 05 15:08:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi     share_mapping.share_proto \u003d manila_share_data.share_proto\nAug 05 15:08:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_versionedobjects/base.py\", line 72, in setter\nAug 05 15:08:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi     field_value \u003d field.coerce(self, name, value)\nAug 05 15:08:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_versionedobjects/fields.py\", line 204, in coerce\nAug 05 15:08:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi     return self._type.coerce(obj, attr, value)\nAug 05 15:08:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi   File \"/opt/stack/data/venv/lib/python3.10/site-packages/oslo_versionedobjects/fields.py\", line 325, in coerce\nAug 05 15:08:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi     raise ValueError(msg)\nAug 05 15:08:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi ValueError: Field value CIFS is invalid\nAug 05 15:08:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: ERROR nova.api.openstack.wsgi \nAug 05 15:08:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: INFO nova.api.openstack.wsgi [None req-061afec4-8603-4f42-9562-ce1caabaf7bb demo demo] HTTP exception thrown: Unexpected API Error. Please report this at http://bugs.launchpad.net/nova/ and attach the Nova API log if possible.\nAug 05 15:08:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: \u003cclass \u0027ValueError\u0027\u003e\nAug 05 15:08:12 gibi-devstack-aio-jammy devstack@n-api.service[3624719]: DEBUG nova.api.openstack.wsgi [None req-061afec4-8603-4f42-9562-ce1caabaf7bb demo demo] Returning 500 to user: Unexpected API Error. Please report this at http://bugs.launchpad.net/nova/ and attach the Nova API log if possible.\n\n```\n\n```\nstack@gibi-devstack-aio-jammy:~/nova$ openstack share list\n+--------------------------------------+------+------+-------------+-----------+-----------+-----------------+------+-------------------+\n| ID                                   | Name | Size | Share Proto | Status    | Is Public | Share Type Name | Host | Availability Zone |\n+--------------------------------------+------+------+-------------+-----------+-----------+-----------------+------+-------------------+\n| 45228962-a3eb-4035-a0b7-6dd302e35f8a | None |    1 | CIFS        | available | False     | default         |      | manila-zone-0     |\n+--------------------------------------+------+------+-------------+-----------+-----------+-----------------+------+-------------------+\n```\n\n```\nstack@gibi-devstack-aio-jammy:~/nova$ curl -g -i -POST X http://10.0.76.222/compute/v2.1/servers/$VM/shares -H \"Accept: application/json\" -H \"Content-Type: application/json\" -H \"X-Auth-Token: $TOKEN\" -H \"X-OpenStack-Nova-API-Version: 2.97\" -d \u0027{\"share\": {\"share_id\":\"45228962-a3eb-4035-a0b7-6dd302e35f8a\"}}\u0027\ncurl: (6) Could not resolve host: X\nHTTP/1.1 500 Internal Server Error\nDate: Mon, 05 Aug 2024 15:08:12 GMT\nServer: Apache/2.4.52 (Ubuntu)\nOpenStack-API-Version: compute 2.97\nX-OpenStack-Nova-API-Version: 2.97\nVary: OpenStack-API-Version,X-OpenStack-Nova-API-Version\nContent-Type: application/json; charset\u003dUTF-8\nContent-Length: 184\nx-openstack-request-id: req-061afec4-8603-4f42-9562-ce1caabaf7bb\nx-compute-request-id: req-061afec4-8603-4f42-9562-ce1caabaf7bb\nConnection: close\n\n{\"computeFault\": {\"code\": 500, \"message\": \"Unexpected API Error. Please report this at http://bugs.launchpad.net/nova/ and attach the Nova API log if possible.\\n\u003cclass \u0027ValueError\u0027\u003e\"}}\n```","commit_id":"9fb400751274336e13389923fee21b1a997447b9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8a531b1311f1690eabc81cbcafd0778b91e56667","unresolved":false,"context_lines":[{"line_number":133,"context_line":"                share_mapping.tag \u003d share_dict.get(\u0027tag\u0027, manila_share_data.id)"},{"line_number":134,"context_line":"                share_mapping.export_location \u003d ("},{"line_number":135,"context_line":"                    manila_share_data.export_location)"},{"line_number":136,"context_line":"                share_mapping.share_proto \u003d manila_share_data.share_proto"},{"line_number":137,"context_line":""},{"line_number":138,"context_line":"                _try_create_share_mapping(share_mapping)"},{"line_number":139,"context_line":"                self.compute_api.allow_share(cctxt, instance, share_mapping)"}],"source_content_type":"text/x-python","patch_set":57,"id":"8acba0c3_67238a74","line":136,"in_reply_to":"80b451f5_c12cfbad","updated":"2024-08-28 13:39:54.000000000","message":"OK cannot reproduce this any more. The added protocol check is effective.","commit_id":"9fb400751274336e13389923fee21b1a997447b9"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8a531b1311f1690eabc81cbcafd0778b91e56667","unresolved":true,"context_lines":[{"line_number":117,"context_line":"                manila_share_data.share_proto"},{"line_number":118,"context_line":"                not in fields.ShareMappingProto.ALL"},{"line_number":119,"context_line":"            ):"},{"line_number":120,"context_line":"                raise exception.ShareProtocolUnknown("},{"line_number":121,"context_line":"                    share_proto\u003dmanila_share_data.share_proto"},{"line_number":122,"context_line":"                )"},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":59,"id":"25a1b8da_e1acdf09","line":120,"updated":"2024-08-28 13:39:54.000000000","message":"nit: I would rather say protocol is not supported. As e.g. CIFS is a known protocol just nova happen to not support it.","commit_id":"2d20726b7fbf320141994e75775faf064a73850e"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"7e1d296f1e875e36b21a49da2bdeee59db11960f","unresolved":false,"context_lines":[{"line_number":117,"context_line":"                manila_share_data.share_proto"},{"line_number":118,"context_line":"                not in fields.ShareMappingProto.ALL"},{"line_number":119,"context_line":"            ):"},{"line_number":120,"context_line":"                raise exception.ShareProtocolUnknown("},{"line_number":121,"context_line":"                    share_proto\u003dmanila_share_data.share_proto"},{"line_number":122,"context_line":"                )"},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":59,"id":"caa4d2ed_25bf5850","line":120,"in_reply_to":"25a1b8da_e1acdf09","updated":"2024-09-09 16:13:41.000000000","message":"Done","commit_id":"2d20726b7fbf320141994e75775faf064a73850e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2d6ec393b725b3a1e2ce8112e5db225e056314da","unresolved":false,"context_lines":[{"line_number":117,"context_line":"                manila_share_data.share_proto"},{"line_number":118,"context_line":"                not in fields.ShareMappingProto.ALL"},{"line_number":119,"context_line":"            ):"},{"line_number":120,"context_line":"                raise exception.ShareProtocolUnknown("},{"line_number":121,"context_line":"                    share_proto\u003dmanila_share_data.share_proto"},{"line_number":122,"context_line":"                )"},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":59,"id":"7d367fa7_44ca9fb6","line":120,"in_reply_to":"62684701_17e16f3c","updated":"2024-11-04 12:08:23.000000000","message":"Works now.","commit_id":"2d20726b7fbf320141994e75775faf064a73850e"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"29e34c152e91bfa9e92bef30467e5805eedb805a","unresolved":true,"context_lines":[{"line_number":117,"context_line":"                manila_share_data.share_proto"},{"line_number":118,"context_line":"                not in fields.ShareMappingProto.ALL"},{"line_number":119,"context_line":"            ):"},{"line_number":120,"context_line":"                raise exception.ShareProtocolUnknown("},{"line_number":121,"context_line":"                    share_proto\u003dmanila_share_data.share_proto"},{"line_number":122,"context_line":"                )"},{"line_number":123,"context_line":""}],"source_content_type":"text/x-python","patch_set":59,"id":"62684701_17e16f3c","line":120,"in_reply_to":"caa4d2ed_25bf5850","updated":"2024-10-11 12:07:00.000000000","message":"today\u0027s testing still shows that nova returns \"unknown\" instead of \"not supported\". So it is not fixed yet. I.e. you renamed the exception class but did not change the error message.","commit_id":"2d20726b7fbf320141994e75775faf064a73850e"}],"nova/exception.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b6abb7ec4aae650b2223c8c4a2ca6537b728207b","unresolved":true,"context_lines":[{"line_number":107,"context_line":"        # Take only the first line of error message."},{"line_number":108,"context_line":"        # This method is used to simplify message and not leak internal data"},{"line_number":109,"context_line":"        # to the user."},{"line_number":110,"context_line":"        return self.args[0].split(\u0027\\n\u0027)[0]"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def __repr__(self):"},{"line_number":113,"context_line":"        dict_repr \u003d self.__dict__"}],"source_content_type":"text/x-python","patch_set":21,"id":"f0b39098_fd72a85c","line":110,"updated":"2023-01-25 18:03:29.000000000","message":"This works for the exceptions you introduced where you put \\n in the message to separate the generic part from the sensitive parts of the message (e.g. ShareAccessGrantError). So I think this method should be available only on those exceptions as in other exceptions it might filter nothing.","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"84222d5f8f3085851e3e121829f63dc47c219a2b","unresolved":false,"context_lines":[{"line_number":107,"context_line":"        # Take only the first line of error message."},{"line_number":108,"context_line":"        # This method is used to simplify message and not leak internal data"},{"line_number":109,"context_line":"        # to the user."},{"line_number":110,"context_line":"        return self.args[0].split(\u0027\\n\u0027)[0]"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def __repr__(self):"},{"line_number":113,"context_line":"        dict_repr \u003d self.__dict__"}],"source_content_type":"text/x-python","patch_set":21,"id":"f7906921_7d8c9658","line":110,"in_reply_to":"b2fa3c18_92cfaebc","updated":"2023-02-08 12:56:31.000000000","message":"Done","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"8c88a5412e4aa84b1f6548a4bed92604dd43bbe2","unresolved":true,"context_lines":[{"line_number":107,"context_line":"        # Take only the first line of error message."},{"line_number":108,"context_line":"        # This method is used to simplify message and not leak internal data"},{"line_number":109,"context_line":"        # to the user."},{"line_number":110,"context_line":"        return self.args[0].split(\u0027\\n\u0027)[0]"},{"line_number":111,"context_line":""},{"line_number":112,"context_line":"    def __repr__(self):"},{"line_number":113,"context_line":"        dict_repr \u003d self.__dict__"}],"source_content_type":"text/x-python","patch_set":21,"id":"b2fa3c18_92cfaebc","line":110,"in_reply_to":"f0b39098_fd72a85c","updated":"2023-01-30 10:16:11.000000000","message":"ok","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"29e34c152e91bfa9e92bef30467e5805eedb805a","unresolved":true,"context_lines":[{"line_number":731,"context_line":""},{"line_number":732,"context_line":""},{"line_number":733,"context_line":"class ShareProtocolNotSupported(NotFound):"},{"line_number":734,"context_line":"    msg_fmt \u003d _(\"Share protocol %(share_proto)s is unknown.\")"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":""},{"line_number":737,"context_line":"class ShareMissingExportLocation(NotFound):"}],"source_content_type":"text/x-python","patch_set":64,"id":"cbcebcaf_b64de75e","line":734,"updated":"2024-10-11 12:07:00.000000000","message":"here you need to change the message too :)","commit_id":"cc3ff16d82cb522b39fe74bf9337c2e52587b71a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2d6ec393b725b3a1e2ce8112e5db225e056314da","unresolved":false,"context_lines":[{"line_number":731,"context_line":""},{"line_number":732,"context_line":""},{"line_number":733,"context_line":"class ShareProtocolNotSupported(NotFound):"},{"line_number":734,"context_line":"    msg_fmt \u003d _(\"Share protocol %(share_proto)s is unknown.\")"},{"line_number":735,"context_line":""},{"line_number":736,"context_line":""},{"line_number":737,"context_line":"class ShareMissingExportLocation(NotFound):"}],"source_content_type":"text/x-python","patch_set":64,"id":"72dd20ce_d56e411b","line":734,"in_reply_to":"cbcebcaf_b64de75e","updated":"2024-11-04 12:08:23.000000000","message":"works now.","commit_id":"cc3ff16d82cb522b39fe74bf9337c2e52587b71a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"083f3676523180530c9db53ad95c98cb0f4effb5","unresolved":false,"context_lines":[{"line_number":727,"context_line":""},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"class ShareMappingAlreadyExists(NotFound):"},{"line_number":730,"context_line":"    msg_fmt \u003d _(\"Share \u0027%(share_id)s\u0027 or tag \u0027%(tag)s\u0027 already associated \""},{"line_number":731,"context_line":"                \"to this server.\")"},{"line_number":732,"context_line":""},{"line_number":733,"context_line":""}],"source_content_type":"text/x-python","patch_set":65,"id":"e8d31178_d7b8d296","line":730,"updated":"2024-11-04 13:30:10.000000000","message":"How can we trigger the error where the share is associated with the instance already? If I do the following the no error is provided:\n* boot and stop a VM\n* attach a share as tag-1 \u003d\u003e creates a mapping with tag-1 \n* attach the same share as tag-2\n\n\u003d\u003e second attachment is accepted but it only updates the tag (from tag-1 to tag-2) for the share mapping created before. So this is avoids duplicating the attachment and instead just updates the existing one. As at this point the instance is stopped this update is OK. If the instance is running at this point then changing the tag would not be valid but if the instance is running the attachment create is rejected due to instance is not stopped.\n\nSo I guess the only way to trigger the share already associated issue if I can trigger the DB constraints with an api race condition. \n\nBottom line: I think this is valid as is. I just needed a bit of thinking to understand how it works.","commit_id":"01ef9a3bec8da722efe85984479de1671d0070a4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"6bdfc19e37a3422ce8640decdb8e3cb2325ec57b","unresolved":false,"context_lines":[{"line_number":727,"context_line":""},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"class ShareMappingAlreadyExists(NotFound):"},{"line_number":730,"context_line":"    msg_fmt \u003d _(\"Share \u0027%(share_id)s\u0027 or tag \u0027%(tag)s\u0027 already associated \""},{"line_number":731,"context_line":"                \"to this server.\")"},{"line_number":732,"context_line":""},{"line_number":733,"context_line":""}],"source_content_type":"text/x-python","patch_set":65,"id":"94db5f51_b9b69cb5","line":730,"in_reply_to":"2b7c47ad_27795a6c","updated":"2024-11-13 20:38:27.000000000","message":"Done","commit_id":"01ef9a3bec8da722efe85984479de1671d0070a4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"2172f8d69e739a97202de763b99a1693b31afa2f","unresolved":true,"context_lines":[{"line_number":727,"context_line":""},{"line_number":728,"context_line":""},{"line_number":729,"context_line":"class ShareMappingAlreadyExists(NotFound):"},{"line_number":730,"context_line":"    msg_fmt \u003d _(\"Share \u0027%(share_id)s\u0027 or tag \u0027%(tag)s\u0027 already associated \""},{"line_number":731,"context_line":"                \"to this server.\")"},{"line_number":732,"context_line":""},{"line_number":733,"context_line":""}],"source_content_type":"text/x-python","patch_set":65,"id":"2b7c47ad_27795a6c","line":730,"in_reply_to":"e8d31178_d7b8d296","updated":"2024-11-06 08:45:44.000000000","message":"Discussed with Sylvain and Rene that we should not allow POST to update the tag, but it should also raise this exception.","commit_id":"01ef9a3bec8da722efe85984479de1671d0070a4"}],"nova/policies/server_shares.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"973fe8e4fc2df66874dc35c87938c8ca919de637","unresolved":true,"context_lines":[{"line_number":43,"context_line":"        scope_types\u003d[\u0027project\u0027]),"},{"line_number":44,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":45,"context_line":"        name\u003dPOLICY_ROOT % \u0027show\u0027,"},{"line_number":46,"context_line":"        check_str\u003dbase.PROJECT_MEMBER,"},{"line_number":47,"context_line":"        description\u003d\"Show a share configured for the specified server\","},{"line_number":48,"context_line":"        operations\u003d["},{"line_number":49,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":42,"id":"657a1848_baba288e","line":46,"updated":"2024-01-30 12:40:43.000000000","message":"can this be PROJECT_READER?","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"1d37ecd85d5d2387e2fdb2f59b7fb4448677f831","unresolved":true,"context_lines":[{"line_number":43,"context_line":"        scope_types\u003d[\u0027project\u0027]),"},{"line_number":44,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":45,"context_line":"        name\u003dPOLICY_ROOT % \u0027show\u0027,"},{"line_number":46,"context_line":"        check_str\u003dbase.PROJECT_MEMBER,"},{"line_number":47,"context_line":"        description\u003d\"Show a share configured for the specified server\","},{"line_number":48,"context_line":"        operations\u003d["},{"line_number":49,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":42,"id":"acabf565_4202b51d","line":46,"in_reply_to":"657a1848_baba288e","updated":"2024-02-16 16:20:24.000000000","message":"I think so.","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"946d0c5c51849c632de584a1e0d2212b0fba171f","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        scope_types\u003d[\u0027project\u0027]),"},{"line_number":44,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":45,"context_line":"        name\u003dPOLICY_ROOT % \u0027show\u0027,"},{"line_number":46,"context_line":"        check_str\u003dbase.PROJECT_MEMBER,"},{"line_number":47,"context_line":"        description\u003d\"Show a share configured for the specified server\","},{"line_number":48,"context_line":"        operations\u003d["},{"line_number":49,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":42,"id":"78d0c6af_c33856ab","line":46,"in_reply_to":"acabf565_4202b51d","updated":"2024-06-20 08:24:16.000000000","message":"Done","commit_id":"e7219af5db336482a3f375dcf31d8a46dfa1ce8d"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"64a7f19c4843f27d63fd2ea03e86c908f43250b2","unresolved":true,"context_lines":[{"line_number":43,"context_line":"        scope_types\u003d[\u0027project\u0027]),"},{"line_number":44,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":45,"context_line":"        name\u003dPOLICY_ROOT % \u0027show\u0027,"},{"line_number":46,"context_line":"        check_str\u003dbase.PROJECT_MEMBER,"},{"line_number":47,"context_line":"        description\u003d\"Show a share configured for the specified server\","},{"line_number":48,"context_line":"        operations\u003d["},{"line_number":49,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":46,"id":"1b0f1c0e_5c81b78c","line":46,"updated":"2024-02-28 14:16:51.000000000","message":"can this be PROJECT_READER?","commit_id":"71368110db130c64fafa6874e34091abe0ad9ec3"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"bc1ab32bef1273370de3957976bf6403d2346649","unresolved":false,"context_lines":[{"line_number":43,"context_line":"        scope_types\u003d[\u0027project\u0027]),"},{"line_number":44,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":45,"context_line":"        name\u003dPOLICY_ROOT % \u0027show\u0027,"},{"line_number":46,"context_line":"        check_str\u003dbase.PROJECT_MEMBER,"},{"line_number":47,"context_line":"        description\u003d\"Show a share configured for the specified server\","},{"line_number":48,"context_line":"        operations\u003d["},{"line_number":49,"context_line":"            {"}],"source_content_type":"text/x-python","patch_set":46,"id":"8da9a85f_e565cc8a","line":46,"in_reply_to":"1b0f1c0e_5c81b78c","updated":"2024-03-11 15:46:45.000000000","message":"Done","commit_id":"71368110db130c64fafa6874e34091abe0ad9ec3"}],"nova/tests/fixtures/manila.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"8a531b1311f1690eabc81cbcafd0778b91e56667","unresolved":true,"context_lines":[{"line_number":83,"context_line":"    def fake_get_share_status_error(self, context, share_id):"},{"line_number":84,"context_line":"        manila_share \u003d ManilaShare(share_id)"},{"line_number":85,"context_line":"        manila_share.status \u003d \"error\""},{"line_number":86,"context_line":"        export_location \u003d \"10.0.0.50:/mnt/foo\""},{"line_number":87,"context_line":"        return nova.share.manila.Share.from_manila_share("},{"line_number":88,"context_line":"            manila_share, export_location"},{"line_number":89,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":59,"id":"dcd401a1_a2854f41","line":86,"updated":"2024-08-28 13:39:54.000000000","message":"A share in error might not have export_location at all. This is why your new test case does not reproduce the index error I reported on PS57 and that still reproducible in PS59","commit_id":"2d20726b7fbf320141994e75775faf064a73850e"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"7e1d296f1e875e36b21a49da2bdeee59db11960f","unresolved":false,"context_lines":[{"line_number":83,"context_line":"    def fake_get_share_status_error(self, context, share_id):"},{"line_number":84,"context_line":"        manila_share \u003d ManilaShare(share_id)"},{"line_number":85,"context_line":"        manila_share.status \u003d \"error\""},{"line_number":86,"context_line":"        export_location \u003d \"10.0.0.50:/mnt/foo\""},{"line_number":87,"context_line":"        return nova.share.manila.Share.from_manila_share("},{"line_number":88,"context_line":"            manila_share, export_location"},{"line_number":89,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":59,"id":"f003ac10_85027eaa","line":86,"in_reply_to":"dcd401a1_a2854f41","updated":"2024-09-09 16:13:41.000000000","message":"Done","commit_id":"2d20726b7fbf320141994e75775faf064a73850e"}],"nova/tests/functional/api_sample_tests/test_server_shares.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b6abb7ec4aae650b2223c8c4a2ca6537b728207b","unresolved":false,"context_lines":[{"line_number":97,"context_line":"        self.assertEqual(500, response.status_code)"},{"line_number":98,"context_line":"        self.assertIn(\u0027mount error from server\u0027, response.text)"},{"line_number":99,"context_line":"        self.assertNotIn("},{"line_number":100,"context_line":"            \u0027Reason: Unexpected error while running command\u0027, response.text)"},{"line_number":101,"context_line":"        log_out \u003d self.stdlog.logger.output"},{"line_number":102,"context_line":"        self.assertIn("},{"line_number":103,"context_line":"            \u0027Reason: Unexpected error while running command\u0027, log_out)"}],"source_content_type":"text/x-python","patch_set":21,"id":"ee16900b_9f962e41","line":100,"updated":"2023-01-25 18:03:29.000000000","message":"+1 for showing that sensitive data is not returned.","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b6abb7ec4aae650b2223c8c4a2ca6537b728207b","unresolved":true,"context_lines":[{"line_number":142,"context_line":"            response \u003d self._do_post(\u0027servers/%s/shares\u0027 % uuid,"},{"line_number":143,"context_line":"                                    \u0027server-shares-create-req\u0027, subs)"},{"line_number":144,"context_line":"            self.assertEqual(201, response.status_code)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def test_server_shares_create_fails_share_not_found(self):"},{"line_number":147,"context_line":"        \"\"\"Verify we can not create a share if the share does not"},{"line_number":148,"context_line":"        exists."}],"source_content_type":"text/x-python","patch_set":21,"id":"2bb8fefc_6fa35328","line":145,"updated":"2023-01-25 18:03:29.000000000","message":"could you add a test that shows if neither huge pages nor mem_backing is present then adding a share is rejected?","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"8c88a5412e4aa84b1f6548a4bed92604dd43bbe2","unresolved":true,"context_lines":[{"line_number":142,"context_line":"            response \u003d self._do_post(\u0027servers/%s/shares\u0027 % uuid,"},{"line_number":143,"context_line":"                                    \u0027server-shares-create-req\u0027, subs)"},{"line_number":144,"context_line":"            self.assertEqual(201, response.status_code)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def test_server_shares_create_fails_share_not_found(self):"},{"line_number":147,"context_line":"        \"\"\"Verify we can not create a share if the share does not"},{"line_number":148,"context_line":"        exists."}],"source_content_type":"text/x-python","patch_set":21,"id":"7b2655f4_7a76775f","line":145,"in_reply_to":"2bb8fefc_6fa35328","updated":"2023-01-30 10:16:11.000000000","message":"This is the aim of the test_server_shares_create_fails_incorrect_configuration test. This is part of the next patches.","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"065b9b94b8c7c9dd9bf523f8b45a659ab065e122","unresolved":false,"context_lines":[{"line_number":142,"context_line":"            response \u003d self._do_post(\u0027servers/%s/shares\u0027 % uuid,"},{"line_number":143,"context_line":"                                    \u0027server-shares-create-req\u0027, subs)"},{"line_number":144,"context_line":"            self.assertEqual(201, response.status_code)"},{"line_number":145,"context_line":""},{"line_number":146,"context_line":"    def test_server_shares_create_fails_share_not_found(self):"},{"line_number":147,"context_line":"        \"\"\"Verify we can not create a share if the share does not"},{"line_number":148,"context_line":"        exists."}],"source_content_type":"text/x-python","patch_set":21,"id":"22dd6b6f_b42ef25c","line":145,"in_reply_to":"7b2655f4_7a76775f","updated":"2023-01-31 16:32:06.000000000","message":"Ack","commit_id":"d48c3c15c156cd69c9de562fef0c1348cfc83fa4"}],"nova/tests/unit/api/openstack/compute/test_server_shares.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"55684220f2848ff70311452b21989000d9a4d5e5","unresolved":true,"context_lines":[{"line_number":280,"context_line":"            mock_db_update_share.return_value,"},{"line_number":281,"context_line":"        ]"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        # self.controller.create(self.req, instance.uuid, body\u003dbody)"},{"line_number":284,"context_line":"        exc \u003d self.assertRaises("},{"line_number":285,"context_line":"            webob.exc.HTTPConflict,"},{"line_number":286,"context_line":"            self.controller.create,"}],"source_content_type":"text/x-python","patch_set":66,"id":"379a4458_977256b7","line":283,"updated":"2024-11-15 10:43:34.000000000","message":"please drop the comments","commit_id":"06c81c36bf22dbd129dcb6bf99b5b01ad600d2ed"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"b1ba368cd5b00b83449672813c641d498dbeb9e8","unresolved":false,"context_lines":[{"line_number":280,"context_line":"            mock_db_update_share.return_value,"},{"line_number":281,"context_line":"        ]"},{"line_number":282,"context_line":""},{"line_number":283,"context_line":"        # self.controller.create(self.req, instance.uuid, body\u003dbody)"},{"line_number":284,"context_line":"        exc \u003d self.assertRaises("},{"line_number":285,"context_line":"            webob.exc.HTTPConflict,"},{"line_number":286,"context_line":"            self.controller.create,"}],"source_content_type":"text/x-python","patch_set":66,"id":"b0d3276b_9d2fd100","line":283,"in_reply_to":"379a4458_977256b7","updated":"2024-11-18 14:36:50.000000000","message":"Done","commit_id":"06c81c36bf22dbd129dcb6bf99b5b01ad600d2ed"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"55684220f2848ff70311452b21989000d9a4d5e5","unresolved":true,"context_lines":[{"line_number":294,"context_line":"            \"already associated to this server\","},{"line_number":295,"context_line":"            str(exc))"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        # mock_db_update_share.assert_called_with("},{"line_number":298,"context_line":"        #     mock.ANY,"},{"line_number":299,"context_line":"        #     mock.ANY,"},{"line_number":300,"context_line":"        #     instance.uuid,"},{"line_number":301,"context_line":"        #     fake_db_share[\u0027share_id\u0027],"},{"line_number":302,"context_line":"        #     \u0027attaching\u0027,"},{"line_number":303,"context_line":"        #     \u0027my-tag\u0027,"},{"line_number":304,"context_line":"        #     fake_db_share[\u0027export_location\u0027],"},{"line_number":305,"context_line":"        #     fake_db_share[\u0027share_proto\u0027],"},{"line_number":306,"context_line":"        # )"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    @mock.patch("},{"line_number":309,"context_line":"        \u0027nova.virt.hardware.check_shares_supported\u0027, return_value\u003dNone"}],"source_content_type":"text/x-python","patch_set":66,"id":"2e06ef83_72cf8c84","line":306,"range":{"start_line":297,"start_character":0,"end_line":306,"end_character":11},"updated":"2024-11-15 10:43:34.000000000","message":"please drop the comments.","commit_id":"06c81c36bf22dbd129dcb6bf99b5b01ad600d2ed"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"b1ba368cd5b00b83449672813c641d498dbeb9e8","unresolved":false,"context_lines":[{"line_number":294,"context_line":"            \"already associated to this server\","},{"line_number":295,"context_line":"            str(exc))"},{"line_number":296,"context_line":""},{"line_number":297,"context_line":"        # mock_db_update_share.assert_called_with("},{"line_number":298,"context_line":"        #     mock.ANY,"},{"line_number":299,"context_line":"        #     mock.ANY,"},{"line_number":300,"context_line":"        #     instance.uuid,"},{"line_number":301,"context_line":"        #     fake_db_share[\u0027share_id\u0027],"},{"line_number":302,"context_line":"        #     \u0027attaching\u0027,"},{"line_number":303,"context_line":"        #     \u0027my-tag\u0027,"},{"line_number":304,"context_line":"        #     fake_db_share[\u0027export_location\u0027],"},{"line_number":305,"context_line":"        #     fake_db_share[\u0027share_proto\u0027],"},{"line_number":306,"context_line":"        # )"},{"line_number":307,"context_line":""},{"line_number":308,"context_line":"    @mock.patch("},{"line_number":309,"context_line":"        \u0027nova.virt.hardware.check_shares_supported\u0027, return_value\u003dNone"}],"source_content_type":"text/x-python","patch_set":66,"id":"1d726723_9468be8c","line":306,"range":{"start_line":297,"start_character":0,"end_line":306,"end_character":11},"in_reply_to":"2e06ef83_72cf8c84","updated":"2024-11-18 14:36:50.000000000","message":"Done","commit_id":"06c81c36bf22dbd129dcb6bf99b5b01ad600d2ed"}]}
