)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"549826af399811f6d09279834ab8227f227e0e6c","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"4b80bb7d_3916edf3","updated":"2022-04-06 15:42:50.000000000","message":"i cant remember what this but i might as well push them","commit_id":"91c4cb747da5de0de69edde75a3045e1e1bd870b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"11b32282_b29e497f","updated":"2022-06-08 13:03:55.000000000","message":"Gibi, thank you for the review.\nI have applied all the recommended changes.\n\nThere is still an open comment, we could discuss because I may have not understand it correctly.","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"1aaf2c5e_2a0a75f3","updated":"2022-06-01 19:19:46.000000000","message":"I\u0027ve haven\u0027t had time to look at the test coverage yet. I left some comments inline but the overall direction looks OK. However I suggest to split this patch into smaller pieces. I can see at least two pieces:\n1) compute_api changes (and anything that is in the deeper layers if any) and the unit tests for it\n2) REST API changes + func test + doc\n\n","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5d99528376718e16c97b33224405ce208aa8e890","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":14,"id":"166a09b9_a377051d","updated":"2022-06-22 08:37:22.000000000","message":"I have two concerns with this change I gonna try to summarize :\n- I understand why you want a sentinel value for the AZ parameter, but you don\u0027t need to import this sentinel from the caller.\n- There are IMHO too many logs from an operator PoV and they always ask us about that. \n\nAbout the conditional tree, well, I tend to agree with gibi. Even if I like the readable code, this creates unnecessary branches of code we need to care for the future.","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0fdc7dc746e5c4f41788c748de2b149088b42827","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"2639a8bc_f2a495fa","updated":"2022-06-27 12:10:06.000000000","message":"As we agreed on IRC with Sean, thanks Sean","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bb4ff8c119992297960b83ec46e78f9efad6a652","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"ff840cc5_d724611d","updated":"2022-06-27 11:00:47.000000000","message":"I have a list of nits but otherwise it looks OK to me","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0eaba888af0f5156f8ab9d33c07e6ffc7c48489a","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"32d893ea_78ee89d2","updated":"2022-07-11 07:34:38.000000000","message":"Look OK to me. (The API policy change still belongs to the next patch but that does not worth to block this)","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d9d73e79c844b6ba58f566ca6abb892823a8d5b1","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":17,"id":"a4d78cad_6bb77188","updated":"2022-07-12 09:33:17.000000000","message":"Lots of comments but only one holding : you forgot to add UTs for verifying what happens if you pass an host parameter.\nYou\u0027re covering this in other modules with the latter patch but we just miss it for nova.compute.api module :-) ","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"ac3a2d0c8a791ae4b42be7da825c8ab31215f7b8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":18,"id":"a16c2332_0bfd550d","updated":"2022-07-22 08:05:42.000000000","message":"recheck","commit_id":"bff08dcea1d6ca20683f1e0fcce7191a83276eb1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f12bdaca8df41d265bbe32f16cbd57118c6ea6b6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"4385c12b_b63c4e72","updated":"2022-07-22 14:39:57.000000000","message":"Excellent work and thanks for the new revision !","commit_id":"a263fa46f861c091d93782d4796c8302f9c30f4a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"380f33fff2dd705fa91ee5663fee5f907cf7409f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"7b61cfd1_e1e79a91","updated":"2022-07-22 09:22:34.000000000","message":"Please fix the indent here or in a follow up","commit_id":"a263fa46f861c091d93782d4796c8302f9c30f4a"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"014e5d4ccca4e6e8fe1bbdb8edf06eb3c512d437","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"e78149a4_bb4bff9a","updated":"2022-07-27 08:16:11.000000000","message":"recheck bug 1940425","commit_id":"a263fa46f861c091d93782d4796c8302f9c30f4a"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0b845cc86c66a750f2f337d76793e83781e04e70","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"a6f9f44b_4fc524bb","updated":"2022-07-25 14:58:20.000000000","message":"recheck fscking bug 1940425","commit_id":"a263fa46f861c091d93782d4796c8302f9c30f4a"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"c21553c18b6d38b05fe6f48cd5ea02e7fe0da021","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":19,"id":"15e265ed_9bce1ab6","updated":"2022-07-22 14:34:51.000000000","message":"recheck test_live_migration_with_trunk issue with nova-next","commit_id":"a263fa46f861c091d93782d4796c8302f9c30f4a"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":1858,"context_line":"availability_zone_unshelve:"},{"line_number":1859,"context_line":"  description: |"},{"line_number":1860,"context_line":"    The availability zone name. Specifying an availability zone is only"},{"line_number":1861,"context_line":"    allowed when the server status is ``SHELVED_OFFLOADED`` otherwise a"},{"line_number":1862,"context_line":"    409 HTTP Conflict response is returned."},{"line_number":1863,"context_line":""},{"line_number":1864,"context_line":"    As of microversion 2.91, ``\"availability_zone\"\u003dnull`` supports the ability"},{"line_number":1865,"context_line":"    to unpin the availability_zone of an instance that is bound to it."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"70d3d81a_6bd90446","line":1862,"range":{"start_line":1861,"start_character":60,"end_line":1862,"end_character":43},"updated":"2022-06-01 19:19:46.000000000","message":"nit: otherwise HTTP 409 Conflict response is returned.","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":1858,"context_line":"availability_zone_unshelve:"},{"line_number":1859,"context_line":"  description: |"},{"line_number":1860,"context_line":"    The availability zone name. Specifying an availability zone is only"},{"line_number":1861,"context_line":"    allowed when the server status is ``SHELVED_OFFLOADED`` otherwise a"},{"line_number":1862,"context_line":"    409 HTTP Conflict response is returned."},{"line_number":1863,"context_line":""},{"line_number":1864,"context_line":"    As of microversion 2.91, ``\"availability_zone\"\u003dnull`` supports the ability"},{"line_number":1865,"context_line":"    to unpin the availability_zone of an instance that is bound to it."}],"source_content_type":"text/x-yaml","patch_set":11,"id":"35e29f6b_9289cc2b","line":1862,"range":{"start_line":1861,"start_character":60,"end_line":1862,"end_character":43},"in_reply_to":"70d3d81a_6bd90446","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":1861,"context_line":"    allowed when the server status is ``SHELVED_OFFLOADED`` otherwise a"},{"line_number":1862,"context_line":"    409 HTTP Conflict response is returned."},{"line_number":1863,"context_line":""},{"line_number":1864,"context_line":"    As of microversion 2.91, ``\"availability_zone\"\u003dnull`` supports the ability"},{"line_number":1865,"context_line":"    to unpin the availability_zone of an instance that is bound to it."},{"line_number":1866,"context_line":"  in: body"},{"line_number":1867,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"15cf77a0_85596393","line":1864,"range":{"start_line":1864,"start_character":50,"end_line":1864,"end_character":51},"updated":"2022-06-01 19:19:46.000000000","message":"I would use a colon \u0027:\u0027 instead of \u0027\u003d\u0027 to make this more like the value in the request","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":1861,"context_line":"    allowed when the server status is ``SHELVED_OFFLOADED`` otherwise a"},{"line_number":1862,"context_line":"    409 HTTP Conflict response is returned."},{"line_number":1863,"context_line":""},{"line_number":1864,"context_line":"    As of microversion 2.91, ``\"availability_zone\"\u003dnull`` supports the ability"},{"line_number":1865,"context_line":"    to unpin the availability_zone of an instance that is bound to it."},{"line_number":1866,"context_line":"  in: body"},{"line_number":1867,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":11,"id":"84120ca2_897f8c4f","line":1864,"range":{"start_line":1864,"start_character":50,"end_line":1864,"end_character":51},"in_reply_to":"15cf77a0_85596393","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"}],"api-ref/source/servers-action-shelve.inc":[{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"3c9a5796d38f384124eaf275b9357f089babd59d","unresolved":true,"context_lines":[{"line_number":150,"context_line":".. note:: Since microversion 2.91, allowed request body schema are"},{"line_number":151,"context_line":"          {\"unshelve\": null} or {\"unshelve\": {\"availability_zone\": \u003cstring\u003e}}"},{"line_number":152,"context_line":"          or {\"unshelve\": {\"host\": \u003cfqdn\u003e}}."},{"line_number":153,"context_line":"          availability_zone and host are mutually exclusive parameters."},{"line_number":154,"context_line":"          A request body of {\"unshelve\": {}} is not allowed."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":".. rest_parameters:: parameters.yaml"}],"source_content_type":"text/x-c++src","patch_set":8,"id":"b8391d3b_519b0e69","line":153,"range":{"start_line":153,"start_character":10,"end_line":153,"end_character":71},"updated":"2022-05-14 03:07:18.000000000","message":"IMO, it should also be described in the parameter descriptions.","commit_id":"c8a8e7ddeba9f901aaed9157f4f00ada3cc94735"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"d8b69aaa165306328f89d2f74fe489b1c3d7fc52","unresolved":false,"context_lines":[{"line_number":150,"context_line":".. note:: Since microversion 2.91, allowed request body schema are"},{"line_number":151,"context_line":"          {\"unshelve\": null} or {\"unshelve\": {\"availability_zone\": \u003cstring\u003e}}"},{"line_number":152,"context_line":"          or {\"unshelve\": {\"host\": \u003cfqdn\u003e}}."},{"line_number":153,"context_line":"          availability_zone and host are mutually exclusive parameters."},{"line_number":154,"context_line":"          A request body of {\"unshelve\": {}} is not allowed."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":".. rest_parameters:: parameters.yaml"}],"source_content_type":"text/x-c++src","patch_set":8,"id":"abad154d_07396a57","line":153,"range":{"start_line":153,"start_character":10,"end_line":153,"end_character":71},"in_reply_to":"9a60a359_88494c91","updated":"2022-05-31 12:40:27.000000000","message":"Done","commit_id":"c8a8e7ddeba9f901aaed9157f4f00ada3cc94735"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"58d8d0f6423a859117fc40d37789aead3a0d2bfd","unresolved":true,"context_lines":[{"line_number":150,"context_line":".. note:: Since microversion 2.91, allowed request body schema are"},{"line_number":151,"context_line":"          {\"unshelve\": null} or {\"unshelve\": {\"availability_zone\": \u003cstring\u003e}}"},{"line_number":152,"context_line":"          or {\"unshelve\": {\"host\": \u003cfqdn\u003e}}."},{"line_number":153,"context_line":"          availability_zone and host are mutually exclusive parameters."},{"line_number":154,"context_line":"          A request body of {\"unshelve\": {}} is not allowed."},{"line_number":155,"context_line":""},{"line_number":156,"context_line":".. rest_parameters:: parameters.yaml"}],"source_content_type":"text/x-c++src","patch_set":8,"id":"9a60a359_88494c91","line":153,"range":{"start_line":153,"start_character":10,"end_line":153,"end_character":71},"in_reply_to":"b8391d3b_519b0e69","updated":"2022-05-16 13:05:52.000000000","message":"I\u0027m going to review the documentation as the unshelve to host and unshelve to az behavior will change.","commit_id":"c8a8e7ddeba9f901aaed9157f4f00ada3cc94735"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"If the server is locked, you must have administrator privileges to unshelve the server."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"As of microversion 2.91, you can unshelve to a specific compute node if you have PROJECT_ADMIN privileges."},{"line_number":129,"context_line":"This microversion also give the ability to pin/unpin a server availability_zone. The behavior according to unshelve"},{"line_number":130,"context_line":"parameters will follow the below table."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":11,"id":"b2ff970d_0f1b77e1","line":128,"range":{"start_line":128,"start_character":41,"end_line":128,"end_character":42},"updated":"2022-06-01 19:19:46.000000000","message":"a server","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":125,"context_line":""},{"line_number":126,"context_line":"If the server is locked, you must have administrator privileges to unshelve the server."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"As of microversion 2.91, you can unshelve to a specific compute node if you have PROJECT_ADMIN privileges."},{"line_number":129,"context_line":"This microversion also give the ability to pin/unpin a server availability_zone. The behavior according to unshelve"},{"line_number":130,"context_line":"parameters will follow the below table."},{"line_number":131,"context_line":""}],"source_content_type":"text/x-c++src","patch_set":11,"id":"86a1bfff_0d0b4d8d","line":128,"range":{"start_line":128,"start_character":41,"end_line":128,"end_character":42},"in_reply_to":"b2ff970d_0f1b77e1","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":126,"context_line":"If the server is locked, you must have administrator privileges to unshelve the server."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"As of microversion 2.91, you can unshelve to a specific compute node if you have PROJECT_ADMIN privileges."},{"line_number":129,"context_line":"This microversion also give the ability to pin/unpin a server availability_zone. The behavior according to unshelve"},{"line_number":130,"context_line":"parameters will follow the below table."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"+----------+---------------------------+----------+--------------------------------+"}],"source_content_type":"text/x-c++src","patch_set":11,"id":"2e1dc161_22808633","line":129,"range":{"start_line":129,"start_character":40,"end_line":129,"end_character":80},"updated":"2022-06-01 19:19:46.000000000","message":"to pin a server to an availability_zone and to unpin a server from any availability_zone.\n\nI would also add:\n\nWhen a server is pinned to an availability_zone the server move operations will keep the server in that availability_zone. However when the server is not pinned to any availability zone the move operations can move the server to nodes in different availability_zones.","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":126,"context_line":"If the server is locked, you must have administrator privileges to unshelve the server."},{"line_number":127,"context_line":""},{"line_number":128,"context_line":"As of microversion 2.91, you can unshelve to a specific compute node if you have PROJECT_ADMIN privileges."},{"line_number":129,"context_line":"This microversion also give the ability to pin/unpin a server availability_zone. The behavior according to unshelve"},{"line_number":130,"context_line":"parameters will follow the below table."},{"line_number":131,"context_line":""},{"line_number":132,"context_line":"+----------+---------------------------+----------+--------------------------------+"}],"source_content_type":"text/x-c++src","patch_set":11,"id":"2bf29f46_512e3a4b","line":129,"range":{"start_line":129,"start_character":40,"end_line":129,"end_character":80},"in_reply_to":"2e1dc161_22808633","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":202,"context_line":"  or"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"  - {\"unshelve\": {\"availability_zone\": \u003cstring\u003e}} (Unshelve and pin server to availability_zone)"},{"line_number":205,"context_line":"  - {\"unshelve\": {\"availability_zone\": null}}   (Unshelve and unpin server availability zone)"},{"line_number":206,"context_line":"  - {\"unshelve\": {\"host\": \u003cfqdn\u003e}}"},{"line_number":207,"context_line":"  - {\"unshelve\": {\"availability_zone\": \u003cstring\u003e, \"host\": \u003cfqdn\u003e}}"},{"line_number":208,"context_line":"  - {\"unshelve\": {\"availability_zone\": null, \"host\": \u003cfqdn\u003e}}"}],"source_content_type":"text/x-c++src","patch_set":11,"id":"0d9af3dc_07a702ca","line":205,"range":{"start_line":205,"start_character":68,"end_line":205,"end_character":92},"updated":"2022-06-01 19:19:46.000000000","message":"server from any availability zone","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":202,"context_line":"  or"},{"line_number":203,"context_line":""},{"line_number":204,"context_line":"  - {\"unshelve\": {\"availability_zone\": \u003cstring\u003e}} (Unshelve and pin server to availability_zone)"},{"line_number":205,"context_line":"  - {\"unshelve\": {\"availability_zone\": null}}   (Unshelve and unpin server availability zone)"},{"line_number":206,"context_line":"  - {\"unshelve\": {\"host\": \u003cfqdn\u003e}}"},{"line_number":207,"context_line":"  - {\"unshelve\": {\"availability_zone\": \u003cstring\u003e, \"host\": \u003cfqdn\u003e}}"},{"line_number":208,"context_line":"  - {\"unshelve\": {\"availability_zone\": null, \"host\": \u003cfqdn\u003e}}"}],"source_content_type":"text/x-c++src","patch_set":11,"id":"4ff87316_4d70dd6a","line":205,"range":{"start_line":205,"start_character":68,"end_line":205,"end_character":92},"in_reply_to":"0d9af3dc_07a702ca","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"}],"nova/api/openstack/compute/rest_api_version_history.rst":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":1210,"context_line":""},{"line_number":1211,"context_line":"Add support to unshelve instance to a specific host."},{"line_number":1212,"context_line":""},{"line_number":1213,"context_line":"Add support to pin/unpin availability zone of a server."},{"line_number":1214,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"097dc14b_5a89200e","line":1213,"range":{"start_line":1213,"start_character":0,"end_line":1213,"end_character":55},"updated":"2022-06-01 19:19:46.000000000","message":"Add support to pin a server to an availability zone or unpin a server from any availability zones.","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":1210,"context_line":""},{"line_number":1211,"context_line":"Add support to unshelve instance to a specific host."},{"line_number":1212,"context_line":""},{"line_number":1213,"context_line":"Add support to pin/unpin availability zone of a server."},{"line_number":1214,"context_line":""}],"source_content_type":"text/x-rst","patch_set":11,"id":"c6be5f34_0276bda1","line":1213,"range":{"start_line":1213,"start_character":0,"end_line":1213,"end_character":55},"in_reply_to":"097dc14b_5a89200e","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"}],"nova/api/openstack/compute/schemas/shelve.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"549826af399811f6d09279834ab8227f227e0e6c","unresolved":true,"context_lines":[{"line_number":55,"context_line":"# * {\u0027unshelve\u0027: {}}"},{"line_number":56,"context_line":"# * {\u0027unshelve\u0027: {\u0027destination_host\u0027: \u003cfqdn\u003e, \u0027destination_host\u0027: \u003cfqdn\u003e}}"},{"line_number":57,"context_line":"# * {\u0027unshelve\u0027: {\u0027foo\u0027: \u003cstring\u003e}}"},{"line_number":58,"context_line":"unshelve_v291 \u003d {"},{"line_number":59,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":60,"context_line":"    \u0027properties\u0027: {"},{"line_number":61,"context_line":"        \u0027unshelve\u0027: {"},{"line_number":62,"context_line":"            \u0027oneOf\u0027: [{"},{"line_number":63,"context_line":"                \u0027type\u0027: [\u0027object\u0027],"},{"line_number":64,"context_line":"                \u0027properties\u0027: {"},{"line_number":65,"context_line":"                    \u0027availability_zone\u0027: parameter_types.name,"},{"line_number":66,"context_line":"                    \u0027destination_host\u0027: parameter_types.fqdn"},{"line_number":67,"context_line":"                },"},{"line_number":68,"context_line":"                \u0027oneOf\u0027: ["},{"line_number":69,"context_line":"                    {\u0027required\u0027: [\u0027availability_zone\u0027]},"},{"line_number":70,"context_line":"                    {\u0027required\u0027: [\u0027destination_host\u0027]}"},{"line_number":71,"context_line":"                ],"},{"line_number":72,"context_line":"                \u0027additionalProperties\u0027: False,"},{"line_number":73,"context_line":"            },"},{"line_number":74,"context_line":"            {"},{"line_number":75,"context_line":"                \u0027type\u0027: [\u0027null\u0027],"},{"line_number":76,"context_line":"            }]"},{"line_number":77,"context_line":"        },"},{"line_number":78,"context_line":"    },"},{"line_number":79,"context_line":"    \u0027required\u0027: [\u0027unshelve\u0027],"},{"line_number":80,"context_line":"    \u0027additionalProperties\u0027: False,"},{"line_number":81,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":4,"id":"6a0242a8_a8412c20","line":80,"range":{"start_line":58,"start_character":0,"end_line":80,"end_character":34},"updated":"2022-04-06 15:42:50.000000000","message":"i think this could have been \n\nunshelve_v291 \u003d {\n    \u0027type\u0027: \u0027object\u0027,\n    \u0027properties\u0027: {\n        \u0027unshelve\u0027: {\n            \u0027type\u0027: [\u0027object\u0027, \u0027null\u0027],\n            \u0027properties\u0027: {\n                \u0027availability_zone\u0027: parameter_types.name\n                \u0027destination_host\u0027: parameter_types.fqdn\n            },\n           \u0027oneOf\u0027: [\n                {\u0027required\u0027: [\u0027availability_zone\u0027]},\n                {\u0027required\u0027: [\u0027destination_host\u0027]}\n            ],\n            \u0027additionalProperties\u0027: False,\n        },\n    },\n    \u0027required\u0027: [\u0027unshelve\u0027],\n    \u0027additionalProperties\u0027: False,\n}\n\ninstaed of \n\nunshelve_v291 \u003d {\n    \u0027type\u0027: \u0027object\u0027,\n    \u0027properties\u0027: {\n        \u0027unshelve\u0027: {\n            \u0027oneOf\u0027: [{\n                \u0027type\u0027: [\u0027object\u0027],\n                \u0027properties\u0027: {\n                    \u0027availability_zone\u0027: parameter_types.name,\n                    \u0027destination_host\u0027: parameter_types.fqdn\n                },\n                \u0027oneOf\u0027: [\n                    {\u0027required\u0027: [\u0027availability_zone\u0027]},\n                    {\u0027required\u0027: [\u0027destination_host\u0027]}\n                ],\n                \u0027additionalProperties\u0027: False,\n            },\n            {\n                \u0027type\u0027: [\u0027null\u0027],\n            }]\n        },\n    },\n    \u0027required\u0027: [\u0027unshelve\u0027],\n    \u0027additionalProperties\u0027: False,\n\ndo we need the extra layer of oneof?","commit_id":"91c4cb747da5de0de69edde75a3045e1e1bd870b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"7df403cbb9c47343223ce8240d246ebfd634835e","unresolved":false,"context_lines":[{"line_number":55,"context_line":"# * {\u0027unshelve\u0027: {}}"},{"line_number":56,"context_line":"# * {\u0027unshelve\u0027: {\u0027destination_host\u0027: \u003cfqdn\u003e, \u0027destination_host\u0027: \u003cfqdn\u003e}}"},{"line_number":57,"context_line":"# * {\u0027unshelve\u0027: {\u0027foo\u0027: \u003cstring\u003e}}"},{"line_number":58,"context_line":"unshelve_v291 \u003d {"},{"line_number":59,"context_line":"    \u0027type\u0027: \u0027object\u0027,"},{"line_number":60,"context_line":"    \u0027properties\u0027: {"},{"line_number":61,"context_line":"        \u0027unshelve\u0027: {"},{"line_number":62,"context_line":"            \u0027oneOf\u0027: [{"},{"line_number":63,"context_line":"                \u0027type\u0027: [\u0027object\u0027],"},{"line_number":64,"context_line":"                \u0027properties\u0027: {"},{"line_number":65,"context_line":"                    \u0027availability_zone\u0027: parameter_types.name,"},{"line_number":66,"context_line":"                    \u0027destination_host\u0027: parameter_types.fqdn"},{"line_number":67,"context_line":"                },"},{"line_number":68,"context_line":"                \u0027oneOf\u0027: ["},{"line_number":69,"context_line":"                    {\u0027required\u0027: [\u0027availability_zone\u0027]},"},{"line_number":70,"context_line":"                    {\u0027required\u0027: [\u0027destination_host\u0027]}"},{"line_number":71,"context_line":"                ],"},{"line_number":72,"context_line":"                \u0027additionalProperties\u0027: False,"},{"line_number":73,"context_line":"            },"},{"line_number":74,"context_line":"            {"},{"line_number":75,"context_line":"                \u0027type\u0027: [\u0027null\u0027],"},{"line_number":76,"context_line":"            }]"},{"line_number":77,"context_line":"        },"},{"line_number":78,"context_line":"    },"},{"line_number":79,"context_line":"    \u0027required\u0027: [\u0027unshelve\u0027],"},{"line_number":80,"context_line":"    \u0027additionalProperties\u0027: False,"},{"line_number":81,"context_line":"}"}],"source_content_type":"text/x-python","patch_set":4,"id":"f1f39606_f6d81984","line":80,"range":{"start_line":58,"start_character":0,"end_line":80,"end_character":34},"in_reply_to":"6a0242a8_a8412c20","updated":"2022-05-06 15:34:05.000000000","message":"No if you check on https://www.jsonschemavalidator.net/\n\nYou will see that the schema (derived from yours)\n{\n    \u0027type\u0027: \u0027object\u0027,\n    \u0027properties\u0027: {\n        \u0027unshelve\u0027: {\n            \u0027type\u0027: [\u0027object\u0027, \u0027null\u0027],\n            \u0027properties\u0027: {\n                \u0027availability_zone\u0027: {\u0027type\u0027: \u0027string\u0027},\n                \u0027host\u0027: {\u0027type\u0027: \u0027string\u0027},\n            },\n           \u0027oneOf\u0027: [\n                {\u0027required\u0027: [\u0027availability_zone\u0027]},\n                {\u0027required\u0027: [\u0027host\u0027]}\n            ],\n            \u0027additionalProperties\u0027: false,\n        },\n    },\n    \u0027required\u0027: [\u0027unshelve\u0027],\n    \u0027additionalProperties\u0027: false,\n}\n\n will not verify input:\n{\n\tunshelve: null\n}\n\n\nBut derived from mine will:\n{\n     \u0027type\u0027: \u0027object\u0027,\n     \u0027properties\u0027: {\n         \u0027unshelve\u0027: {\n             \u0027oneOf\u0027: [{\n                 \u0027type\u0027: [\u0027object\u0027],\n                 \u0027properties\u0027: {\n                    \u0027availability_zone\u0027: {\u0027type\u0027: \u0027string\u0027},\n                     \u0027host\u0027: {\u0027type\u0027: \u0027string\u0027}\n                 },\n                 \u0027oneOf\u0027: [\n                     {\u0027required\u0027: [\u0027availability_zone\u0027]},\n                     {\u0027required\u0027: [\u0027host\u0027]}\n                 ],\n                 \u0027additionalProperties\u0027: false,\n             },\n             {\n                 \u0027type\u0027: [\u0027null\u0027],\n             }]\n         },\n     },\n     \u0027required\u0027: [\u0027unshelve\u0027],\n     \u0027additionalProperties\u0027: false,\n }","commit_id":"91c4cb747da5de0de69edde75a3045e1e1bd870b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":false,"context_lines":[{"line_number":40,"context_line":"# schema is applied only for \u003e\u003d2.91 with unshelve a server API."},{"line_number":41,"context_line":"# Add host parameter to specify to unshelve to this specific host."},{"line_number":42,"context_line":"#"},{"line_number":43,"context_line":"# Schema has been redefined for better clarity instead of extend 2.77."},{"line_number":44,"context_line":"#"},{"line_number":45,"context_line":"# API can be called with the following body:"},{"line_number":46,"context_line":"#"}],"source_content_type":"text/x-python","patch_set":11,"id":"1df98a8e_2b9e8ca3","line":43,"range":{"start_line":43,"start_character":18,"end_line":43,"end_character":47},"updated":"2022-06-01 19:19:46.000000000","message":"+1","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":73,"context_line":"                            \"oneOf\": ["},{"line_number":74,"context_line":"                                {\"type\": [\"null\"]},"},{"line_number":75,"context_line":"                                {\"type\": \"string\"}]"},{"line_number":76,"context_line":"                            },"},{"line_number":77,"context_line":"                        \"host\": {"},{"line_number":78,"context_line":"                            \"type\": \"string\""},{"line_number":79,"context_line":"                            }"}],"source_content_type":"text/x-python","patch_set":11,"id":"7d6946ea_1c7b26d0","line":76,"range":{"start_line":76,"start_character":28,"end_line":76,"end_character":30},"updated":"2022-06-01 19:19:46.000000000","message":"if I parse this correctly then this } is under-indented.","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                            \"oneOf\": ["},{"line_number":74,"context_line":"                                {\"type\": [\"null\"]},"},{"line_number":75,"context_line":"                                {\"type\": \"string\"}]"},{"line_number":76,"context_line":"                            },"},{"line_number":77,"context_line":"                        \"host\": {"},{"line_number":78,"context_line":"                            \"type\": \"string\""},{"line_number":79,"context_line":"                            }"}],"source_content_type":"text/x-python","patch_set":11,"id":"1922ec90_87847b4f","line":76,"range":{"start_line":76,"start_character":28,"end_line":76,"end_character":30},"in_reply_to":"7d6946ea_1c7b26d0","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":81,"context_line":"                    \"additionalProperties\": False"},{"line_number":82,"context_line":"                    },"},{"line_number":83,"context_line":"                {\"type\": [\"null\"]}"},{"line_number":84,"context_line":"                ]"},{"line_number":85,"context_line":"            }"},{"line_number":86,"context_line":"        },"},{"line_number":87,"context_line":"    \"required\": [\"unshelve\"],"}],"source_content_type":"text/x-python","patch_set":11,"id":"98dc91e7_628d55da","line":84,"updated":"2022-06-01 19:19:46.000000000","message":"this ] seems to be under-indented.","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":81,"context_line":"                    \"additionalProperties\": False"},{"line_number":82,"context_line":"                    },"},{"line_number":83,"context_line":"                {\"type\": [\"null\"]}"},{"line_number":84,"context_line":"                ]"},{"line_number":85,"context_line":"            }"},{"line_number":86,"context_line":"        },"},{"line_number":87,"context_line":"    \"required\": [\"unshelve\"],"}],"source_content_type":"text/x-python","patch_set":11,"id":"bc08aa78_5757d34a","line":84,"in_reply_to":"98dc91e7_628d55da","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":11,"id":"8d958305_cf00af0b","line":90,"updated":"2022-06-01 19:19:46.000000000","message":"I would indent this like:\n\n  unshelve_v291 \u003d {\n      \"type\": \"object\",\n      \"properties\": {\n          \"unshelve\": {\n              \"oneOf\": [\n                  {\n                      \"type\": [\"object\"],\n                      \"properties\": {\n                          \"availability_zone\": {\n                              \"oneOf\": [\n                                  {\"type\": [\"null\"]}, \n                                  {\"type\": \"string\"}\n                              ]\n                          },\n                          \"host\": {\"type\": \"string\"},\n                      },\n                      \"additionalProperties\": False,\n                  },\n                  {\"type\": [\"null\"]},\n              ]\n          }\n      },\n      \"required\": [\"unshelve\"],\n      \"additionalProperties\": False,\n  }","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":11,"id":"0a726d03_e1b6f668","line":90,"in_reply_to":"8d958305_cf00af0b","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"}],"nova/api/openstack/compute/shelve.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":47,"context_line":"                target\u003d{"},{"line_number":48,"context_line":"                    \u0027user_id\u0027: instance.user_id,"},{"line_number":49,"context_line":"                    \u0027project_id\u0027: instance.project_id"},{"line_number":50,"context_line":"                    })"},{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            self.compute_api.shelve(context, instance)"},{"line_number":53,"context_line":"        except ("}],"source_content_type":"text/x-python","patch_set":11,"id":"c1a939b1_795aa5cf","line":50,"updated":"2022-06-01 19:19:46.000000000","message":"This seems to be unrelated refactoring as the content did not change. As the patch is already pretty large I suggest not to do this in this patch. \n\nAlso you don\u0027t need that much indent after .can(. I single level is enough:\n        context.can(\n            shelve_policies.POLICY_ROOT % \"shelve\",\n            target\u003d{\n                \"user_id\": instance.user_id,\n                \"project_id\": instance.project_id,\n            },\n        )","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":47,"context_line":"                target\u003d{"},{"line_number":48,"context_line":"                    \u0027user_id\u0027: instance.user_id,"},{"line_number":49,"context_line":"                    \u0027project_id\u0027: instance.project_id"},{"line_number":50,"context_line":"                    })"},{"line_number":51,"context_line":"        try:"},{"line_number":52,"context_line":"            self.compute_api.shelve(context, instance)"},{"line_number":53,"context_line":"        except ("}],"source_content_type":"text/x-python","patch_set":11,"id":"18c125e8_6e0aa5f6","line":50,"in_reply_to":"c1a939b1_795aa5cf","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":73,"context_line":"                target\u003d{"},{"line_number":74,"context_line":"                    \u0027user_id\u0027: instance.user_id,"},{"line_number":75,"context_line":"                    \u0027project_id\u0027: instance.project_id"},{"line_number":76,"context_line":"                    })"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        try:"},{"line_number":79,"context_line":"            self.compute_api.shelve_offload(context, instance)"}],"source_content_type":"text/x-python","patch_set":11,"id":"68c85e80_6b708a90","line":76,"updated":"2022-06-01 19:19:46.000000000","message":"ditto","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":73,"context_line":"                target\u003d{"},{"line_number":74,"context_line":"                    \u0027user_id\u0027: instance.user_id,"},{"line_number":75,"context_line":"                    \u0027project_id\u0027: instance.project_id"},{"line_number":76,"context_line":"                    })"},{"line_number":77,"context_line":""},{"line_number":78,"context_line":"        try:"},{"line_number":79,"context_line":"            self.compute_api.shelve_offload(context, instance)"}],"source_content_type":"text/x-python","patch_set":11,"id":"b45496ba_143a3cfc","line":76,"in_reply_to":"68c85e80_6b708a90","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":109,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":110,"context_line":"        instance \u003d common.get_instance(self.compute_api, context, id)"},{"line_number":111,"context_line":"        context.can("},{"line_number":112,"context_line":"                shelve_policies.POLICY_ROOT % \u0027unshelve\u0027,"},{"line_number":113,"context_line":"                target\u003d{\u0027project_id\u0027: instance.project_id}"},{"line_number":114,"context_line":"                )"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"2a8c7db4_f3c98a12","line":112,"range":{"start_line":112,"start_character":8,"end_line":112,"end_character":16},"updated":"2022-06-01 19:19:46.000000000","message":"over-indent, a single tab (4 spaces) is enough","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":109,"context_line":"        context \u003d req.environ[\"nova.context\"]"},{"line_number":110,"context_line":"        instance \u003d common.get_instance(self.compute_api, context, id)"},{"line_number":111,"context_line":"        context.can("},{"line_number":112,"context_line":"                shelve_policies.POLICY_ROOT % \u0027unshelve\u0027,"},{"line_number":113,"context_line":"                target\u003d{\u0027project_id\u0027: instance.project_id}"},{"line_number":114,"context_line":"                )"},{"line_number":115,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"2671e1ca_a521017c","line":112,"range":{"start_line":112,"start_character":8,"end_line":112,"end_character":16},"in_reply_to":"2a8c7db4_f3c98a12","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":134,"context_line":"                    instance,"},{"line_number":135,"context_line":"                    new_az\u003dnew_az,"},{"line_number":136,"context_line":"                    host\u003dhost,"},{"line_number":137,"context_line":"                    sentinel\u003d_az_sentinel)"},{"line_number":138,"context_line":"        except ("},{"line_number":139,"context_line":"                exception.InstanceIsLocked,"},{"line_number":140,"context_line":"                exception.UnshelveInstanceInvalidState,"}],"source_content_type":"text/x-python","patch_set":11,"id":"6b3c94fa_f1e3e4be","line":137,"updated":"2022-06-01 19:19:46.000000000","message":"Passing the local sentinel feels weird to me. I would be tempted to already translate the sentinel to a boolean like:\n\n            self.compute_api.unshelve(\n                    context,\n                    instance,\n                    new_az\u003dnew_az,\n                    host\u003dhost,\n                    az_not_provided\u003d(new_az \u003d\u003d _az_sentinel)\n            )\n\n(Some can say that do not use booleans as function parameters, but split the called function into two instead, but we tend not to split the functions at the compute_api boundary)\n\nAlternatively we could move the sentinel value as a constant to the compute_api. Something like:\n\n    nova.compute.api.API.FIELD_NOT_PROVIDED","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":134,"context_line":"                    instance,"},{"line_number":135,"context_line":"                    new_az\u003dnew_az,"},{"line_number":136,"context_line":"                    host\u003dhost,"},{"line_number":137,"context_line":"                    sentinel\u003d_az_sentinel)"},{"line_number":138,"context_line":"        except ("},{"line_number":139,"context_line":"                exception.InstanceIsLocked,"},{"line_number":140,"context_line":"                exception.UnshelveInstanceInvalidState,"}],"source_content_type":"text/x-python","patch_set":11,"id":"edc196b5_4f2510fa","line":137,"in_reply_to":"6b3c94fa_f1e3e4be","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":146,"context_line":"            common.raise_http_conflict_for_instance_invalid_state("},{"line_number":147,"context_line":"                    state_error, \u0027unshelve\u0027, id)"},{"line_number":148,"context_line":"        except ("},{"line_number":149,"context_line":"                exception.InvalidRequest,"},{"line_number":150,"context_line":"                exception.ExtendedResourceRequestOldCompute"},{"line_number":151,"context_line":"                ) as e:"},{"line_number":152,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":11,"id":"639f0131_1370caf9","line":149,"updated":"2022-06-01 19:19:46.000000000","message":"I suggest not to reformat this here as the patch is already pretty big. But if you do so then I thin the following is better as it uses less indents:\n\n        except (\n            exception.InstanceIsLocked,\n            exception.UnshelveInstanceInvalidState,\n            exception.UnshelveHostNotInAZ,\n            exception.MismatchVolumeAZException,\n        ) as e:\n            raise exc.HTTPConflict(explanation\u003de.format_message())\n        except exception.InstanceInvalidState as state_error:\n            common.raise_http_conflict_for_instance_invalid_state(\n                state_error, \"unshelve\", id\n            )\n        except (\n            exception.InvalidRequest,\n            exception.ExtendedResourceRequestOldCompute,\n        ) as e:\n            raise exc.HTTPBadRequest(explanation\u003de.format_message())","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":146,"context_line":"            common.raise_http_conflict_for_instance_invalid_state("},{"line_number":147,"context_line":"                    state_error, \u0027unshelve\u0027, id)"},{"line_number":148,"context_line":"        except ("},{"line_number":149,"context_line":"                exception.InvalidRequest,"},{"line_number":150,"context_line":"                exception.ExtendedResourceRequestOldCompute"},{"line_number":151,"context_line":"                ) as e:"},{"line_number":152,"context_line":"            raise exc.HTTPBadRequest(explanation\u003de.format_message())"}],"source_content_type":"text/x-python","patch_set":11,"id":"af054288_6a8a5593","line":149,"in_reply_to":"639f0131_1370caf9","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5d99528376718e16c97b33224405ce208aa8e890","unresolved":true,"context_lines":[{"line_number":23,"context_line":"from nova.api.openstack import wsgi"},{"line_number":24,"context_line":"from nova.api import validation"},{"line_number":25,"context_line":"from nova.compute import api as compute"},{"line_number":26,"context_line":"from nova.compute.api import API"},{"line_number":27,"context_line":"from nova import exception"},{"line_number":28,"context_line":"from nova.policies import shelve as shelve_policies"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"5ed85243_acd23298","line":26,"updated":"2022-06-22 08:37:22.000000000","message":"unnecessary import","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"388aab3bf4f1aa2b69717d7a3952ce5e355880a5","unresolved":false,"context_lines":[{"line_number":23,"context_line":"from nova.api.openstack import wsgi"},{"line_number":24,"context_line":"from nova.api import validation"},{"line_number":25,"context_line":"from nova.compute import api as compute"},{"line_number":26,"context_line":"from nova.compute.api import API"},{"line_number":27,"context_line":"from nova import exception"},{"line_number":28,"context_line":"from nova.policies import shelve as shelve_policies"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-python","patch_set":14,"id":"5d1ff6df_c606feeb","line":26,"in_reply_to":"5ed85243_acd23298","updated":"2022-06-24 13:45:46.000000000","message":"Done","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5d99528376718e16c97b33224405ce208aa8e890","unresolved":true,"context_lines":[{"line_number":96,"context_line":"        context.can(shelve_policies.POLICY_ROOT % \u0027unshelve\u0027,"},{"line_number":97,"context_line":"                    target\u003d{\u0027project_id\u0027: instance.project_id})"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        new_az \u003d API.FIELD_NOT_PROVIDED"},{"line_number":100,"context_line":"        host \u003d None"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        unshelve_dict \u003d body[\u0027unshelve\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"445ea35e_15e47d34","line":99,"updated":"2022-06-22 08:37:22.000000000","message":"No, you don\u0027t need to import the sentinel, but just not pass new_az if we don\u0027t have it (new_az would be an optional argument for compute_api.unshelve())","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"388aab3bf4f1aa2b69717d7a3952ce5e355880a5","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        context.can(shelve_policies.POLICY_ROOT % \u0027unshelve\u0027,"},{"line_number":97,"context_line":"                    target\u003d{\u0027project_id\u0027: instance.project_id})"},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"        new_az \u003d API.FIELD_NOT_PROVIDED"},{"line_number":100,"context_line":"        host \u003d None"},{"line_number":101,"context_line":""},{"line_number":102,"context_line":"        unshelve_dict \u003d body[\u0027unshelve\u0027]"}],"source_content_type":"text/x-python","patch_set":14,"id":"1dd0c6de_cc3e983e","line":99,"in_reply_to":"445ea35e_15e47d34","updated":"2022-06-24 13:45:46.000000000","message":"Done","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"}],"nova/compute/api.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"549826af399811f6d09279834ab8227f227e0e6c","unresolved":true,"context_lines":[{"line_number":4444,"context_line":"    @check_instance_lock"},{"line_number":4445,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.SHELVED,"},{"line_number":4446,"context_line":"        vm_states.SHELVED_OFFLOADED])"},{"line_number":4447,"context_line":"    def unshelve(self, context, instance,"},{"line_number":4448,"context_line":"                 new_az\u003dNone,"},{"line_number":4449,"context_line":"                 destination_host\u003dNone):"},{"line_number":4450,"context_line":"        \"\"\"Restore a shelved instance.\"\"\""},{"line_number":4451,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":4452,"context_line":"            context, instance.uuid)"}],"source_content_type":"text/x-python","patch_set":4,"id":"29f2ccf1_ddf50db5","line":4449,"range":{"start_line":4447,"start_character":3,"end_line":4449,"end_character":40},"updated":"2022-04-06 15:42:50.000000000","message":"def unshelve(\n    self, context, instance, new_az\u003dNone, destination_host\u003dNone\n):","commit_id":"91c4cb747da5de0de69edde75a3045e1e1bd870b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"7df403cbb9c47343223ce8240d246ebfd634835e","unresolved":false,"context_lines":[{"line_number":4444,"context_line":"    @check_instance_lock"},{"line_number":4445,"context_line":"    @check_instance_state(vm_state\u003d[vm_states.SHELVED,"},{"line_number":4446,"context_line":"        vm_states.SHELVED_OFFLOADED])"},{"line_number":4447,"context_line":"    def unshelve(self, context, instance,"},{"line_number":4448,"context_line":"                 new_az\u003dNone,"},{"line_number":4449,"context_line":"                 destination_host\u003dNone):"},{"line_number":4450,"context_line":"        \"\"\"Restore a shelved instance.\"\"\""},{"line_number":4451,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":4452,"context_line":"            context, instance.uuid)"}],"source_content_type":"text/x-python","patch_set":4,"id":"45e500ad_c6686dba","line":4449,"range":{"start_line":4447,"start_character":3,"end_line":4449,"end_character":40},"in_reply_to":"29f2ccf1_ddf50db5","updated":"2022-05-06 15:34:05.000000000","message":"Done","commit_id":"91c4cb747da5de0de69edde75a3045e1e1bd870b"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"3c9a5796d38f384124eaf275b9357f089babd59d","unresolved":true,"context_lines":[{"line_number":4492,"context_line":"                raise exception.InvalidRequest(msg)"},{"line_number":4493,"context_line":""},{"line_number":4494,"context_line":"            # Ensure instance is shelve_offlaoded"},{"line_number":4495,"context_line":"            if instance.vm_state !\u003d \u0027shelved_offloaded\u0027:"},{"line_number":4496,"context_line":"                msg \u003d _(\u0027The instance \"{}\" status is not shelved_offloaded\u0027"},{"line_number":4497,"context_line":"                        ).format(instance.hostname)"},{"line_number":4498,"context_line":"                raise exception.UnshelveInstanceInvalidState(msg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"ef917283_ab1f74f8","line":4495,"range":{"start_line":4495,"start_character":36,"end_line":4495,"end_character":55},"updated":"2022-05-14 03:07:18.000000000","message":"It should be vm_states.SHELVED_OFFLOADED .","commit_id":"c8a8e7ddeba9f901aaed9157f4f00ada3cc94735"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"58d8d0f6423a859117fc40d37789aead3a0d2bfd","unresolved":false,"context_lines":[{"line_number":4492,"context_line":"                raise exception.InvalidRequest(msg)"},{"line_number":4493,"context_line":""},{"line_number":4494,"context_line":"            # Ensure instance is shelve_offlaoded"},{"line_number":4495,"context_line":"            if instance.vm_state !\u003d \u0027shelved_offloaded\u0027:"},{"line_number":4496,"context_line":"                msg \u003d _(\u0027The instance \"{}\" status is not shelved_offloaded\u0027"},{"line_number":4497,"context_line":"                        ).format(instance.hostname)"},{"line_number":4498,"context_line":"                raise exception.UnshelveInstanceInvalidState(msg)"}],"source_content_type":"text/x-python","patch_set":8,"id":"8c7b5fe4_86bf153a","line":4495,"range":{"start_line":4495,"start_character":36,"end_line":4495,"end_character":55},"in_reply_to":"ef917283_ab1f74f8","updated":"2022-05-16 13:05:52.000000000","message":"Done","commit_id":"c8a8e7ddeba9f901aaed9157f4f00ada3cc94735"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"from nova.accelerator import cyborg"},{"line_number":40,"context_line":"from nova import availability_zones"},{"line_number":41,"context_line":"from nova.availability_zones import get_host_availability_zone"},{"line_number":42,"context_line":"from nova import block_device"},{"line_number":43,"context_line":"from nova.compute import flavors"},{"line_number":44,"context_line":"from nova.compute import instance_actions"}],"source_content_type":"text/x-python","patch_set":11,"id":"470c8d2b_bb4f3ef1","line":41,"updated":"2022-06-01 19:19:46.000000000","message":"I\u0027m surprised that we don\u0027t have a hacking rule for this but we tend not to directly import functions / classes we only import their modules.\nSo you can already call availability_zones.get_host_availability_zone() as the module is imported at L40","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":38,"context_line":""},{"line_number":39,"context_line":"from nova.accelerator import cyborg"},{"line_number":40,"context_line":"from nova import availability_zones"},{"line_number":41,"context_line":"from nova.availability_zones import get_host_availability_zone"},{"line_number":42,"context_line":"from nova import block_device"},{"line_number":43,"context_line":"from nova.compute import flavors"},{"line_number":44,"context_line":"from nova.compute import instance_actions"}],"source_content_type":"text/x-python","patch_set":11,"id":"cc8f3209_2ad41047","line":41,"in_reply_to":"470c8d2b_bb4f3ef1","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":4399,"context_line":"        \"\"\""},{"line_number":4400,"context_line":"        if instance.vm_state !\u003d vm_states.SHELVED_OFFLOADED:"},{"line_number":4401,"context_line":"            # NOTE(brinzhang): If the server status is \u0027SHELVED\u0027, it still"},{"line_number":4402,"context_line":"            # belongs to a host, the availability_zone has not changed."},{"line_number":4403,"context_line":"            # Unshelving a shelved offloaded server will go through the"},{"line_number":4404,"context_line":"            # scheduler to find a new host."},{"line_number":4405,"context_line":"            raise exception.UnshelveInstanceInvalidState("}],"source_content_type":"text/x-python","patch_set":11,"id":"a2e4ac66_f2b048fc","line":4402,"range":{"start_line":4402,"start_character":33,"end_line":4402,"end_character":71},"updated":"2022-06-01 19:19:46.000000000","message":"the availability_zone should not change","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":4399,"context_line":"        \"\"\""},{"line_number":4400,"context_line":"        if instance.vm_state !\u003d vm_states.SHELVED_OFFLOADED:"},{"line_number":4401,"context_line":"            # NOTE(brinzhang): If the server status is \u0027SHELVED\u0027, it still"},{"line_number":4402,"context_line":"            # belongs to a host, the availability_zone has not changed."},{"line_number":4403,"context_line":"            # Unshelving a shelved offloaded server will go through the"},{"line_number":4404,"context_line":"            # scheduler to find a new host."},{"line_number":4405,"context_line":"            raise exception.UnshelveInstanceInvalidState("}],"source_content_type":"text/x-python","patch_set":11,"id":"7352a89d_f5fa4f8b","line":4402,"range":{"start_line":4402,"start_character":33,"end_line":4402,"end_character":71},"in_reply_to":"a2e4ac66_f2b048fc","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":4400,"context_line":"        if instance.vm_state !\u003d vm_states.SHELVED_OFFLOADED:"},{"line_number":4401,"context_line":"            # NOTE(brinzhang): If the server status is \u0027SHELVED\u0027, it still"},{"line_number":4402,"context_line":"            # belongs to a host, the availability_zone has not changed."},{"line_number":4403,"context_line":"            # Unshelving a shelved offloaded server will go through the"},{"line_number":4404,"context_line":"            # scheduler to find a new host."},{"line_number":4405,"context_line":"            raise exception.UnshelveInstanceInvalidState("},{"line_number":4406,"context_line":"                state\u003dinstance.vm_state, instance_uuid\u003dinstance.uuid)"},{"line_number":4407,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"01cdcef0_f804a339","line":4404,"range":{"start_line":4403,"start_character":12,"end_line":4404,"end_character":43},"updated":"2022-06-01 19:19:46.000000000","message":"I think you can drop this","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":4400,"context_line":"        if instance.vm_state !\u003d vm_states.SHELVED_OFFLOADED:"},{"line_number":4401,"context_line":"            # NOTE(brinzhang): If the server status is \u0027SHELVED\u0027, it still"},{"line_number":4402,"context_line":"            # belongs to a host, the availability_zone has not changed."},{"line_number":4403,"context_line":"            # Unshelving a shelved offloaded server will go through the"},{"line_number":4404,"context_line":"            # scheduler to find a new host."},{"line_number":4405,"context_line":"            raise exception.UnshelveInstanceInvalidState("},{"line_number":4406,"context_line":"                state\u003dinstance.vm_state, instance_uuid\u003dinstance.uuid)"},{"line_number":4407,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"6cf31532_332af279","line":4404,"range":{"start_line":4403,"start_character":12,"end_line":4404,"end_character":43},"in_reply_to":"01cdcef0_f804a339","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":4405,"context_line":"            raise exception.UnshelveInstanceInvalidState("},{"line_number":4406,"context_line":"                state\u003dinstance.vm_state, instance_uuid\u003dinstance.uuid)"},{"line_number":4407,"context_line":""},{"line_number":4408,"context_line":"    def _check_host(self, context, host):"},{"line_number":4409,"context_line":"        \"\"\"Check if the destination host to unshelve to is valid,"},{"line_number":4410,"context_line":"        if not raise an exception."},{"line_number":4411,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"984d0701_687eb8c0","line":4408,"range":{"start_line":4408,"start_character":8,"end_line":4408,"end_character":19},"updated":"2022-06-01 19:19:46.000000000","message":"as you return a compute node from this function I would just call it _get_node()","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":4405,"context_line":"            raise exception.UnshelveInstanceInvalidState("},{"line_number":4406,"context_line":"                state\u003dinstance.vm_state, instance_uuid\u003dinstance.uuid)"},{"line_number":4407,"context_line":""},{"line_number":4408,"context_line":"    def _check_host(self, context, host):"},{"line_number":4409,"context_line":"        \"\"\"Check if the destination host to unshelve to is valid,"},{"line_number":4410,"context_line":"        if not raise an exception."},{"line_number":4411,"context_line":"        \"\"\""}],"source_content_type":"text/x-python","patch_set":11,"id":"d4c6d1bd_820e4302","line":4408,"range":{"start_line":4408,"start_character":8,"end_line":4408,"end_character":19},"in_reply_to":"984d0701_687eb8c0","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":4409,"context_line":"        \"\"\"Check if the destination host to unshelve to is valid,"},{"line_number":4410,"context_line":"        if not raise an exception."},{"line_number":4411,"context_line":"        \"\"\""},{"line_number":4412,"context_line":"        # Checking if the host is valid. An exception should rise if it is"},{"line_number":4413,"context_line":"        # not the case."},{"line_number":4414,"context_line":"        try:"},{"line_number":4415,"context_line":"            compute_node \u003d ("},{"line_number":4416,"context_line":"                objects.ComputeNode.get_first_node_by_host_for_old_compat("}],"source_content_type":"text/x-python","patch_set":11,"id":"68e38e1e_ad80f316","line":4413,"range":{"start_line":4412,"start_character":1,"end_line":4413,"end_character":23},"updated":"2022-06-01 19:19:46.000000000","message":"drop this, the func doc already says the same thing","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":4409,"context_line":"        \"\"\"Check if the destination host to unshelve to is valid,"},{"line_number":4410,"context_line":"        if not raise an exception."},{"line_number":4411,"context_line":"        \"\"\""},{"line_number":4412,"context_line":"        # Checking if the host is valid. An exception should rise if it is"},{"line_number":4413,"context_line":"        # not the case."},{"line_number":4414,"context_line":"        try:"},{"line_number":4415,"context_line":"            compute_node \u003d ("},{"line_number":4416,"context_line":"                objects.ComputeNode.get_first_node_by_host_for_old_compat("}],"source_content_type":"text/x-python","patch_set":11,"id":"2f440283_f2f29242","line":4413,"range":{"start_line":4412,"start_character":1,"end_line":4413,"end_character":23},"in_reply_to":"68e38e1e_ad80f316","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":4416,"context_line":"                objects.ComputeNode.get_first_node_by_host_for_old_compat("},{"line_number":4417,"context_line":"                    context, host, use_slave\u003dTrue)"},{"line_number":4418,"context_line":"                )"},{"line_number":4419,"context_line":"        # Raise a http status code 400 instead of a 500."},{"line_number":4420,"context_line":"        except nova.exception.ComputeHostNotFound:"},{"line_number":4421,"context_line":"            msg \u003d _(\u0027The requested host \"{}\" is not found\u0027).format("},{"line_number":4422,"context_line":"                host)"},{"line_number":4423,"context_line":"            raise exception.InvalidRequest(msg)"},{"line_number":4424,"context_line":"        return compute_node"},{"line_number":4425,"context_line":""},{"line_number":4426,"context_line":"    def host_in_az(self, context, host, availability_zone):"}],"source_content_type":"text/x-python","patch_set":11,"id":"1b2e5a15_e3fe3370","line":4423,"range":{"start_line":4419,"start_character":7,"end_line":4423,"end_character":47},"updated":"2022-06-01 19:19:46.000000000","message":"I think we do such translation at the API level.\n\n// later\n\nIf you do the translation at the API level then this function becomes a single line and you can inline it.","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":4416,"context_line":"                objects.ComputeNode.get_first_node_by_host_for_old_compat("},{"line_number":4417,"context_line":"                    context, host, use_slave\u003dTrue)"},{"line_number":4418,"context_line":"                )"},{"line_number":4419,"context_line":"        # Raise a http status code 400 instead of a 500."},{"line_number":4420,"context_line":"        except nova.exception.ComputeHostNotFound:"},{"line_number":4421,"context_line":"            msg \u003d _(\u0027The requested host \"{}\" is not found\u0027).format("},{"line_number":4422,"context_line":"                host)"},{"line_number":4423,"context_line":"            raise exception.InvalidRequest(msg)"},{"line_number":4424,"context_line":"        return compute_node"},{"line_number":4425,"context_line":""},{"line_number":4426,"context_line":"    def host_in_az(self, context, host, availability_zone):"}],"source_content_type":"text/x-python","patch_set":11,"id":"b3852eac_247079d7","line":4423,"range":{"start_line":4419,"start_character":7,"end_line":4423,"end_character":47},"in_reply_to":"1b2e5a15_e3fe3370","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":4428,"context_line":"        if not raise an exception."},{"line_number":4429,"context_line":"        \"\"\""},{"line_number":4430,"context_line":"        host_az \u003d get_host_availability_zone(context, host)"},{"line_number":4431,"context_line":"        if host_az \u003d\u003d availability_zone:"},{"line_number":4432,"context_line":"            return True"},{"line_number":4433,"context_line":"        raise exception.UnshelveHostNotInAZ()"},{"line_number":4434,"context_line":""},{"line_number":4435,"context_line":"    def _validate_unshelve_az(self, context, instance, availability_zone):"},{"line_number":4436,"context_line":"        \"\"\"Verify the specified availability_zone during unshelve."}],"source_content_type":"text/x-python","patch_set":11,"id":"bf7ab258_30356516","line":4433,"range":{"start_line":4431,"start_character":8,"end_line":4433,"end_character":45},"updated":"2022-06-01 19:19:46.000000000","message":"Please either return True/False from the function or return nothing / raise exception.","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":4428,"context_line":"        if not raise an exception."},{"line_number":4429,"context_line":"        \"\"\""},{"line_number":4430,"context_line":"        host_az \u003d get_host_availability_zone(context, host)"},{"line_number":4431,"context_line":"        if host_az \u003d\u003d availability_zone:"},{"line_number":4432,"context_line":"            return True"},{"line_number":4433,"context_line":"        raise exception.UnshelveHostNotInAZ()"},{"line_number":4434,"context_line":""},{"line_number":4435,"context_line":"    def _validate_unshelve_az(self, context, instance, availability_zone):"},{"line_number":4436,"context_line":"        \"\"\"Verify the specified availability_zone during unshelve."}],"source_content_type":"text/x-python","patch_set":11,"id":"fbdcbf09_9c46b239","line":4433,"range":{"start_line":4431,"start_character":8,"end_line":4433,"end_character":45},"in_reply_to":"bf7ab258_30356516","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":4435,"context_line":"    def _validate_unshelve_az(self, context, instance, availability_zone):"},{"line_number":4436,"context_line":"        \"\"\"Verify the specified availability_zone during unshelve."},{"line_number":4437,"context_line":""},{"line_number":4438,"context_line":"        Verifies that the server is shelved offloaded, the AZ exists and"},{"line_number":4439,"context_line":"        if [cinder]/cross_az_attach\u003dFalse, that any attached volumes are in"},{"line_number":4440,"context_line":"        the same AZ."},{"line_number":4441,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"eef7f1c5_2e0f5679","line":4438,"range":{"start_line":4438,"start_character":8,"end_line":4438,"end_character":54},"updated":"2022-06-01 19:19:46.000000000","message":"this is not true any more","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":4435,"context_line":"    def _validate_unshelve_az(self, context, instance, availability_zone):"},{"line_number":4436,"context_line":"        \"\"\"Verify the specified availability_zone during unshelve."},{"line_number":4437,"context_line":""},{"line_number":4438,"context_line":"        Verifies that the server is shelved offloaded, the AZ exists and"},{"line_number":4439,"context_line":"        if [cinder]/cross_az_attach\u003dFalse, that any attached volumes are in"},{"line_number":4440,"context_line":"        the same AZ."},{"line_number":4441,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"92cd733d_ebbf5ab3","line":4438,"range":{"start_line":4438,"start_character":8,"end_line":4438,"end_character":54},"in_reply_to":"eef7f1c5_2e0f5679","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":4447,"context_line":"        :raises: MismatchVolumeAZException if [cinder]/cross_az_attach\u003dFalse"},{"line_number":4448,"context_line":"            and any attached volumes are not in the requested AZ"},{"line_number":4449,"context_line":"        \"\"\""},{"line_number":4450,"context_line":"        # self._validate_unshelve_az(context, instance, new_az)"},{"line_number":4451,"context_line":"        # Unshelving a shelved offloaded server will go through the"},{"line_number":4452,"context_line":"        # scheduler to pick a new host, so we update the"},{"line_number":4453,"context_line":"        # RequestSpec.availability_zone here. Note that if scheduling"}],"source_content_type":"text/x-python","patch_set":11,"id":"cf528561_f878e97d","line":4450,"updated":"2022-06-01 19:19:46.000000000","message":"this seems like some leftover to me","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":4447,"context_line":"        :raises: MismatchVolumeAZException if [cinder]/cross_az_attach\u003dFalse"},{"line_number":4448,"context_line":"            and any attached volumes are not in the requested AZ"},{"line_number":4449,"context_line":"        \"\"\""},{"line_number":4450,"context_line":"        # self._validate_unshelve_az(context, instance, new_az)"},{"line_number":4451,"context_line":"        # Unshelving a shelved offloaded server will go through the"},{"line_number":4452,"context_line":"        # scheduler to pick a new host, so we update the"},{"line_number":4453,"context_line":"        # RequestSpec.availability_zone here. Note that if scheduling"}],"source_content_type":"text/x-python","patch_set":11,"id":"b048c4b5_92a3d404","line":4450,"in_reply_to":"cf528561_f878e97d","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":4494,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":4495,"context_line":"            context, instance.uuid)"},{"line_number":4496,"context_line":""},{"line_number":4497,"context_line":"        if new_az is not sentinel or host:"},{"line_number":4498,"context_line":"            self._check_offloaded(context, instance)"},{"line_number":4499,"context_line":""},{"line_number":4500,"context_line":"        if host:"}],"source_content_type":"text/x-python","patch_set":11,"id":"881a0afa_f5220e6a","line":4497,"range":{"start_line":4497,"start_character":11,"end_line":4497,"end_character":33},"updated":"2022-06-01 19:19:46.000000000","message":"Hm. What if new_az \u003d\u003d instance.availability_zone and host \u003d\u003d None? Do we want to force that the instance is offloaded in this case? \n\nAs far as I understand the old code forced such check so this is not breaking old behavior. But also we have a chance to remove this seemingly unnecessary restriction from our API in the new microversion.\n\n// later\n\nthat last part \"in the new microversion\" is important. At this point the code does not know the version of the request.","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"22c1449530716e8e405f0d789f4bf651ce1bb4ae","unresolved":false,"context_lines":[{"line_number":4494,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":4495,"context_line":"            context, instance.uuid)"},{"line_number":4496,"context_line":""},{"line_number":4497,"context_line":"        if new_az is not sentinel or host:"},{"line_number":4498,"context_line":"            self._check_offloaded(context, instance)"},{"line_number":4499,"context_line":""},{"line_number":4500,"context_line":"        if host:"}],"source_content_type":"text/x-python","patch_set":11,"id":"01c52136_157ca4fe","line":4497,"range":{"start_line":4497,"start_character":11,"end_line":4497,"end_character":33},"in_reply_to":"713e9df4_90ae26da","updated":"2022-06-13 09:40:06.000000000","message":"Let me be a bit more specific.\nSo you have an instance running on hostA in AZ1.\nThen you shelve the instance. (but not offload it)\nThen you unshelve the instance with new_az\u003dAZ1. This is now rejected. However it is not a contradiction as the instance does not change AZ by this operation. It was in AZ1 and it will be in AZ1 after the unshelve that requested AZ1. \n\nAnyhow I think we can keep it as is not to over-complicate this change","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":true,"context_lines":[{"line_number":4494,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":4495,"context_line":"            context, instance.uuid)"},{"line_number":4496,"context_line":""},{"line_number":4497,"context_line":"        if new_az is not sentinel or host:"},{"line_number":4498,"context_line":"            self._check_offloaded(context, instance)"},{"line_number":4499,"context_line":""},{"line_number":4500,"context_line":"        if host:"}],"source_content_type":"text/x-python","patch_set":11,"id":"713e9df4_90ae26da","line":4497,"range":{"start_line":4497,"start_character":11,"end_line":4497,"end_character":33},"in_reply_to":"881a0afa_f5220e6a","updated":"2022-06-08 13:03:55.000000000","message":"Unless if I have not understood your comment. But I think it is mandatory to have to instance SHELVED_OFFLOADED, to move it to another AZ.\nIf the instance is only SHELVED, it remains attached to the compute, and it prevents moving it.","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":4500,"context_line":"        if host:"},{"line_number":4501,"context_line":"            # Make sure only admin can unshelve to a specific host."},{"line_number":4502,"context_line":"            context.can("},{"line_number":4503,"context_line":"                    shelve_policies.POLICY_ROOT % \u0027unshelve_to_host\u0027,"},{"line_number":4504,"context_line":"                    target\u003d{"},{"line_number":4505,"context_line":"                        \u0027user_id\u0027: instance.user_id,"},{"line_number":4506,"context_line":"                        \u0027project_id\u0027: instance.project_id"}],"source_content_type":"text/x-python","patch_set":11,"id":"e3f5a0ce_72d0a5c8","line":4503,"range":{"start_line":4503,"start_character":12,"end_line":4503,"end_character":20},"updated":"2022-06-01 19:19:46.000000000","message":"over-indent","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":4500,"context_line":"        if host:"},{"line_number":4501,"context_line":"            # Make sure only admin can unshelve to a specific host."},{"line_number":4502,"context_line":"            context.can("},{"line_number":4503,"context_line":"                    shelve_policies.POLICY_ROOT % \u0027unshelve_to_host\u0027,"},{"line_number":4504,"context_line":"                    target\u003d{"},{"line_number":4505,"context_line":"                        \u0027user_id\u0027: instance.user_id,"},{"line_number":4506,"context_line":"                        \u0027project_id\u0027: instance.project_id"}],"source_content_type":"text/x-python","patch_set":11,"id":"42d59fc9_1c7a2836","line":4503,"range":{"start_line":4503,"start_character":12,"end_line":4503,"end_character":20},"in_reply_to":"e3f5a0ce_72d0a5c8","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":4529,"context_line":"            elif host and new_az:"},{"line_number":4530,"context_line":"                compute_node \u003d self._check_host(context, host)"},{"line_number":4531,"context_line":"                self._validate_unshelve_az(context, instance, new_az)"},{"line_number":4532,"context_line":"                if self.host_in_az(context, host, new_az):"},{"line_number":4533,"context_line":"                    LOG.debug("},{"line_number":4534,"context_line":"                            \u0027Unshelve instance to host \"%(host)s\".\u0027,"},{"line_number":4535,"context_line":"                            {\u0027host\u0027: compute_node.host},"}],"source_content_type":"text/x-python","patch_set":11,"id":"a08fbb2f_513f1476","line":4532,"range":{"start_line":4532,"start_character":19,"end_line":4532,"end_character":34},"updated":"2022-06-01 19:19:46.000000000","message":"This always returns true or raises an exception. So you don\u0027t need the \u0027if\u0027, you can use self.host_in_az as a guard. In that case I also suggest to rename it to self.ensure_host_in_az","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":4529,"context_line":"            elif host and new_az:"},{"line_number":4530,"context_line":"                compute_node \u003d self._check_host(context, host)"},{"line_number":4531,"context_line":"                self._validate_unshelve_az(context, instance, new_az)"},{"line_number":4532,"context_line":"                if self.host_in_az(context, host, new_az):"},{"line_number":4533,"context_line":"                    LOG.debug("},{"line_number":4534,"context_line":"                            \u0027Unshelve instance to host \"%(host)s\".\u0027,"},{"line_number":4535,"context_line":"                            {\u0027host\u0027: compute_node.host},"}],"source_content_type":"text/x-python","patch_set":11,"id":"8a1f2e1d_ffceae2a","line":4532,"range":{"start_line":4532,"start_character":19,"end_line":4532,"end_character":34},"in_reply_to":"a08fbb2f_513f1476","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":4544,"context_line":"                            host\u003dcompute_node.host)"},{"line_number":4545,"context_line":"                    request_spec.availability_zone \u003d new_az"},{"line_number":4546,"context_line":"                    request_spec.save()"},{"line_number":4547,"context_line":"            elif host and not new_az:"},{"line_number":4548,"context_line":"                compute_node \u003d self._check_host(context, host)"},{"line_number":4549,"context_line":"                LOG.debug("},{"line_number":4550,"context_line":"                        \u0027Unshelve instance to host \"%(host)s\".\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"f2c683d7_4f7a9f7d","line":4547,"range":{"start_line":4547,"start_character":26,"end_line":4547,"end_character":36},"updated":"2022-06-01 19:19:46.000000000","message":"I suggest to use new_az is None here. In general using boolean context for None is OK, but as we have the sentinel in the picture I would be explicit about that the request is unpinning the az instead of not changing it.","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":4544,"context_line":"                            host\u003dcompute_node.host)"},{"line_number":4545,"context_line":"                    request_spec.availability_zone \u003d new_az"},{"line_number":4546,"context_line":"                    request_spec.save()"},{"line_number":4547,"context_line":"            elif host and not new_az:"},{"line_number":4548,"context_line":"                compute_node \u003d self._check_host(context, host)"},{"line_number":4549,"context_line":"                LOG.debug("},{"line_number":4550,"context_line":"                        \u0027Unshelve instance to host \"%(host)s\".\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"37ca5af0_18957d2e","line":4547,"range":{"start_line":4547,"start_character":26,"end_line":4547,"end_character":36},"in_reply_to":"f2c683d7_4f7a9f7d","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":4569,"context_line":"                        instance\u003dinstance)"},{"line_number":4570,"context_line":"                request_spec.availability_zone \u003d request_spec.availability_zone"},{"line_number":4571,"context_line":"                request_spec.save()"},{"line_number":4572,"context_line":"            elif not new_az:"},{"line_number":4573,"context_line":"                LOG.debug("},{"line_number":4574,"context_line":"                        \u0027Unshelve instance.\u0027,"},{"line_number":4575,"context_line":"                        instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":11,"id":"3973cc86_08b7e6dc","line":4572,"range":{"start_line":4572,"start_character":17,"end_line":4572,"end_character":27},"updated":"2022-06-01 19:19:46.000000000","message":"ditto: new_az is None","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":4569,"context_line":"                        instance\u003dinstance)"},{"line_number":4570,"context_line":"                request_spec.availability_zone \u003d request_spec.availability_zone"},{"line_number":4571,"context_line":"                request_spec.save()"},{"line_number":4572,"context_line":"            elif not new_az:"},{"line_number":4573,"context_line":"                LOG.debug("},{"line_number":4574,"context_line":"                        \u0027Unshelve instance.\u0027,"},{"line_number":4575,"context_line":"                        instance\u003dinstance)"}],"source_content_type":"text/x-python","patch_set":11,"id":"d55b43de_76a71636","line":4572,"range":{"start_line":4572,"start_character":17,"end_line":4572,"end_character":27},"in_reply_to":"3973cc86_08b7e6dc","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":4630,"context_line":"                        \u0027new AZ \"%(new_az)s.\"\u0027,"},{"line_number":4631,"context_line":"                        {\"new_az\": new_az}, instance\u003dinstance)"},{"line_number":4632,"context_line":"                request_spec.availability_zone \u003d new_az"},{"line_number":4633,"context_line":"                request_spec.save()"},{"line_number":4634,"context_line":""},{"line_number":4635,"context_line":"        instance.task_state \u003d task_states.UNSHELVING"},{"line_number":4636,"context_line":"        instance.save(expected_task_state\u003d[None])"}],"source_content_type":"text/x-python","patch_set":11,"id":"f972f224_31aaaef0","line":4633,"updated":"2022-06-01 19:19:46.000000000","message":"I have to sleep on this and think about how to make this nested if-else forest a bit more readable.","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":4630,"context_line":"                        \u0027new AZ \"%(new_az)s.\"\u0027,"},{"line_number":4631,"context_line":"                        {\"new_az\": new_az}, instance\u003dinstance)"},{"line_number":4632,"context_line":"                request_spec.availability_zone \u003d new_az"},{"line_number":4633,"context_line":"                request_spec.save()"},{"line_number":4634,"context_line":""},{"line_number":4635,"context_line":"        instance.task_state \u003d task_states.UNSHELVING"},{"line_number":4636,"context_line":"        instance.save(expected_task_state\u003d[None])"}],"source_content_type":"text/x-python","patch_set":11,"id":"e498714d_5412269e","line":4633,"in_reply_to":"f972f224_31aaaef0","updated":"2022-06-08 13:03:55.000000000","message":"Ack","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"22c1449530716e8e405f0d789f4bf651ce1bb4ae","unresolved":true,"context_lines":[{"line_number":4469,"context_line":"    @check_instance_state("},{"line_number":4470,"context_line":"            vm_state\u003d[vm_states.SHELVED, vm_states.SHELVED_OFFLOADED])"},{"line_number":4471,"context_line":"    def unshelve("},{"line_number":4472,"context_line":"            self, context, instance, new_az\u003dFIELD_NOT_PROVIDED, host\u003dNone):"},{"line_number":4473,"context_line":"        \"\"\"Restore a shelved instance.\"\"\""},{"line_number":4474,"context_line":"        # Unshelving a shelved offloaded server will go through the"},{"line_number":4475,"context_line":"        # scheduler to pick a new host, so we update the"}],"source_content_type":"text/x-python","patch_set":12,"id":"6d273ab6_17fa8e3f","line":4472,"updated":"2022-06-13 09:40:06.000000000","message":"The test failures in the split patch are because this change redefines what new_az\u003dNone means. The REST API code still passes new_az\u003dNone for the case where no AZ was defined in the request. But it should pass FIELD_NOT_PROVIDED instead now. \n\nSo either change the REST API: https://github.com/openstack/nova/blob/d86916360858daa06164ebc0d012b78d19ae6497/nova/api/openstack/compute/shelve.py#L98 to use the FIELD_NOT_PROVIDED instead of None. \n\nOr alternatively you can add the None \u003d\u003e FIELD_NOT_PROVIDED translation temporary to this function too.","commit_id":"58a3723159018b92f293b04fff3f5ce1e9023f0b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2d0d0a7fe4fb4d3414b7459d507a8dd9586f18ec","unresolved":false,"context_lines":[{"line_number":4469,"context_line":"    @check_instance_state("},{"line_number":4470,"context_line":"            vm_state\u003d[vm_states.SHELVED, vm_states.SHELVED_OFFLOADED])"},{"line_number":4471,"context_line":"    def unshelve("},{"line_number":4472,"context_line":"            self, context, instance, new_az\u003dFIELD_NOT_PROVIDED, host\u003dNone):"},{"line_number":4473,"context_line":"        \"\"\"Restore a shelved instance.\"\"\""},{"line_number":4474,"context_line":"        # Unshelving a shelved offloaded server will go through the"},{"line_number":4475,"context_line":"        # scheduler to pick a new host, so we update the"}],"source_content_type":"text/x-python","patch_set":12,"id":"ba897e22_85229abb","line":4472,"in_reply_to":"6d273ab6_17fa8e3f","updated":"2022-06-15 08:33:27.000000000","message":"Done","commit_id":"58a3723159018b92f293b04fff3f5ce1e9023f0b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"22c1449530716e8e405f0d789f4bf651ce1bb4ae","unresolved":true,"context_lines":[{"line_number":4428,"context_line":"    def _validate_unshelve_az(self, context, instance, availability_zone):"},{"line_number":4429,"context_line":"        \"\"\"Verify the specified availability_zone during unshelve."},{"line_number":4430,"context_line":""},{"line_number":4431,"context_line":"        Verifies  the AZ exists and if [cinder]/cross_az_attach\u003dFalse, that"},{"line_number":4432,"context_line":"        any attached volumes are in the same AZ."},{"line_number":4433,"context_line":""},{"line_number":4434,"context_line":"        :param context: nova auth RequestContext for the unshelve action"}],"source_content_type":"text/x-python","patch_set":13,"id":"f84ab0d0_afff7a36","line":4431,"range":{"start_line":4431,"start_character":16,"end_line":4431,"end_character":18},"updated":"2022-06-13 09:40:06.000000000","message":"nit: double space","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2d0d0a7fe4fb4d3414b7459d507a8dd9586f18ec","unresolved":false,"context_lines":[{"line_number":4428,"context_line":"    def _validate_unshelve_az(self, context, instance, availability_zone):"},{"line_number":4429,"context_line":"        \"\"\"Verify the specified availability_zone during unshelve."},{"line_number":4430,"context_line":""},{"line_number":4431,"context_line":"        Verifies  the AZ exists and if [cinder]/cross_az_attach\u003dFalse, that"},{"line_number":4432,"context_line":"        any attached volumes are in the same AZ."},{"line_number":4433,"context_line":""},{"line_number":4434,"context_line":"        :param context: nova auth RequestContext for the unshelve action"}],"source_content_type":"text/x-python","patch_set":13,"id":"e70a1fcf_593526c9","line":4431,"range":{"start_line":4431,"start_character":16,"end_line":4431,"end_character":18},"in_reply_to":"f84ab0d0_afff7a36","updated":"2022-06-15 08:33:27.000000000","message":"Done","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"22c1449530716e8e405f0d789f4bf651ce1bb4ae","unresolved":true,"context_lines":[{"line_number":4469,"context_line":"    @check_instance_state("},{"line_number":4470,"context_line":"            vm_state\u003d[vm_states.SHELVED, vm_states.SHELVED_OFFLOADED])"},{"line_number":4471,"context_line":"    def unshelve("},{"line_number":4472,"context_line":"            self, context, instance, new_az\u003dFIELD_NOT_PROVIDED, host\u003dNone):"},{"line_number":4473,"context_line":"        \"\"\"Restore a shelved instance.\"\"\""},{"line_number":4474,"context_line":"        # Unshelving a shelved offloaded server will go through the"},{"line_number":4475,"context_line":"        # scheduler to pick a new host, so we update the"}],"source_content_type":"text/x-python","patch_set":13,"id":"cb23d44a_16eee635","line":4472,"range":{"start_line":4472,"start_character":44,"end_line":4472,"end_character":73},"updated":"2022-06-13 09:40:06.000000000","message":"I would remove the defaulting of these parameters the REST API code always passing these parameters so we can make the contract stricter","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2d0d0a7fe4fb4d3414b7459d507a8dd9586f18ec","unresolved":false,"context_lines":[{"line_number":4469,"context_line":"    @check_instance_state("},{"line_number":4470,"context_line":"            vm_state\u003d[vm_states.SHELVED, vm_states.SHELVED_OFFLOADED])"},{"line_number":4471,"context_line":"    def unshelve("},{"line_number":4472,"context_line":"            self, context, instance, new_az\u003dFIELD_NOT_PROVIDED, host\u003dNone):"},{"line_number":4473,"context_line":"        \"\"\"Restore a shelved instance.\"\"\""},{"line_number":4474,"context_line":"        # Unshelving a shelved offloaded server will go through the"},{"line_number":4475,"context_line":"        # scheduler to pick a new host, so we update the"}],"source_content_type":"text/x-python","patch_set":13,"id":"2d520a00_c17fa412","line":4472,"range":{"start_line":4472,"start_character":44,"end_line":4472,"end_character":73},"in_reply_to":"cb23d44a_16eee635","updated":"2022-06-15 08:33:27.000000000","message":"Done","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25a7bb5cdf52eac75ca661259d16a5685a982103","unresolved":true,"context_lines":[{"line_number":4478,"context_line":"        # but if we want to change that we need to defer updating the"},{"line_number":4479,"context_line":"        # RequestSpec until conductor which probably means RPC changes to"},{"line_number":4480,"context_line":"        # pass the new_az variable to conductor. This is likely low"},{"line_number":4481,"context_line":"        # priority since the RequestSpec.availability_zone on a shelved"},{"line_number":4482,"context_line":"        # offloaded server does not mean much anyway and clearly the user"},{"line_number":4483,"context_line":"        # is trying to put the server in the target AZ."},{"line_number":4484,"context_line":""},{"line_number":4485,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":4486,"context_line":"            context, instance.uuid)"}],"source_content_type":"text/x-python","patch_set":13,"id":"12fd28cd_42160512","line":4483,"range":{"start_line":4481,"start_character":29,"end_line":4483,"end_character":55},"updated":"2022-06-13 11:18:38.000000000","message":"Hm. I think in the spec review we talked about not persisting the AZ in the request spec if the scheduling fails[1]. But this comment suggest that we do persist and ignore the discrepancies. \n\n[1] https://etherpad.opendev.org/p/unshelve-to-host#L185","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"4b9943cdfd97113f1565dc944a30da0e16bb7962","unresolved":true,"context_lines":[{"line_number":4478,"context_line":"        # but if we want to change that we need to defer updating the"},{"line_number":4479,"context_line":"        # RequestSpec until conductor which probably means RPC changes to"},{"line_number":4480,"context_line":"        # pass the new_az variable to conductor. This is likely low"},{"line_number":4481,"context_line":"        # priority since the RequestSpec.availability_zone on a shelved"},{"line_number":4482,"context_line":"        # offloaded server does not mean much anyway and clearly the user"},{"line_number":4483,"context_line":"        # is trying to put the server in the target AZ."},{"line_number":4484,"context_line":""},{"line_number":4485,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":4486,"context_line":"            context, instance.uuid)"}],"source_content_type":"text/x-python","patch_set":13,"id":"a1221072_19e82174","line":4483,"range":{"start_line":4481,"start_character":29,"end_line":4483,"end_character":55},"in_reply_to":"12fd28cd_42160512","updated":"2022-06-13 11:46:35.000000000","message":"we basically said that was a preexisitng bug that can be adressed speratly\n\nif we are to fix that we likely want it in a sepreate patch so we can backport it","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"19a055fa755c7fa40fda75fc7c15923e3cbf9c7f","unresolved":false,"context_lines":[{"line_number":4478,"context_line":"        # but if we want to change that we need to defer updating the"},{"line_number":4479,"context_line":"        # RequestSpec until conductor which probably means RPC changes to"},{"line_number":4480,"context_line":"        # pass the new_az variable to conductor. This is likely low"},{"line_number":4481,"context_line":"        # priority since the RequestSpec.availability_zone on a shelved"},{"line_number":4482,"context_line":"        # offloaded server does not mean much anyway and clearly the user"},{"line_number":4483,"context_line":"        # is trying to put the server in the target AZ."},{"line_number":4484,"context_line":""},{"line_number":4485,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":4486,"context_line":"            context, instance.uuid)"}],"source_content_type":"text/x-python","patch_set":13,"id":"06f91cfd_e31da5ae","line":4483,"range":{"start_line":4481,"start_character":29,"end_line":4483,"end_character":55},"in_reply_to":"a1221072_19e82174","updated":"2022-06-14 10:00:36.000000000","message":"@Sean: Separate fix works for me. \n@Uggla: could you please file a bug for so we will not forget about it. Also you can mention the bug number here in this code comment.","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25a7bb5cdf52eac75ca661259d16a5685a982103","unresolved":true,"context_lines":[{"line_number":4501,"context_line":"        # Do we have an AZ constraint already set by the user ?"},{"line_number":4502,"context_line":"        if request_spec.availability_zone:"},{"line_number":4503,"context_line":"            if host and new_az is API.FIELD_NOT_PROVIDED:"},{"line_number":4504,"context_line":"                compute_node \u003d self._get_node(context, host)"},{"line_number":4505,"context_line":"                self._ensure_host_in_az("},{"line_number":4506,"context_line":"                    context, host, request_spec.availability_zone"},{"line_number":4507,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":13,"id":"691780bf_b0966143","line":4504,"updated":"2022-06-13 11:18:38.000000000","message":"refactor: \nwe can move the _get_node to L4499 as the compute_node.host \u003d\u003d host so you don\u0027t need compute_node here at all. In L4499 you can ensure that the compute node exits. (Also this way the only calles or _get_nodes is L4499 you you can inline _get_nodes)","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2d0d0a7fe4fb4d3414b7459d507a8dd9586f18ec","unresolved":false,"context_lines":[{"line_number":4501,"context_line":"        # Do we have an AZ constraint already set by the user ?"},{"line_number":4502,"context_line":"        if request_spec.availability_zone:"},{"line_number":4503,"context_line":"            if host and new_az is API.FIELD_NOT_PROVIDED:"},{"line_number":4504,"context_line":"                compute_node \u003d self._get_node(context, host)"},{"line_number":4505,"context_line":"                self._ensure_host_in_az("},{"line_number":4506,"context_line":"                    context, host, request_spec.availability_zone"},{"line_number":4507,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":13,"id":"d2cf444c_d0d371ad","line":4504,"in_reply_to":"691780bf_b0966143","updated":"2022-06-15 08:33:27.000000000","message":"Done","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25a7bb5cdf52eac75ca661259d16a5685a982103","unresolved":true,"context_lines":[{"line_number":4502,"context_line":"        if request_spec.availability_zone:"},{"line_number":4503,"context_line":"            if host and new_az is API.FIELD_NOT_PROVIDED:"},{"line_number":4504,"context_line":"                compute_node \u003d self._get_node(context, host)"},{"line_number":4505,"context_line":"                self._ensure_host_in_az("},{"line_number":4506,"context_line":"                    context, host, request_spec.availability_zone"},{"line_number":4507,"context_line":"                )"},{"line_number":4508,"context_line":"                LOG.debug("},{"line_number":4509,"context_line":"                    \u0027Unshelve instance to host \"%(host)s\".\u0027,"},{"line_number":4510,"context_line":"                    {\u0027host\u0027: compute_node.host},"}],"source_content_type":"text/x-python","patch_set":13,"id":"326adb9a_9fbbdba5","line":4507,"range":{"start_line":4505,"start_character":0,"end_line":4507,"end_character":17},"updated":"2022-06-13 11:18:38.000000000","message":"refactor:\nwe only check this is the user provided a host, so this can also be moved to L4499 too. The AZ we check the host against is the AZ the VM will be after the unshelve. So it is either request_spec.AZ if no AZ is provided or new_az.\n\nSo something like this can calculate what AZ we should check\n        # This will be the az of the instance after the unshelve. It can be\n        # None indicating that the instance is not pinned to any AZ after the\n        # unshelve\n        expected_az_after_unshelve \u003d (\n            request_spec.availability_zone\n            if new_az is API.FIELD_NOT_PROVIDED else new_az\n        )","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5d99528376718e16c97b33224405ce208aa8e890","unresolved":true,"context_lines":[{"line_number":4502,"context_line":"        if request_spec.availability_zone:"},{"line_number":4503,"context_line":"            if host and new_az is API.FIELD_NOT_PROVIDED:"},{"line_number":4504,"context_line":"                compute_node \u003d self._get_node(context, host)"},{"line_number":4505,"context_line":"                self._ensure_host_in_az("},{"line_number":4506,"context_line":"                    context, host, request_spec.availability_zone"},{"line_number":4507,"context_line":"                )"},{"line_number":4508,"context_line":"                LOG.debug("},{"line_number":4509,"context_line":"                    \u0027Unshelve instance to host \"%(host)s\".\u0027,"},{"line_number":4510,"context_line":"                    {\u0027host\u0027: compute_node.host},"}],"source_content_type":"text/x-python","patch_set":13,"id":"e2d34062_bab1bccc","line":4507,"range":{"start_line":4505,"start_character":0,"end_line":4507,"end_character":17},"in_reply_to":"088a72b7_348c31f2","updated":"2022-06-22 08:37:22.000000000","message":"I tend to agree with gibi, I\u0027d prefer to have conditionals differently.","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2d0d0a7fe4fb4d3414b7459d507a8dd9586f18ec","unresolved":true,"context_lines":[{"line_number":4502,"context_line":"        if request_spec.availability_zone:"},{"line_number":4503,"context_line":"            if host and new_az is API.FIELD_NOT_PROVIDED:"},{"line_number":4504,"context_line":"                compute_node \u003d self._get_node(context, host)"},{"line_number":4505,"context_line":"                self._ensure_host_in_az("},{"line_number":4506,"context_line":"                    context, host, request_spec.availability_zone"},{"line_number":4507,"context_line":"                )"},{"line_number":4508,"context_line":"                LOG.debug("},{"line_number":4509,"context_line":"                    \u0027Unshelve instance to host \"%(host)s\".\u0027,"},{"line_number":4510,"context_line":"                    {\u0027host\u0027: compute_node.host},"}],"source_content_type":"text/x-python","patch_set":13,"id":"68f8e06f_29632962","line":4507,"range":{"start_line":4505,"start_character":0,"end_line":4507,"end_character":17},"in_reply_to":"326adb9a_9fbbdba5","updated":"2022-06-15 08:33:27.000000000","message":"Test fails, you cannot refactor moving the above code to L4499.\nDoing that you will overwrite newaz and brake the test line L4502.\nMaybe I miss something ?","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6579db7214fdcbfba482000544303b5c183cfa58","unresolved":true,"context_lines":[{"line_number":4502,"context_line":"        if request_spec.availability_zone:"},{"line_number":4503,"context_line":"            if host and new_az is API.FIELD_NOT_PROVIDED:"},{"line_number":4504,"context_line":"                compute_node \u003d self._get_node(context, host)"},{"line_number":4505,"context_line":"                self._ensure_host_in_az("},{"line_number":4506,"context_line":"                    context, host, request_spec.availability_zone"},{"line_number":4507,"context_line":"                )"},{"line_number":4508,"context_line":"                LOG.debug("},{"line_number":4509,"context_line":"                    \u0027Unshelve instance to host \"%(host)s\".\u0027,"},{"line_number":4510,"context_line":"                    {\u0027host\u0027: compute_node.host},"}],"source_content_type":"text/x-python","patch_set":13,"id":"088a72b7_348c31f2","line":4507,"range":{"start_line":4505,"start_character":0,"end_line":4507,"end_character":17},"in_reply_to":"68f8e06f_29632962","updated":"2022-06-17 07:41:16.000000000","message":"Look at https://review.opendev.org/c/openstack/nova/+/845581/1/nova/compute/api.py I did it there with other refactors and the tests are green","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"388aab3bf4f1aa2b69717d7a3952ce5e355880a5","unresolved":false,"context_lines":[{"line_number":4502,"context_line":"        if request_spec.availability_zone:"},{"line_number":4503,"context_line":"            if host and new_az is API.FIELD_NOT_PROVIDED:"},{"line_number":4504,"context_line":"                compute_node \u003d self._get_node(context, host)"},{"line_number":4505,"context_line":"                self._ensure_host_in_az("},{"line_number":4506,"context_line":"                    context, host, request_spec.availability_zone"},{"line_number":4507,"context_line":"                )"},{"line_number":4508,"context_line":"                LOG.debug("},{"line_number":4509,"context_line":"                    \u0027Unshelve instance to host \"%(host)s\".\u0027,"},{"line_number":4510,"context_line":"                    {\u0027host\u0027: compute_node.host},"}],"source_content_type":"text/x-python","patch_set":13,"id":"59fac1f2_9e32aedc","line":4507,"range":{"start_line":4505,"start_character":0,"end_line":4507,"end_character":17},"in_reply_to":"e2d34062_bab1bccc","updated":"2022-06-24 13:45:46.000000000","message":"Done","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25a7bb5cdf52eac75ca661259d16a5685a982103","unresolved":true,"context_lines":[{"line_number":4519,"context_line":"                request_spec.requested_destination \u003d objects.Destination("},{"line_number":4520,"context_line":"                    host\u003dcompute_node.host"},{"line_number":4521,"context_line":"                )"},{"line_number":4522,"context_line":"                request_spec.availability_zone \u003d ("},{"line_number":4523,"context_line":"                    request_spec.availability_zone"},{"line_number":4524,"context_line":"                )"},{"line_number":4525,"context_line":"                request_spec.save()"},{"line_number":4526,"context_line":"            elif host and new_az:"},{"line_number":4527,"context_line":"                compute_node \u003d self._get_node(context, host)"}],"source_content_type":"text/x-python","patch_set":13,"id":"61cc712c_c3cb6ec7","line":4524,"range":{"start_line":4522,"start_character":16,"end_line":4524,"end_character":17},"updated":"2022-06-13 11:18:38.000000000","message":"this is not needed as it is a noop like a \u003d a","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2d0d0a7fe4fb4d3414b7459d507a8dd9586f18ec","unresolved":false,"context_lines":[{"line_number":4519,"context_line":"                request_spec.requested_destination \u003d objects.Destination("},{"line_number":4520,"context_line":"                    host\u003dcompute_node.host"},{"line_number":4521,"context_line":"                )"},{"line_number":4522,"context_line":"                request_spec.availability_zone \u003d ("},{"line_number":4523,"context_line":"                    request_spec.availability_zone"},{"line_number":4524,"context_line":"                )"},{"line_number":4525,"context_line":"                request_spec.save()"},{"line_number":4526,"context_line":"            elif host and new_az:"},{"line_number":4527,"context_line":"                compute_node \u003d self._get_node(context, host)"}],"source_content_type":"text/x-python","patch_set":13,"id":"f9977a3b_027448f0","line":4524,"range":{"start_line":4522,"start_character":16,"end_line":4524,"end_character":17},"in_reply_to":"61cc712c_c3cb6ec7","updated":"2022-06-15 08:33:27.000000000","message":"🤦‍♂️  :)","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25a7bb5cdf52eac75ca661259d16a5685a982103","unresolved":true,"context_lines":[{"line_number":4522,"context_line":"                request_spec.availability_zone \u003d ("},{"line_number":4523,"context_line":"                    request_spec.availability_zone"},{"line_number":4524,"context_line":"                )"},{"line_number":4525,"context_line":"                request_spec.save()"},{"line_number":4526,"context_line":"            elif host and new_az:"},{"line_number":4527,"context_line":"                compute_node \u003d self._get_node(context, host)"},{"line_number":4528,"context_line":"                self._validate_unshelve_az(context, instance, new_az)"}],"source_content_type":"text/x-python","patch_set":13,"id":"e9904de6_b7baf2e3","line":4525,"updated":"2022-06-13 11:18:38.000000000","message":"refactor:\nyou can move request_spec.save() to the end of the outer IF as it is in every case.","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2d0d0a7fe4fb4d3414b7459d507a8dd9586f18ec","unresolved":false,"context_lines":[{"line_number":4522,"context_line":"                request_spec.availability_zone \u003d ("},{"line_number":4523,"context_line":"                    request_spec.availability_zone"},{"line_number":4524,"context_line":"                )"},{"line_number":4525,"context_line":"                request_spec.save()"},{"line_number":4526,"context_line":"            elif host and new_az:"},{"line_number":4527,"context_line":"                compute_node \u003d self._get_node(context, host)"},{"line_number":4528,"context_line":"                self._validate_unshelve_az(context, instance, new_az)"}],"source_content_type":"text/x-python","patch_set":13,"id":"c4eb162e_496bfdd1","line":4525,"in_reply_to":"e9904de6_b7baf2e3","updated":"2022-06-15 08:33:27.000000000","message":"Done","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25a7bb5cdf52eac75ca661259d16a5685a982103","unresolved":true,"context_lines":[{"line_number":4610,"context_line":"                    )"},{"line_number":4611,"context_line":"                    request_spec.requested_destination \u003d objects.Destination("},{"line_number":4612,"context_line":"                        host\u003dcompute_node.host"},{"line_number":4613,"context_line":"                    )"},{"line_number":4614,"context_line":"                elif new_az:"},{"line_number":4615,"context_line":"                    self._validate_unshelve_az(context, instance, new_az)"},{"line_number":4616,"context_line":"                    self._ensure_host_in_az(context, host, new_az)"}],"source_content_type":"text/x-python","patch_set":13,"id":"4c2cff0a_d16683b5","line":4613,"updated":"2022-06-13 11:18:38.000000000","message":"Did you miss a request_spec.save() here?","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2d0d0a7fe4fb4d3414b7459d507a8dd9586f18ec","unresolved":true,"context_lines":[{"line_number":4610,"context_line":"                    )"},{"line_number":4611,"context_line":"                    request_spec.requested_destination \u003d objects.Destination("},{"line_number":4612,"context_line":"                        host\u003dcompute_node.host"},{"line_number":4613,"context_line":"                    )"},{"line_number":4614,"context_line":"                elif new_az:"},{"line_number":4615,"context_line":"                    self._validate_unshelve_az(context, instance, new_az)"},{"line_number":4616,"context_line":"                    self._ensure_host_in_az(context, host, new_az)"}],"source_content_type":"text/x-python","patch_set":13,"id":"bc37fecf_bae302bf","line":4613,"in_reply_to":"4c2cff0a_d16683b5","updated":"2022-06-15 08:33:27.000000000","message":"No this is this case:\n\n +----------+---------------------------+-------+----------------------------+\n |  No AZ   | No AZ or AZ\u003dnull          | Host1 | Schedule to host1,         |\n |          |                           |       | reqspec.AZ\u003dNone            |\n +----------+---------------------------+-------+----------------------------+\n\nAZ should remain to None, so not persist.\nHowever if you\u0027d prefer it could be:\n request_spec.availability_zone \u003d new_az\n request_spec.save()","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"388aab3bf4f1aa2b69717d7a3952ce5e355880a5","unresolved":false,"context_lines":[{"line_number":4610,"context_line":"                    )"},{"line_number":4611,"context_line":"                    request_spec.requested_destination \u003d objects.Destination("},{"line_number":4612,"context_line":"                        host\u003dcompute_node.host"},{"line_number":4613,"context_line":"                    )"},{"line_number":4614,"context_line":"                elif new_az:"},{"line_number":4615,"context_line":"                    self._validate_unshelve_az(context, instance, new_az)"},{"line_number":4616,"context_line":"                    self._ensure_host_in_az(context, host, new_az)"}],"source_content_type":"text/x-python","patch_set":13,"id":"a825c6f5_456b17b7","line":4613,"in_reply_to":"a83a9298_e9523bf3","updated":"2022-06-24 13:45:46.000000000","message":"Done","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6579db7214fdcbfba482000544303b5c183cfa58","unresolved":true,"context_lines":[{"line_number":4610,"context_line":"                    )"},{"line_number":4611,"context_line":"                    request_spec.requested_destination \u003d objects.Destination("},{"line_number":4612,"context_line":"                        host\u003dcompute_node.host"},{"line_number":4613,"context_line":"                    )"},{"line_number":4614,"context_line":"                elif new_az:"},{"line_number":4615,"context_line":"                    self._validate_unshelve_az(context, instance, new_az)"},{"line_number":4616,"context_line":"                    self._ensure_host_in_az(context, host, new_az)"}],"source_content_type":"text/x-python","patch_set":13,"id":"a83a9298_e9523bf3","line":4613,"in_reply_to":"bc37fecf_bae302bf","updated":"2022-06-17 07:41:16.000000000","message":"\u003e No this is this case:\n\u003e \n\u003e  +----------+---------------------------+-------+----------------------------+\n\u003e  |  No AZ   | No AZ or AZ\u003dnull          | Host1 | Schedule to host1,         |\n\u003e  |          |                           |       | reqspec.AZ\u003dNone            |\n\u003e  +----------+---------------------------+-------+----------------------------+\n\u003e \n\u003e AZ should remain to None, so not persist.\n\u003e However if you\u0027d prefer it could be:\n\u003e  request_spec.availability_zone \u003d new_az\n\nprobably you meant \n   request_spec.availability_zone \u003d None\nas you don\u0027t want to save the FIELD_NOT_DEFINED placeholder object\n\n\u003e  request_spec.save()\n\nWhat I meant is even if you not change the value of request_spec.availability_zone you can still call save() as you did in other cases too.","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"25a7bb5cdf52eac75ca661259d16a5685a982103","unresolved":true,"context_lines":[{"line_number":4643,"context_line":"                    {\"new_az\": new_az}, instance\u003dinstance"},{"line_number":4644,"context_line":"                )"},{"line_number":4645,"context_line":"                request_spec.availability_zone \u003d new_az"},{"line_number":4646,"context_line":"                request_spec.save()"},{"line_number":4647,"context_line":""},{"line_number":4648,"context_line":"        instance.task_state \u003d task_states.UNSHELVING"},{"line_number":4649,"context_line":"        instance.save(expected_task_state\u003d[None])"}],"source_content_type":"text/x-python","patch_set":13,"id":"b9fbbb2c_8e65c98e","line":4646,"updated":"2022-06-13 11:18:38.000000000","message":"refactor: \nOK I played with this bunch of nested if-elses and translated them to a more linear approach that checks all the preconditions first then simply sets the request_spec. I think it looks a bit better but in the other hand I lost the nice specific log messages. I would like to see others reviewing this version and the mine to decide which direction is more understandable / maintainable.\n\n(not the comments above with \"refactor:\" is basically noting what I did when I did the refactoring)\n\nhttps://review.opendev.org/c/openstack/nova/+/845581","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"6579db7214fdcbfba482000544303b5c183cfa58","unresolved":true,"context_lines":[{"line_number":4643,"context_line":"                    {\"new_az\": new_az}, instance\u003dinstance"},{"line_number":4644,"context_line":"                )"},{"line_number":4645,"context_line":"                request_spec.availability_zone \u003d new_az"},{"line_number":4646,"context_line":"                request_spec.save()"},{"line_number":4647,"context_line":""},{"line_number":4648,"context_line":"        instance.task_state \u003d task_states.UNSHELVING"},{"line_number":4649,"context_line":"        instance.save(expected_task_state\u003d[None])"}],"source_content_type":"text/x-python","patch_set":13,"id":"d36db1f3_77a7e58f","line":4646,"in_reply_to":"21274a6f_56a9d9fa","updated":"2022-06-17 07:41:16.000000000","message":"\u003e I agree the style is probably not the best, in my case logs help me to identify which case is treated and within the functional test as well.\n\u003e So I would rather keep them, but let see the opinion from other folks.\n\nSure, lets hear from others too. \n\nBtw logging can be improved further in https://review.opendev.org/c/openstack/nova/+/845581 if that is the only downside of that format.\n\n\n\u003e \n\u003e Btw: one of the proposed refactor above was not possible. But maybe I miss something.\n\n\nPlease look at the refactor as a whole in https://review.opendev.org/c/openstack/nova/+/845581 to see what I meant with the \"refactor:\" comments.","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"2d0d0a7fe4fb4d3414b7459d507a8dd9586f18ec","unresolved":true,"context_lines":[{"line_number":4643,"context_line":"                    {\"new_az\": new_az}, instance\u003dinstance"},{"line_number":4644,"context_line":"                )"},{"line_number":4645,"context_line":"                request_spec.availability_zone \u003d new_az"},{"line_number":4646,"context_line":"                request_spec.save()"},{"line_number":4647,"context_line":""},{"line_number":4648,"context_line":"        instance.task_state \u003d task_states.UNSHELVING"},{"line_number":4649,"context_line":"        instance.save(expected_task_state\u003d[None])"}],"source_content_type":"text/x-python","patch_set":13,"id":"21274a6f_56a9d9fa","line":4646,"in_reply_to":"b9fbbb2c_8e65c98e","updated":"2022-06-15 08:33:27.000000000","message":"I agree the style is probably not the best, in my case logs help me to identify which case is treated and within the functional test as well.\nSo I would rather keep them, but let see the opinion from other folks.\n\nBtw: one of the proposed refactor above was not possible. But maybe I miss something.","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"388aab3bf4f1aa2b69717d7a3952ce5e355880a5","unresolved":false,"context_lines":[{"line_number":4643,"context_line":"                    {\"new_az\": new_az}, instance\u003dinstance"},{"line_number":4644,"context_line":"                )"},{"line_number":4645,"context_line":"                request_spec.availability_zone \u003d new_az"},{"line_number":4646,"context_line":"                request_spec.save()"},{"line_number":4647,"context_line":""},{"line_number":4648,"context_line":"        instance.task_state \u003d task_states.UNSHELVING"},{"line_number":4649,"context_line":"        instance.save(expected_task_state\u003d[None])"}],"source_content_type":"text/x-python","patch_set":13,"id":"dd7843a5_ea0c989c","line":4646,"in_reply_to":"d36db1f3_77a7e58f","updated":"2022-06-24 13:45:46.000000000","message":"Done","commit_id":"3befb6bf5cf3b7ab82766ec2ba9016a0e4156999"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5d99528376718e16c97b33224405ce208aa8e890","unresolved":true,"context_lines":[{"line_number":381,"context_line":"class API:"},{"line_number":382,"context_line":"    \"\"\"API for interacting with the compute manager.\"\"\""},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    FIELD_NOT_PROVIDED \u003d object()"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def __init__(self, image_api\u003dNone, network_api\u003dNone, volume_api\u003dNone):"},{"line_number":387,"context_line":"        self.image_api \u003d image_api or glance.API()"}],"source_content_type":"text/x-python","patch_set":14,"id":"a229f93f_62768d8f","line":384,"updated":"2022-06-22 08:37:22.000000000","message":"Mmm, maybe the name could be FIELD_SENTINEL \u003d object() so people understand it.","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"388aab3bf4f1aa2b69717d7a3952ce5e355880a5","unresolved":false,"context_lines":[{"line_number":381,"context_line":"class API:"},{"line_number":382,"context_line":"    \"\"\"API for interacting with the compute manager.\"\"\""},{"line_number":383,"context_line":""},{"line_number":384,"context_line":"    FIELD_NOT_PROVIDED \u003d object()"},{"line_number":385,"context_line":""},{"line_number":386,"context_line":"    def __init__(self, image_api\u003dNone, network_api\u003dNone, volume_api\u003dNone):"},{"line_number":387,"context_line":"        self.image_api \u003d image_api or glance.API()"}],"source_content_type":"text/x-python","patch_set":14,"id":"14ea5a56_9bb9e1ff","line":384,"in_reply_to":"a229f93f_62768d8f","updated":"2022-06-24 13:45:46.000000000","message":"Done","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5d99528376718e16c97b33224405ce208aa8e890","unresolved":true,"context_lines":[{"line_number":4408,"context_line":""},{"line_number":4409,"context_line":"    def _get_node(self, context, host):"},{"line_number":4410,"context_line":"        \"\"\"Check if the destination host to unshelve to is valid,"},{"line_number":4411,"context_line":"        if not raise an exception."},{"line_number":4412,"context_line":"        \"\"\""},{"line_number":4413,"context_line":"        compute_node \u003d ("},{"line_number":4414,"context_line":"            objects.ComputeNode.get_first_node_by_host_for_old_compat("}],"source_content_type":"text/x-python","patch_set":14,"id":"f93880b2_0c4d36aa","line":4411,"updated":"2022-06-22 08:37:22.000000000","message":"you should tell which exception is returned.","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"388aab3bf4f1aa2b69717d7a3952ce5e355880a5","unresolved":false,"context_lines":[{"line_number":4408,"context_line":""},{"line_number":4409,"context_line":"    def _get_node(self, context, host):"},{"line_number":4410,"context_line":"        \"\"\"Check if the destination host to unshelve to is valid,"},{"line_number":4411,"context_line":"        if not raise an exception."},{"line_number":4412,"context_line":"        \"\"\""},{"line_number":4413,"context_line":"        compute_node \u003d ("},{"line_number":4414,"context_line":"            objects.ComputeNode.get_first_node_by_host_for_old_compat("}],"source_content_type":"text/x-python","patch_set":14,"id":"c9704416_c209fb24","line":4411,"in_reply_to":"f93880b2_0c4d36aa","updated":"2022-06-24 13:45:46.000000000","message":"Method removed","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5d99528376718e16c97b33224405ce208aa8e890","unresolved":true,"context_lines":[{"line_number":4469,"context_line":"    @check_instance_state("},{"line_number":4470,"context_line":"            vm_state\u003d[vm_states.SHELVED, vm_states.SHELVED_OFFLOADED])"},{"line_number":4471,"context_line":"    def unshelve("},{"line_number":4472,"context_line":"            self, context, instance, new_az, host):"},{"line_number":4473,"context_line":"        \"\"\"Restore a shelved instance.\"\"\""},{"line_number":4474,"context_line":"        # Unshelving a shelved offloaded server will go through the"},{"line_number":4475,"context_line":"        # scheduler to pick a new host, so we update the"}],"source_content_type":"text/x-python","patch_set":14,"id":"cc434199_e955daf6","line":4472,"range":{"start_line":4472,"start_character":37,"end_line":4472,"end_character":43},"updated":"2022-06-22 08:37:22.000000000","message":"No, you need to new_az parameter to default to the sentinel value, eg. new_az\u003dFIELD_SENTINEL","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6df838f3941dd74218a47be42a7fc29390eab1f7","unresolved":true,"context_lines":[{"line_number":4469,"context_line":"    @check_instance_state("},{"line_number":4470,"context_line":"            vm_state\u003d[vm_states.SHELVED, vm_states.SHELVED_OFFLOADED])"},{"line_number":4471,"context_line":"    def unshelve("},{"line_number":4472,"context_line":"            self, context, instance, new_az, host):"},{"line_number":4473,"context_line":"        \"\"\"Restore a shelved instance.\"\"\""},{"line_number":4474,"context_line":"        # Unshelving a shelved offloaded server will go through the"},{"line_number":4475,"context_line":"        # scheduler to pick a new host, so we update the"}],"source_content_type":"text/x-python","patch_set":14,"id":"dfe01803_cd782f7e","line":4472,"range":{"start_line":4472,"start_character":37,"end_line":4472,"end_character":43},"in_reply_to":"69f0fc2a_27cae8dc","updated":"2022-06-22 13:31:20.000000000","message":"Yeah, let\u0027s just provide a docstring like \n\n :param context : a RequestContext object\n :param instance: an Instance object\n :param: host: a host to target\n :param new_az: (optional) target AZ","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"388aab3bf4f1aa2b69717d7a3952ce5e355880a5","unresolved":false,"context_lines":[{"line_number":4469,"context_line":"    @check_instance_state("},{"line_number":4470,"context_line":"            vm_state\u003d[vm_states.SHELVED, vm_states.SHELVED_OFFLOADED])"},{"line_number":4471,"context_line":"    def unshelve("},{"line_number":4472,"context_line":"            self, context, instance, new_az, host):"},{"line_number":4473,"context_line":"        \"\"\"Restore a shelved instance.\"\"\""},{"line_number":4474,"context_line":"        # Unshelving a shelved offloaded server will go through the"},{"line_number":4475,"context_line":"        # scheduler to pick a new host, so we update the"}],"source_content_type":"text/x-python","patch_set":14,"id":"2c354a7c_c0f9aaa5","line":4472,"range":{"start_line":4472,"start_character":37,"end_line":4472,"end_character":43},"in_reply_to":"bd6368f2_6410ebe9","updated":"2022-06-24 13:45:46.000000000","message":"Done","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e80fd6a7e5b5796dd6acb9efadf035cfa66784a4","unresolved":true,"context_lines":[{"line_number":4469,"context_line":"    @check_instance_state("},{"line_number":4470,"context_line":"            vm_state\u003d[vm_states.SHELVED, vm_states.SHELVED_OFFLOADED])"},{"line_number":4471,"context_line":"    def unshelve("},{"line_number":4472,"context_line":"            self, context, instance, new_az, host):"},{"line_number":4473,"context_line":"        \"\"\"Restore a shelved instance.\"\"\""},{"line_number":4474,"context_line":"        # Unshelving a shelved offloaded server will go through the"},{"line_number":4475,"context_line":"        # scheduler to pick a new host, so we update the"}],"source_content_type":"text/x-python","patch_set":14,"id":"d4dec109_b7564e7f","line":4472,"range":{"start_line":4472,"start_character":37,"end_line":4472,"end_character":43},"in_reply_to":"cc434199_e955daf6","updated":"2022-06-22 12:57:35.000000000","message":"The previous code was using a default value. But Gibi wanted to make it more strict using positional argument.\nhttps://review.opendev.org/c/openstack/nova/+/831507/13..14/nova/compute/api.py#b4472\nI don\u0027t want to create a war between both of you but I can not make both of you happy at the same time. 😊\nPlease let me know what you prefer.","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"283636e26421362287fd3163741f2ae982f0853d","unresolved":true,"context_lines":[{"line_number":4469,"context_line":"    @check_instance_state("},{"line_number":4470,"context_line":"            vm_state\u003d[vm_states.SHELVED, vm_states.SHELVED_OFFLOADED])"},{"line_number":4471,"context_line":"    def unshelve("},{"line_number":4472,"context_line":"            self, context, instance, new_az, host):"},{"line_number":4473,"context_line":"        \"\"\"Restore a shelved instance.\"\"\""},{"line_number":4474,"context_line":"        # Unshelving a shelved offloaded server will go through the"},{"line_number":4475,"context_line":"        # scheduler to pick a new host, so we update the"}],"source_content_type":"text/x-python","patch_set":14,"id":"69f0fc2a_27cae8dc","line":4472,"range":{"start_line":4472,"start_character":37,"end_line":4472,"end_character":43},"in_reply_to":"d4dec109_b7564e7f","updated":"2022-06-22 13:26:35.000000000","message":"I\u0027m OK to go with \n\n  unshelve(self, context, instance, host, new_az\u003dsentinel):\n\nif the don\u0027t have to care about the sentinel value. I.e. as Sylvain suggested simply not passing any new_az to unshelve if none was provided in the API request. Please make an extra comment in the doc of the function that sentinel is used as \"None\" has a special meaning (i.e. removing the AZ if it was set before).","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5a463faa4ea5d8d0cc5b07f100d234fa51810f42","unresolved":true,"context_lines":[{"line_number":4469,"context_line":"    @check_instance_state("},{"line_number":4470,"context_line":"            vm_state\u003d[vm_states.SHELVED, vm_states.SHELVED_OFFLOADED])"},{"line_number":4471,"context_line":"    def unshelve("},{"line_number":4472,"context_line":"            self, context, instance, new_az, host):"},{"line_number":4473,"context_line":"        \"\"\"Restore a shelved instance.\"\"\""},{"line_number":4474,"context_line":"        # Unshelving a shelved offloaded server will go through the"},{"line_number":4475,"context_line":"        # scheduler to pick a new host, so we update the"}],"source_content_type":"text/x-python","patch_set":14,"id":"bd6368f2_6410ebe9","line":4472,"range":{"start_line":4472,"start_character":37,"end_line":4472,"end_character":43},"in_reply_to":"dfe01803_cd782f7e","updated":"2022-06-23 14:00:42.000000000","message":"\u003e Yeah, let\u0027s just provide a docstring like \n\u003e \n\u003e  :param context : a RequestContext object\n\u003e  :param instance: an Instance object\n\u003e  :param: host: a host to target\n\u003e  :param new_az: (optional) target AZ\n\n:param new_az: (optional) target AZ. If None is provided then the current AZ restriction will be removed from the instance. If the parameter is not provided then the current AZ restriction will not be changed.","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5d99528376718e16c97b33224405ce208aa8e890","unresolved":true,"context_lines":[{"line_number":4480,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":4481,"context_line":"            context, instance.uuid)"},{"line_number":4482,"context_line":""},{"line_number":4483,"context_line":"        if new_az is not API.FIELD_NOT_PROVIDED or host:"},{"line_number":4484,"context_line":"            self._check_offloaded(context, instance)"},{"line_number":4485,"context_line":""},{"line_number":4486,"context_line":"        if host:"}],"source_content_type":"text/x-python","patch_set":14,"id":"a6e59d22_1106497a","line":4483,"range":{"start_line":4483,"start_character":11,"end_line":4483,"end_character":47},"updated":"2022-06-22 08:37:22.000000000","message":"Since the variable is within the class, you can just verify with :\n if new_az is not FIELD_SENTINEL :","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"388aab3bf4f1aa2b69717d7a3952ce5e355880a5","unresolved":false,"context_lines":[{"line_number":4480,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":4481,"context_line":"            context, instance.uuid)"},{"line_number":4482,"context_line":""},{"line_number":4483,"context_line":"        if new_az is not API.FIELD_NOT_PROVIDED or host:"},{"line_number":4484,"context_line":"            self._check_offloaded(context, instance)"},{"line_number":4485,"context_line":""},{"line_number":4486,"context_line":"        if host:"}],"source_content_type":"text/x-python","patch_set":14,"id":"f562e21f_f63c42f1","line":4483,"range":{"start_line":4483,"start_character":11,"end_line":4483,"end_character":47},"in_reply_to":"a6e59d22_1106497a","updated":"2022-06-24 13:45:46.000000000","message":"Done","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5d99528376718e16c97b33224405ce208aa8e890","unresolved":true,"context_lines":[{"line_number":4511,"context_line":"                    \u0027in RequestSpec.\u0027,"},{"line_number":4512,"context_line":"                    {\u0027old_az\u0027: request_spec.availability_zone},"},{"line_number":4513,"context_line":"                    instance\u003dinstance"},{"line_number":4514,"context_line":"                )"},{"line_number":4515,"context_line":"                request_spec.requested_destination \u003d objects.Destination("},{"line_number":4516,"context_line":"                    host\u003dcompute_node.host"},{"line_number":4517,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":14,"id":"1ac90963_84b2b173","line":4514,"updated":"2022-06-22 08:37:22.000000000","message":"We maybe have here too many DEBUG logs from an operator PoV.","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"388aab3bf4f1aa2b69717d7a3952ce5e355880a5","unresolved":false,"context_lines":[{"line_number":4511,"context_line":"                    \u0027in RequestSpec.\u0027,"},{"line_number":4512,"context_line":"                    {\u0027old_az\u0027: request_spec.availability_zone},"},{"line_number":4513,"context_line":"                    instance\u003dinstance"},{"line_number":4514,"context_line":"                )"},{"line_number":4515,"context_line":"                request_spec.requested_destination \u003d objects.Destination("},{"line_number":4516,"context_line":"                    host\u003dcompute_node.host"},{"line_number":4517,"context_line":"                )"}],"source_content_type":"text/x-python","patch_set":14,"id":"3d98b134_ace5a139","line":4514,"in_reply_to":"1ac90963_84b2b173","updated":"2022-06-24 13:45:46.000000000","message":"Done","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"0fdc7dc746e5c4f41788c748de2b149088b42827","unresolved":true,"context_lines":[{"line_number":4490,"context_line":"        if new_az is not self._unset_field_sentinel or host:"},{"line_number":4491,"context_line":"            self._check_offloaded(context, instance)"},{"line_number":4492,"context_line":""},{"line_number":4493,"context_line":"        if new_az not in (self._unset_field_sentinel, None):"},{"line_number":4494,"context_line":"            # we have to ensure that new AZ is valid"},{"line_number":4495,"context_line":"            self._validate_unshelve_az(context, instance, new_az)"},{"line_number":4496,"context_line":"        # This will be the AZ of the instance after the unshelve. It can be"}],"source_content_type":"text/x-python","patch_set":16,"id":"0c47176f_4284eadc","line":4493,"updated":"2022-06-27 12:10:06.000000000","message":"given you\u0027re reusing the sentinel reference a couple of times, I agree with Sean on the fact we need a cleaner pattern.\n\nPlease rather define an internal variable named az_passed that you\u0027ll set at the top of the method (L4487) by:\n  az_passed \u003d new_az is not self._unset_field_sentinel\n  \nThanks.","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"b97c341b1525f39434995f804dfd34d0f68cc05c","unresolved":false,"context_lines":[{"line_number":4490,"context_line":"        if new_az is not self._unset_field_sentinel or host:"},{"line_number":4491,"context_line":"            self._check_offloaded(context, instance)"},{"line_number":4492,"context_line":""},{"line_number":4493,"context_line":"        if new_az not in (self._unset_field_sentinel, None):"},{"line_number":4494,"context_line":"            # we have to ensure that new AZ is valid"},{"line_number":4495,"context_line":"            self._validate_unshelve_az(context, instance, new_az)"},{"line_number":4496,"context_line":"        # This will be the AZ of the instance after the unshelve. It can be"}],"source_content_type":"text/x-python","patch_set":16,"id":"f7835134_d3dcf530","line":4493,"in_reply_to":"0c47176f_4284eadc","updated":"2022-07-19 13:26:21.000000000","message":"Done","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bb4ff8c119992297960b83ec46e78f9efad6a652","unresolved":true,"context_lines":[{"line_number":4518,"context_line":"            # not contradicts with the AZ of the instance"},{"line_number":4519,"context_line":"            self._ensure_host_in_az("},{"line_number":4520,"context_line":"                context, host, expected_az_after_unshelve)"},{"line_number":4521,"context_line":"        if new_az is None:"},{"line_number":4522,"context_line":"            LOG.debug("},{"line_number":4523,"context_line":"                \u0027Unpin instance from AZ \"%(old_az)s\".\u0027,"},{"line_number":4524,"context_line":"                {\u0027old_az\u0027: request_spec.availability_zone},"}],"source_content_type":"text/x-python","patch_set":16,"id":"09219ad7_147911a1","line":4521,"updated":"2022-06-27 11:00:47.000000000","message":"nit: I would add an empty line between L4520 and L4521","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0eaba888af0f5156f8ab9d33c07e6ffc7c48489a","unresolved":false,"context_lines":[{"line_number":4518,"context_line":"            # not contradicts with the AZ of the instance"},{"line_number":4519,"context_line":"            self._ensure_host_in_az("},{"line_number":4520,"context_line":"                context, host, expected_az_after_unshelve)"},{"line_number":4521,"context_line":"        if new_az is None:"},{"line_number":4522,"context_line":"            LOG.debug("},{"line_number":4523,"context_line":"                \u0027Unpin instance from AZ \"%(old_az)s\".\u0027,"},{"line_number":4524,"context_line":"                {\u0027old_az\u0027: request_spec.availability_zone},"}],"source_content_type":"text/x-python","patch_set":16,"id":"0ad82b51_1b5d74d9","line":4521,"in_reply_to":"09219ad7_147911a1","updated":"2022-07-11 07:34:38.000000000","message":"Done","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"b97c341b1525f39434995f804dfd34d0f68cc05c","unresolved":false,"context_lines":[{"line_number":4518,"context_line":"            # not contradicts with the AZ of the instance"},{"line_number":4519,"context_line":"            self._ensure_host_in_az("},{"line_number":4520,"context_line":"                context, host, expected_az_after_unshelve)"},{"line_number":4521,"context_line":"        if new_az is None:"},{"line_number":4522,"context_line":"            LOG.debug("},{"line_number":4523,"context_line":"                \u0027Unpin instance from AZ \"%(old_az)s\".\u0027,"},{"line_number":4524,"context_line":"                {\u0027old_az\u0027: request_spec.availability_zone},"}],"source_content_type":"text/x-python","patch_set":16,"id":"1cdc185e_f19c481c","line":4521,"in_reply_to":"09219ad7_147911a1","updated":"2022-07-19 13:26:21.000000000","message":"Done","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d9d73e79c844b6ba58f566ca6abb892823a8d5b1","unresolved":true,"context_lines":[{"line_number":4473,"context_line":"                       will be removed from the instance."},{"line_number":4474,"context_line":"                       If the parameter is not provided then the current"},{"line_number":4475,"context_line":"                       AZ restriction will not be changed."},{"line_number":4476,"context_line":"        :param host: (optional) a host to target"},{"line_number":4477,"context_line":"        \"\"\""},{"line_number":4478,"context_line":"        # Unshelving a shelved offloaded server will go through the"},{"line_number":4479,"context_line":"        # scheduler to pick a new host, so we update the"}],"source_content_type":"text/x-python","patch_set":17,"id":"2bf75599_5e7df369","line":4476,"updated":"2022-07-12 09:33:17.000000000","message":"femto nitty: this parameter will be used in the next change in the series, so I\u0027m all good.","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"428c3f9131cbb4286c23633903ff8554a4892b85","unresolved":false,"context_lines":[{"line_number":4473,"context_line":"                       will be removed from the instance."},{"line_number":4474,"context_line":"                       If the parameter is not provided then the current"},{"line_number":4475,"context_line":"                       AZ restriction will not be changed."},{"line_number":4476,"context_line":"        :param host: (optional) a host to target"},{"line_number":4477,"context_line":"        \"\"\""},{"line_number":4478,"context_line":"        # Unshelving a shelved offloaded server will go through the"},{"line_number":4479,"context_line":"        # scheduler to pick a new host, so we update the"}],"source_content_type":"text/x-python","patch_set":17,"id":"118e121c_35f8cd3b","line":4476,"in_reply_to":"2bf75599_5e7df369","updated":"2022-07-21 17:49:43.000000000","message":"Done","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d9d73e79c844b6ba58f566ca6abb892823a8d5b1","unresolved":true,"context_lines":[{"line_number":4501,"context_line":"        expected_az_after_unshelve \u003d ("},{"line_number":4502,"context_line":"            request_spec.availability_zone"},{"line_number":4503,"context_line":"            if not az_passed else new_az"},{"line_number":4504,"context_line":"        )"},{"line_number":4505,"context_line":"        # host is requested, so we have to see if it exists and does not"},{"line_number":4506,"context_line":"        # contradict with the AZ of the instance"},{"line_number":4507,"context_line":"        if host:"}],"source_content_type":"text/x-python","patch_set":17,"id":"9034ec8a_8b79e2a5","line":4504,"updated":"2022-07-12 09:33:17.000000000","message":"+1","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"428c3f9131cbb4286c23633903ff8554a4892b85","unresolved":false,"context_lines":[{"line_number":4501,"context_line":"        expected_az_after_unshelve \u003d ("},{"line_number":4502,"context_line":"            request_spec.availability_zone"},{"line_number":4503,"context_line":"            if not az_passed else new_az"},{"line_number":4504,"context_line":"        )"},{"line_number":4505,"context_line":"        # host is requested, so we have to see if it exists and does not"},{"line_number":4506,"context_line":"        # contradict with the AZ of the instance"},{"line_number":4507,"context_line":"        if host:"}],"source_content_type":"text/x-python","patch_set":17,"id":"a747be37_a59ec9af","line":4504,"in_reply_to":"9034ec8a_8b79e2a5","updated":"2022-07-21 17:49:43.000000000","message":"Done","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"2d4b63c99c01a71273913817a928486dde58b823","unresolved":true,"context_lines":[{"line_number":4512,"context_line":"                    \u0027user_id\u0027: instance.user_id,"},{"line_number":4513,"context_line":"                    \u0027project_id\u0027: instance.project_id"},{"line_number":4514,"context_line":"                }"},{"line_number":4515,"context_line":"            )"},{"line_number":4516,"context_line":"            # Ensure that the requested host exists"},{"line_number":4517,"context_line":"            objects.ComputeNode.get_first_node_by_host_for_old_compat("},{"line_number":4518,"context_line":"                context, host, use_slave\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":17,"id":"429f8693_eed6c4ab","line":4515,"updated":"2022-07-20 13:03:48.000000000","message":"could you please move this check up to https://review.opendev.org/c/openstack/nova/+/845897/5 ? thanks.","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"428c3f9131cbb4286c23633903ff8554a4892b85","unresolved":false,"context_lines":[{"line_number":4512,"context_line":"                    \u0027user_id\u0027: instance.user_id,"},{"line_number":4513,"context_line":"                    \u0027project_id\u0027: instance.project_id"},{"line_number":4514,"context_line":"                }"},{"line_number":4515,"context_line":"            )"},{"line_number":4516,"context_line":"            # Ensure that the requested host exists"},{"line_number":4517,"context_line":"            objects.ComputeNode.get_first_node_by_host_for_old_compat("},{"line_number":4518,"context_line":"                context, host, use_slave\u003dTrue)"}],"source_content_type":"text/x-python","patch_set":17,"id":"01a23752_3ba54a5f","line":4515,"in_reply_to":"429f8693_eed6c4ab","updated":"2022-07-21 17:49:43.000000000","message":"Done","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d9d73e79c844b6ba58f566ca6abb892823a8d5b1","unresolved":true,"context_lines":[{"line_number":4515,"context_line":"            )"},{"line_number":4516,"context_line":"            # Ensure that the requested host exists"},{"line_number":4517,"context_line":"            objects.ComputeNode.get_first_node_by_host_for_old_compat("},{"line_number":4518,"context_line":"                context, host, use_slave\u003dTrue)"},{"line_number":4519,"context_line":"            # A specific host is requested so we need to make sure that it is"},{"line_number":4520,"context_line":"            # not contradicts with the AZ of the instance"},{"line_number":4521,"context_line":"            self._ensure_host_in_az("}],"source_content_type":"text/x-python","patch_set":17,"id":"9a58b54e_4e9c190c","line":4518,"updated":"2022-07-12 09:33:17.000000000","message":"nit: you should tell what happens if no compute is found, but I know, heh.","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"428c3f9131cbb4286c23633903ff8554a4892b85","unresolved":false,"context_lines":[{"line_number":4515,"context_line":"            )"},{"line_number":4516,"context_line":"            # Ensure that the requested host exists"},{"line_number":4517,"context_line":"            objects.ComputeNode.get_first_node_by_host_for_old_compat("},{"line_number":4518,"context_line":"                context, host, use_slave\u003dTrue)"},{"line_number":4519,"context_line":"            # A specific host is requested so we need to make sure that it is"},{"line_number":4520,"context_line":"            # not contradicts with the AZ of the instance"},{"line_number":4521,"context_line":"            self._ensure_host_in_az("}],"source_content_type":"text/x-python","patch_set":17,"id":"30f9cb1c_72868e24","line":4518,"in_reply_to":"9a58b54e_4e9c190c","updated":"2022-07-21 17:49:43.000000000","message":"Done","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d9d73e79c844b6ba58f566ca6abb892823a8d5b1","unresolved":true,"context_lines":[{"line_number":4558,"context_line":"        self.compute_task_api.unshelve_instance("},{"line_number":4559,"context_line":"            context, instance,"},{"line_number":4560,"context_line":"            request_spec"},{"line_number":4561,"context_line":"        )"},{"line_number":4562,"context_line":""},{"line_number":4563,"context_line":"    @check_instance_lock"},{"line_number":4564,"context_line":"    def add_fixed_ip(self, context, instance, network_id):"}],"source_content_type":"text/x-python","patch_set":17,"id":"c186fbf8_1447fa16","line":4561,"updated":"2022-07-12 09:33:17.000000000","message":"unnecessary change","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"428c3f9131cbb4286c23633903ff8554a4892b85","unresolved":false,"context_lines":[{"line_number":4558,"context_line":"        self.compute_task_api.unshelve_instance("},{"line_number":4559,"context_line":"            context, instance,"},{"line_number":4560,"context_line":"            request_spec"},{"line_number":4561,"context_line":"        )"},{"line_number":4562,"context_line":""},{"line_number":4563,"context_line":"    @check_instance_lock"},{"line_number":4564,"context_line":"    def add_fixed_ip(self, context, instance, network_id):"}],"source_content_type":"text/x-python","patch_set":17,"id":"af1d8a8a_59e35160","line":4561,"in_reply_to":"c186fbf8_1447fa16","updated":"2022-07-21 17:49:43.000000000","message":"Done","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"}],"nova/conductor/manager.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"549826af399811f6d09279834ab8227f227e0e6c","unresolved":true,"context_lines":[{"line_number":1022,"context_line":"                    scheduler_utils.populate_filter_properties("},{"line_number":1023,"context_line":"                            filter_properties, selection)"},{"line_number":1024,"context_line":"                    (host, node) \u003d (selection.service_host, selection.nodename)"},{"line_number":1025,"context_line":"                    LOG.debug(\"Scheduler selected host: %s, node:%s\","},{"line_number":1026,"context_line":"                              host,"},{"line_number":1027,"context_line":"                              node,"},{"line_number":1028,"context_line":"                              instance\u003dinstance)"},{"line_number":1029,"context_line":"                    instance.availability_zone \u003d ("},{"line_number":1030,"context_line":"                        availability_zones.get_host_availability_zone("},{"line_number":1031,"context_line":"                            context, host))"}],"source_content_type":"text/x-python","patch_set":4,"id":"2a875d5d_418fba84","line":1028,"range":{"start_line":1025,"start_character":19,"end_line":1028,"end_character":48},"updated":"2022-04-06 15:42:50.000000000","message":"again please reflow this we use the hanging indent style now so if you need to use\nmuliple lines then all arguments shoudl move to the second line.","commit_id":"91c4cb747da5de0de69edde75a3045e1e1bd870b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"7df403cbb9c47343223ce8240d246ebfd634835e","unresolved":false,"context_lines":[{"line_number":1022,"context_line":"                    scheduler_utils.populate_filter_properties("},{"line_number":1023,"context_line":"                            filter_properties, selection)"},{"line_number":1024,"context_line":"                    (host, node) \u003d (selection.service_host, selection.nodename)"},{"line_number":1025,"context_line":"                    LOG.debug(\"Scheduler selected host: %s, node:%s\","},{"line_number":1026,"context_line":"                              host,"},{"line_number":1027,"context_line":"                              node,"},{"line_number":1028,"context_line":"                              instance\u003dinstance)"},{"line_number":1029,"context_line":"                    instance.availability_zone \u003d ("},{"line_number":1030,"context_line":"                        availability_zones.get_host_availability_zone("},{"line_number":1031,"context_line":"                            context, host))"}],"source_content_type":"text/x-python","patch_set":4,"id":"735df2c6_ed357063","line":1028,"range":{"start_line":1025,"start_character":19,"end_line":1028,"end_character":48},"in_reply_to":"2a875d5d_418fba84","updated":"2022-05-06 15:34:05.000000000","message":"Done","commit_id":"91c4cb747da5de0de69edde75a3045e1e1bd870b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":1022,"context_line":"                    scheduler_utils.populate_filter_properties("},{"line_number":1023,"context_line":"                            filter_properties, selection)"},{"line_number":1024,"context_line":"                    (host, node) \u003d (selection.service_host, selection.nodename)"},{"line_number":1025,"context_line":"                    LOG.debug("},{"line_number":1026,"context_line":"                            \"Scheduler selected host: %s, node:%s\","},{"line_number":1027,"context_line":"                            host,"},{"line_number":1028,"context_line":"                            node,"}],"source_content_type":"text/x-python","patch_set":11,"id":"06d465f6_208986e3","line":1025,"range":{"start_line":1025,"start_character":24,"end_line":1025,"end_character":29},"updated":"2022-06-01 19:19:46.000000000","message":"if this information is not logged elsewhere then I suggest to LOG this on info level.","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":1022,"context_line":"                    scheduler_utils.populate_filter_properties("},{"line_number":1023,"context_line":"                            filter_properties, selection)"},{"line_number":1024,"context_line":"                    (host, node) \u003d (selection.service_host, selection.nodename)"},{"line_number":1025,"context_line":"                    LOG.debug("},{"line_number":1026,"context_line":"                            \"Scheduler selected host: %s, node:%s\","},{"line_number":1027,"context_line":"                            host,"},{"line_number":1028,"context_line":"                            node,"}],"source_content_type":"text/x-python","patch_set":11,"id":"f1ae42bf_78edadf1","line":1025,"range":{"start_line":1025,"start_character":24,"end_line":1025,"end_character":29},"in_reply_to":"06d465f6_208986e3","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":1023,"context_line":"                            filter_properties, selection)"},{"line_number":1024,"context_line":"                    (host, node) \u003d (selection.service_host, selection.nodename)"},{"line_number":1025,"context_line":"                    LOG.debug("},{"line_number":1026,"context_line":"                            \"Scheduler selected host: %s, node:%s\","},{"line_number":1027,"context_line":"                            host,"},{"line_number":1028,"context_line":"                            node,"},{"line_number":1029,"context_line":"                            instance\u003dinstance"}],"source_content_type":"text/x-python","patch_set":11,"id":"018c86db_01740f0e","line":1026,"range":{"start_line":1026,"start_character":20,"end_line":1026,"end_character":28},"updated":"2022-06-01 19:19:46.000000000","message":"over-indent, 4 spaces is enough","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":1023,"context_line":"                            filter_properties, selection)"},{"line_number":1024,"context_line":"                    (host, node) \u003d (selection.service_host, selection.nodename)"},{"line_number":1025,"context_line":"                    LOG.debug("},{"line_number":1026,"context_line":"                            \"Scheduler selected host: %s, node:%s\","},{"line_number":1027,"context_line":"                            host,"},{"line_number":1028,"context_line":"                            node,"},{"line_number":1029,"context_line":"                            instance\u003dinstance"}],"source_content_type":"text/x-python","patch_set":11,"id":"372eaa04_b413f05d","line":1026,"range":{"start_line":1026,"start_character":20,"end_line":1026,"end_character":28},"in_reply_to":"018c86db_01740f0e","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":1027,"context_line":"                            host,"},{"line_number":1028,"context_line":"                            node,"},{"line_number":1029,"context_line":"                            instance\u003dinstance"},{"line_number":1030,"context_line":"                            )"},{"line_number":1031,"context_line":"                    instance.availability_zone \u003d ("},{"line_number":1032,"context_line":"                        availability_zones.get_host_availability_zone("},{"line_number":1033,"context_line":"                            context, host))"}],"source_content_type":"text/x-python","patch_set":11,"id":"26688dbc_1d842ff9","line":1030,"updated":"2022-06-01 19:19:46.000000000","message":"align the ) with the L from LOG","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":1027,"context_line":"                            host,"},{"line_number":1028,"context_line":"                            node,"},{"line_number":1029,"context_line":"                            instance\u003dinstance"},{"line_number":1030,"context_line":"                            )"},{"line_number":1031,"context_line":"                    instance.availability_zone \u003d ("},{"line_number":1032,"context_line":"                        availability_zones.get_host_availability_zone("},{"line_number":1033,"context_line":"                            context, host))"}],"source_content_type":"text/x-python","patch_set":11,"id":"6d176e5e_e46cbb43","line":1030,"in_reply_to":"26688dbc_1d842ff9","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5d99528376718e16c97b33224405ce208aa8e890","unresolved":true,"context_lines":[{"line_number":1022,"context_line":"                    scheduler_utils.populate_filter_properties("},{"line_number":1023,"context_line":"                            filter_properties, selection)"},{"line_number":1024,"context_line":"                    (host, node) \u003d (selection.service_host, selection.nodename)"},{"line_number":1025,"context_line":"                    LOG.info("},{"line_number":1026,"context_line":"                        \"Scheduler selected host: %s, node:%s\","},{"line_number":1027,"context_line":"                        host,"},{"line_number":1028,"context_line":"                        node,"}],"source_content_type":"text/x-python","patch_set":14,"id":"fc686a61_3b6f352c","line":1025,"updated":"2022-06-22 08:37:22.000000000","message":"No, I\u0027m pretty sure operators won\u0027t want one log line per instance unshelve here (and they already see the scheduler logs). For example, with build_instances(), we don\u0027t have this log.","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6df838f3941dd74218a47be42a7fc29390eab1f7","unresolved":true,"context_lines":[{"line_number":1022,"context_line":"                    scheduler_utils.populate_filter_properties("},{"line_number":1023,"context_line":"                            filter_properties, selection)"},{"line_number":1024,"context_line":"                    (host, node) \u003d (selection.service_host, selection.nodename)"},{"line_number":1025,"context_line":"                    LOG.info("},{"line_number":1026,"context_line":"                        \"Scheduler selected host: %s, node:%s\","},{"line_number":1027,"context_line":"                        host,"},{"line_number":1028,"context_line":"                        node,"}],"source_content_type":"text/x-python","patch_set":14,"id":"7fb5a9e2_cb8f1612","line":1025,"in_reply_to":"0161042b_a2666df5","updated":"2022-06-22 13:31:20.000000000","message":"Yeah, if you want to keep this log, change the level to DEBUG.","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"283636e26421362287fd3163741f2ae982f0853d","unresolved":true,"context_lines":[{"line_number":1022,"context_line":"                    scheduler_utils.populate_filter_properties("},{"line_number":1023,"context_line":"                            filter_properties, selection)"},{"line_number":1024,"context_line":"                    (host, node) \u003d (selection.service_host, selection.nodename)"},{"line_number":1025,"context_line":"                    LOG.info("},{"line_number":1026,"context_line":"                        \"Scheduler selected host: %s, node:%s\","},{"line_number":1027,"context_line":"                        host,"},{"line_number":1028,"context_line":"                        node,"}],"source_content_type":"text/x-python","patch_set":14,"id":"0161042b_a2666df5","line":1025,"in_reply_to":"2979f07a_710a5317","updated":"2022-06-22 13:26:35.000000000","message":"I can live with debug if that helps progressing :). Basically nova logs today are pretty useless except if debug is enabled. But that fight for another day.","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"388aab3bf4f1aa2b69717d7a3952ce5e355880a5","unresolved":false,"context_lines":[{"line_number":1022,"context_line":"                    scheduler_utils.populate_filter_properties("},{"line_number":1023,"context_line":"                            filter_properties, selection)"},{"line_number":1024,"context_line":"                    (host, node) \u003d (selection.service_host, selection.nodename)"},{"line_number":1025,"context_line":"                    LOG.info("},{"line_number":1026,"context_line":"                        \"Scheduler selected host: %s, node:%s\","},{"line_number":1027,"context_line":"                        host,"},{"line_number":1028,"context_line":"                        node,"}],"source_content_type":"text/x-python","patch_set":14,"id":"d304fc9c_adaaa2d7","line":1025,"in_reply_to":"4ffcbac9_6aa59fbb","updated":"2022-06-24 13:45:46.000000000","message":"Done","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"5a463faa4ea5d8d0cc5b07f100d234fa51810f42","unresolved":true,"context_lines":[{"line_number":1022,"context_line":"                    scheduler_utils.populate_filter_properties("},{"line_number":1023,"context_line":"                            filter_properties, selection)"},{"line_number":1024,"context_line":"                    (host, node) \u003d (selection.service_host, selection.nodename)"},{"line_number":1025,"context_line":"                    LOG.info("},{"line_number":1026,"context_line":"                        \"Scheduler selected host: %s, node:%s\","},{"line_number":1027,"context_line":"                        host,"},{"line_number":1028,"context_line":"                        node,"}],"source_content_type":"text/x-python","patch_set":14,"id":"4ffcbac9_6aa59fbb","line":1025,"in_reply_to":"7fb5a9e2_cb8f1612","updated":"2022-06-23 14:00:42.000000000","message":"Ack","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e80fd6a7e5b5796dd6acb9efadf035cfa66784a4","unresolved":true,"context_lines":[{"line_number":1022,"context_line":"                    scheduler_utils.populate_filter_properties("},{"line_number":1023,"context_line":"                            filter_properties, selection)"},{"line_number":1024,"context_line":"                    (host, node) \u003d (selection.service_host, selection.nodename)"},{"line_number":1025,"context_line":"                    LOG.info("},{"line_number":1026,"context_line":"                        \"Scheduler selected host: %s, node:%s\","},{"line_number":1027,"context_line":"                        host,"},{"line_number":1028,"context_line":"                        node,"}],"source_content_type":"text/x-python","patch_set":14,"id":"2979f07a_710a5317","line":1025,"in_reply_to":"fc686a61_3b6f352c","updated":"2022-06-22 12:57:35.000000000","message":"Was debug before and suggested to change to info by Gibi in a previous comment.\nPlease advice if it should be info, debug or removed.","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d9d73e79c844b6ba58f566ca6abb892823a8d5b1","unresolved":true,"context_lines":[{"line_number":1027,"context_line":"                        host,"},{"line_number":1028,"context_line":"                        node,"},{"line_number":1029,"context_line":"                        instance\u003dinstance"},{"line_number":1030,"context_line":"                    )"},{"line_number":1031,"context_line":"                    instance.availability_zone \u003d ("},{"line_number":1032,"context_line":"                        availability_zones.get_host_availability_zone("},{"line_number":1033,"context_line":"                            context, host))"}],"source_content_type":"text/x-python","patch_set":17,"id":"c6c4f30f_1bf13870","line":1030,"updated":"2022-07-12 09:33:17.000000000","message":"OK, fair enough.","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"428c3f9131cbb4286c23633903ff8554a4892b85","unresolved":false,"context_lines":[{"line_number":1027,"context_line":"                        host,"},{"line_number":1028,"context_line":"                        node,"},{"line_number":1029,"context_line":"                        instance\u003dinstance"},{"line_number":1030,"context_line":"                    )"},{"line_number":1031,"context_line":"                    instance.availability_zone \u003d ("},{"line_number":1032,"context_line":"                        availability_zones.get_host_availability_zone("},{"line_number":1033,"context_line":"                            context, host))"}],"source_content_type":"text/x-python","patch_set":17,"id":"25f2fc14_2440462d","line":1030,"in_reply_to":"c6c4f30f_1bf13870","updated":"2022-07-21 17:49:43.000000000","message":"Done","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"}],"nova/exception.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":1682,"context_line":"    code \u003d 409"},{"line_number":1683,"context_line":""},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":"class UnshelveHostNotInAZ(InstanceInvalidState):"},{"line_number":1686,"context_line":"    msg_fmt \u003d _(\u0027Host is not in the availability zone.\u0027)"},{"line_number":1687,"context_line":"    code \u003d 409"},{"line_number":1688,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"8e9aa4f2_b4ed2677","line":1685,"range":{"start_line":1685,"start_character":26,"end_line":1685,"end_character":46},"updated":"2022-06-01 19:19:46.000000000","message":"I don\u0027t think this is a good base class. As this exception is not about instance state. I would use Invalid instead","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":1682,"context_line":"    code \u003d 409"},{"line_number":1683,"context_line":""},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":"class UnshelveHostNotInAZ(InstanceInvalidState):"},{"line_number":1686,"context_line":"    msg_fmt \u003d _(\u0027Host is not in the availability zone.\u0027)"},{"line_number":1687,"context_line":"    code \u003d 409"},{"line_number":1688,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"99aa5298_888add29","line":1685,"range":{"start_line":1685,"start_character":26,"end_line":1685,"end_character":46},"in_reply_to":"8e9aa4f2_b4ed2677","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":1683,"context_line":""},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":"class UnshelveHostNotInAZ(InstanceInvalidState):"},{"line_number":1686,"context_line":"    msg_fmt \u003d _(\u0027Host is not in the availability zone.\u0027)"},{"line_number":1687,"context_line":"    code \u003d 409"},{"line_number":1688,"context_line":""},{"line_number":1689,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"56014291_9d9ad367","line":1686,"updated":"2022-06-01 19:19:46.000000000","message":"please specify the requested host and AZ in the error message.","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":1683,"context_line":""},{"line_number":1684,"context_line":""},{"line_number":1685,"context_line":"class UnshelveHostNotInAZ(InstanceInvalidState):"},{"line_number":1686,"context_line":"    msg_fmt \u003d _(\u0027Host is not in the availability zone.\u0027)"},{"line_number":1687,"context_line":"    code \u003d 409"},{"line_number":1688,"context_line":""},{"line_number":1689,"context_line":""}],"source_content_type":"text/x-python","patch_set":11,"id":"a108285d_9e4bf751","line":1686,"in_reply_to":"56014291_9d9ad367","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"}],"nova/policies/shelve.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"549826af399811f6d09279834ab8227f227e0e6c","unresolved":true,"context_lines":[{"line_number":54,"context_line":"                \u0027path\u0027: \u0027/servers/{server_id}/action (unshelve)\u0027"},{"line_number":55,"context_line":"            }"},{"line_number":56,"context_line":"        ],"},{"line_number":57,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027]),"},{"line_number":58,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":59,"context_line":"        name\u003dPOLICY_ROOT % \u0027shelve_offload\u0027,"},{"line_number":60,"context_line":"        check_str\u003dbase.PROJECT_ADMIN,"}],"source_content_type":"text/x-python","patch_set":4,"id":"7ce6947c_9edb67e2","line":57,"range":{"start_line":57,"start_character":22,"end_line":57,"end_character":28},"updated":"2022-04-06 15:42:50.000000000","message":"no this should be only poject socped","commit_id":"91c4cb747da5de0de69edde75a3045e1e1bd870b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"7df403cbb9c47343223ce8240d246ebfd634835e","unresolved":false,"context_lines":[{"line_number":54,"context_line":"                \u0027path\u0027: \u0027/servers/{server_id}/action (unshelve)\u0027"},{"line_number":55,"context_line":"            }"},{"line_number":56,"context_line":"        ],"},{"line_number":57,"context_line":"        scope_types\u003d[\u0027system\u0027, \u0027project\u0027]),"},{"line_number":58,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":59,"context_line":"        name\u003dPOLICY_ROOT % \u0027shelve_offload\u0027,"},{"line_number":60,"context_line":"        check_str\u003dbase.PROJECT_ADMIN,"}],"source_content_type":"text/x-python","patch_set":4,"id":"e271dbae_c98f7c81","line":57,"range":{"start_line":57,"start_character":22,"end_line":57,"end_character":28},"in_reply_to":"7ce6947c_9edb67e2","updated":"2022-05-06 15:34:05.000000000","message":"Done","commit_id":"91c4cb747da5de0de69edde75a3045e1e1bd870b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"9605cc5a2071898fa3da8d460761a3910f9bb55f","unresolved":true,"context_lines":[{"line_number":47,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":48,"context_line":"        name\u003dPOLICY_ROOT % \u0027unshelve_to_host\u0027,"},{"line_number":49,"context_line":"        check_str\u003dbase.PROJECT_ADMIN,"},{"line_number":50,"context_line":"        description\u003d\"Unshelve (restore) shelved server to a specific host\","},{"line_number":51,"context_line":"        operations\u003d["},{"line_number":52,"context_line":"            {"},{"line_number":53,"context_line":"                \u0027method\u0027: \u0027POST\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"1c66684f_feb33329","line":50,"range":{"start_line":50,"start_character":40,"end_line":50,"end_character":47},"updated":"2022-06-01 19:19:46.000000000","message":"shelve offloaded \n\nAs if it is only shelved then the request will fail","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"e47f6b73ef07fc057ab6c3e3712b6b3ece9f2c36","unresolved":false,"context_lines":[{"line_number":47,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":48,"context_line":"        name\u003dPOLICY_ROOT % \u0027unshelve_to_host\u0027,"},{"line_number":49,"context_line":"        check_str\u003dbase.PROJECT_ADMIN,"},{"line_number":50,"context_line":"        description\u003d\"Unshelve (restore) shelved server to a specific host\","},{"line_number":51,"context_line":"        operations\u003d["},{"line_number":52,"context_line":"            {"},{"line_number":53,"context_line":"                \u0027method\u0027: \u0027POST\u0027,"}],"source_content_type":"text/x-python","patch_set":11,"id":"eb5b3863_35581d9c","line":50,"range":{"start_line":50,"start_character":40,"end_line":50,"end_character":47},"in_reply_to":"1c66684f_feb33329","updated":"2022-06-08 13:03:55.000000000","message":"Done","commit_id":"e547725e00a3557618acb3c64500ce1fd4f0e4b7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bb4ff8c119992297960b83ec46e78f9efad6a652","unresolved":true,"context_lines":[{"line_number":55,"context_line":"                \u0027path\u0027: \u0027/servers/{server_id}/action (unshelve)\u0027"},{"line_number":56,"context_line":"            }"},{"line_number":57,"context_line":"        ],"},{"line_number":58,"context_line":"        scope_types\u003d[\u0027project\u0027]),"},{"line_number":59,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":60,"context_line":"        name\u003dPOLICY_ROOT % \u0027shelve_offload\u0027,"},{"line_number":61,"context_line":"        check_str\u003dbase.PROJECT_ADMIN,"}],"source_content_type":"text/x-python","patch_set":16,"id":"73c6550e_9190642f","line":58,"updated":"2022-06-27 11:00:47.000000000","message":"This change belongs to the next patch in the series where the REST API change is added.","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"428c3f9131cbb4286c23633903ff8554a4892b85","unresolved":false,"context_lines":[{"line_number":55,"context_line":"                \u0027path\u0027: \u0027/servers/{server_id}/action (unshelve)\u0027"},{"line_number":56,"context_line":"            }"},{"line_number":57,"context_line":"        ],"},{"line_number":58,"context_line":"        scope_types\u003d[\u0027project\u0027]),"},{"line_number":59,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":60,"context_line":"        name\u003dPOLICY_ROOT % \u0027shelve_offload\u0027,"},{"line_number":61,"context_line":"        check_str\u003dbase.PROJECT_ADMIN,"}],"source_content_type":"text/x-python","patch_set":16,"id":"1a700140_4a6107a7","line":58,"in_reply_to":"270eb3e8_84e3a4ba","updated":"2022-07-21 17:49:43.000000000","message":"Done","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"b97c341b1525f39434995f804dfd34d0f68cc05c","unresolved":true,"context_lines":[{"line_number":55,"context_line":"                \u0027path\u0027: \u0027/servers/{server_id}/action (unshelve)\u0027"},{"line_number":56,"context_line":"            }"},{"line_number":57,"context_line":"        ],"},{"line_number":58,"context_line":"        scope_types\u003d[\u0027project\u0027]),"},{"line_number":59,"context_line":"    policy.DocumentedRuleDefault("},{"line_number":60,"context_line":"        name\u003dPOLICY_ROOT % \u0027shelve_offload\u0027,"},{"line_number":61,"context_line":"        check_str\u003dbase.PROJECT_ADMIN,"}],"source_content_type":"text/x-python","patch_set":16,"id":"270eb3e8_84e3a4ba","line":58,"in_reply_to":"73c6550e_9190642f","updated":"2022-07-19 13:26:21.000000000","message":"Unless if I miss something. The policy is introduced in this path in compute/api.py line 4508. Despite there is no test checking for host. I think it is weird to not define the policy in this patch.","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"}],"nova/tests/functional/api_sample_tests/test_shelve.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"549826af399811f6d09279834ab8227f227e0e6c","unresolved":true,"context_lines":[{"line_number":87,"context_line":"    def _test_server_action(self, uuid, template, action, subs\u003dNone):"},{"line_number":88,"context_line":"        subs \u003d subs or {}"},{"line_number":89,"context_line":"        subs.update({\u0027action\u0027: action})"},{"line_number":90,"context_line":"        response \u003d self._do_post(\u0027servers/%s/action\u0027 % uuid,"},{"line_number":91,"context_line":"                                 template, subs)"},{"line_number":92,"context_line":"        self.assertEqual(202, response.status_code)"},{"line_number":93,"context_line":"        self.assertEqual(\u0027\u0027, response.text)"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"eac8c36c_b34c20ff","line":91,"range":{"start_line":90,"start_character":33,"end_line":91,"end_character":48},"updated":"2022-04-06 15:42:50.000000000","message":"im not going to comment on all of these bug can you reflow all of the cases where you are callign funciton that ened to be split over multiple lines.","commit_id":"91c4cb747da5de0de69edde75a3045e1e1bd870b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"7df403cbb9c47343223ce8240d246ebfd634835e","unresolved":false,"context_lines":[{"line_number":87,"context_line":"    def _test_server_action(self, uuid, template, action, subs\u003dNone):"},{"line_number":88,"context_line":"        subs \u003d subs or {}"},{"line_number":89,"context_line":"        subs.update({\u0027action\u0027: action})"},{"line_number":90,"context_line":"        response \u003d self._do_post(\u0027servers/%s/action\u0027 % uuid,"},{"line_number":91,"context_line":"                                 template, subs)"},{"line_number":92,"context_line":"        self.assertEqual(202, response.status_code)"},{"line_number":93,"context_line":"        self.assertEqual(\u0027\u0027, response.text)"},{"line_number":94,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"d6403176_26de1e3f","line":91,"range":{"start_line":90,"start_character":33,"end_line":91,"end_character":48},"in_reply_to":"eac8c36c_b34c20ff","updated":"2022-05-06 15:34:05.000000000","message":"Done","commit_id":"91c4cb747da5de0de69edde75a3045e1e1bd870b"},{"author":{"_account_id":7634,"name":"Takashi Natsume","email":"takanattie@gmail.com","username":"natsumet"},"change_message_id":"3c9a5796d38f384124eaf275b9357f089babd59d","unresolved":true,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import mock"},{"line_number":17,"context_line":"import nova.conf"},{"line_number":18,"context_line":"from nova import objects"},{"line_number":19,"context_line":"from nova.tests.functional.api_sample_tests import test_servers"}],"source_content_type":"text/x-python","patch_set":8,"id":"90c8aaa6_5f19e77e","line":16,"updated":"2022-05-14 03:07:18.000000000","message":"from unittest import mock","commit_id":"c8a8e7ddeba9f901aaed9157f4f00ada3cc94735"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"58d8d0f6423a859117fc40d37789aead3a0d2bfd","unresolved":false,"context_lines":[{"line_number":13,"context_line":"#    License for the specific language governing permissions and limitations"},{"line_number":14,"context_line":"#    under the License."},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"import mock"},{"line_number":17,"context_line":"import nova.conf"},{"line_number":18,"context_line":"from nova import objects"},{"line_number":19,"context_line":"from nova.tests.functional.api_sample_tests import test_servers"}],"source_content_type":"text/x-python","patch_set":8,"id":"ad22aa8a_e67451de","line":16,"in_reply_to":"90c8aaa6_5f19e77e","updated":"2022-05-16 13:05:52.000000000","message":"Done","commit_id":"c8a8e7ddeba9f901aaed9157f4f00ada3cc94735"}],"nova/tests/unit/api/openstack/compute/test_shelve.py":[{"author":{"_account_id":11604,"name":"sean mooney","email":"smooney@redhat.com","username":"sean-k-mooney"},"change_message_id":"549826af399811f6d09279834ab8227f227e0e6c","unresolved":true,"context_lines":[{"line_number":229,"context_line":"                \u0027nova.network.neutron.API._refresh_neutron_extensions_cache\u0027"},{"line_number":230,"context_line":"            )"},{"line_number":231,"context_line":"        ).mock"},{"line_number":232,"context_line":"        self.mock_neutron_extension_list.return_value \u003d {\u0027extensions\u0027: []}"},{"line_number":233,"context_line":"        self.controller \u003d shelve_v21.ShelveController()"},{"line_number":234,"context_line":"        self.req \u003d fakes.HTTPRequest.blank("},{"line_number":235,"context_line":"                \u0027/%s/servers/a/action\u0027 % fakes.FAKE_PROJECT_ID,"}],"source_content_type":"text/x-python","patch_set":4,"id":"80ce0c81_6f133952","line":232,"range":{"start_line":232,"start_character":7,"end_line":232,"end_character":74},"updated":"2022-04-06 15:42:50.000000000","message":"why are you doing this?\n\nplease a a detailed comment why you are manually mockign this and declarign that no exteniosn are present.\n\nthat is not reflective of a real deployment.","commit_id":"91c4cb747da5de0de69edde75a3045e1e1bd870b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"7df403cbb9c47343223ce8240d246ebfd634835e","unresolved":false,"context_lines":[{"line_number":229,"context_line":"                \u0027nova.network.neutron.API._refresh_neutron_extensions_cache\u0027"},{"line_number":230,"context_line":"            )"},{"line_number":231,"context_line":"        ).mock"},{"line_number":232,"context_line":"        self.mock_neutron_extension_list.return_value \u003d {\u0027extensions\u0027: []}"},{"line_number":233,"context_line":"        self.controller \u003d shelve_v21.ShelveController()"},{"line_number":234,"context_line":"        self.req \u003d fakes.HTTPRequest.blank("},{"line_number":235,"context_line":"                \u0027/%s/servers/a/action\u0027 % fakes.FAKE_PROJECT_ID,"}],"source_content_type":"text/x-python","patch_set":4,"id":"d0319604_76aa8f96","line":232,"range":{"start_line":232,"start_character":7,"end_line":232,"end_character":74},"in_reply_to":"80ce0c81_6f133952","updated":"2022-05-06 15:34:05.000000000","message":"Bad copy/paste.","commit_id":"91c4cb747da5de0de69edde75a3045e1e1bd870b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"5d99528376718e16c97b33224405ce208aa8e890","unresolved":true,"context_lines":[{"line_number":167,"context_line":"            instance,"},{"line_number":168,"context_line":"            API.FIELD_NOT_PROVIDED,"},{"line_number":169,"context_line":"            None"},{"line_number":170,"context_line":"        )"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    @mock.patch(\u0027nova.compute.api.API.unshelve\u0027)"},{"line_number":173,"context_line":"    @mock.patch(\u0027nova.api.openstack.common.get_instance\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"18d32808_023af6ad","line":170,"updated":"2022-06-22 08:37:22.000000000","message":"see, here again this is unnecessary, I\u0027d prefer to rather not pass the parameter if no AZ was provided.","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"388aab3bf4f1aa2b69717d7a3952ce5e355880a5","unresolved":false,"context_lines":[{"line_number":167,"context_line":"            instance,"},{"line_number":168,"context_line":"            API.FIELD_NOT_PROVIDED,"},{"line_number":169,"context_line":"            None"},{"line_number":170,"context_line":"        )"},{"line_number":171,"context_line":""},{"line_number":172,"context_line":"    @mock.patch(\u0027nova.compute.api.API.unshelve\u0027)"},{"line_number":173,"context_line":"    @mock.patch(\u0027nova.api.openstack.common.get_instance\u0027)"}],"source_content_type":"text/x-python","patch_set":14,"id":"f4ff2d4f_927f5455","line":170,"in_reply_to":"18d32808_023af6ad","updated":"2022-06-24 13:45:46.000000000","message":"Done","commit_id":"98957653a71b5c9400d387ab80de4b15c38b4179"}],"nova/tests/unit/compute/test_shelve.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bb4ff8c119992297960b83ec46e78f9efad6a652","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":16,"id":"2676c18d_afc2aaea","updated":"2022-06-27 11:00:47.000000000","message":"note to reviewers: the compute.api changes are not covered here but covered in functional tests in the next patch of the series","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bb4ff8c119992297960b83ec46e78f9efad6a652","unresolved":true,"context_lines":[{"line_number":30,"context_line":"from nova import test"},{"line_number":31,"context_line":"from nova.tests import fixtures"},{"line_number":32,"context_line":"from nova.tests.unit.compute import test_compute"},{"line_number":33,"context_line":"from unittest import mock"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"CONF \u003d nova.conf.CONF"}],"source_content_type":"text/x-python","patch_set":16,"id":"4f3d539f_ed0e8a7f","line":33,"updated":"2022-06-27 11:00:47.000000000","message":"standard lib imports go to either the first import block or even a separate one top of the current first block","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"b97c341b1525f39434995f804dfd34d0f68cc05c","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from nova import test"},{"line_number":31,"context_line":"from nova.tests import fixtures"},{"line_number":32,"context_line":"from nova.tests.unit.compute import test_compute"},{"line_number":33,"context_line":"from unittest import mock"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"CONF \u003d nova.conf.CONF"}],"source_content_type":"text/x-python","patch_set":16,"id":"0c071632_ece8d7bf","line":33,"in_reply_to":"4f3d539f_ed0e8a7f","updated":"2022-07-19 13:26:21.000000000","message":"Done","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0eaba888af0f5156f8ab9d33c07e6ffc7c48489a","unresolved":false,"context_lines":[{"line_number":30,"context_line":"from nova import test"},{"line_number":31,"context_line":"from nova.tests import fixtures"},{"line_number":32,"context_line":"from nova.tests.unit.compute import test_compute"},{"line_number":33,"context_line":"from unittest import mock"},{"line_number":34,"context_line":""},{"line_number":35,"context_line":""},{"line_number":36,"context_line":"CONF \u003d nova.conf.CONF"}],"source_content_type":"text/x-python","patch_set":16,"id":"73b3a6d6_b3621cf3","line":33,"in_reply_to":"4f3d539f_ed0e8a7f","updated":"2022-07-11 07:34:38.000000000","message":"Done","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bb4ff8c119992297960b83ec46e78f9efad6a652","unresolved":true,"context_lines":[{"line_number":1032,"context_line":"            self.context,"},{"line_number":1033,"context_line":"            instance,"},{"line_number":1034,"context_line":"            new_az\u003dnew_az,"},{"line_number":1035,"context_line":"            host\u003dNone"},{"line_number":1036,"context_line":"        )"},{"line_number":1037,"context_line":"        self.assertEqual(\"The requested availability zone is not available\","},{"line_number":1038,"context_line":"                         exc.format_message())"}],"source_content_type":"text/x-python","patch_set":16,"id":"60e97da2_e92b8af4","line":1035,"updated":"2022-06-27 11:00:47.000000000","message":"nit: not needed as it is defaulted to None so actually this testcase does not need to be changed at all","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0eaba888af0f5156f8ab9d33c07e6ffc7c48489a","unresolved":false,"context_lines":[{"line_number":1032,"context_line":"            self.context,"},{"line_number":1033,"context_line":"            instance,"},{"line_number":1034,"context_line":"            new_az\u003dnew_az,"},{"line_number":1035,"context_line":"            host\u003dNone"},{"line_number":1036,"context_line":"        )"},{"line_number":1037,"context_line":"        self.assertEqual(\"The requested availability zone is not available\","},{"line_number":1038,"context_line":"                         exc.format_message())"}],"source_content_type":"text/x-python","patch_set":16,"id":"05cda701_6dc0ff28","line":1035,"in_reply_to":"60e97da2_e92b8af4","updated":"2022-07-11 07:34:38.000000000","message":"Done","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"b97c341b1525f39434995f804dfd34d0f68cc05c","unresolved":false,"context_lines":[{"line_number":1032,"context_line":"            self.context,"},{"line_number":1033,"context_line":"            instance,"},{"line_number":1034,"context_line":"            new_az\u003dnew_az,"},{"line_number":1035,"context_line":"            host\u003dNone"},{"line_number":1036,"context_line":"        )"},{"line_number":1037,"context_line":"        self.assertEqual(\"The requested availability zone is not available\","},{"line_number":1038,"context_line":"                         exc.format_message())"}],"source_content_type":"text/x-python","patch_set":16,"id":"a0c03b8f_f73203a6","line":1035,"in_reply_to":"60e97da2_e92b8af4","updated":"2022-07-19 13:26:21.000000000","message":"Done","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bb4ff8c119992297960b83ec46e78f9efad6a652","unresolved":true,"context_lines":[{"line_number":1057,"context_line":"            self.context,"},{"line_number":1058,"context_line":"            instance,"},{"line_number":1059,"context_line":"            new_az\u003dnew_az,"},{"line_number":1060,"context_line":"            host\u003dNone"},{"line_number":1061,"context_line":"        )"},{"line_number":1062,"context_line":""},{"line_number":1063,"context_line":"    @mock.patch("}],"source_content_type":"text/x-python","patch_set":16,"id":"1bd974ad_1ca674de","line":1060,"updated":"2022-06-27 11:00:47.000000000","message":"ditto","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0eaba888af0f5156f8ab9d33c07e6ffc7c48489a","unresolved":false,"context_lines":[{"line_number":1057,"context_line":"            self.context,"},{"line_number":1058,"context_line":"            instance,"},{"line_number":1059,"context_line":"            new_az\u003dnew_az,"},{"line_number":1060,"context_line":"            host\u003dNone"},{"line_number":1061,"context_line":"        )"},{"line_number":1062,"context_line":""},{"line_number":1063,"context_line":"    @mock.patch("}],"source_content_type":"text/x-python","patch_set":16,"id":"c6d1d8ee_a57bcc67","line":1060,"in_reply_to":"1bd974ad_1ca674de","updated":"2022-07-11 07:34:38.000000000","message":"Done","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"b97c341b1525f39434995f804dfd34d0f68cc05c","unresolved":false,"context_lines":[{"line_number":1057,"context_line":"            self.context,"},{"line_number":1058,"context_line":"            instance,"},{"line_number":1059,"context_line":"            new_az\u003dnew_az,"},{"line_number":1060,"context_line":"            host\u003dNone"},{"line_number":1061,"context_line":"        )"},{"line_number":1062,"context_line":""},{"line_number":1063,"context_line":"    @mock.patch("}],"source_content_type":"text/x-python","patch_set":16,"id":"fcd7c368_f80fca56","line":1060,"in_reply_to":"1bd974ad_1ca674de","updated":"2022-07-19 13:26:21.000000000","message":"Done","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bb4ff8c119992297960b83ec46e78f9efad6a652","unresolved":true,"context_lines":[{"line_number":1143,"context_line":"        get_by_instance_uuid.return_value \u003d fake_spec"},{"line_number":1144,"context_line":""},{"line_number":1145,"context_line":"        self.compute_api.unshelve("},{"line_number":1146,"context_line":"            self.context, instance, new_az\u003dnew_az, host\u003dNone)"},{"line_number":1147,"context_line":""},{"line_number":1148,"context_line":"        mock_save.assert_called_once_with()"},{"line_number":1149,"context_line":"        self.assertEqual(new_az, fake_spec.availability_zone)"}],"source_content_type":"text/x-python","patch_set":16,"id":"c05ad5cf_a736746a","line":1146,"updated":"2022-06-27 11:00:47.000000000","message":"ditto","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"0eaba888af0f5156f8ab9d33c07e6ffc7c48489a","unresolved":false,"context_lines":[{"line_number":1143,"context_line":"        get_by_instance_uuid.return_value \u003d fake_spec"},{"line_number":1144,"context_line":""},{"line_number":1145,"context_line":"        self.compute_api.unshelve("},{"line_number":1146,"context_line":"            self.context, instance, new_az\u003dnew_az, host\u003dNone)"},{"line_number":1147,"context_line":""},{"line_number":1148,"context_line":"        mock_save.assert_called_once_with()"},{"line_number":1149,"context_line":"        self.assertEqual(new_az, fake_spec.availability_zone)"}],"source_content_type":"text/x-python","patch_set":16,"id":"45486205_9c2789e7","line":1146,"in_reply_to":"c05ad5cf_a736746a","updated":"2022-07-11 07:34:38.000000000","message":"Done","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"b97c341b1525f39434995f804dfd34d0f68cc05c","unresolved":false,"context_lines":[{"line_number":1143,"context_line":"        get_by_instance_uuid.return_value \u003d fake_spec"},{"line_number":1144,"context_line":""},{"line_number":1145,"context_line":"        self.compute_api.unshelve("},{"line_number":1146,"context_line":"            self.context, instance, new_az\u003dnew_az, host\u003dNone)"},{"line_number":1147,"context_line":""},{"line_number":1148,"context_line":"        mock_save.assert_called_once_with()"},{"line_number":1149,"context_line":"        self.assertEqual(new_az, fake_spec.availability_zone)"}],"source_content_type":"text/x-python","patch_set":16,"id":"e20c95c8_8d2cd1e6","line":1146,"in_reply_to":"c05ad5cf_a736746a","updated":"2022-07-19 13:26:21.000000000","message":"Done","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d9d73e79c844b6ba58f566ca6abb892823a8d5b1","unresolved":true,"context_lines":[{"line_number":1002,"context_line":"            self.compute_api.unshelve("},{"line_number":1003,"context_line":"                self.context,"},{"line_number":1004,"context_line":"                instance,"},{"line_number":1005,"context_line":"            )"},{"line_number":1006,"context_line":"            get_by_instance_uuid.assert_called_once_with(self.context,"},{"line_number":1007,"context_line":"                                                         instance.uuid)"},{"line_number":1008,"context_line":"            unshelve.assert_called_once_with(self.context, instance, fake_spec)"}],"source_content_type":"text/x-python","patch_set":17,"id":"096339ff_978368fa","line":1005,"updated":"2022-07-12 09:33:17.000000000","message":"unnnecessary change. Please help reviewers by not modifying what we don\u0027t need :)","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"428c3f9131cbb4286c23633903ff8554a4892b85","unresolved":false,"context_lines":[{"line_number":1002,"context_line":"            self.compute_api.unshelve("},{"line_number":1003,"context_line":"                self.context,"},{"line_number":1004,"context_line":"                instance,"},{"line_number":1005,"context_line":"            )"},{"line_number":1006,"context_line":"            get_by_instance_uuid.assert_called_once_with(self.context,"},{"line_number":1007,"context_line":"                                                         instance.uuid)"},{"line_number":1008,"context_line":"            unshelve.assert_called_once_with(self.context, instance, fake_spec)"}],"source_content_type":"text/x-python","patch_set":17,"id":"d6d28be7_fa3837c6","line":1005,"in_reply_to":"096339ff_978368fa","updated":"2022-07-21 17:49:43.000000000","message":"Done","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d9d73e79c844b6ba58f566ca6abb892823a8d5b1","unresolved":true,"context_lines":[{"line_number":1032,"context_line":"            self.context,"},{"line_number":1033,"context_line":"            instance,"},{"line_number":1034,"context_line":"            new_az\u003dnew_az,"},{"line_number":1035,"context_line":"        )"},{"line_number":1036,"context_line":"        self.assertEqual(\"The requested availability zone is not available\","},{"line_number":1037,"context_line":"                         exc.format_message())"},{"line_number":1038,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"a32f829e_d92438c4","line":1035,"updated":"2022-07-12 09:33:17.000000000","message":"ditto here...","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"428c3f9131cbb4286c23633903ff8554a4892b85","unresolved":false,"context_lines":[{"line_number":1032,"context_line":"            self.context,"},{"line_number":1033,"context_line":"            instance,"},{"line_number":1034,"context_line":"            new_az\u003dnew_az,"},{"line_number":1035,"context_line":"        )"},{"line_number":1036,"context_line":"        self.assertEqual(\"The requested availability zone is not available\","},{"line_number":1037,"context_line":"                         exc.format_message())"},{"line_number":1038,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"4504741d_6d2d7cfd","line":1035,"in_reply_to":"a32f829e_d92438c4","updated":"2022-07-21 17:49:43.000000000","message":"Done","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d9d73e79c844b6ba58f566ca6abb892823a8d5b1","unresolved":true,"context_lines":[{"line_number":1041,"context_line":"    @mock.patch.object(objects.RequestSpec, \u0027save\u0027)"},{"line_number":1042,"context_line":"    @mock.patch.object(objects.RequestSpec, \u0027get_by_instance_uuid\u0027)"},{"line_number":1043,"context_line":"    def test_specified_az_unshelve_invalid_state("},{"line_number":1044,"context_line":"            self, get_by_instance_uuid, mock_save, mock_availability_zones):"},{"line_number":1045,"context_line":"        # Ensure instance can be unshelved."},{"line_number":1046,"context_line":"        instance \u003d self._get_specify_state_instance(vm_states.SHELVED)"},{"line_number":1047,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"99f20f80_e87b735f","line":1044,"updated":"2022-07-12 09:33:17.000000000","message":"ditto here","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"428c3f9131cbb4286c23633903ff8554a4892b85","unresolved":false,"context_lines":[{"line_number":1041,"context_line":"    @mock.patch.object(objects.RequestSpec, \u0027save\u0027)"},{"line_number":1042,"context_line":"    @mock.patch.object(objects.RequestSpec, \u0027get_by_instance_uuid\u0027)"},{"line_number":1043,"context_line":"    def test_specified_az_unshelve_invalid_state("},{"line_number":1044,"context_line":"            self, get_by_instance_uuid, mock_save, mock_availability_zones):"},{"line_number":1045,"context_line":"        # Ensure instance can be unshelved."},{"line_number":1046,"context_line":"        instance \u003d self._get_specify_state_instance(vm_states.SHELVED)"},{"line_number":1047,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"cf0d386a_fc1d0479","line":1044,"in_reply_to":"99f20f80_e87b735f","updated":"2022-07-21 17:49:43.000000000","message":"Done","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d9d73e79c844b6ba58f566ca6abb892823a8d5b1","unresolved":true,"context_lines":[{"line_number":1057,"context_line":"            instance,"},{"line_number":1058,"context_line":"            new_az\u003dnew_az,"},{"line_number":1059,"context_line":"        )"},{"line_number":1060,"context_line":""},{"line_number":1061,"context_line":"    @mock.patch("},{"line_number":1062,"context_line":"        \u0027nova.objects.service.get_minimum_version_all_cells\u0027,"},{"line_number":1063,"context_line":"        new\u003dmock.Mock(return_value\u003d58),"}],"source_content_type":"text/x-python","patch_set":17,"id":"dcdf873c_d9bb0216","line":1060,"updated":"2022-07-12 09:33:17.000000000","message":"ditto here","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"428c3f9131cbb4286c23633903ff8554a4892b85","unresolved":false,"context_lines":[{"line_number":1057,"context_line":"            instance,"},{"line_number":1058,"context_line":"            new_az\u003dnew_az,"},{"line_number":1059,"context_line":"        )"},{"line_number":1060,"context_line":""},{"line_number":1061,"context_line":"    @mock.patch("},{"line_number":1062,"context_line":"        \u0027nova.objects.service.get_minimum_version_all_cells\u0027,"},{"line_number":1063,"context_line":"        new\u003dmock.Mock(return_value\u003d58),"}],"source_content_type":"text/x-python","patch_set":17,"id":"ff3cc229_39507c0d","line":1060,"in_reply_to":"dcdf873c_d9bb0216","updated":"2022-07-21 17:49:43.000000000","message":"Done","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d9d73e79c844b6ba58f566ca6abb892823a8d5b1","unresolved":true,"context_lines":[{"line_number":1142,"context_line":""},{"line_number":1143,"context_line":"        self.compute_api.unshelve("},{"line_number":1144,"context_line":"            self.context, instance, new_az\u003dnew_az)"},{"line_number":1145,"context_line":""},{"line_number":1146,"context_line":"        mock_save.assert_called_once_with()"},{"line_number":1147,"context_line":"        self.assertEqual(new_az, fake_spec.availability_zone)"},{"line_number":1148,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"21153ab5_d1821377","line":1145,"updated":"2022-07-12 09:33:17.000000000","message":"ditto here","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d9d73e79c844b6ba58f566ca6abb892823a8d5b1","unresolved":true,"context_lines":[{"line_number":1142,"context_line":""},{"line_number":1143,"context_line":"        self.compute_api.unshelve("},{"line_number":1144,"context_line":"            self.context, instance, new_az\u003dnew_az)"},{"line_number":1145,"context_line":""},{"line_number":1146,"context_line":"        mock_save.assert_called_once_with()"},{"line_number":1147,"context_line":"        self.assertEqual(new_az, fake_spec.availability_zone)"},{"line_number":1148,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"dfa86593_7bceebc8","line":1145,"updated":"2022-07-12 09:33:17.000000000","message":"where are the tests for checking all the conditionals ? can\u0027t see them in https://review.opendev.org/c/openstack/nova/+/845897/4","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"428c3f9131cbb4286c23633903ff8554a4892b85","unresolved":false,"context_lines":[{"line_number":1142,"context_line":""},{"line_number":1143,"context_line":"        self.compute_api.unshelve("},{"line_number":1144,"context_line":"            self.context, instance, new_az\u003dnew_az)"},{"line_number":1145,"context_line":""},{"line_number":1146,"context_line":"        mock_save.assert_called_once_with()"},{"line_number":1147,"context_line":"        self.assertEqual(new_az, fake_spec.availability_zone)"},{"line_number":1148,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"e4b85cd8_9eb88bb1","line":1145,"in_reply_to":"21153ab5_d1821377","updated":"2022-07-21 17:49:43.000000000","message":"Done","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"428c3f9131cbb4286c23633903ff8554a4892b85","unresolved":false,"context_lines":[{"line_number":1142,"context_line":""},{"line_number":1143,"context_line":"        self.compute_api.unshelve("},{"line_number":1144,"context_line":"            self.context, instance, new_az\u003dnew_az)"},{"line_number":1145,"context_line":""},{"line_number":1146,"context_line":"        mock_save.assert_called_once_with()"},{"line_number":1147,"context_line":"        self.assertEqual(new_az, fake_spec.availability_zone)"},{"line_number":1148,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"20e8cdaa_313730d9","line":1145,"in_reply_to":"308c4a81_6ff00e44","updated":"2022-07-21 17:49:43.000000000","message":"Done","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"dff2845a53e3b25c2e0c3a4543317de56f2aa1de","unresolved":true,"context_lines":[{"line_number":1142,"context_line":""},{"line_number":1143,"context_line":"        self.compute_api.unshelve("},{"line_number":1144,"context_line":"            self.context, instance, new_az\u003dnew_az)"},{"line_number":1145,"context_line":""},{"line_number":1146,"context_line":"        mock_save.assert_called_once_with()"},{"line_number":1147,"context_line":"        self.assertEqual(new_az, fake_spec.availability_zone)"},{"line_number":1148,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"308c4a81_6ff00e44","line":1145,"in_reply_to":"cf61165a_c90246b3","updated":"2022-07-20 08:36:45.000000000","message":"Yeah I\u0027d appreciate if you could add a few in this change, please.","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"b97c341b1525f39434995f804dfd34d0f68cc05c","unresolved":true,"context_lines":[{"line_number":1142,"context_line":""},{"line_number":1143,"context_line":"        self.compute_api.unshelve("},{"line_number":1144,"context_line":"            self.context, instance, new_az\u003dnew_az)"},{"line_number":1145,"context_line":""},{"line_number":1146,"context_line":"        mock_save.assert_called_once_with()"},{"line_number":1147,"context_line":"        self.assertEqual(new_az, fake_spec.availability_zone)"},{"line_number":1148,"context_line":""}],"source_content_type":"text/x-python","patch_set":17,"id":"cf61165a_c90246b3","line":1145,"in_reply_to":"dfa86593_7bceebc8","updated":"2022-07-19 13:26:21.000000000","message":"This is fully covered by functional tests in the next patch.\nDo you also expect unit tests ? Will it be redundant ?","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f12bdaca8df41d265bbe32f16cbd57118c6ea6b6","unresolved":true,"context_lines":[{"line_number":907,"context_line":"        self.assertEqual(fake_spec.availability_zone, fake_zone)"},{"line_number":908,"context_line":"        if fake_host:"},{"line_number":909,"context_line":"            self.assertEqual(fake_spec.requested_destination.host, fake_host)"},{"line_number":910,"context_line":""},{"line_number":911,"context_line":"    def _test_shelve(self, vm_state\u003dvm_states.ACTIVE, boot_from_volume\u003dFalse,"},{"line_number":912,"context_line":"                     clean_shutdown\u003dTrue):"},{"line_number":913,"context_line":""}],"source_content_type":"text/x-python","patch_set":18,"id":"e59be6fc_04bf0f8e","line":910,"updated":"2022-07-22 14:39:57.000000000","message":"thanks a lot !","commit_id":"bff08dcea1d6ca20683f1e0fcce7191a83276eb1"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"f12bdaca8df41d265bbe32f16cbd57118c6ea6b6","unresolved":true,"context_lines":[{"line_number":1731,"context_line":"        self.assertIn("},{"line_number":1732,"context_line":"            exc.message,"},{"line_number":1733,"context_line":"            \u0027Host \"fake_mini\" is not in the availability zone \"avail_zone1\".\u0027"},{"line_number":1734,"context_line":"        )"}],"source_content_type":"text/x-python","patch_set":18,"id":"4d98527e_ec7dda3a","line":1734,"updated":"2022-07-22 14:39:57.000000000","message":"excellent work, thanks","commit_id":"bff08dcea1d6ca20683f1e0fcce7191a83276eb1"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"380f33fff2dd705fa91ee5663fee5f907cf7409f","unresolved":true,"context_lines":[{"line_number":853,"context_line":"    @mock.patch(\u0027nova.scheduler.client.report.SchedulerReportClient.\u0027"},{"line_number":854,"context_line":"                \u0027aggregate_add_host\u0027)"},{"line_number":855,"context_line":"    @mock.patch(\u0027nova.availability_zones.get_availability_zones\u0027)"},{"line_number":856,"context_line":"    def _create_host_inside_az("},{"line_number":857,"context_line":"            self,"},{"line_number":858,"context_line":"            ctxt,"},{"line_number":859,"context_line":"            host,"},{"line_number":860,"context_line":"            az,"},{"line_number":861,"context_line":"            mock_az,"},{"line_number":862,"context_line":"            mock_aggregate,"},{"line_number":863,"context_line":"            ):"},{"line_number":864,"context_line":""},{"line_number":865,"context_line":"        self.api \u003d compute_api.AggregateAPI()"},{"line_number":866,"context_line":"        mock_az.return_value \u003d [az]"}],"source_content_type":"text/x-python","patch_set":19,"id":"5fd30e31_4e9f3f27","line":863,"range":{"start_line":856,"start_character":0,"end_line":863,"end_character":14},"updated":"2022-07-22 09:22:34.000000000","message":"wrong indent. This should look like:\n\n    def _create_host_inside_az(\n        self,\n        ctxt,\n        host,\n        az,\n        mock_az,\n        mock_aggregate,\n    ):","commit_id":"a263fa46f861c091d93782d4796c8302f9c30f4a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"380f33fff2dd705fa91ee5663fee5f907cf7409f","unresolved":true,"context_lines":[{"line_number":889,"context_line":"        return fake_spec"},{"line_number":890,"context_line":""},{"line_number":891,"context_line":"    def _assert_unshelving_and_request_spec_az_and_host("},{"line_number":892,"context_line":"            self,"},{"line_number":893,"context_line":"            context,"},{"line_number":894,"context_line":"            instance,"},{"line_number":895,"context_line":"            fake_spec,"}],"source_content_type":"text/x-python","patch_set":19,"id":"2ed34ac6_0fd33439","line":892,"range":{"start_line":892,"start_character":4,"end_line":892,"end_character":12},"updated":"2022-07-22 09:22:34.000000000","message":"too much indent, one unit (4 spaces) is enough","commit_id":"a263fa46f861c091d93782d4796c8302f9c30f4a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"380f33fff2dd705fa91ee5663fee5f907cf7409f","unresolved":true,"context_lines":[{"line_number":1229,"context_line":"    @mock.patch.object(objects.ComputeNodeList, \u0027get_all_by_host\u0027)"},{"line_number":1230,"context_line":"    @mock.patch.object(objects.RequestSpec, \u0027get_by_instance_uuid\u0027)"},{"line_number":1231,"context_line":"    def test_unshelve_without_az("},{"line_number":1232,"context_line":"            self,"},{"line_number":1233,"context_line":"            mock_get_by_instance_uuid,"},{"line_number":1234,"context_line":"            mock_get_all_by_host,"},{"line_number":1235,"context_line":"            mock_save,"}],"source_content_type":"text/x-python","patch_set":19,"id":"a863d6df_96a7a3a1","line":1232,"range":{"start_line":1232,"start_character":4,"end_line":1232,"end_character":12},"updated":"2022-07-22 09:22:34.000000000","message":"overindent here and below","commit_id":"a263fa46f861c091d93782d4796c8302f9c30f4a"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"380f33fff2dd705fa91ee5663fee5f907cf7409f","unresolved":true,"context_lines":[{"line_number":1234,"context_line":"            mock_get_all_by_host,"},{"line_number":1235,"context_line":"            mock_save,"},{"line_number":1236,"context_line":"            mock_unshelve"},{"line_number":1237,"context_line":"        ):"},{"line_number":1238,"context_line":""},{"line_number":1239,"context_line":"        context \u003d self.context.elevated()"},{"line_number":1240,"context_line":"        fake_host \u003d \u0027fake_host1\u0027"}],"source_content_type":"text/x-python","patch_set":19,"id":"78e4282d_55fa8e28","line":1237,"range":{"start_line":1237,"start_character":4,"end_line":1237,"end_character":9},"updated":"2022-07-22 09:22:34.000000000","message":"overindent here and below","commit_id":"a263fa46f861c091d93782d4796c8302f9c30f4a"}]}
