)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"b48740088851d79513fccf24080926853edd12b5","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"e93b2fea_77179f4a","updated":"2025-11-20 17:18:19.000000000","message":"I see some new image related errors in the log that might be related to this change. I probably need help to debug this more. But also I will look into the glanceclient download() logic to see if we can pass timeouts there.\n\n[ 689.446674] env[66474]: ERROR oslo_vmware.rw_handles [None req-e579d9b0-862a-4a53-9bca-d6129a604818 tempest-ImagesOneServerTestJSON-1275685539 tempest-ImagesOneServerTestJSON-1275685539-project-member] Aborting lease for https://esx7c1n2.openstack.eu-de-1.cloud.sap/nfc/52995819-e70d-57a3-e47b-cd4b790884b7/disk-0.vmdk due to incomplete transfer.","commit_id":"283ec8ec9ec70a394cae0e826ec7516d14cbc3d7"},{"author":{"_account_id":24434,"name":"Fabian Wiesel","email":"fabian.wiesel@sap.com","username":"fwiesel"},"change_message_id":"212a79d9dd0680ba5762509939b420ea305b6e00","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"845f45c5_e433f597","updated":"2026-01-02 15:39:55.000000000","message":"sap-openstack-ci recheck - CI fixed","commit_id":"283ec8ec9ec70a394cae0e826ec7516d14cbc3d7"},{"author":{"_account_id":26250,"name":"Johannes Kulik","email":"johannes.kulik@sap.com","username":"jkulik"},"change_message_id":"37912a09865d88f24d01a4b8a6c8398017cde4c8","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"bae4611a_f1ae505f","in_reply_to":"e93b2fea_77179f4a","updated":"2025-11-21 08:54:39.000000000","message":"iirc, the glanceclient is far away from the logic we\u0027re changing here. `_start_transfer()` is also used when copying _from_ VMware and then the read_handle does not relate to glanceclient.\n\nAre you sure these are new? Afaics, they also happened here: https://review.opendev.org/c/openstack/nova/+/966447\nhttp://openstack-ci-logs.global.cloud.sap/openstack-nova-966447-zjl7t/index.html#file\u003dn-cpu-1.service.log\u0026highlight\u003d17116","commit_id":"283ec8ec9ec70a394cae0e826ec7516d14cbc3d7"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"f6c51f5f2171996ef4a1621d2cc2474be870e139","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"da4e3bc2_94a9e6c3","updated":"2026-01-21 09:23:56.000000000","message":"LGTM, thanks","commit_id":"9f68e39bb9d21ae50cf0608a834c3fc686b62999"}],"oslo_vmware/image_transfer.py":[{"author":{"_account_id":26250,"name":"Johannes Kulik","email":"johannes.kulik@sap.com","username":"jkulik"},"change_message_id":"6cd30b24a4bf7d89343e7b5092aa77afe8ce9fba","unresolved":true,"context_lines":[{"line_number":61,"context_line":"                    \u0027Timeout, read_handle: \u0027"},{"line_number":62,"context_line":"                    \u0027\"%(src)s\", write_handle: \"%(dest)s\"\u0027) %"},{"line_number":63,"context_line":"                    {\u0027src\u0027: read_handle, \u0027dest\u0027: write_handle})"},{"line_number":64,"context_line":"                LOG.exception(msg)"},{"line_number":65,"context_line":"                raise exceptions.ImageTransferException(msg)"},{"line_number":66,"context_line":"            data \u003d read_handle.read(CHUNK_SIZE)"},{"line_number":67,"context_line":"            if not data:"}],"source_content_type":"text/x-python","patch_set":1,"id":"ce542274_06eef295","line":64,"updated":"2025-11-18 08:34:26.000000000","message":"We\u0027re not in an exception handler here, does `LOG.exception()` still make sense or should we rather switch to `LOG.error()`?","commit_id":"283ec8ec9ec70a394cae0e826ec7516d14cbc3d7"},{"author":{"_account_id":26250,"name":"Johannes Kulik","email":"johannes.kulik@sap.com","username":"jkulik"},"change_message_id":"5b72eca94e2a8e61e031b543e4e258ecfb4a0729","unresolved":true,"context_lines":[{"line_number":61,"context_line":"                    \u0027Timeout, read_handle: \u0027"},{"line_number":62,"context_line":"                    \u0027\"%(src)s\", write_handle: \"%(dest)s\"\u0027) %"},{"line_number":63,"context_line":"                    {\u0027src\u0027: read_handle, \u0027dest\u0027: write_handle})"},{"line_number":64,"context_line":"                LOG.exception(msg)"},{"line_number":65,"context_line":"                raise exceptions.ImageTransferException(msg)"},{"line_number":66,"context_line":"            data \u003d read_handle.read(CHUNK_SIZE)"},{"line_number":67,"context_line":"            if not data:"}],"source_content_type":"text/x-python","patch_set":1,"id":"95373b97_0ae434a7","line":64,"in_reply_to":"0e070410_702ceb22","updated":"2025-11-25 11:15:17.000000000","message":"Keeping it an exception would help people (like use) using Sentry to enrich the stacktraces with local variable info. So for debugging, that would indeed be more helpful compared to switching to error-logging.","commit_id":"283ec8ec9ec70a394cae0e826ec7516d14cbc3d7"},{"author":{"_account_id":9708,"name":"Balazs Gibizer","display_name":"gibi","email":"gibizer@gmail.com","username":"gibi"},"change_message_id":"3bf8085d506af0ee61af44b7e0edab22373566e5","unresolved":true,"context_lines":[{"line_number":61,"context_line":"                    \u0027Timeout, read_handle: \u0027"},{"line_number":62,"context_line":"                    \u0027\"%(src)s\", write_handle: \"%(dest)s\"\u0027) %"},{"line_number":63,"context_line":"                    {\u0027src\u0027: read_handle, \u0027dest\u0027: write_handle})"},{"line_number":64,"context_line":"                LOG.exception(msg)"},{"line_number":65,"context_line":"                raise exceptions.ImageTransferException(msg)"},{"line_number":66,"context_line":"            data \u003d read_handle.read(CHUNK_SIZE)"},{"line_number":67,"context_line":"            if not data:"}],"source_content_type":"text/x-python","patch_set":1,"id":"c1c25a0c_0ca877df","line":64,"in_reply_to":"95373b97_0ae434a7","updated":"2026-01-15 12:35:26.000000000","message":"\u003e Keeping it an exception would help people (like use) using Sentry to enrich the stacktraces with local variable info. So for debugging, that would indeed be more helpful compared to switching to error-logging.\n\nAdded a helper class to emulate the Timeout exception. Is it closer what you would like to see?","commit_id":"283ec8ec9ec70a394cae0e826ec7516d14cbc3d7"},{"author":{"_account_id":26250,"name":"Johannes Kulik","email":"johannes.kulik@sap.com","username":"jkulik"},"change_message_id":"f8e2b05e82a6777c20697e3eccb55e1790e4c99b","unresolved":false,"context_lines":[{"line_number":61,"context_line":"                    \u0027Timeout, read_handle: \u0027"},{"line_number":62,"context_line":"                    \u0027\"%(src)s\", write_handle: \"%(dest)s\"\u0027) %"},{"line_number":63,"context_line":"                    {\u0027src\u0027: read_handle, \u0027dest\u0027: write_handle})"},{"line_number":64,"context_line":"                LOG.exception(msg)"},{"line_number":65,"context_line":"                raise exceptions.ImageTransferException(msg)"},{"line_number":66,"context_line":"            data \u003d read_handle.read(CHUNK_SIZE)"},{"line_number":67,"context_line":"            if not data:"}],"source_content_type":"text/x-python","patch_set":1,"id":"03939937_0e8c3ce5","line":64,"in_reply_to":"c1c25a0c_0ca877df","updated":"2026-01-20 08:34:22.000000000","message":"Looks good to me.","commit_id":"283ec8ec9ec70a394cae0e826ec7516d14cbc3d7"},{"author":{"_account_id":28522,"name":"Hervé Beraud","email":"herveberaud.pro@gmail.com","username":"hberaud"},"change_message_id":"bad0a9b24a17da300432ef01802e00b90fe98225","unresolved":true,"context_lines":[{"line_number":61,"context_line":"                    \u0027Timeout, read_handle: \u0027"},{"line_number":62,"context_line":"                    \u0027\"%(src)s\", write_handle: \"%(dest)s\"\u0027) %"},{"line_number":63,"context_line":"                    {\u0027src\u0027: read_handle, \u0027dest\u0027: write_handle})"},{"line_number":64,"context_line":"                LOG.exception(msg)"},{"line_number":65,"context_line":"                raise exceptions.ImageTransferException(msg)"},{"line_number":66,"context_line":"            data \u003d read_handle.read(CHUNK_SIZE)"},{"line_number":67,"context_line":"            if not data:"}],"source_content_type":"text/x-python","patch_set":1,"id":"0e070410_702ceb22","line":64,"in_reply_to":"ce542274_06eef295","updated":"2025-11-25 10:06:20.000000000","message":"Indeed, and I think its looks weird to raise the exception below here. I wonder if the calculation/comparison above `remaining_time \u003d deadline - time.monotonic();if remaining_time \u003c\u003d 0:` should not be extracted from this logic and put into a function that raise an handcrafted timeout exception, this way the logging and raising logic would remain handled as a specific exceptional case.\n\nThought?","commit_id":"283ec8ec9ec70a394cae0e826ec7516d14cbc3d7"}]}
