)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"73f8c02b79c977912e5ef721c11d10a018b64ca7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"e327a38e_a7658f8f","updated":"2023-11-03 07:46:10.000000000","message":"thanks Steve, I will abandon this https://review.opendev.org/c/openstack/ironic/+/714074 then","commit_id":"31a7d5cf79904b6b73d707365fb8339987f71562"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"8693053c8870ff7e30fef7c8b0cafb0cab89a9aa","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"9c3d3fc0_e300e216","updated":"2023-11-14 13:52:26.000000000","message":"awesome!","commit_id":"d085bcbf865bd24b1e66582952a9dd7061cdeb4b"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"f0967960390d8e0e191f46421cd5e388418bace8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"1259dd5c_12047d37","updated":"2023-11-12 20:03:21.000000000","message":"recheck ironic-standalone-redfish","commit_id":"d085bcbf865bd24b1e66582952a9dd7061cdeb4b"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"a42e50bb1750b7dd0298bbb63776d1361b6fbed5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"af2124d7_2bbc6142","updated":"2023-11-28 23:45:30.000000000","message":"If CI is happy, I am :D Thanks Steve!","commit_id":"2db444bce1caedd6d58aec58288ea9ca3f63c45c"},{"author":{"_account_id":23851,"name":"Riccardo Pittau","email":"elfosardo@gmail.com","username":"elfosardo"},"change_message_id":"d0bc4061ce856311d2e97e4faba5fa5f43f87288","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"df03ffcf_d72e6afd","updated":"2023-11-29 08:07:25.000000000","message":"recheck","commit_id":"2db444bce1caedd6d58aec58288ea9ca3f63c45c"}],"ironic/common/glance_service/image_service.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"29d4555cf1bdc620c041730dcbaea5915bd64500","unresolved":true,"context_lines":[{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        if not key:"},{"line_number":323,"context_line":"            swift_api \u003d swift.SwiftAPI()"},{"line_number":324,"context_line":"            key \u003d swift_api.get_temp_url_key()"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        if not key:"},{"line_number":327,"context_line":"            raise exception.MissingParameterValue(_("}],"source_content_type":"text/x-python","patch_set":1,"id":"78f37d8f_de8ff9cb","line":324,"updated":"2023-11-05 20:59:35.000000000","message":"One consequence of getting the key through the sdk is that it will check x-account-meta-temp-url-key *and* x-account-meta-temp-url-key-2 headers, which allows for key rotation. This might be worth a feature release note.","commit_id":"31a7d5cf79904b6b73d707365fb8339987f71562"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"a4116096e5ae61520ca90495f32e516d99e97b3d","unresolved":false,"context_lines":[{"line_number":321,"context_line":""},{"line_number":322,"context_line":"        if not key:"},{"line_number":323,"context_line":"            swift_api \u003d swift.SwiftAPI()"},{"line_number":324,"context_line":"            key \u003d swift_api.get_temp_url_key()"},{"line_number":325,"context_line":""},{"line_number":326,"context_line":"        if not key:"},{"line_number":327,"context_line":"            raise exception.MissingParameterValue(_("}],"source_content_type":"text/x-python","patch_set":1,"id":"f2ceef8e_c7174d8d","line":324,"in_reply_to":"78f37d8f_de8ff9cb","updated":"2023-11-06 00:29:16.000000000","message":"Done","commit_id":"31a7d5cf79904b6b73d707365fb8339987f71562"}],"ironic/common/swift.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"29d4555cf1bdc620c041730dcbaea5915bd64500","unresolved":true,"context_lines":[{"line_number":234,"context_line":"            self.connection.post_object(container, obj, object_headers)"},{"line_number":235,"context_line":"        except swift_exceptions.ClientException as e:"},{"line_number":236,"context_line":"            operation \u003d _(\"post object\")"},{"line_number":237,"context_line":"            raise exception.SwiftOperationError(operation\u003doperation, error\u003de)"}],"source_content_type":"text/x-python","patch_set":1,"id":"2598fb0d_d4a6163c","side":"PARENT","line":237,"updated":"2023-11-05 20:59:35.000000000","message":"These methods are unused, so I deleted them rather than carry dead code","commit_id":"570aa3c86b58b55589650ba9622473a4231c9f12"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"29d4555cf1bdc620c041730dcbaea5915bd64500","unresolved":true,"context_lines":[{"line_number":103,"context_line":"        return obj_uuid"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def get_temp_url_key(self):"},{"line_number":106,"context_line":"        \"\"\"Get the best temporary url key for a given container.\"\"\""},{"line_number":107,"context_line":"        return self.connection.object_store.get_temp_url_key()"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def get_temp_url(self, container, obj, timeout):"}],"source_content_type":"text/x-python","patch_set":1,"id":"cd33a22b_fb91b6b5","line":106,"range":{"start_line":106,"start_character":54,"end_line":106,"end_character":63},"updated":"2023-11-05 20:59:35.000000000","message":"Reword this, no container is given","commit_id":"31a7d5cf79904b6b73d707365fb8339987f71562"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"a4116096e5ae61520ca90495f32e516d99e97b3d","unresolved":false,"context_lines":[{"line_number":103,"context_line":"        return obj_uuid"},{"line_number":104,"context_line":""},{"line_number":105,"context_line":"    def get_temp_url_key(self):"},{"line_number":106,"context_line":"        \"\"\"Get the best temporary url key for a given container.\"\"\""},{"line_number":107,"context_line":"        return self.connection.object_store.get_temp_url_key()"},{"line_number":108,"context_line":""},{"line_number":109,"context_line":"    def get_temp_url(self, container, obj, timeout):"}],"source_content_type":"text/x-python","patch_set":1,"id":"d582cd56_a95a863a","line":106,"range":{"start_line":106,"start_character":54,"end_line":106,"end_character":63},"in_reply_to":"cd33a22b_fb91b6b5","updated":"2023-11-06 00:29:16.000000000","message":"Done","commit_id":"31a7d5cf79904b6b73d707365fb8339987f71562"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"68b539f60beb022d3b3dcc250ec4110fb05078f2","unresolved":true,"context_lines":[{"line_number":90,"context_line":"        try:"},{"line_number":91,"context_line":"            self.connection.create_container(container)"},{"line_number":92,"context_line":"        except openstack_exc.OpenStackCloudException as e:"},{"line_number":93,"context_line":"            operation \u003d _(\"create container\")"},{"line_number":94,"context_line":"            raise exception.SwiftOperationError(operation\u003doperation, error\u003de)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"d8c0f944_59511c2f","line":93,"updated":"2023-11-27 23:22:34.000000000","message":"(throughout) I think there\u0027s value in not changing the log messages we print -- this is going to cause a lot of churn in operator log filtering for minimal additional value. -- at least in the cases where we\u0027re just replacing a verb with a similar verb that is a synonym","commit_id":"938519dac766e33803255831498fc1c97a584fdd"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"0b31b827472a1138ef9365c09908c7e431e92a64","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        try:"},{"line_number":91,"context_line":"            self.connection.create_container(container)"},{"line_number":92,"context_line":"        except openstack_exc.OpenStackCloudException as e:"},{"line_number":93,"context_line":"            operation \u003d _(\"create container\")"},{"line_number":94,"context_line":"            raise exception.SwiftOperationError(operation\u003doperation, error\u003de)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"27db0f6c_6a5a8d28","line":93,"in_reply_to":"d8c0f944_59511c2f","updated":"2023-11-28 23:33:27.000000000","message":"Done","commit_id":"938519dac766e33803255831498fc1c97a584fdd"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"0b31b827472a1138ef9365c09908c7e431e92a64","unresolved":false,"context_lines":[{"line_number":90,"context_line":"        try:"},{"line_number":91,"context_line":"            self.connection.create_container(container)"},{"line_number":92,"context_line":"        except openstack_exc.OpenStackCloudException as e:"},{"line_number":93,"context_line":"            operation \u003d _(\"create container\")"},{"line_number":94,"context_line":"            raise exception.SwiftOperationError(operation\u003doperation, error\u003de)"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"        try:"}],"source_content_type":"text/x-python","patch_set":4,"id":"dfc509b8_455cbfa6","line":93,"in_reply_to":"d8c0f944_59511c2f","updated":"2023-11-28 23:33:27.000000000","message":"Done","commit_id":"938519dac766e33803255831498fc1c97a584fdd"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"d9d2601e81b79665621614cbc467ed3e1fab62f8","unresolved":true,"context_lines":[{"line_number":61,"context_line":"        try:"},{"line_number":62,"context_line":"            self.connection.create_container(container)"},{"line_number":63,"context_line":"        except openstack_exc.OpenStackCloudException as e:"},{"line_number":64,"context_line":"            operation \u003d _(\"create container\")"},{"line_number":65,"context_line":"            raise exception.SwiftOperationError(operation\u003doperation, error\u003de)"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"        if object_headers is None:"}],"source_content_type":"text/x-python","patch_set":5,"id":"edc7d067_91b15e83","line":64,"updated":"2023-11-28 23:42:33.000000000","message":"same (looks like you missed this one (unless it\u0027s intentionally being left as create?))","commit_id":"95afbfbc88ee09c365a25440b9f568bf66b8f025"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"d9d2601e81b79665621614cbc467ed3e1fab62f8","unresolved":true,"context_lines":[{"line_number":71,"context_line":"            obj_uuid \u003d self.connection.create_object("},{"line_number":72,"context_line":"                container, obj, filename\u003dfilename, **object_headers)"},{"line_number":73,"context_line":"        except openstack_exc.OpenStackCloudException as e:"},{"line_number":74,"context_line":"            operation \u003d _(\"create object\")"},{"line_number":75,"context_line":"            raise exception.SwiftOperationError(operation\u003doperation,"},{"line_number":76,"context_line":"                                                error\u003de)"},{"line_number":77,"context_line":""}],"source_content_type":"text/x-python","patch_set":5,"id":"912549bf_d7435550","line":74,"updated":"2023-11-28 23:42:33.000000000","message":"looks like you missed this one (unless it\u0027s intentionally being left as create?)","commit_id":"95afbfbc88ee09c365a25440b9f568bf66b8f025"}],"ironic/conf/swift.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"29d4555cf1bdc620c041730dcbaea5915bd64500","unresolved":true,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def register_opts(conf):"},{"line_number":31,"context_line":"    conf.register_opts(opts, group\u003d\u0027swift\u0027)"},{"line_number":32,"context_line":"    auth.register_auth_opts(conf, \u0027swift\u0027, service_type\u003d\u0027object-store\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def list_opts():"}],"source_content_type":"text/x-python","patch_set":1,"id":"d41cb57f_948e26d5","side":"PARENT","line":32,"updated":"2023-11-05 20:59:35.000000000","message":"Oh this has auth opts too, not just swift_max_retries. I should restore this.","commit_id":"570aa3c86b58b55589650ba9622473a4231c9f12"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"a4116096e5ae61520ca90495f32e516d99e97b3d","unresolved":false,"context_lines":[{"line_number":29,"context_line":""},{"line_number":30,"context_line":"def register_opts(conf):"},{"line_number":31,"context_line":"    conf.register_opts(opts, group\u003d\u0027swift\u0027)"},{"line_number":32,"context_line":"    auth.register_auth_opts(conf, \u0027swift\u0027, service_type\u003d\u0027object-store\u0027)"},{"line_number":33,"context_line":""},{"line_number":34,"context_line":""},{"line_number":35,"context_line":"def list_opts():"}],"source_content_type":"text/x-python","patch_set":1,"id":"417a1ee9_de07097c","side":"PARENT","line":32,"in_reply_to":"d41cb57f_948e26d5","updated":"2023-11-06 00:29:16.000000000","message":"Done","commit_id":"570aa3c86b58b55589650ba9622473a4231c9f12"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"68b539f60beb022d3b3dcc250ec4110fb05078f2","unresolved":true,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def register_opts(conf):"},{"line_number":21,"context_line":"    auth.register_auth_opts(conf, \u0027swift\u0027, service_type\u003d\u0027object-store\u0027)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def list_opts():"}],"source_content_type":"text/x-python","patch_set":4,"id":"dc9548aa_cd250971","line":21,"updated":"2023-11-27 23:22:34.000000000","message":"I\u0027m sure these removed options are replaced with equivalents in openstacksdk; but removing them without a deprecation period is not great. Is there a way to smooth this transition?","commit_id":"938519dac766e33803255831498fc1c97a584fdd"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"936df5631ea72ea6ababc395f31c698ea7f3cbbd","unresolved":true,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def register_opts(conf):"},{"line_number":21,"context_line":"    auth.register_auth_opts(conf, \u0027swift\u0027, service_type\u003d\u0027object-store\u0027)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def list_opts():"}],"source_content_type":"text/x-python","patch_set":4,"id":"acea523e_a9c89ebd","line":21,"in_reply_to":"16680c62_32156330","updated":"2023-11-28 23:36:42.000000000","message":"That upgrade note should be fine, if openstacksdk doesn\u0027t support it, we can\u0027t, but we should tell operators why the config disappeared.","commit_id":"938519dac766e33803255831498fc1c97a584fdd"},{"author":{"_account_id":10342,"name":"Jay Faulkner","display_name":"JayF","email":"jay@jvf.cc","username":"JayF","status":"youtube.com/@oss-gr / podcast.gr-oss.io"},"change_message_id":"87d5638d8a504888b3fc9809733384c706b18b80","unresolved":true,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def register_opts(conf):"},{"line_number":21,"context_line":"    auth.register_auth_opts(conf, \u0027swift\u0027, service_type\u003d\u0027object-store\u0027)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def list_opts():"}],"source_content_type":"text/x-python","patch_set":4,"id":"a20268b5_63c35bcb","line":21,"in_reply_to":"2eed31aa_1e720e5f","updated":"2023-11-28 19:32:18.000000000","message":"Our guarantees around stability and deprecation do not have \"if enough people we know use it\" as a disclaimer beside it. Especially in a world where we *know* we have a feedback problem with our users, this seems like an incredibly weak argument.","commit_id":"938519dac766e33803255831498fc1c97a584fdd"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"0b31b827472a1138ef9365c09908c7e431e92a64","unresolved":true,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def register_opts(conf):"},{"line_number":21,"context_line":"    auth.register_auth_opts(conf, \u0027swift\u0027, service_type\u003d\u0027object-store\u0027)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def list_opts():"}],"source_content_type":"text/x-python","patch_set":4,"id":"16680c62_32156330","line":21,"in_reply_to":"a20268b5_63c35bcb","updated":"2023-11-28 23:33:27.000000000","message":"There is no general retry configuration in openstacksdk so our only option would be to reimplement it locally with tenacity (only on the operations which make sense, which I think would be getting and deleting objects).\n\nswift_max_retries was part of the initial swift support added in the Juno release[1], presumably to mitigate the behaviour of Juno-era Swift.\n\nFor now I\u0027ll add an upgrade note stating that swift_max_retries will be ignored and any custom value should be removed. If this isn\u0027t sufficient I\u0027ll need to rework this change to add tenacity retries on some operations.\n\n[1] https://review.opendev.org/c/openstack/ironic/+/105795","commit_id":"938519dac766e33803255831498fc1c97a584fdd"},{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"38d1604a1d25ca757ce79aac2cceaea7f8f9bfdf","unresolved":true,"context_lines":[{"line_number":18,"context_line":""},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"def register_opts(conf):"},{"line_number":21,"context_line":"    auth.register_auth_opts(conf, \u0027swift\u0027, service_type\u003d\u0027object-store\u0027)"},{"line_number":22,"context_line":""},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"def list_opts():"}],"source_content_type":"text/x-python","patch_set":4,"id":"2eed31aa_1e720e5f","line":21,"in_reply_to":"dc9548aa_cd250971","updated":"2023-11-28 19:27:02.000000000","message":"I guess a question I\u0027m wondering is if there really sufficient swift usage to justify extra smoothing.","commit_id":"938519dac766e33803255831498fc1c97a584fdd"}],"ironic/drivers/modules/inspect_utils.py":[{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"29d4555cf1bdc620c041730dcbaea5915bd64500","unresolved":true,"context_lines":[{"line_number":92,"context_line":"    try:"},{"line_number":93,"context_line":"        swift_api.delete_object(inventory_obj_name, container)"},{"line_number":94,"context_line":"    except swiftclient.exceptions.ClientException as e:"},{"line_number":95,"context_line":"        if e.http_status !\u003d 404:"},{"line_number":96,"context_line":"            LOG.error(\"Object %(obj)s in container %(cont)s with inventory \""},{"line_number":97,"context_line":"                      \"for node %(node)s failed to be deleted: %(e)s\","},{"line_number":98,"context_line":"                      {\u0027obj\u0027: inventory_obj_name, \u0027node\u0027: task.node.uuid,"}],"source_content_type":"text/x-python","patch_set":1,"id":"73d599f9_654146cd","side":"PARENT","line":95,"updated":"2023-11-05 20:59:35.000000000","message":"delete_object always wrapped ClientException, so this error handling is actually incorrect","commit_id":"570aa3c86b58b55589650ba9622473a4231c9f12"}],"releasenotes/notes/temp_url_key_rot-1e7cb004df8c788f.yaml":[{"author":{"_account_id":11655,"name":"Julia Kreger","email":"juliaashleykreger@gmail.com","username":"jkreger","status":"Flying to the moon with a Jetpack!"},"change_message_id":"8641ec0f7f68bd6105ef8d1f71ff2ccdaea2f524","unresolved":true,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Previously the key for building temporary URLs from Swift was taken from the"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"a93e4b1e_f194d5d7","line":1,"updated":"2023-11-22 20:27:09.000000000","message":"We likely need to note python-swiftclient is no longer required.","commit_id":"d085bcbf865bd24b1e66582952a9dd7061cdeb4b"},{"author":{"_account_id":4571,"name":"Steve Baker","email":"sbaker@redhat.com","username":"steve-stevebaker"},"change_message_id":"b7de2739889e812de1c44178baacf3e8561fda71","unresolved":false,"context_lines":[{"line_number":1,"context_line":"---"},{"line_number":2,"context_line":"features:"},{"line_number":3,"context_line":"  - |"},{"line_number":4,"context_line":"    Previously the key for building temporary URLs from Swift was taken from the"}],"source_content_type":"text/x-yaml","patch_set":3,"id":"8b0fb843_2133d0f3","line":1,"in_reply_to":"a93e4b1e_f194d5d7","updated":"2023-11-23 22:10:47.000000000","message":"Done","commit_id":"d085bcbf865bd24b1e66582952a9dd7061cdeb4b"}]}
