)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"ca4539a3_79a38fc9","updated":"2022-06-27 13:00:15.000000000","message":"A have a list of suggestions inline","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"7d5d7fd9_f89283b4","updated":"2022-06-30 14:09:17.000000000","message":"Refactor tests as proposed by gibi.","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"138b9db193f20917140ca00d8b5b486d4d62bc82","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"fd6df649_2800e8b0","updated":"2022-07-11 08:18:45.000000000","message":"Couple of comment in the functional test but overall this looks good to me.","commit_id":"d6767307915df99006cdfec997a0b42e2303b368"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"5df88d55_85a2427d","updated":"2022-07-20 10:51:32.000000000","message":"Only nits, 99% of the change looks good.\n\nFWIW, I was wondering why this patch was soooo hairy, and I got the reason why : you added unrequired functional tests that were not verifying the API part but the whole subsequent use of unshelve.\n\nI\u0027m not saying this is bad, but as a reviewer, I\u0027m always afraid of seeing a large patch and I really want to keep my pieces split as much as I can, because a rebase is always painful. You could also have written unittests that would verify your outputs on the compute.api method based on preconditions you would propose and this would have helped this patch to be less huge.\nAnyway, work is done, and it was excellent so I don\u0027t want to throw it.","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d9347e9c99c74162d7fefe103a1c3fd313fe75c7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"a80a9a6a_ef6973d5","updated":"2022-07-22 15:49:56.000000000","message":"Bravo for your first API microversion ;)","commit_id":"09239fc2eadcf266b42c640e386c7cebad715eea"},{"author":{"_account_id":27419,"name":"David Vallee Delisle","email":"me@dvd.dev","username":"dvd"},"change_message_id":"79fb8d97b8a13da55bdb65439ff5ac8de00a65ce","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"4f894d5b_16e710dc","updated":"2022-07-27 12:30:35.000000000","message":"Thanks René and the rest of the team, this is a nice feature!","commit_id":"09239fc2eadcf266b42c640e386c7cebad715eea"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b4101f3680ff04b92ae5f381e4946c064c391314","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"17cb1cbe_75ca0990","updated":"2022-07-27 08:16:21.000000000","message":"recheck bug 1940425","commit_id":"09239fc2eadcf266b42c640e386c7cebad715eea"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"e4b6c854bd0e6945e55b1f966fc65ec4037929f4","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"9d9b5aa7_6ec90962","updated":"2022-07-25 14:58:56.000000000","message":"recheck fscking bug 1940425","commit_id":"09239fc2eadcf266b42c640e386c7cebad715eea"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"6798ce426fadfbbcaea6c83e76f17d5a656863fd","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"2a0016df_003480c0","updated":"2022-07-25 10:39:48.000000000","message":"recheck test_live_migration_with_trunk issue again with nova-next","commit_id":"09239fc2eadcf266b42c640e386c7cebad715eea"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"93e10d1373a0c0e07af64299c6a56a8abde92df3","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"be4f6cd4_f65fe503","updated":"2022-07-22 15:42:20.000000000","message":"recheck test_live_migration_with_trunk issue in nova-ovs-hybrid-plug","commit_id":"09239fc2eadcf266b42c640e386c7cebad715eea"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"03a1b5aacfeec4434fae4ed73fae14c3b0efd0d2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"f41e825b_649ecbea","updated":"2022-07-22 09:28:48.000000000","message":"still looks good to me","commit_id":"09239fc2eadcf266b42c640e386c7cebad715eea"}],"api-ref/source/parameters.yaml":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":1861,"context_line":"    allowed when the server status is ``SHELVED_OFFLOADED`` otherwise"},{"line_number":1862,"context_line":"    HTTP 409 conflict response is returned."},{"line_number":1863,"context_line":""},{"line_number":1864,"context_line":"    As of microversion 2.91, ``\"availability_zone\":null`` 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"},{"line_number":1868,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"1deace61_37e2f6c0","line":1865,"range":{"start_line":1864,"start_character":0,"end_line":1865,"end_character":70},"updated":"2022-06-27 13:00:15.000000000","message":"nit: Since microversion 2.91 ``\"availability_zone\":null`` allows unpinning the instance from any availability_zone it is pinned to.","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":1861,"context_line":"    allowed when the server status is ``SHELVED_OFFLOADED`` otherwise"},{"line_number":1862,"context_line":"    HTTP 409 conflict response is returned."},{"line_number":1863,"context_line":""},{"line_number":1864,"context_line":"    As of microversion 2.91, ``\"availability_zone\":null`` 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"},{"line_number":1868,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"ceb5366c_364bb30a","line":1865,"range":{"start_line":1864,"start_character":0,"end_line":1865,"end_character":70},"in_reply_to":"1deace61_37e2f6c0","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":3695,"context_line":"  min_version: 2.75"},{"line_number":3696,"context_line":"host_unshelve:"},{"line_number":3697,"context_line":"  description: |"},{"line_number":3698,"context_line":"    The destination host name. specifying a destination host is only"},{"line_number":3699,"context_line":"    allowed to project_admin, if it not the case HTTP 403 forbidden response"},{"line_number":3700,"context_line":"    is returned."},{"line_number":3701,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":3,"id":"9efad9d3_1890bdee","line":3698,"range":{"start_line":3698,"start_character":31,"end_line":3698,"end_character":32},"updated":"2022-06-27 13:00:15.000000000","message":"S","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":3695,"context_line":"  min_version: 2.75"},{"line_number":3696,"context_line":"host_unshelve:"},{"line_number":3697,"context_line":"  description: |"},{"line_number":3698,"context_line":"    The destination host name. specifying a destination host is only"},{"line_number":3699,"context_line":"    allowed to project_admin, if it not the case HTTP 403 forbidden response"},{"line_number":3700,"context_line":"    is returned."},{"line_number":3701,"context_line":""}],"source_content_type":"text/x-yaml","patch_set":3,"id":"3ef5ba88_f90e7172","line":3698,"range":{"start_line":3698,"start_character":31,"end_line":3698,"end_character":32},"in_reply_to":"9efad9d3_1890bdee","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":1861,"context_line":"    allowed when the server status is ``SHELVED_OFFLOADED`` otherwise"},{"line_number":1862,"context_line":"    HTTP 409 conflict response is returned."},{"line_number":1863,"context_line":""},{"line_number":1864,"context_line":"    Since microversion 2.91 ``\"availability_zone\":null`` allows unpinning the"},{"line_number":1865,"context_line":"    instance from any availability_zone it is pinned to."},{"line_number":1866,"context_line":"  in: body"},{"line_number":1867,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"bd7de701_84fb3227","line":1864,"range":{"start_line":1864,"start_character":50,"end_line":1864,"end_character":54},"updated":"2022-07-20 10:51:32.000000000","message":"technically, this is an empty parameter value so \"None\" and not \"null\u0027.","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"03a1b5aacfeec4434fae4ed73fae14c3b0efd0d2","unresolved":true,"context_lines":[{"line_number":1861,"context_line":"    allowed when the server status is ``SHELVED_OFFLOADED`` otherwise"},{"line_number":1862,"context_line":"    HTTP 409 conflict response is returned."},{"line_number":1863,"context_line":""},{"line_number":1864,"context_line":"    Since microversion 2.91 ``\"availability_zone\":null`` allows unpinning the"},{"line_number":1865,"context_line":"    instance from any availability_zone it is pinned to."},{"line_number":1866,"context_line":"  in: body"},{"line_number":1867,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"99a9cb77_3138739d","line":1864,"range":{"start_line":1864,"start_character":50,"end_line":1864,"end_character":54},"in_reply_to":"98a1f908_d93cedef","updated":"2022-07-22 09:28:48.000000000","message":"I think this is talking about REST json, so null is appropriate","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d9347e9c99c74162d7fefe103a1c3fd313fe75c7","unresolved":false,"context_lines":[{"line_number":1861,"context_line":"    allowed when the server status is ``SHELVED_OFFLOADED`` otherwise"},{"line_number":1862,"context_line":"    HTTP 409 conflict response is returned."},{"line_number":1863,"context_line":""},{"line_number":1864,"context_line":"    Since microversion 2.91 ``\"availability_zone\":null`` allows unpinning the"},{"line_number":1865,"context_line":"    instance from any availability_zone it is pinned to."},{"line_number":1866,"context_line":"  in: body"},{"line_number":1867,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"07ed394d_ff7ea32e","line":1864,"range":{"start_line":1864,"start_character":50,"end_line":1864,"end_character":54},"in_reply_to":"99a9cb77_3138739d","updated":"2022-07-22 15:49:56.000000000","message":"sorry, yeah. Looked at the api-ref and sometimes we say \u0027null\u0027 and other times \u0027none\".\n\nMeh.","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":true,"context_lines":[{"line_number":1861,"context_line":"    allowed when the server status is ``SHELVED_OFFLOADED`` otherwise"},{"line_number":1862,"context_line":"    HTTP 409 conflict response is returned."},{"line_number":1863,"context_line":""},{"line_number":1864,"context_line":"    Since microversion 2.91 ``\"availability_zone\":null`` allows unpinning the"},{"line_number":1865,"context_line":"    instance from any availability_zone it is pinned to."},{"line_number":1866,"context_line":"  in: body"},{"line_number":1867,"context_line":"  required: false"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"98a1f908_d93cedef","line":1864,"range":{"start_line":1864,"start_character":50,"end_line":1864,"end_character":54},"in_reply_to":"bd7de701_84fb3227","updated":"2022-07-21 17:49:50.000000000","message":"Depending if you speak in \"python\" or Rest API json.\nHere I think we are speaking about Rest API so I think that should be null.\nWhat do you think ?","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":3695,"context_line":"  min_version: 2.75"},{"line_number":3696,"context_line":"host_unshelve:"},{"line_number":3697,"context_line":"  description: |"},{"line_number":3698,"context_line":"    The destination host name. Specifying a destination host is only"},{"line_number":3699,"context_line":"    allowed to project_admin, if it not the case HTTP 403 forbidden response"},{"line_number":3700,"context_line":"    is returned."},{"line_number":3701,"context_line":""},{"line_number":3702,"context_line":"    As well, the server status must be ``shelved_offloaded`` otherwise"},{"line_number":3703,"context_line":"    HTTP 409 conflict response is returned."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"a56e66f7_8433deea","line":3700,"range":{"start_line":3698,"start_character":1,"end_line":3700,"end_character":16},"updated":"2022-07-20 10:51:32.000000000","message":"you should rather provide a note explaining that *by default* the policy will be for project admins like we explain in https://docs.openstack.org/api-ref/compute/?expanded\u003dmigrate-server-migrate-action-detail#migrate-server-migrate-action\n\n\"Policy defaults enable only users with the administrative role to perform this operation. Cloud providers can change these permissions through the policy.json file.\"","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":3695,"context_line":"  min_version: 2.75"},{"line_number":3696,"context_line":"host_unshelve:"},{"line_number":3697,"context_line":"  description: |"},{"line_number":3698,"context_line":"    The destination host name. Specifying a destination host is only"},{"line_number":3699,"context_line":"    allowed to project_admin, if it not the case HTTP 403 forbidden response"},{"line_number":3700,"context_line":"    is returned."},{"line_number":3701,"context_line":""},{"line_number":3702,"context_line":"    As well, the server status must be ``shelved_offloaded`` otherwise"},{"line_number":3703,"context_line":"    HTTP 409 conflict response is returned."}],"source_content_type":"text/x-yaml","patch_set":5,"id":"38457f32_9aa78ef5","line":3700,"range":{"start_line":3698,"start_character":1,"end_line":3700,"end_character":16},"in_reply_to":"a56e66f7_8433deea","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":3699,"context_line":"    allowed to project_admin, if it not the case HTTP 403 forbidden response"},{"line_number":3700,"context_line":"    is returned."},{"line_number":3701,"context_line":""},{"line_number":3702,"context_line":"    As well, the server status must be ``shelved_offloaded`` otherwise"},{"line_number":3703,"context_line":"    HTTP 409 conflict response is returned."},{"line_number":3704,"context_line":"  in: body"},{"line_number":3705,"context_line":"  required: false"},{"line_number":3706,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"141d0277_c7bfad53","line":3703,"range":{"start_line":3702,"start_character":0,"end_line":3703,"end_character":43},"updated":"2022-07-20 10:51:32.000000000","message":"nit: this could be told here https://review.opendev.org/c/openstack/nova/+/845897/5/api-ref/source/servers-action-shelve.inc#122 as a pre-condition","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":3699,"context_line":"    allowed to project_admin, if it not the case HTTP 403 forbidden response"},{"line_number":3700,"context_line":"    is returned."},{"line_number":3701,"context_line":""},{"line_number":3702,"context_line":"    As well, the server status must be ``shelved_offloaded`` otherwise"},{"line_number":3703,"context_line":"    HTTP 409 conflict response is returned."},{"line_number":3704,"context_line":"  in: body"},{"line_number":3705,"context_line":"  required: false"},{"line_number":3706,"context_line":"  type: string"}],"source_content_type":"text/x-yaml","patch_set":5,"id":"05728a04_b40969fd","line":3703,"range":{"start_line":3702,"start_character":0,"end_line":3703,"end_character":43},"in_reply_to":"141d0277_c7bfad53","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"}],"api-ref/source/servers-action-shelve.inc":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":251,"context_line":"   :language: javascript"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":".. literalinclude:: ../../doc/api_samples/os-shelve/v2.91/os-unshelve-unpin-az.json"},{"line_number":254,"context_line":"   :language: javascript"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"Response"},{"line_number":257,"context_line":"--------"}],"source_content_type":"text/x-c++src","patch_set":3,"id":"fe17f2c0_b2d1e84d","line":254,"updated":"2022-06-27 13:00:15.000000000","message":"Probably one example is enough. I would go with os-unshelve-az-host.json","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":251,"context_line":"   :language: javascript"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":".. literalinclude:: ../../doc/api_samples/os-shelve/v2.91/os-unshelve-unpin-az.json"},{"line_number":254,"context_line":"   :language: javascript"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"Response"},{"line_number":257,"context_line":"--------"}],"source_content_type":"text/x-c++src","patch_set":3,"id":"930309b5_0292914e","line":254,"in_reply_to":"66f4a4c5_7c151320","updated":"2022-07-20 10:51:32.000000000","message":"I don\u0027t really see a problem with having multiple examples, we do this for other server actions. LGTM : https://cf2fe384a10a38b03d3b-ed3a683664711412fed3d44888199fbd.ssl.cf2.rackcdn.com/845897/5/check/build-openstack-api-ref/7911f18/docs/?expanded\u003dunshelve-restore-shelved-server-unshelve-action-detail#unshelve-restore-shelved-server-unshelve-action\n\nIn particular, given there are behavioural differences whether you provide a parameter with a null value or when you don\u0027t provide it, I\u0027m OK to have 4 examples.","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":251,"context_line":"   :language: javascript"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":".. literalinclude:: ../../doc/api_samples/os-shelve/v2.91/os-unshelve-unpin-az.json"},{"line_number":254,"context_line":"   :language: javascript"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"Response"},{"line_number":257,"context_line":"--------"}],"source_content_type":"text/x-c++src","patch_set":3,"id":"61c9340f_29542e3d","line":254,"in_reply_to":"930309b5_0292914e","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":true,"context_lines":[{"line_number":251,"context_line":"   :language: javascript"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":".. literalinclude:: ../../doc/api_samples/os-shelve/v2.91/os-unshelve-unpin-az.json"},{"line_number":254,"context_line":"   :language: javascript"},{"line_number":255,"context_line":""},{"line_number":256,"context_line":"Response"},{"line_number":257,"context_line":"--------"}],"source_content_type":"text/x-c++src","patch_set":3,"id":"66f4a4c5_7c151320","line":254,"in_reply_to":"fe17f2c0_b2d1e84d","updated":"2022-06-30 14:09:17.000000000","message":"Hum, if I remember well bauzas gave me the advice that it is good to provide several examples. To be honest I would rather have the examples.\n\nSo I left this open. Please other core, let me know your preference.","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":122,"context_line":"**Preconditions**"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"The server status must be ``SHELVED`` or ``SHELVED_OFFLOADED``."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"If a 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."}],"source_content_type":"text/x-c++src","patch_set":5,"id":"558c1199_e9d0e6d0","line":125,"updated":"2022-07-20 10:51:32.000000000","message":"please mention that it has to be only SHELVED_OFFLOAD if you pass the host value.","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":122,"context_line":"**Preconditions**"},{"line_number":123,"context_line":""},{"line_number":124,"context_line":"The server status must be ``SHELVED`` or ``SHELVED_OFFLOADED``."},{"line_number":125,"context_line":""},{"line_number":126,"context_line":"If a 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."}],"source_content_type":"text/x-c++src","patch_set":5,"id":"b4603d18_e20d61c9","line":125,"in_reply_to":"558c1199_e9d0e6d0","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":134,"context_line":"move the server to nodes in different availability_zones."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"The behavior according to unshelve"},{"line_number":137,"context_line":"parameters will follow the below table."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"+----------+---------------------------+----------+--------------------------------+"},{"line_number":140,"context_line":"| Boot     | AZ (1)                    | Host (1) | Result                         |"}],"source_content_type":"text/x-c++src","patch_set":5,"id":"990c95a3_5de21f36","line":137,"updated":"2022-07-20 10:51:32.000000000","message":"unnecessary line CR, \"unshelve parameters will follow...\" can be in the same line.","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":134,"context_line":"move the server to nodes in different availability_zones."},{"line_number":135,"context_line":""},{"line_number":136,"context_line":"The behavior according to unshelve"},{"line_number":137,"context_line":"parameters will follow the below table."},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"+----------+---------------------------+----------+--------------------------------+"},{"line_number":140,"context_line":"| Boot     | AZ (1)                    | Host (1) | Result                         |"}],"source_content_type":"text/x-c++src","patch_set":5,"id":"c781307c_eca7f14d","line":137,"in_reply_to":"990c95a3_5de21f36","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":219,"context_line":"  - {\"unshelve\": {}}"},{"line_number":220,"context_line":"  - {\"unshelve\": {\"host\": \u003cfqdn\u003e, \"host\": \u003cfqdn\u003e}}"},{"line_number":221,"context_line":"  - {\"unshelve\": {\"foo\": \u003cstring\u003e}}"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"  - server_id: server_id_path"}],"source_content_type":"text/x-c++src","patch_set":5,"id":"d89f6377_c87c54a0","line":222,"updated":"2022-07-20 10:51:32.000000000","message":"fwiw, all the above renders properly https://cf2fe384a10a38b03d3b-ed3a683664711412fed3d44888199fbd.ssl.cf2.rackcdn.com/845897/5/check/build-openstack-api-ref/7911f18/docs/?expanded\u003dunshelve-restore-shelved-server-unshelve-action-detail#unshelve-restore-shelved-server-unshelve-action","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"03a1b5aacfeec4434fae4ed73fae14c3b0efd0d2","unresolved":false,"context_lines":[{"line_number":219,"context_line":"  - {\"unshelve\": {}}"},{"line_number":220,"context_line":"  - {\"unshelve\": {\"host\": \u003cfqdn\u003e, \"host\": \u003cfqdn\u003e}}"},{"line_number":221,"context_line":"  - {\"unshelve\": {\"foo\": \u003cstring\u003e}}"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"  - server_id: server_id_path"}],"source_content_type":"text/x-c++src","patch_set":5,"id":"c6bd624a_c1db0f58","line":222,"in_reply_to":"5ed13b73_893cf2ce","updated":"2022-07-22 09:28:48.000000000","message":"I think he means all is OK :)","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"d9347e9c99c74162d7fefe103a1c3fd313fe75c7","unresolved":false,"context_lines":[{"line_number":219,"context_line":"  - {\"unshelve\": {}}"},{"line_number":220,"context_line":"  - {\"unshelve\": {\"host\": \u003cfqdn\u003e, \"host\": \u003cfqdn\u003e}}"},{"line_number":221,"context_line":"  - {\"unshelve\": {\"foo\": \u003cstring\u003e}}"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"  - server_id: server_id_path"}],"source_content_type":"text/x-c++src","patch_set":5,"id":"2fe12f45_78dee161","line":222,"in_reply_to":"c6bd624a_c1db0f58","updated":"2022-07-22 15:49:56.000000000","message":"Correct, just saying I was happy for the second reviewer.","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":true,"context_lines":[{"line_number":219,"context_line":"  - {\"unshelve\": {}}"},{"line_number":220,"context_line":"  - {\"unshelve\": {\"host\": \u003cfqdn\u003e, \"host\": \u003cfqdn\u003e}}"},{"line_number":221,"context_line":"  - {\"unshelve\": {\"foo\": \u003cstring\u003e}}"},{"line_number":222,"context_line":""},{"line_number":223,"context_line":".. rest_parameters:: parameters.yaml"},{"line_number":224,"context_line":""},{"line_number":225,"context_line":"  - server_id: server_id_path"}],"source_content_type":"text/x-c++src","patch_set":5,"id":"5ed13b73_893cf2ce","line":222,"in_reply_to":"d89f6377_c87c54a0","updated":"2022-07-21 17:49:50.000000000","message":"Do you excpect something here. Unsure ?","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"}],"doc/api_samples/os-shelve/v2.91/os-unshelve-host-and-unpin-az.json":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"unshelve\": {"},{"line_number":3,"context_line":"        \"availability_zone\": null,"},{"line_number":4,"context_line":"        \"host\": \"server01\""},{"line_number":5,"context_line":"    }"},{"line_number":6,"context_line":"}"}],"source_content_type":"application/json","patch_set":3,"id":"241d22ce_633c72da","line":4,"range":{"start_line":4,"start_character":17,"end_line":4,"end_character":25},"updated":"2022-06-27 13:00:15.000000000","message":"I would go with node or host terminology in the example as in the our doc \"server\" is used as a synonym for VM or instance.","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":1,"context_line":"{"},{"line_number":2,"context_line":"    \"unshelve\": {"},{"line_number":3,"context_line":"        \"availability_zone\": null,"},{"line_number":4,"context_line":"        \"host\": \"server01\""},{"line_number":5,"context_line":"    }"},{"line_number":6,"context_line":"}"}],"source_content_type":"application/json","patch_set":3,"id":"71a10e1c_b38dfe19","line":4,"range":{"start_line":4,"start_character":17,"end_line":4,"end_character":25},"in_reply_to":"241d22ce_633c72da","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"}],"nova/api/openstack/api_version_request.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":247,"context_line":"             updating or rebuilding an instance. The"},{"line_number":248,"context_line":"             ``OS-EXT-SRV-ATTR:hostname`` attribute is now returned in various"},{"line_number":249,"context_line":"             server responses regardless of policy configuration."},{"line_number":250,"context_line":"    * 2.91 - Add support to unshelve instance to a specific host."},{"line_number":251,"context_line":"\"\"\""},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":5,"id":"ebd07acd_7c6d8814","line":250,"updated":"2022-07-20 10:51:32.000000000","message":"... and to pin/unpin AZ.","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":247,"context_line":"             updating or rebuilding an instance. The"},{"line_number":248,"context_line":"             ``OS-EXT-SRV-ATTR:hostname`` attribute is now returned in various"},{"line_number":249,"context_line":"             server responses regardless of policy configuration."},{"line_number":250,"context_line":"    * 2.91 - Add support to unshelve instance to a specific host."},{"line_number":251,"context_line":"\"\"\""},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"# The minimum and maximum versions of the API supported"}],"source_content_type":"text/x-python","patch_set":5,"id":"eca8be20_35b57013","line":250,"in_reply_to":"ebd07acd_7c6d8814","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"}],"nova/api/openstack/compute/rest_api_version_history.rst":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","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 a server to an availability zone or unpin a server from any availability zones."}],"source_content_type":"text/x-rst","patch_set":5,"id":"bb8487eb_af5c56f6","line":1213,"range":{"start_line":1213,"start_character":92,"end_line":1213,"end_character":97},"updated":"2022-07-20 10:51:32.000000000","message":"nit: single \"zone\"","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","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 a server to an availability zone or unpin a server from any availability zones."}],"source_content_type":"text/x-rst","patch_set":5,"id":"ad967784_ff14d05d","line":1213,"range":{"start_line":1213,"start_character":92,"end_line":1213,"end_character":97},"in_reply_to":"bb8487eb_af5c56f6","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"}],"nova/api/openstack/compute/schemas/shelve.py":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":15,"context_line":"from nova.api.validation import parameter_types"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# NOTE(brinzhang): For older microversion there will be no change as"},{"line_number":18,"context_line":"# schema is applied only for \u003e\u003d2.77 with unshelve a server API."},{"line_number":19,"context_line":"# Anything working in old version keep working as it is."},{"line_number":20,"context_line":"unshelve_v277 \u003d {"},{"line_number":21,"context_line":"    \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"12ed81f1_8e562797","line":18,"range":{"start_line":18,"start_character":29,"end_line":18,"end_character":35},"updated":"2022-07-20 10:51:32.000000000","message":"technically, since you changed this, this is for 2.77\u003c\u003dversion\u003c2.91","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":15,"context_line":"from nova.api.validation import parameter_types"},{"line_number":16,"context_line":""},{"line_number":17,"context_line":"# NOTE(brinzhang): For older microversion there will be no change as"},{"line_number":18,"context_line":"# schema is applied only for \u003e\u003d2.77 with unshelve a server API."},{"line_number":19,"context_line":"# Anything working in old version keep working as it is."},{"line_number":20,"context_line":"unshelve_v277 \u003d {"},{"line_number":21,"context_line":"    \u0027type\u0027: \u0027object\u0027,"}],"source_content_type":"text/x-python","patch_set":5,"id":"0fa5d71a_ade92855","line":18,"range":{"start_line":18,"start_character":29,"end_line":18,"end_character":35},"in_reply_to":"12ed81f1_8e562797","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":79,"context_line":"                        }"},{"line_number":80,"context_line":"                    },"},{"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":"        }"}],"source_content_type":"text/x-python","patch_set":5,"id":"8fb32ddf_6eed4128","line":82,"updated":"2022-07-20 10:51:32.000000000","message":"yup, none of both availability_zone and host are required","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":79,"context_line":"                        }"},{"line_number":80,"context_line":"                    },"},{"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":"        }"}],"source_content_type":"text/x-python","patch_set":5,"id":"919aee6b_df0837fa","line":82,"in_reply_to":"8fb32ddf_6eed4128","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"}],"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":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":68,"context_line":"        context.can(shelve_policies.POLICY_ROOT % \u0027shelve_offload\u0027,"},{"line_number":69,"context_line":"                    target\u003d{\u0027user_id\u0027: instance.user_id,"},{"line_number":70,"context_line":"                            \u0027project_id\u0027: instance.project_id})"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        try:"},{"line_number":73,"context_line":"            self.compute_api.shelve_offload(context, instance)"},{"line_number":74,"context_line":"        except exception.InstanceIsLocked as e:"}],"source_content_type":"text/x-python","patch_set":3,"id":"069bc9d3_56cad325","side":"PARENT","line":71,"updated":"2022-06-27 13:00:15.000000000","message":"unnecessary change","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":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":68,"context_line":"        context.can(shelve_policies.POLICY_ROOT % \u0027shelve_offload\u0027,"},{"line_number":69,"context_line":"                    target\u003d{\u0027user_id\u0027: instance.user_id,"},{"line_number":70,"context_line":"                            \u0027project_id\u0027: instance.project_id})"},{"line_number":71,"context_line":""},{"line_number":72,"context_line":"        try:"},{"line_number":73,"context_line":"            self.compute_api.shelve_offload(context, instance)"},{"line_number":74,"context_line":"        except exception.InstanceIsLocked as e:"}],"source_content_type":"text/x-python","patch_set":3,"id":"1cb21810_579e8634","side":"PARENT","line":71,"in_reply_to":"069bc9d3_56cad325","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"ff1042a188af2cf70660d955d1b77bc5e2218aaa"}],"nova/tests/functional/api_sample_tests/api_samples/os-shelve/v2.91/os-unshelve.json.tpl":[{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"7595d6ec_0c7effdc","line":4,"updated":"2022-07-20 10:51:32.000000000","message":"heh, I see you git mv this file ;)","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"4af8d4dd_5ee0b97b","line":4,"in_reply_to":"7595d6ec_0c7effdc","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"}],"nova/tests/functional/api_sample_tests/test_shelve.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":26,"context_line":"fake_aggregate \u003d {"},{"line_number":27,"context_line":"    \u0027deleted\u0027: 0,"},{"line_number":28,"context_line":"    \u0027deleted_at\u0027: None,"},{"line_number":29,"context_line":"    \u0027created_at\u0027: NOW,"},{"line_number":30,"context_line":"    \u0027updated_at\u0027: None,"},{"line_number":31,"context_line":"    \u0027id\u0027: 123,"},{"line_number":32,"context_line":"    \u0027uuid\u0027: uuidsentinel.fake_aggregate,"}],"source_content_type":"text/x-python","patch_set":3,"id":"d4bfac94_8345eb43","line":29,"updated":"2022-06-27 13:00:15.000000000","message":"this feels dangerous as the test depends on the current time. As far as I see you don\u0027t assert this below so probably it is OK. But still I would simply use None here too, or a fixed, hardcoded date.","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":26,"context_line":"fake_aggregate \u003d {"},{"line_number":27,"context_line":"    \u0027deleted\u0027: 0,"},{"line_number":28,"context_line":"    \u0027deleted_at\u0027: None,"},{"line_number":29,"context_line":"    \u0027created_at\u0027: NOW,"},{"line_number":30,"context_line":"    \u0027updated_at\u0027: None,"},{"line_number":31,"context_line":"    \u0027id\u0027: 123,"},{"line_number":32,"context_line":"    \u0027uuid\u0027: uuidsentinel.fake_aggregate,"}],"source_content_type":"text/x-python","patch_set":3,"id":"f4575fff_413b166c","line":29,"in_reply_to":"d4bfac94_8345eb43","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":67,"context_line":"        self._test_server_action(uuid, \u0027os-unshelve\u0027, \u0027unshelve\u0027)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"class UnshelveJson277Test(test_servers.ServersSampleBase):"},{"line_number":71,"context_line":"    sample_dir \u003d \"os-shelve\""},{"line_number":72,"context_line":"    microversion \u003d \u00272.77\u0027"},{"line_number":73,"context_line":"    scenarios \u003d [(\u0027v2_77\u0027, {\u0027api_major_version\u0027: \u0027v2.1\u0027})]"}],"source_content_type":"text/x-python","patch_set":3,"id":"83b7b687_8cdf8046","line":70,"updated":"2022-06-27 13:00:15.000000000","message":"This should inherit from ShelveJsonTest to prove that old behavior is still working with 2.77","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":67,"context_line":"        self._test_server_action(uuid, \u0027os-unshelve\u0027, \u0027unshelve\u0027)"},{"line_number":68,"context_line":""},{"line_number":69,"context_line":""},{"line_number":70,"context_line":"class UnshelveJson277Test(test_servers.ServersSampleBase):"},{"line_number":71,"context_line":"    sample_dir \u003d \"os-shelve\""},{"line_number":72,"context_line":"    microversion \u003d \u00272.77\u0027"},{"line_number":73,"context_line":"    scenarios \u003d [(\u0027v2_77\u0027, {\u0027api_major_version\u0027: \u0027v2.1\u0027})]"}],"source_content_type":"text/x-python","patch_set":3,"id":"badcae57_036e6998","line":70,"in_reply_to":"83b7b687_8cdf8046","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":96,"context_line":"        self._test_server_action(uuid, \u0027os-unshelve-null\u0027, \u0027unshelve\u0027)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"class UnshelveJson291Test(test_servers.ServersSampleBase):"},{"line_number":100,"context_line":"    ADMIN_API \u003d True"},{"line_number":101,"context_line":"    sample_dir \u003d \"os-shelve\""},{"line_number":102,"context_line":"    microversion \u003d \u00272.91\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"cf070825_69fc1b46","line":99,"updated":"2022-06-27 13:00:15.000000000","message":"This should inherit from UnshelveJson277Test to\n1) avoid duplicating test cases where the behavior is not changed, like test_unshelve_no_az\n2) to prove that old behavior is kept working","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":96,"context_line":"        self._test_server_action(uuid, \u0027os-unshelve-null\u0027, \u0027unshelve\u0027)"},{"line_number":97,"context_line":""},{"line_number":98,"context_line":""},{"line_number":99,"context_line":"class UnshelveJson291Test(test_servers.ServersSampleBase):"},{"line_number":100,"context_line":"    ADMIN_API \u003d True"},{"line_number":101,"context_line":"    sample_dir \u003d \"os-shelve\""},{"line_number":102,"context_line":"    microversion \u003d \u00272.91\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"c025b746_833f0c22","line":99,"in_reply_to":"cf070825_69fc1b46","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":259,"context_line":"        )"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"class UnshelveJson291NonAdminTest(test_servers.ServersSampleBase):"},{"line_number":263,"context_line":"    # Use non admin api credentials."},{"line_number":264,"context_line":"    ADMIN_API \u003d False"},{"line_number":265,"context_line":"    sample_dir \u003d \"os-shelve\""}],"source_content_type":"text/x-python","patch_set":3,"id":"f38d97f4_25a82048","line":262,"updated":"2022-06-27 13:00:15.000000000","message":"This should inherit from UnshelveJson291Test to prove that most of the actions work without an ADMIN token.","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        )"},{"line_number":260,"context_line":""},{"line_number":261,"context_line":""},{"line_number":262,"context_line":"class UnshelveJson291NonAdminTest(test_servers.ServersSampleBase):"},{"line_number":263,"context_line":"    # Use non admin api credentials."},{"line_number":264,"context_line":"    ADMIN_API \u003d False"},{"line_number":265,"context_line":"    sample_dir \u003d \"os-shelve\""}],"source_content_type":"text/x-python","patch_set":3,"id":"89d4739b_a0008e38","line":262,"in_reply_to":"f38d97f4_25a82048","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","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":""},{"line_number":17,"context_line":"import nova.conf"},{"line_number":18,"context_line":"from nova.tests.functional.api_sample_tests import test_servers"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"30e61a80_5e18401a","side":"PARENT","line":16,"updated":"2022-07-20 10:51:32.000000000","message":"unnecessary removal","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":"187bd2b116bda67b4fd80f8c8164738cf89d38db","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":""},{"line_number":17,"context_line":"import nova.conf"},{"line_number":18,"context_line":"from nova.tests.functional.api_sample_tests import test_servers"},{"line_number":19,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"f4bb74bb_6654ef78","side":"PARENT","line":16,"in_reply_to":"30e61a80_5e18401a","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"31ab1f0923c1db196eb29b4a3f1f4c52eba86999"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":93,"context_line":"            \u0027unshelve\u0027,"},{"line_number":94,"context_line":"            subs\u003d{\"availability_zone\": \"us-west\"}"},{"line_number":95,"context_line":"        )"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"class UnshelveJson291Test(UnshelveJson277Test):"},{"line_number":99,"context_line":"    ADMIN_API \u003d True"}],"source_content_type":"text/x-python","patch_set":5,"id":"bb404123_a03657ed","line":96,"updated":"2022-07-20 10:51:32.000000000","message":"you changed the test methods but the coverage is the same.","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":93,"context_line":"            \u0027unshelve\u0027,"},{"line_number":94,"context_line":"            subs\u003d{\"availability_zone\": \"us-west\"}"},{"line_number":95,"context_line":"        )"},{"line_number":96,"context_line":""},{"line_number":97,"context_line":""},{"line_number":98,"context_line":"class UnshelveJson291Test(UnshelveJson277Test):"},{"line_number":99,"context_line":"    ADMIN_API \u003d True"}],"source_content_type":"text/x-python","patch_set":5,"id":"dab4cc1a_60dec818","line":96,"in_reply_to":"bb404123_a03657ed","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":232,"context_line":"            \u0027os-unshelve-unpin-az\u0027,"},{"line_number":233,"context_line":"            \u0027unshelve\u0027,"},{"line_number":234,"context_line":"            subs\u003d{\u0027host\u0027: \u0027host01\u0027},"},{"line_number":235,"context_line":"        )"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"class UnshelveJson291NonAdminTest(UnshelveJson291Test):"}],"source_content_type":"text/x-python","patch_set":5,"id":"cbbd7150_98d78d6b","line":235,"updated":"2022-07-20 10:51:32.000000000","message":"excellent coverage, thanks !","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":232,"context_line":"            \u0027os-unshelve-unpin-az\u0027,"},{"line_number":233,"context_line":"            \u0027unshelve\u0027,"},{"line_number":234,"context_line":"            subs\u003d{\u0027host\u0027: \u0027host01\u0027},"},{"line_number":235,"context_line":"        )"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"class UnshelveJson291NonAdminTest(UnshelveJson291Test):"}],"source_content_type":"text/x-python","patch_set":5,"id":"e11bd8dd_849eb5a9","line":235,"in_reply_to":"cbbd7150_98d78d6b","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":235,"context_line":"        )"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"class UnshelveJson291NonAdminTest(UnshelveJson291Test):"},{"line_number":239,"context_line":"    # Use non admin api credentials."},{"line_number":240,"context_line":"    ADMIN_API \u003d False"},{"line_number":241,"context_line":"    sample_dir \u003d \"os-shelve\""}],"source_content_type":"text/x-python","patch_set":5,"id":"77f82ef7_ce38502f","line":238,"range":{"start_line":238,"start_character":34,"end_line":238,"end_character":53},"updated":"2022-07-20 10:51:32.000000000","message":"in theory, you could inherit from UnshelveJson291Test but given you also need to modify the internal methods, I\u0027m OK.","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":235,"context_line":"        )"},{"line_number":236,"context_line":""},{"line_number":237,"context_line":""},{"line_number":238,"context_line":"class UnshelveJson291NonAdminTest(UnshelveJson291Test):"},{"line_number":239,"context_line":"    # Use non admin api credentials."},{"line_number":240,"context_line":"    ADMIN_API \u003d False"},{"line_number":241,"context_line":"    sample_dir \u003d \"os-shelve\""}],"source_content_type":"text/x-python","patch_set":5,"id":"a6b76652_a2cfe878","line":238,"range":{"start_line":238,"start_character":34,"end_line":238,"end_character":53},"in_reply_to":"77f82ef7_ce38502f","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[],"source_content_type":"","patch_set":5,"id":"f1e670fb_c536dd12","line":355,"updated":"2022-07-20 10:51:32.000000000","message":"Awesome work !","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":5,"id":"572aeebc_61615742","line":355,"in_reply_to":"f1e670fb_c536dd12","updated":"2022-07-21 17:49:50.000000000","message":"Thanks and also thanks to Gibi who helps me a lot to refine functional tests.","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"}],"nova/tests/functional/test_availability_zones.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":81,"context_line":"        self.assertEqual(expected_zone, server[\u0027OS-EXT-AZ:availability_zone\u0027])"},{"line_number":82,"context_line":"        return server"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _create_server_with_az(self, name, zone):"},{"line_number":85,"context_line":"        # Create a server, it doesn\u0027t matter which host it ends up in."},{"line_number":86,"context_line":"        server \u003d super(TestAvailabilityZoneScheduling, self)._create_server("},{"line_number":87,"context_line":"            flavor_id\u003dself.flavor1,"}],"source_content_type":"text/x-python","patch_set":3,"id":"9b77e15f_d05b13d5","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":30},"updated":"2022-06-27 13:00:15.000000000","message":"I would merge this with _create_server above by adding an zone parameter there and fixing up exiting tests to make the zone assertion explicit instead of implicit based on the host","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":81,"context_line":"        self.assertEqual(expected_zone, server[\u0027OS-EXT-AZ:availability_zone\u0027])"},{"line_number":82,"context_line":"        return server"},{"line_number":83,"context_line":""},{"line_number":84,"context_line":"    def _create_server_with_az(self, name, zone):"},{"line_number":85,"context_line":"        # Create a server, it doesn\u0027t matter which host it ends up in."},{"line_number":86,"context_line":"        server \u003d super(TestAvailabilityZoneScheduling, self)._create_server("},{"line_number":87,"context_line":"            flavor_id\u003dself.flavor1,"}],"source_content_type":"text/x-python","patch_set":3,"id":"7218611e_e31c8d34","line":84,"range":{"start_line":84,"start_character":8,"end_line":84,"end_character":30},"in_reply_to":"9b77e15f_d05b13d5","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":89,"context_line":"            az\u003dzone,"},{"line_number":90,"context_line":"            )"},{"line_number":91,"context_line":"        # Assert the server has the AZ set (not None or \u0027nova\u0027)."},{"line_number":92,"context_line":"        expected_zone \u003d zone"},{"line_number":93,"context_line":"        self.assertEqual(expected_zone, server[\u0027OS-EXT-AZ:availability_zone\u0027])"},{"line_number":94,"context_line":"        return server"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"0e979a8f_9683b439","line":92,"updated":"2022-06-27 13:00:15.000000000","message":"this aliasing feels like unnecessary noise","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":89,"context_line":"            az\u003dzone,"},{"line_number":90,"context_line":"            )"},{"line_number":91,"context_line":"        # Assert the server has the AZ set (not None or \u0027nova\u0027)."},{"line_number":92,"context_line":"        expected_zone \u003d zone"},{"line_number":93,"context_line":"        self.assertEqual(expected_zone, server[\u0027OS-EXT-AZ:availability_zone\u0027])"},{"line_number":94,"context_line":"        return server"},{"line_number":95,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"93ce0992_5aad09f0","line":92,"in_reply_to":"0e979a8f_9683b439","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":90,"context_line":"            )"},{"line_number":91,"context_line":"        # Assert the server has the AZ set (not None or \u0027nova\u0027)."},{"line_number":92,"context_line":"        expected_zone \u003d zone"},{"line_number":93,"context_line":"        self.assertEqual(expected_zone, server[\u0027OS-EXT-AZ:availability_zone\u0027])"},{"line_number":94,"context_line":"        return server"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def _assert_instance_az(self, server, expected_zone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"53a6ec6a_1ca4cbb8","line":93,"updated":"2022-06-27 13:00:15.000000000","message":"this is already covered by _assert_instance_az() so would use that instead","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":90,"context_line":"            )"},{"line_number":91,"context_line":"        # Assert the server has the AZ set (not None or \u0027nova\u0027)."},{"line_number":92,"context_line":"        expected_zone \u003d zone"},{"line_number":93,"context_line":"        self.assertEqual(expected_zone, server[\u0027OS-EXT-AZ:availability_zone\u0027])"},{"line_number":94,"context_line":"        return server"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"    def _assert_instance_az(self, server, expected_zone):"}],"source_content_type":"text/x-python","patch_set":3,"id":"23a8f471_a2f93c63","line":93,"in_reply_to":"53a6ec6a_1ca4cbb8","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":103,"context_line":"            instance \u003d objects.Instance.get_by_uuid(cctxt, server[\u0027id\u0027])"},{"line_number":104,"context_line":"            self.assertEqual(expected_zone, instance.availability_zone)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _shelve_offload_server(self, server):"},{"line_number":107,"context_line":"        self.flags(shelved_offload_time\u003d-1)"},{"line_number":108,"context_line":"        req \u003d {"},{"line_number":109,"context_line":"            \u0027shelve\u0027: {}"}],"source_content_type":"text/x-python","patch_set":3,"id":"8cd38769_5649ca1b","line":106,"updated":"2022-06-27 13:00:15.000000000","message":"This can be done by two existing calls:\n1) nova.tests.functional.integrated_helpers.InstanceHelperMixin._shelve_server\n2) nova.tests.functional.integrated_helpers.InstanceHelperMixin._shelve_offload_server\n\nso I suggest to just call that two instead of re-implementing them here.","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":103,"context_line":"            instance \u003d objects.Instance.get_by_uuid(cctxt, server[\u0027id\u0027])"},{"line_number":104,"context_line":"            self.assertEqual(expected_zone, instance.availability_zone)"},{"line_number":105,"context_line":""},{"line_number":106,"context_line":"    def _shelve_offload_server(self, server):"},{"line_number":107,"context_line":"        self.flags(shelved_offload_time\u003d-1)"},{"line_number":108,"context_line":"        req \u003d {"},{"line_number":109,"context_line":"            \u0027shelve\u0027: {}"}],"source_content_type":"text/x-python","patch_set":3,"id":"3d560ffc_58bfe029","line":106,"in_reply_to":"8cd38769_5649ca1b","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":180,"context_line":"        # Ensure asking a new request_spec will have az set."},{"line_number":181,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":182,"context_line":"            ctxt, server[\u0027id\u0027])"},{"line_number":183,"context_line":"        self.assertIsNone(request_spec.availability_zone)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def test_create_server_to_zone(self):"},{"line_number":186,"context_line":"        \"\"\"Create a server with an AZ constraint and make sure asking a new"}],"source_content_type":"text/x-python","patch_set":3,"id":"37dd1ecf_fd79cf38","line":183,"updated":"2022-06-27 13:00:15.000000000","message":"This feels like not a functional test as it only assert DB state not external behavior","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":true,"context_lines":[{"line_number":180,"context_line":"        # Ensure asking a new request_spec will have az set."},{"line_number":181,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":182,"context_line":"            ctxt, server[\u0027id\u0027])"},{"line_number":183,"context_line":"        self.assertIsNone(request_spec.availability_zone)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def test_create_server_to_zone(self):"},{"line_number":186,"context_line":"        \"\"\"Create a server with an AZ constraint and make sure asking a new"}],"source_content_type":"text/x-python","patch_set":3,"id":"7832ea98_26077c94","line":183,"in_reply_to":"37dd1ecf_fd79cf38","updated":"2022-06-30 14:09:17.000000000","message":"If you don\u0027t mind, I would like to keep these tests. I set them here as a basic test to ensure the helper function is working well.","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":180,"context_line":"        # Ensure asking a new request_spec will have az set."},{"line_number":181,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":182,"context_line":"            ctxt, server[\u0027id\u0027])"},{"line_number":183,"context_line":"        self.assertIsNone(request_spec.availability_zone)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def test_create_server_to_zone(self):"},{"line_number":186,"context_line":"        \"\"\"Create a server with an AZ constraint and make sure asking a new"}],"source_content_type":"text/x-python","patch_set":3,"id":"e7d2601b_53f240fe","line":183,"in_reply_to":"7832ea98_26077c94","updated":"2022-07-20 10:51:32.000000000","message":"Yup, I guess we need to keep those.","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":180,"context_line":"        # Ensure asking a new request_spec will have az set."},{"line_number":181,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":182,"context_line":"            ctxt, server[\u0027id\u0027])"},{"line_number":183,"context_line":"        self.assertIsNone(request_spec.availability_zone)"},{"line_number":184,"context_line":""},{"line_number":185,"context_line":"    def test_create_server_to_zone(self):"},{"line_number":186,"context_line":"        \"\"\"Create a server with an AZ constraint and make sure asking a new"}],"source_content_type":"text/x-python","patch_set":3,"id":"1077288d_01f5dee6","line":183,"in_reply_to":"e7d2601b_53f240fe","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":191,"context_line":"        server \u003d self._create_server_with_az(\u0027server01\u0027, \u0027zone2\u0027)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        server \u003d self.api.get_server(server[\u0027id\u0027])"},{"line_number":194,"context_line":"        self._assert_instance_az(server, \u0027zone2\u0027)"},{"line_number":195,"context_line":"        # Ensure asking a new request_spec will have az set."},{"line_number":196,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":197,"context_line":"            ctxt, server[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"49af22dc_a8cd6217","line":194,"updated":"2022-06-27 13:00:15.000000000","message":"This assert covers the assert that is implicit in _create_server_with_az. I would keep _assert_instance_az here and remove the implicit assert from _create_server_with_az","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":191,"context_line":"        server \u003d self._create_server_with_az(\u0027server01\u0027, \u0027zone2\u0027)"},{"line_number":192,"context_line":""},{"line_number":193,"context_line":"        server \u003d self.api.get_server(server[\u0027id\u0027])"},{"line_number":194,"context_line":"        self._assert_instance_az(server, \u0027zone2\u0027)"},{"line_number":195,"context_line":"        # Ensure asking a new request_spec will have az set."},{"line_number":196,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":197,"context_line":"            ctxt, server[\u0027id\u0027])"}],"source_content_type":"text/x-python","patch_set":3,"id":"f35de3cf_779123cf","line":194,"in_reply_to":"49af22dc_a8cd6217","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":193,"context_line":"        server \u003d self.api.get_server(server[\u0027id\u0027])"},{"line_number":194,"context_line":"        self._assert_instance_az(server, \u0027zone2\u0027)"},{"line_number":195,"context_line":"        # Ensure asking a new request_spec will have az set."},{"line_number":196,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":197,"context_line":"            ctxt, server[\u0027id\u0027])"},{"line_number":198,"context_line":"        self.assertEqual(request_spec.availability_zone, \u0027zone2\u0027)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def test_cold_migrate_cross_az(self):"},{"line_number":201,"context_line":"        \"\"\"Test a cold migration cross AZ."}],"source_content_type":"text/x-python","patch_set":3,"id":"5889622a_258d8b40","line":198,"range":{"start_line":196,"start_character":0,"end_line":198,"end_character":65},"updated":"2022-06-27 13:00:15.000000000","message":"you can pull this out to an assert function, like _assert_request_spec_az(sever, zone) as you do this many times.","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        server \u003d self.api.get_server(server[\u0027id\u0027])"},{"line_number":194,"context_line":"        self._assert_instance_az(server, \u0027zone2\u0027)"},{"line_number":195,"context_line":"        # Ensure asking a new request_spec will have az set."},{"line_number":196,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":197,"context_line":"            ctxt, server[\u0027id\u0027])"},{"line_number":198,"context_line":"        self.assertEqual(request_spec.availability_zone, \u0027zone2\u0027)"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"    def test_cold_migrate_cross_az(self):"},{"line_number":201,"context_line":"        \"\"\"Test a cold migration cross AZ."}],"source_content_type":"text/x-python","patch_set":3,"id":"f8506e4e_98d164be","line":198,"range":{"start_line":196,"start_character":0,"end_line":198,"end_character":65},"in_reply_to":"5889622a_258d8b40","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        self._shelve_offload_server(server)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        req \u003d {"},{"line_number":290,"context_line":"            \u0027unshelve\u0027: {\u0027availability_zone\u0027: None}"},{"line_number":291,"context_line":"        }"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], req)"},{"line_number":294,"context_line":"        server \u003d self._wait_for_server_parameter("},{"line_number":295,"context_line":"            server,"},{"line_number":296,"context_line":"            {\u0027status\u0027: \u0027ACTIVE\u0027, },"},{"line_number":297,"context_line":"        )"},{"line_number":298,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":299,"context_line":"            ctxt, server[\u0027id\u0027])"},{"line_number":300,"context_line":"        self.assertIsNone(request_spec.availability_zone)"}],"source_content_type":"text/x-python","patch_set":3,"id":"7bbb3e7c_3281c437","line":297,"range":{"start_line":289,"start_character":0,"end_line":297,"end_character":9},"updated":"2022-06-27 13:00:15.000000000","message":"you can use the _unshelve_server() utility for this","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":286,"context_line":""},{"line_number":287,"context_line":"        self._shelve_offload_server(server)"},{"line_number":288,"context_line":""},{"line_number":289,"context_line":"        req \u003d {"},{"line_number":290,"context_line":"            \u0027unshelve\u0027: {\u0027availability_zone\u0027: None}"},{"line_number":291,"context_line":"        }"},{"line_number":292,"context_line":""},{"line_number":293,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], req)"},{"line_number":294,"context_line":"        server \u003d self._wait_for_server_parameter("},{"line_number":295,"context_line":"            server,"},{"line_number":296,"context_line":"            {\u0027status\u0027: \u0027ACTIVE\u0027, },"},{"line_number":297,"context_line":"        )"},{"line_number":298,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":299,"context_line":"            ctxt, server[\u0027id\u0027])"},{"line_number":300,"context_line":"        self.assertIsNone(request_spec.availability_zone)"}],"source_content_type":"text/x-python","patch_set":3,"id":"b1aa0b67_76a00ecb","line":297,"range":{"start_line":289,"start_character":0,"end_line":297,"end_character":9},"in_reply_to":"7bbb3e7c_3281c437","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        self._shelve_offload_server(server)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        req \u003d {"},{"line_number":317,"context_line":"            \u0027unshelve\u0027: {\u0027host\u0027: dest_hostname}"},{"line_number":318,"context_line":"        }"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], req)"},{"line_number":321,"context_line":"        self._wait_for_server_parameter("},{"line_number":322,"context_line":"            server,"},{"line_number":323,"context_line":"            {\u0027OS-EXT-SRV-ATTR:host\u0027: dest_hostname,"},{"line_number":324,"context_line":"             \u0027status\u0027: \u0027ACTIVE\u0027,"},{"line_number":325,"context_line":"             \u0027OS-EXT-AZ:availability_zone\u0027: dest_az},"},{"line_number":326,"context_line":"        )"},{"line_number":327,"context_line":"        server \u003d self.api.get_server(server[\u0027id\u0027])"},{"line_number":328,"context_line":"        expected_zone \u003d \u0027zone2\u0027 if original_az \u003d\u003d \u0027zone1\u0027 else \u0027zone1\u0027"},{"line_number":329,"context_line":"        self._assert_instance_az(server, expected_zone)"}],"source_content_type":"text/x-python","patch_set":3,"id":"9dc1f0ae_ec11e759","line":326,"range":{"start_line":316,"start_character":0,"end_line":326,"end_character":9},"updated":"2022-06-27 13:00:15.000000000","message":"I would you _unshelve_server() utility here with an extra asserts for the host and az:\n\n  server \u003d self._unshelve_server(server)\n  self.assertEqual(dest_hostname, server[\u0027OS-EXT-AZ:dest_hostname\u0027])  \n  self.assertEqual(dest_az, server[\u0027OS-EXT-AZ:availability_zone\u0027])\n  \nYou can do this in the below tests too. This way the non informative repetition part (i.e. req, post_server_action, wait) is reduced and the reader can focus on the interesting thing i.e. that the server is unshelved and ended up on the expected host and az)\n\nIf you feel that this is still too much repetition the you can add an _assert_instance_az_and_host or extend the existing _assert_instance_az utility with optional host checking.","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":313,"context_line":""},{"line_number":314,"context_line":"        self._shelve_offload_server(server)"},{"line_number":315,"context_line":""},{"line_number":316,"context_line":"        req \u003d {"},{"line_number":317,"context_line":"            \u0027unshelve\u0027: {\u0027host\u0027: dest_hostname}"},{"line_number":318,"context_line":"        }"},{"line_number":319,"context_line":""},{"line_number":320,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], req)"},{"line_number":321,"context_line":"        self._wait_for_server_parameter("},{"line_number":322,"context_line":"            server,"},{"line_number":323,"context_line":"            {\u0027OS-EXT-SRV-ATTR:host\u0027: dest_hostname,"},{"line_number":324,"context_line":"             \u0027status\u0027: \u0027ACTIVE\u0027,"},{"line_number":325,"context_line":"             \u0027OS-EXT-AZ:availability_zone\u0027: dest_az},"},{"line_number":326,"context_line":"        )"},{"line_number":327,"context_line":"        server \u003d self.api.get_server(server[\u0027id\u0027])"},{"line_number":328,"context_line":"        expected_zone \u003d \u0027zone2\u0027 if original_az \u003d\u003d \u0027zone1\u0027 else \u0027zone1\u0027"},{"line_number":329,"context_line":"        self._assert_instance_az(server, expected_zone)"}],"source_content_type":"text/x-python","patch_set":3,"id":"4eefd309_8ae5eaab","line":326,"range":{"start_line":316,"start_character":0,"end_line":326,"end_character":9},"in_reply_to":"9dc1f0ae_ec11e759","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        self._shelve_offload_server(server)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        req \u003d {"},{"line_number":346,"context_line":"            \u0027unshelve\u0027: {\u0027host\u0027: dest_hostname,"},{"line_number":347,"context_line":"                         \u0027availability_zone\u0027: None,"},{"line_number":348,"context_line":"                        }"},{"line_number":349,"context_line":"        }"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], req)"},{"line_number":352,"context_line":"        self._wait_for_server_parameter("}],"source_content_type":"text/x-python","patch_set":3,"id":"104479ab_236649b6","line":349,"range":{"start_line":345,"start_character":0,"end_line":349,"end_character":9},"updated":"2022-06-27 13:00:15.000000000","message":"nit: I woul format this like:\n        req \u003d {\n            \"unshelve\": {\n                \"host\": dest_hostname,\n                \"availability_zone\": None,\n            }\n        }","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":342,"context_line":""},{"line_number":343,"context_line":"        self._shelve_offload_server(server)"},{"line_number":344,"context_line":""},{"line_number":345,"context_line":"        req \u003d {"},{"line_number":346,"context_line":"            \u0027unshelve\u0027: {\u0027host\u0027: dest_hostname,"},{"line_number":347,"context_line":"                         \u0027availability_zone\u0027: None,"},{"line_number":348,"context_line":"                        }"},{"line_number":349,"context_line":"        }"},{"line_number":350,"context_line":""},{"line_number":351,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], req)"},{"line_number":352,"context_line":"        self._wait_for_server_parameter("}],"source_content_type":"text/x-python","patch_set":3,"id":"58e76a19_8cecb942","line":349,"range":{"start_line":345,"start_character":0,"end_line":349,"end_character":9},"in_reply_to":"104479ab_236649b6","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":411,"context_line":""},{"line_number":412,"context_line":"        self._shelve_offload_server(server)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        req \u003d {"},{"line_number":415,"context_line":"            \u0027unshelve\u0027: {\u0027host\u0027: dest_hostname,"},{"line_number":416,"context_line":"                         \u0027availability_zone\u0027: dest_az,"},{"line_number":417,"context_line":"                        }"},{"line_number":418,"context_line":"        }"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], req)"},{"line_number":421,"context_line":"        server \u003d self._wait_for_server_parameter("}],"source_content_type":"text/x-python","patch_set":3,"id":"67ec555f_9d310763","line":418,"range":{"start_line":414,"start_character":0,"end_line":418,"end_character":9},"updated":"2022-06-27 13:00:15.000000000","message":"nit: formatting here and below","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":411,"context_line":""},{"line_number":412,"context_line":"        self._shelve_offload_server(server)"},{"line_number":413,"context_line":""},{"line_number":414,"context_line":"        req \u003d {"},{"line_number":415,"context_line":"            \u0027unshelve\u0027: {\u0027host\u0027: dest_hostname,"},{"line_number":416,"context_line":"                         \u0027availability_zone\u0027: dest_az,"},{"line_number":417,"context_line":"                        }"},{"line_number":418,"context_line":"        }"},{"line_number":419,"context_line":""},{"line_number":420,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], req)"},{"line_number":421,"context_line":"        server \u003d self._wait_for_server_parameter("}],"source_content_type":"text/x-python","patch_set":3,"id":"4c74267b_08b7f890","line":418,"range":{"start_line":414,"start_character":0,"end_line":418,"end_character":9},"in_reply_to":"67ec555f_9d310763","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":481,"context_line":"        )"},{"line_number":482,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":483,"context_line":"            ctxt, server[\u0027id\u0027])"},{"line_number":484,"context_line":"        self.assertEqual(request_spec.availability_zone, \u0027zone2\u0027)"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"# +----------+---------------------------+-------+----------------------------+"},{"line_number":487,"context_line":"# |  AZ1     | AZ\u003dnull                   | No    | Free scheduling,           |"}],"source_content_type":"text/x-python","patch_set":3,"id":"c2831187_e05d4d84","line":484,"updated":"2022-06-27 13:00:15.000000000","message":"While this test is correctly asserting the expected behavior this test can pass for two different reasons:\na) the code is correct and nova enforces zone2\nb) nova does not enforce any zone (bug) but the scheduler selected host2 (zone2) by chance\n\nSo I would extend this testcase (and potentially other tests in the same set having the same problem) to after the happy path shelveoffload the server again, disable the host2 and try to unshelve. If the unshelve fails with no valid host then you will know that nova tried to enforce the zone2.","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":481,"context_line":"        )"},{"line_number":482,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":483,"context_line":"            ctxt, server[\u0027id\u0027])"},{"line_number":484,"context_line":"        self.assertEqual(request_spec.availability_zone, \u0027zone2\u0027)"},{"line_number":485,"context_line":""},{"line_number":486,"context_line":"# +----------+---------------------------+-------+----------------------------+"},{"line_number":487,"context_line":"# |  AZ1     | AZ\u003dnull                   | No    | Free scheduling,           |"}],"source_content_type":"text/x-python","patch_set":3,"id":"4c322537_ace7855f","line":484,"in_reply_to":"c2831187_e05d4d84","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":501,"context_line":"        server \u003d self._wait_for_server_parameter("},{"line_number":502,"context_line":"            server,"},{"line_number":503,"context_line":"            {\u0027status\u0027: \u0027ACTIVE\u0027},"},{"line_number":504,"context_line":"        )"},{"line_number":505,"context_line":"        server \u003d self.api.get_server(server[\u0027id\u0027])"},{"line_number":506,"context_line":"        # Ensure asking a new request_spec will have az not set."},{"line_number":507,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("}],"source_content_type":"text/x-python","patch_set":3,"id":"14db9141_2726b3a1","line":504,"updated":"2022-06-27 13:00:15.000000000","message":"similarly to the above point here if the instance ends up in zone2 after the unshelve then you don\u0027t know if \na) it is there because nova still enforcing zone2 (a bug)\nb) it is there as nova allows any zones and the scheduler selected host2 by chance (but could select host1 too)","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":501,"context_line":"        server \u003d self._wait_for_server_parameter("},{"line_number":502,"context_line":"            server,"},{"line_number":503,"context_line":"            {\u0027status\u0027: \u0027ACTIVE\u0027},"},{"line_number":504,"context_line":"        )"},{"line_number":505,"context_line":"        server \u003d self.api.get_server(server[\u0027id\u0027])"},{"line_number":506,"context_line":"        # Ensure asking a new request_spec will have az not set."},{"line_number":507,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("}],"source_content_type":"text/x-python","patch_set":3,"id":"09e6a931_19979dac","line":504,"in_reply_to":"14db9141_2726b3a1","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"138b9db193f20917140ca00d8b5b486d4d62bc82","unresolved":true,"context_lines":[{"line_number":102,"context_line":"    def _assert_request_spec_az(self, ctxt, server, az):"},{"line_number":103,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":104,"context_line":"            ctxt, server[\u0027id\u0027])"},{"line_number":105,"context_line":"        if az:"},{"line_number":106,"context_line":"            self.assertEqual(request_spec.availability_zone, az)"},{"line_number":107,"context_line":"        else:"},{"line_number":108,"context_line":"            self.assertIsNone(request_spec.availability_zone)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def _assert_server_with_az_unshelved_to_specified_az(self, server, az):"},{"line_number":111,"context_line":"        \"\"\"Ensure a server with an az constraints is unshelved in the"}],"source_content_type":"text/x-python","patch_set":4,"id":"0147d467_5c96e3b3","line":108,"range":{"start_line":105,"start_character":0,"end_line":108,"end_character":61},"updated":"2022-07-11 08:18:45.000000000","message":"hm, could we simply say\n\n  self.assertEqual(request_spec.availability_zone, az)\n\nin both cases?","commit_id":"d6767307915df99006cdfec997a0b42e2303b368"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"4d0e88c963b5ac9f55992dfbd674c8b597c0bb25","unresolved":false,"context_lines":[{"line_number":102,"context_line":"    def _assert_request_spec_az(self, ctxt, server, az):"},{"line_number":103,"context_line":"        request_spec \u003d objects.RequestSpec.get_by_instance_uuid("},{"line_number":104,"context_line":"            ctxt, server[\u0027id\u0027])"},{"line_number":105,"context_line":"        if az:"},{"line_number":106,"context_line":"            self.assertEqual(request_spec.availability_zone, az)"},{"line_number":107,"context_line":"        else:"},{"line_number":108,"context_line":"            self.assertIsNone(request_spec.availability_zone)"},{"line_number":109,"context_line":""},{"line_number":110,"context_line":"    def _assert_server_with_az_unshelved_to_specified_az(self, server, az):"},{"line_number":111,"context_line":"        \"\"\"Ensure a server with an az constraints is unshelved in the"}],"source_content_type":"text/x-python","patch_set":4,"id":"08aae62e_11d7d291","line":108,"range":{"start_line":105,"start_character":0,"end_line":108,"end_character":61},"in_reply_to":"0147d467_5c96e3b3","updated":"2022-07-19 13:27:57.000000000","message":"Done","commit_id":"d6767307915df99006cdfec997a0b42e2303b368"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"138b9db193f20917140ca00d8b5b486d4d62bc82","unresolved":true,"context_lines":[{"line_number":113,"context_line":"        \"\"\""},{"line_number":114,"context_line":"        host_to_disable \u003d \u0027host1\u0027 if az \u003d\u003d \u0027zone1\u0027 else \u0027host2\u0027"},{"line_number":115,"context_line":"        self._shelve_server(server, expected_state\u003d\u0027SHELVED_OFFLOADED\u0027)"},{"line_number":116,"context_line":"        self.controller.update("},{"line_number":117,"context_line":"            self.req, host_to_disable, body\u003d{\u0027status\u0027: \u0027disable\u0027})"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        req \u003d {"},{"line_number":120,"context_line":"            \u0027unshelve\u0027: None"}],"source_content_type":"text/x-python","patch_set":4,"id":"23077bfb_71230bf0","line":117,"range":{"start_line":116,"start_character":1,"end_line":117,"end_character":66},"updated":"2022-07-11 08:18:45.000000000","message":"in functional test we should use the api clients provided instead of instantiating the REST controllers. So this would be:\n        compute_service_id \u003d self.admin_api.get_services(\n            host\u003dself.compute.host, binary\u003d\u0027nova-compute\u0027)[0][\u0027id\u0027]\n        self.admin_api.put_service(compute_service_id, {\u0027status\u0027: \u0027disabled\u0027})","commit_id":"d6767307915df99006cdfec997a0b42e2303b368"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"4d0e88c963b5ac9f55992dfbd674c8b597c0bb25","unresolved":false,"context_lines":[{"line_number":113,"context_line":"        \"\"\""},{"line_number":114,"context_line":"        host_to_disable \u003d \u0027host1\u0027 if az \u003d\u003d \u0027zone1\u0027 else \u0027host2\u0027"},{"line_number":115,"context_line":"        self._shelve_server(server, expected_state\u003d\u0027SHELVED_OFFLOADED\u0027)"},{"line_number":116,"context_line":"        self.controller.update("},{"line_number":117,"context_line":"            self.req, host_to_disable, body\u003d{\u0027status\u0027: \u0027disable\u0027})"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        req \u003d {"},{"line_number":120,"context_line":"            \u0027unshelve\u0027: None"}],"source_content_type":"text/x-python","patch_set":4,"id":"8e66c910_16cf81cb","line":117,"range":{"start_line":116,"start_character":1,"end_line":117,"end_character":66},"in_reply_to":"23077bfb_71230bf0","updated":"2022-07-19 13:27:57.000000000","message":"Done","commit_id":"d6767307915df99006cdfec997a0b42e2303b368"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"138b9db193f20917140ca00d8b5b486d4d62bc82","unresolved":true,"context_lines":[{"line_number":116,"context_line":"        self.controller.update("},{"line_number":117,"context_line":"            self.req, host_to_disable, body\u003d{\u0027status\u0027: \u0027disable\u0027})"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        req \u003d {"},{"line_number":120,"context_line":"            \u0027unshelve\u0027: None"},{"line_number":121,"context_line":"        }"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], req)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        server \u003d self._wait_for_action_fail_completion("},{"line_number":126,"context_line":"            server, instance_actions.UNSHELVE, \u0027schedule_instances\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"b9c7480c_14092e33","line":123,"range":{"start_line":119,"start_character":0,"end_line":123,"end_character":54},"updated":"2022-07-11 08:18:45.000000000","message":"you can simply call \n\n  server \u003d self._unshelve_server(server, \u0027ERROR\u0027) \n\ninstead","commit_id":"d6767307915df99006cdfec997a0b42e2303b368"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":116,"context_line":"        self.controller.update("},{"line_number":117,"context_line":"            self.req, host_to_disable, body\u003d{\u0027status\u0027: \u0027disable\u0027})"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        req \u003d {"},{"line_number":120,"context_line":"            \u0027unshelve\u0027: None"},{"line_number":121,"context_line":"        }"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], req)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        server \u003d self._wait_for_action_fail_completion("},{"line_number":126,"context_line":"            server, instance_actions.UNSHELVE, \u0027schedule_instances\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"7a605e6d_d4a12892","line":123,"range":{"start_line":119,"start_character":0,"end_line":123,"end_character":54},"in_reply_to":"6fa6fd7a_a8ca719b","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"d6767307915df99006cdfec997a0b42e2303b368"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"4d0e88c963b5ac9f55992dfbd674c8b597c0bb25","unresolved":true,"context_lines":[{"line_number":116,"context_line":"        self.controller.update("},{"line_number":117,"context_line":"            self.req, host_to_disable, body\u003d{\u0027status\u0027: \u0027disable\u0027})"},{"line_number":118,"context_line":""},{"line_number":119,"context_line":"        req \u003d {"},{"line_number":120,"context_line":"            \u0027unshelve\u0027: None"},{"line_number":121,"context_line":"        }"},{"line_number":122,"context_line":""},{"line_number":123,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], req)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        server \u003d self._wait_for_action_fail_completion("},{"line_number":126,"context_line":"            server, instance_actions.UNSHELVE, \u0027schedule_instances\u0027)"}],"source_content_type":"text/x-python","patch_set":4,"id":"6fa6fd7a_a8ca719b","line":123,"range":{"start_line":119,"start_character":0,"end_line":123,"end_character":54},"in_reply_to":"b9c7480c_14092e33","updated":"2022-07-19 13:27:57.000000000","message":"No that\u0027s not working.\nAssertionError: Wait for state change failed\n\nSomething is not ok for _wait_for_state_change inside _unshelve_server\n\nSo I left this untouched.","commit_id":"d6767307915df99006cdfec997a0b42e2303b368"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"138b9db193f20917140ca00d8b5b486d4d62bc82","unresolved":false,"context_lines":[{"line_number":123,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], req)"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"        server \u003d self._wait_for_action_fail_completion("},{"line_number":126,"context_line":"            server, instance_actions.UNSHELVE, \u0027schedule_instances\u0027)"},{"line_number":127,"context_line":"        self.assertIn(\u0027Error\u0027, server[\u0027result\u0027])"},{"line_number":128,"context_line":"        self.assertIn(\u0027No valid host\u0027, server[\u0027details\u0027])"},{"line_number":129,"context_line":""}],"source_content_type":"text/x-python","patch_set":4,"id":"b626d77f_b35eca5a","line":126,"updated":"2022-07-11 08:18:45.000000000","message":"+1","commit_id":"d6767307915df99006cdfec997a0b42e2303b368"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"138b9db193f20917140ca00d8b5b486d4d62bc82","unresolved":false,"context_lines":[{"line_number":130,"context_line":"    def _shelve_unshelve_server(self, ctxt, server, req):"},{"line_number":131,"context_line":"        self._shelve_server(server, expected_state\u003d\u0027SHELVED_OFFLOADED\u0027)"},{"line_number":132,"context_line":""},{"line_number":133,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], req)"},{"line_number":134,"context_line":"        server \u003d self._wait_for_server_parameter("},{"line_number":135,"context_line":"            server,"},{"line_number":136,"context_line":"            {\u0027status\u0027: \u0027ACTIVE\u0027, },"},{"line_number":137,"context_line":"        )"},{"line_number":138,"context_line":""},{"line_number":139,"context_line":"    def test_live_migrate_implicit_az(self):"},{"line_number":140,"context_line":"        \"\"\"Tests live migration of an instance with an implicit AZ."}],"source_content_type":"text/x-python","patch_set":4,"id":"4939a506_09312f9c","line":137,"range":{"start_line":133,"start_character":1,"end_line":137,"end_character":9},"updated":"2022-07-11 08:18:45.000000000","message":"OK, this make sense as you want to provide an explicit request from the tests.","commit_id":"d6767307915df99006cdfec997a0b42e2303b368"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"138b9db193f20917140ca00d8b5b486d4d62bc82","unresolved":true,"context_lines":[{"line_number":215,"context_line":"        server \u003d self.api.get_server(server[\u0027id\u0027])"},{"line_number":216,"context_line":"        expected_host \u003d \u0027host2\u0027 if original_host \u003d\u003d \u0027host1\u0027 else \u0027host1\u0027"},{"line_number":217,"context_line":"        expected_zone \u003d \u0027zone2\u0027 if original_az \u003d\u003d \u0027zone1\u0027 else \u0027zone1\u0027"},{"line_number":218,"context_line":"        self.assertEqual(server[\u0027OS-EXT-SRV-ATTR:host\u0027], expected_host)"},{"line_number":219,"context_line":"        self._assert_instance_az_and_host(server, expected_zone)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"# Next tests attempt to check the following behavior"},{"line_number":222,"context_line":"# +----------+---------------------------+-------+----------------------------+"}],"source_content_type":"text/x-python","patch_set":4,"id":"76d9898d_8b5ac978","line":219,"range":{"start_line":218,"start_character":8,"end_line":219,"end_character":64},"updated":"2022-07-11 08:18:45.000000000","message":"this can be done in a single call now:\n\n        self._assert_instance_az_and_host(server, expected_zone, expected_host)","commit_id":"d6767307915df99006cdfec997a0b42e2303b368"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"4d0e88c963b5ac9f55992dfbd674c8b597c0bb25","unresolved":false,"context_lines":[{"line_number":215,"context_line":"        server \u003d self.api.get_server(server[\u0027id\u0027])"},{"line_number":216,"context_line":"        expected_host \u003d \u0027host2\u0027 if original_host \u003d\u003d \u0027host1\u0027 else \u0027host1\u0027"},{"line_number":217,"context_line":"        expected_zone \u003d \u0027zone2\u0027 if original_az \u003d\u003d \u0027zone1\u0027 else \u0027zone1\u0027"},{"line_number":218,"context_line":"        self.assertEqual(server[\u0027OS-EXT-SRV-ATTR:host\u0027], expected_host)"},{"line_number":219,"context_line":"        self._assert_instance_az_and_host(server, expected_zone)"},{"line_number":220,"context_line":""},{"line_number":221,"context_line":"# Next tests attempt to check the following behavior"},{"line_number":222,"context_line":"# +----------+---------------------------+-------+----------------------------+"}],"source_content_type":"text/x-python","patch_set":4,"id":"dc631e29_3f5ce587","line":219,"range":{"start_line":218,"start_character":8,"end_line":219,"end_character":64},"in_reply_to":"76d9898d_8b5ac978","updated":"2022-07-19 13:27:57.000000000","message":"Done","commit_id":"d6767307915df99006cdfec997a0b42e2303b368"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"138b9db193f20917140ca00d8b5b486d4d62bc82","unresolved":true,"context_lines":[{"line_number":345,"context_line":"            \u0027unshelve\u0027: {\u0027availability_zone\u0027: dest_az}"},{"line_number":346,"context_line":"        }"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        self._shelve_unshelve_server(ctxt, server, req)"},{"line_number":349,"context_line":"        server \u003d self.api.get_server(server[\u0027id\u0027])"},{"line_number":350,"context_line":"        expected_zone \u003d \u0027zone2\u0027 if original_az \u003d\u003d \u0027zone1\u0027 else \u0027zone1\u0027"},{"line_number":351,"context_line":"        self._assert_instance_az_and_host(server, expected_zone, dest_hostname)"},{"line_number":352,"context_line":"        self._assert_request_spec_az(ctxt, server, dest_az)"}],"source_content_type":"text/x-python","patch_set":4,"id":"95b0fe58_e4cf2d98","line":349,"range":{"start_line":348,"start_character":8,"end_line":349,"end_character":50},"updated":"2022-07-11 08:18:45.000000000","message":"you can return the server from  self._shelve_unshelve_server call to avoid the extra self.api.get_server call here and below","commit_id":"d6767307915df99006cdfec997a0b42e2303b368"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"4d0e88c963b5ac9f55992dfbd674c8b597c0bb25","unresolved":false,"context_lines":[{"line_number":345,"context_line":"            \u0027unshelve\u0027: {\u0027availability_zone\u0027: dest_az}"},{"line_number":346,"context_line":"        }"},{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        self._shelve_unshelve_server(ctxt, server, req)"},{"line_number":349,"context_line":"        server \u003d self.api.get_server(server[\u0027id\u0027])"},{"line_number":350,"context_line":"        expected_zone \u003d \u0027zone2\u0027 if original_az \u003d\u003d \u0027zone1\u0027 else \u0027zone1\u0027"},{"line_number":351,"context_line":"        self._assert_instance_az_and_host(server, expected_zone, dest_hostname)"},{"line_number":352,"context_line":"        self._assert_request_spec_az(ctxt, server, dest_az)"}],"source_content_type":"text/x-python","patch_set":4,"id":"048b1177_5849ffa7","line":349,"range":{"start_line":348,"start_character":8,"end_line":349,"end_character":50},"in_reply_to":"95b0fe58_e4cf2d98","updated":"2022-07-19 13:27:57.000000000","message":"Done","commit_id":"d6767307915df99006cdfec997a0b42e2303b368"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"138b9db193f20917140ca00d8b5b486d4d62bc82","unresolved":true,"context_lines":[{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        self._shelve_unshelve_server(ctxt, server, req)"},{"line_number":349,"context_line":"        server \u003d self.api.get_server(server[\u0027id\u0027])"},{"line_number":350,"context_line":"        expected_zone \u003d \u0027zone2\u0027 if original_az \u003d\u003d \u0027zone1\u0027 else \u0027zone1\u0027"},{"line_number":351,"context_line":"        self._assert_instance_az_and_host(server, expected_zone, dest_hostname)"},{"line_number":352,"context_line":"        self._assert_request_spec_az(ctxt, server, dest_az)"},{"line_number":353,"context_line":"        self._assert_server_with_az_unshelved_to_specified_az("}],"source_content_type":"text/x-python","patch_set":4,"id":"4112c6f0_58575a87","line":350,"updated":"2022-07-11 08:18:45.000000000","message":"the below suggestion is totally optional: :)\n\nas this is repeated frequently I would create a small helper that improve the readability of the test:\n\n  def other_az_than(az):\n      return \u0027zone2\u0027 if az \u003d\u003d \u0027zone1\u0027 else \u0027zone1\u0027\n      \nthat would make the test read like:\n\n  expected_zone \u003d other_az_than(original_az)\n  \nsimilar can be done for host","commit_id":"d6767307915df99006cdfec997a0b42e2303b368"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"4d0e88c963b5ac9f55992dfbd674c8b597c0bb25","unresolved":false,"context_lines":[{"line_number":347,"context_line":""},{"line_number":348,"context_line":"        self._shelve_unshelve_server(ctxt, server, req)"},{"line_number":349,"context_line":"        server \u003d self.api.get_server(server[\u0027id\u0027])"},{"line_number":350,"context_line":"        expected_zone \u003d \u0027zone2\u0027 if original_az \u003d\u003d \u0027zone1\u0027 else \u0027zone1\u0027"},{"line_number":351,"context_line":"        self._assert_instance_az_and_host(server, expected_zone, dest_hostname)"},{"line_number":352,"context_line":"        self._assert_request_spec_az(ctxt, server, dest_az)"},{"line_number":353,"context_line":"        self._assert_server_with_az_unshelved_to_specified_az("}],"source_content_type":"text/x-python","patch_set":4,"id":"4ccf31c6_6691b721","line":350,"in_reply_to":"4112c6f0_58575a87","updated":"2022-07-19 13:27:57.000000000","message":"Done","commit_id":"d6767307915df99006cdfec997a0b42e2303b368"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":193,"context_line":"        \"\"\""},{"line_number":194,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":195,"context_line":"        server \u003d self._create_server(\u0027server01\u0027)"},{"line_number":196,"context_line":"        self._assert_request_spec_az(ctxt, server, None)"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def test_create_server_to_zone(self):"},{"line_number":199,"context_line":"        \"\"\"Create a server with an AZ constraint and make sure asking a new"}],"source_content_type":"text/x-python","patch_set":5,"id":"c7df1d57_4349c7ca","line":196,"updated":"2022-07-20 10:51:32.000000000","message":"this test and below seem a bit unnecessary, but I\u0027m not against adding more coverage.","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":193,"context_line":"        \"\"\""},{"line_number":194,"context_line":"        ctxt \u003d context.get_admin_context()"},{"line_number":195,"context_line":"        server \u003d self._create_server(\u0027server01\u0027)"},{"line_number":196,"context_line":"        self._assert_request_spec_az(ctxt, server, None)"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"    def test_create_server_to_zone(self):"},{"line_number":199,"context_line":"        \"\"\"Create a server with an AZ constraint and make sure asking a new"}],"source_content_type":"text/x-python","patch_set":5,"id":"c5f49b2b_8fb0b6d3","line":196,"in_reply_to":"c7df1d57_4349c7ca","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":557,"context_line":"            \u0027zone \\\\\\\"zone1\\\\\\\".\u0027,"},{"line_number":558,"context_line":"            exc.response.text"},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"        )"},{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    def test_resize_revert_across_azs(self):"},{"line_number":563,"context_line":"        \"\"\"Creates two compute service hosts in separate AZs. Creates a server"}],"source_content_type":"text/x-python","patch_set":5,"id":"53bf7550_df4334d7","line":560,"updated":"2022-07-20 10:51:32.000000000","message":"see, you wrote those nice functional tests, but having the checks be done in the UTs would have been simplier, hence my ask in the former change.","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":557,"context_line":"            \u0027zone \\\\\\\"zone1\\\\\\\".\u0027,"},{"line_number":558,"context_line":"            exc.response.text"},{"line_number":559,"context_line":""},{"line_number":560,"context_line":"        )"},{"line_number":561,"context_line":""},{"line_number":562,"context_line":"    def test_resize_revert_across_azs(self):"},{"line_number":563,"context_line":"        \"\"\"Creates two compute service hosts in separate AZs. Creates a server"}],"source_content_type":"text/x-python","patch_set":5,"id":"3fff0f3e_abe23ffd","line":560,"in_reply_to":"53bf7550_df4334d7","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"}],"nova/tests/functional/test_servers.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":2541,"context_line":"                    \u0027OS-EXT-SRV-ATTR:host\u0027: dest_hostname,"},{"line_number":2542,"context_line":"                    \u0027status\u0027: \u0027ACTIVE\u0027"},{"line_number":2543,"context_line":"                    }"},{"line_number":2544,"context_line":"                )"},{"line_number":2545,"context_line":""},{"line_number":2546,"context_line":"        self.assertFlavorMatchesUsage(dest_rp_uuid, self.flavor1)"},{"line_number":2547,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"bfd2cea7_1f5e4947","line":2544,"updated":"2022-06-27 13:00:15.000000000","message":"this actually fits into:\n        self._wait_for_server_parameter(\n            server, {\"OS-EXT-SRV-ATTR:host\": dest_hostname, \"status\": \"ACTIVE\"}\n        )","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":2541,"context_line":"                    \u0027OS-EXT-SRV-ATTR:host\u0027: dest_hostname,"},{"line_number":2542,"context_line":"                    \u0027status\u0027: \u0027ACTIVE\u0027"},{"line_number":2543,"context_line":"                    }"},{"line_number":2544,"context_line":"                )"},{"line_number":2545,"context_line":""},{"line_number":2546,"context_line":"        self.assertFlavorMatchesUsage(dest_rp_uuid, self.flavor1)"},{"line_number":2547,"context_line":""}],"source_content_type":"text/x-python","patch_set":3,"id":"6d8fdad8_5364fb5f","line":2544,"in_reply_to":"bfd2cea7_1f5e4947","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":2579,"context_line":"        }"},{"line_number":2580,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], req)"},{"line_number":2581,"context_line":"        self._wait_for_server_parameter("},{"line_number":2582,"context_line":"                server,"},{"line_number":2583,"context_line":"                {"},{"line_number":2584,"context_line":"                    \u0027status\u0027: \u0027SHELVED_OFFLOADED\u0027,"},{"line_number":2585,"context_line":"                    \u0027OS-EXT-SRV-ATTR:host\u0027: None,"}],"source_content_type":"text/x-python","patch_set":3,"id":"4007fd5f_5b347aca","line":2582,"updated":"2022-06-27 13:00:15.000000000","message":"this is now overindented. I think this would be the correct one:\n        self._wait_for_server_parameter(\n            server,\n            {\n                \"status\": \"SHELVED_OFFLOADED\",\n                \"OS-EXT-SRV-ATTR:host\": None,\n                \"OS-EXT-AZ:availability_zone\": \"\",\n            },\n        )","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":2579,"context_line":"        }"},{"line_number":2580,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], req)"},{"line_number":2581,"context_line":"        self._wait_for_server_parameter("},{"line_number":2582,"context_line":"                server,"},{"line_number":2583,"context_line":"                {"},{"line_number":2584,"context_line":"                    \u0027status\u0027: \u0027SHELVED_OFFLOADED\u0027,"},{"line_number":2585,"context_line":"                    \u0027OS-EXT-SRV-ATTR:host\u0027: None,"}],"source_content_type":"text/x-python","patch_set":3,"id":"2de54994_89d262ad","line":2582,"in_reply_to":"4007fd5f_5b347aca","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":3768,"context_line":"        self.flags(shelved_offload_time\u003d0)"},{"line_number":3769,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], {\u0027shelve\u0027: None})"},{"line_number":3770,"context_line":"        self._wait_for_server_parameter("},{"line_number":3771,"context_line":"                server,"},{"line_number":3772,"context_line":"                {"},{"line_number":3773,"context_line":"                    \u0027status\u0027: \u0027SHELVED_OFFLOADED\u0027,"},{"line_number":3774,"context_line":"                    \u0027OS-EXT-SRV-ATTR:host\u0027: None"}],"source_content_type":"text/x-python","patch_set":3,"id":"ab0a7fc7_fd761c82","line":3771,"updated":"2022-06-27 13:00:15.000000000","message":"ditto","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":3768,"context_line":"        self.flags(shelved_offload_time\u003d0)"},{"line_number":3769,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], {\u0027shelve\u0027: None})"},{"line_number":3770,"context_line":"        self._wait_for_server_parameter("},{"line_number":3771,"context_line":"                server,"},{"line_number":3772,"context_line":"                {"},{"line_number":3773,"context_line":"                    \u0027status\u0027: \u0027SHELVED_OFFLOADED\u0027,"},{"line_number":3774,"context_line":"                    \u0027OS-EXT-SRV-ATTR:host\u0027: None"}],"source_content_type":"text/x-python","patch_set":3,"id":"ca936e90_4b61a300","line":3771,"in_reply_to":"ab0a7fc7_fd761c82","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":2582,"context_line":"                \u0027OS-EXT-SRV-ATTR:host\u0027: None,"},{"line_number":2583,"context_line":"                \u0027OS-EXT-AZ:availability_zone\u0027: \u0027\u0027"},{"line_number":2584,"context_line":"            }"},{"line_number":2585,"context_line":"        )"},{"line_number":2586,"context_line":"        source_usages \u003d self._get_provider_usages(source_rp_uuid)"},{"line_number":2587,"context_line":"        self.assertEqual({\u0027VCPU\u0027: 0,"},{"line_number":2588,"context_line":"                          \u0027MEMORY_MB\u0027: 0,"}],"source_content_type":"text/x-python","patch_set":5,"id":"c2d9e33b_87002a41","line":2585,"updated":"2022-07-20 10:51:32.000000000","message":"unnecessary change","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":2582,"context_line":"                \u0027OS-EXT-SRV-ATTR:host\u0027: None,"},{"line_number":2583,"context_line":"                \u0027OS-EXT-AZ:availability_zone\u0027: \u0027\u0027"},{"line_number":2584,"context_line":"            }"},{"line_number":2585,"context_line":"        )"},{"line_number":2586,"context_line":"        source_usages \u003d self._get_provider_usages(source_rp_uuid)"},{"line_number":2587,"context_line":"        self.assertEqual({\u0027VCPU\u0027: 0,"},{"line_number":2588,"context_line":"                          \u0027MEMORY_MB\u0027: 0,"}],"source_content_type":"text/x-python","patch_set":5,"id":"feb7b090_469ca27f","line":2585,"in_reply_to":"c2d9e33b_87002a41","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":3770,"context_line":"                \u0027status\u0027: \u0027SHELVED_OFFLOADED\u0027,"},{"line_number":3771,"context_line":"                \u0027OS-EXT-SRV-ATTR:host\u0027: None"},{"line_number":3772,"context_line":"            }"},{"line_number":3773,"context_line":"        )"},{"line_number":3774,"context_line":""},{"line_number":3775,"context_line":"        # assert allocations were removed from the host"},{"line_number":3776,"context_line":"        self.assertRequestMatchesUsage("}],"source_content_type":"text/x-python","patch_set":5,"id":"e4ec3282_aa86c616","line":3773,"updated":"2022-07-20 10:51:32.000000000","message":"unnecessary change","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":3770,"context_line":"                \u0027status\u0027: \u0027SHELVED_OFFLOADED\u0027,"},{"line_number":3771,"context_line":"                \u0027OS-EXT-SRV-ATTR:host\u0027: None"},{"line_number":3772,"context_line":"            }"},{"line_number":3773,"context_line":"        )"},{"line_number":3774,"context_line":""},{"line_number":3775,"context_line":"        # assert allocations were removed from the host"},{"line_number":3776,"context_line":"        self.assertRequestMatchesUsage("}],"source_content_type":"text/x-python","patch_set":5,"id":"0f53d7af_ef338f29","line":3773,"in_reply_to":"e4ec3282_aa86c616","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":3777,"context_line":"            {\u0027VCPU\u0027: 0,"},{"line_number":3778,"context_line":"             \u0027MEMORY_MB\u0027: 0,"},{"line_number":3779,"context_line":"             \u0027DISK_GB\u0027: 0}, rp_uuid"},{"line_number":3780,"context_line":"        )"},{"line_number":3781,"context_line":""},{"line_number":3782,"context_line":"        # unshelve the server, which should fail"},{"line_number":3783,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], {\u0027unshelve\u0027: None})"}],"source_content_type":"text/x-python","patch_set":5,"id":"c9a42aea_3ebea4e1","line":3780,"updated":"2022-07-20 10:51:32.000000000","message":"ditto","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":3777,"context_line":"            {\u0027VCPU\u0027: 0,"},{"line_number":3778,"context_line":"             \u0027MEMORY_MB\u0027: 0,"},{"line_number":3779,"context_line":"             \u0027DISK_GB\u0027: 0}, rp_uuid"},{"line_number":3780,"context_line":"        )"},{"line_number":3781,"context_line":""},{"line_number":3782,"context_line":"        # unshelve the server, which should fail"},{"line_number":3783,"context_line":"        self.api.post_server_action(server[\u0027id\u0027], {\u0027unshelve\u0027: None})"}],"source_content_type":"text/x-python","patch_set":5,"id":"950b393c_92ea686a","line":3780,"in_reply_to":"c9a42aea_3ebea4e1","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":3789,"context_line":"            {\u0027VCPU\u0027: 0,"},{"line_number":3790,"context_line":"             \u0027MEMORY_MB\u0027: 0,"},{"line_number":3791,"context_line":"             \u0027DISK_GB\u0027: 0}, rp_uuid"},{"line_number":3792,"context_line":"        )"},{"line_number":3793,"context_line":""},{"line_number":3794,"context_line":""},{"line_number":3795,"context_line":"class ServerUnshelveSpawnFailTestsWithNestedResourceRequest("}],"source_content_type":"text/x-python","patch_set":5,"id":"634e24af_cf3ca10b","line":3792,"updated":"2022-07-20 10:51:32.000000000","message":"ditto, please help to save reviewers :-)","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":3789,"context_line":"            {\u0027VCPU\u0027: 0,"},{"line_number":3790,"context_line":"             \u0027MEMORY_MB\u0027: 0,"},{"line_number":3791,"context_line":"             \u0027DISK_GB\u0027: 0}, rp_uuid"},{"line_number":3792,"context_line":"        )"},{"line_number":3793,"context_line":""},{"line_number":3794,"context_line":""},{"line_number":3795,"context_line":"class ServerUnshelveSpawnFailTestsWithNestedResourceRequest("}],"source_content_type":"text/x-python","patch_set":5,"id":"5d598d92_542bb457","line":3792,"in_reply_to":"634e24af_cf3ca10b","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"}],"nova/tests/unit/api/openstack/compute/test_shelve.py":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":135,"context_line":"            }}"},{"line_number":136,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(body)"},{"line_number":137,"context_line":"        self.req.api_version_request \u003d ("},{"line_number":138,"context_line":"                api_version_request.APIVersionRequest(\u00272.76\u0027)"},{"line_number":139,"context_line":"        )"},{"line_number":140,"context_line":"        with mock.patch.object("},{"line_number":141,"context_line":"                self.controller.compute_api, \u0027unshelve\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"b40300c4_3d3138f5","line":138,"updated":"2022-06-27 13:00:15.000000000","message":"overindent","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":135,"context_line":"            }}"},{"line_number":136,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(body)"},{"line_number":137,"context_line":"        self.req.api_version_request \u003d ("},{"line_number":138,"context_line":"                api_version_request.APIVersionRequest(\u00272.76\u0027)"},{"line_number":139,"context_line":"        )"},{"line_number":140,"context_line":"        with mock.patch.object("},{"line_number":141,"context_line":"                self.controller.compute_api, \u0027unshelve\u0027"}],"source_content_type":"text/x-python","patch_set":3,"id":"10a5a74b_5bb0092f","line":138,"in_reply_to":"b40300c4_3d3138f5","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":138,"context_line":"                api_version_request.APIVersionRequest(\u00272.76\u0027)"},{"line_number":139,"context_line":"        )"},{"line_number":140,"context_line":"        with mock.patch.object("},{"line_number":141,"context_line":"                self.controller.compute_api, \u0027unshelve\u0027"},{"line_number":142,"context_line":"        ) as mock_unshelve:"},{"line_number":143,"context_line":"            self.controller._unshelve(self.req, fakes.FAKE_UUID, body\u003dbody)"},{"line_number":144,"context_line":"        mock_unshelve.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":3,"id":"6d60365b_5e4a65c4","line":141,"updated":"2022-06-27 13:00:15.000000000","message":"ditto","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":138,"context_line":"                api_version_request.APIVersionRequest(\u00272.76\u0027)"},{"line_number":139,"context_line":"        )"},{"line_number":140,"context_line":"        with mock.patch.object("},{"line_number":141,"context_line":"                self.controller.compute_api, \u0027unshelve\u0027"},{"line_number":142,"context_line":"        ) as mock_unshelve:"},{"line_number":143,"context_line":"            self.controller._unshelve(self.req, fakes.FAKE_UUID, body\u003dbody)"},{"line_number":144,"context_line":"        mock_unshelve.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":3,"id":"02b7d6f3_17495f50","line":141,"in_reply_to":"6d60365b_5e4a65c4","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":159,"context_line":"        body \u003d {\u0027unshelve\u0027: None}"},{"line_number":160,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(body)"},{"line_number":161,"context_line":"        self.req.api_version_request \u003d ("},{"line_number":162,"context_line":"                api_version_request.APIVersionRequest(\u00272.76\u0027)"},{"line_number":163,"context_line":"        )"},{"line_number":164,"context_line":"        self.controller._unshelve(self.req, fakes.FAKE_UUID, body\u003dbody)"},{"line_number":165,"context_line":"        mock_unshelve.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":3,"id":"86c82f33_5e3162c9","line":162,"updated":"2022-06-27 13:00:15.000000000","message":"ditto","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":159,"context_line":"        body \u003d {\u0027unshelve\u0027: None}"},{"line_number":160,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(body)"},{"line_number":161,"context_line":"        self.req.api_version_request \u003d ("},{"line_number":162,"context_line":"                api_version_request.APIVersionRequest(\u00272.76\u0027)"},{"line_number":163,"context_line":"        )"},{"line_number":164,"context_line":"        self.controller._unshelve(self.req, fakes.FAKE_UUID, body\u003dbody)"},{"line_number":165,"context_line":"        mock_unshelve.assert_called_once_with("}],"source_content_type":"text/x-python","patch_set":3,"id":"2ecacd4d_c465a57e","line":162,"in_reply_to":"86c82f33_5e3162c9","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":178,"context_line":"        body \u003d {\u0027unshelve\u0027: {}}"},{"line_number":179,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(body)"},{"line_number":180,"context_line":"        exc \u003d self.assertRaises("},{"line_number":181,"context_line":"                exception.ValidationError,"},{"line_number":182,"context_line":"                self.controller._unshelve,"},{"line_number":183,"context_line":"                self.req,"},{"line_number":184,"context_line":"                fakes.FAKE_UUID,"}],"source_content_type":"text/x-python","patch_set":3,"id":"57243b4c_8f1efc5f","line":181,"range":{"start_line":181,"start_character":8,"end_line":181,"end_character":16},"updated":"2022-06-27 13:00:15.000000000","message":"ditto here and below","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":178,"context_line":"        body \u003d {\u0027unshelve\u0027: {}}"},{"line_number":179,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(body)"},{"line_number":180,"context_line":"        exc \u003d self.assertRaises("},{"line_number":181,"context_line":"                exception.ValidationError,"},{"line_number":182,"context_line":"                self.controller._unshelve,"},{"line_number":183,"context_line":"                self.req,"},{"line_number":184,"context_line":"                fakes.FAKE_UUID,"}],"source_content_type":"text/x-python","patch_set":3,"id":"77a9bd2b_6c0850ed","line":181,"range":{"start_line":181,"start_character":8,"end_line":181,"end_character":16},"in_reply_to":"57243b4c_8f1efc5f","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":259,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(body)"},{"line_number":260,"context_line":"        self.req.api_version_request \u003d ("},{"line_number":261,"context_line":"                api_version_request.APIVersionRequest(\u00272.77\u0027))"},{"line_number":262,"context_line":"        with mock.patch.object("},{"line_number":263,"context_line":"                self.controller.compute_api,"},{"line_number":264,"context_line":"                \u0027unshelve\u0027"},{"line_number":265,"context_line":"                ) as mock_unshelve:"},{"line_number":266,"context_line":"            self.controller._unshelve(self.req, fakes.FAKE_UUID, body\u003dbody)"},{"line_number":267,"context_line":"        mock_unshelve.assert_called_once_with("},{"line_number":268,"context_line":"            self.req.environ[\u0027nova.context\u0027],"},{"line_number":269,"context_line":"            instance,"}],"source_content_type":"text/x-python","patch_set":3,"id":"fffaa7fb_4c61e51a","line":266,"range":{"start_line":262,"start_character":0,"end_line":266,"end_character":75},"updated":"2022-06-27 13:00:15.000000000","message":"indent:\n        with mock.patch.object(\n            self.controller.compute_api, \"unshelve\"\n        ) as mock_unshelve:\n            self.controller._unshelve(self.req, fakes.FAKE_UUID, body\u003dbody)","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":259,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(body)"},{"line_number":260,"context_line":"        self.req.api_version_request \u003d ("},{"line_number":261,"context_line":"                api_version_request.APIVersionRequest(\u00272.77\u0027))"},{"line_number":262,"context_line":"        with mock.patch.object("},{"line_number":263,"context_line":"                self.controller.compute_api,"},{"line_number":264,"context_line":"                \u0027unshelve\u0027"},{"line_number":265,"context_line":"                ) as mock_unshelve:"},{"line_number":266,"context_line":"            self.controller._unshelve(self.req, fakes.FAKE_UUID, body\u003dbody)"},{"line_number":267,"context_line":"        mock_unshelve.assert_called_once_with("},{"line_number":268,"context_line":"            self.req.environ[\u0027nova.context\u0027],"},{"line_number":269,"context_line":"            instance,"}],"source_content_type":"text/x-python","patch_set":3,"id":"0542f964_7f203f4c","line":266,"range":{"start_line":262,"start_character":0,"end_line":266,"end_character":75},"in_reply_to":"fffaa7fb_4c61e51a","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":139,"context_line":"        )"},{"line_number":140,"context_line":"        with mock.patch.object("},{"line_number":141,"context_line":"            self.controller.compute_api, \u0027unshelve\u0027"},{"line_number":142,"context_line":"        ) as mock_unshelve:"},{"line_number":143,"context_line":"            self.controller._unshelve(self.req, fakes.FAKE_UUID, body\u003dbody)"},{"line_number":144,"context_line":"        mock_unshelve.assert_called_once_with("},{"line_number":145,"context_line":"            self.req.environ[\u0027nova.context\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"f07203c1_48e5d9e0","line":142,"updated":"2022-07-20 10:51:32.000000000","message":"unnecessary indent","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":139,"context_line":"        )"},{"line_number":140,"context_line":"        with mock.patch.object("},{"line_number":141,"context_line":"            self.controller.compute_api, \u0027unshelve\u0027"},{"line_number":142,"context_line":"        ) as mock_unshelve:"},{"line_number":143,"context_line":"            self.controller._unshelve(self.req, fakes.FAKE_UUID, body\u003dbody)"},{"line_number":144,"context_line":"        mock_unshelve.assert_called_once_with("},{"line_number":145,"context_line":"            self.req.environ[\u0027nova.context\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"37bc9dbc_099681c1","line":142,"in_reply_to":"f07203c1_48e5d9e0","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":160,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(body)"},{"line_number":161,"context_line":"        self.req.api_version_request \u003d ("},{"line_number":162,"context_line":"            api_version_request.APIVersionRequest(\u00272.76\u0027)"},{"line_number":163,"context_line":"        )"},{"line_number":164,"context_line":"        self.controller._unshelve(self.req, fakes.FAKE_UUID, body\u003dbody)"},{"line_number":165,"context_line":"        mock_unshelve.assert_called_once_with("},{"line_number":166,"context_line":"            self.req.environ[\u0027nova.context\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"058f6506_d88762c0","line":163,"updated":"2022-07-20 10:51:32.000000000","message":"ditto","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":160,"context_line":"        self.req.body \u003d jsonutils.dump_as_bytes(body)"},{"line_number":161,"context_line":"        self.req.api_version_request \u003d ("},{"line_number":162,"context_line":"            api_version_request.APIVersionRequest(\u00272.76\u0027)"},{"line_number":163,"context_line":"        )"},{"line_number":164,"context_line":"        self.controller._unshelve(self.req, fakes.FAKE_UUID, body\u003dbody)"},{"line_number":165,"context_line":"        mock_unshelve.assert_called_once_with("},{"line_number":166,"context_line":"            self.req.environ[\u0027nova.context\u0027],"}],"source_content_type":"text/x-python","patch_set":5,"id":"80e99816_91c07ab4","line":163,"in_reply_to":"058f6506_d88762c0","updated":"2022-07-21 17:49:50.000000000","message":"Ok removing the indent, despite I think this is less readable.","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":182,"context_line":"            self.controller._unshelve,"},{"line_number":183,"context_line":"            self.req,"},{"line_number":184,"context_line":"            fakes.FAKE_UUID,"},{"line_number":185,"context_line":"            body\u003dbody)"},{"line_number":186,"context_line":"        self.assertIn(\"\\\u0027availability_zone\\\u0027 is a required property\", str(exc))"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def test_invalid_az_name_with_int(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"2deee376_09dc2ac3","line":185,"updated":"2022-07-20 10:51:32.000000000","message":"ditto","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":182,"context_line":"            self.controller._unshelve,"},{"line_number":183,"context_line":"            self.req,"},{"line_number":184,"context_line":"            fakes.FAKE_UUID,"},{"line_number":185,"context_line":"            body\u003dbody)"},{"line_number":186,"context_line":"        self.assertIn(\"\\\u0027availability_zone\\\u0027 is a required property\", str(exc))"},{"line_number":187,"context_line":""},{"line_number":188,"context_line":"    def test_invalid_az_name_with_int(self):"}],"source_content_type":"text/x-python","patch_set":5,"id":"c3c3034e_3b61994e","line":185,"in_reply_to":"2deee376_09dc2ac3","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":196,"context_line":"                self.controller._unshelve,"},{"line_number":197,"context_line":"                self.req,"},{"line_number":198,"context_line":"                fakes.FAKE_UUID,"},{"line_number":199,"context_line":"                body\u003dbody)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def test_no_az_value(self):"},{"line_number":202,"context_line":"        body \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"e6d0ec32_23d32749","line":199,"updated":"2022-07-20 10:51:32.000000000","message":"ditto","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":196,"context_line":"                self.controller._unshelve,"},{"line_number":197,"context_line":"                self.req,"},{"line_number":198,"context_line":"                fakes.FAKE_UUID,"},{"line_number":199,"context_line":"                body\u003dbody)"},{"line_number":200,"context_line":""},{"line_number":201,"context_line":"    def test_no_az_value(self):"},{"line_number":202,"context_line":"        body \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"b33c774a_7149d17b","line":199,"in_reply_to":"e6d0ec32_23d32749","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":7166,"name":"Sylvain Bauza","email":"sbauza@redhat.com","username":"sbauza"},"change_message_id":"b546cb3366d02a0d41f96069ff89c57d701bf101","unresolved":true,"context_lines":[{"line_number":208,"context_line":"                exception.ValidationError,"},{"line_number":209,"context_line":"                self.controller._unshelve,"},{"line_number":210,"context_line":"                self.req,"},{"line_number":211,"context_line":"                fakes.FAKE_UUID, body\u003dbody)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def test_unshelve_with_additional_param(self):"},{"line_number":214,"context_line":"        body \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"8020a9b5_a54e4f83","line":211,"updated":"2022-07-20 10:51:32.000000000","message":"ditto","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"187bd2b116bda67b4fd80f8c8164738cf89d38db","unresolved":false,"context_lines":[{"line_number":208,"context_line":"                exception.ValidationError,"},{"line_number":209,"context_line":"                self.controller._unshelve,"},{"line_number":210,"context_line":"                self.req,"},{"line_number":211,"context_line":"                fakes.FAKE_UUID, body\u003dbody)"},{"line_number":212,"context_line":""},{"line_number":213,"context_line":"    def test_unshelve_with_additional_param(self):"},{"line_number":214,"context_line":"        body \u003d {"}],"source_content_type":"text/x-python","patch_set":5,"id":"9c62c862_56983d27","line":211,"in_reply_to":"8020a9b5_a54e4f83","updated":"2022-07-21 17:49:50.000000000","message":"Done","commit_id":"1556f423d62772230c741c7aa29756e54b2b875b"}],"releasenotes/notes/bp-unshelve_to_host-c9047d518eb67747.yaml":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"bbe9f6b3dcd04d5c58ff93300f7999bb04d72398","unresolved":true,"context_lines":[{"line_number":6,"context_line":"    Specifying a destination host is only"},{"line_number":7,"context_line":"    allowed to admin users and server status must be ``SHELVED_OFFLOADED``"},{"line_number":8,"context_line":"    otherwise a HTTP 400 (bad request) response is returned."},{"line_number":9,"context_line":"    It also allows to set ``availability_zone`` to None to unpin the"},{"line_number":10,"context_line":"    availability zone of a server."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"944d15c1_e00cd9da","line":10,"range":{"start_line":9,"start_character":65,"end_line":10,"end_character":34},"updated":"2022-06-27 13:00:15.000000000","message":"unpin a server from an availability_zone","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"},{"author":{"_account_id":16207,"name":"ribaudr","display_name":"uggla","email":"rene.ribaud@gmail.com","username":"uggla","status":"Red Hat"},"change_message_id":"059e914e250bca8b6d2628aec94f4645d67bc5a6","unresolved":false,"context_lines":[{"line_number":6,"context_line":"    Specifying a destination host is only"},{"line_number":7,"context_line":"    allowed to admin users and server status must be ``SHELVED_OFFLOADED``"},{"line_number":8,"context_line":"    otherwise a HTTP 400 (bad request) response is returned."},{"line_number":9,"context_line":"    It also allows to set ``availability_zone`` to None to unpin the"},{"line_number":10,"context_line":"    availability zone of a server."}],"source_content_type":"text/x-yaml","patch_set":3,"id":"e59475cd_a3ef7b44","line":10,"range":{"start_line":9,"start_character":65,"end_line":10,"end_character":34},"in_reply_to":"944d15c1_e00cd9da","updated":"2022-06-30 14:09:17.000000000","message":"Done","commit_id":"752a8cd134b97609b6d895b9f4205dc164ef0994"}]}
