)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"5d42f0007864862ecd5c1e8164f537b69d4cc9cb","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"02d871c6_79733635","updated":"2026-02-04 15:31:03.000000000","message":"Tested and confirmed working.","commit_id":"6560cb7146d94fc5bbb6c73a1632f5951cf17693"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"bca9717e44f2a6eec9971d9ab95effbf632d4412","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"cf0fe6c8_74ee8a3d","updated":"2026-02-04 15:46:27.000000000","message":"let\u0027s merge it then","commit_id":"6560cb7146d94fc5bbb6c73a1632f5951cf17693"}],"freezer/openstack/backup.py":[{"author":{"_account_id":27665,"name":"Markus Hentsch","email":"markus.hentsch@cloudandheat.com","username":"mhen"},"change_message_id":"b7b179b81378a583f63308432f896e2c28f54e0d","unresolved":true,"context_lines":[{"line_number":69,"context_line":"                                   copied_volume.id),"},{"line_number":70,"context_line":"            copied_volume)"},{"line_number":71,"context_line":"        LOG.debug(\"Download temporary glance image {0}\".format(image.id))"},{"line_number":72,"context_line":"        image_created_at \u003d image.created_at.split(\u0027.\u0027)[0]"},{"line_number":73,"context_line":"        image_timestamp \u003d utils.DateTime(image_created_at).timestamp"},{"line_number":74,"context_line":"        stream \u003d client_manager.download_image(image)"},{"line_number":75,"context_line":"        package \u003d \"{0}/{1}\".format(volume_id, image_timestamp)"}],"source_content_type":"text/x-python","patch_set":2,"id":"955760b1_1a86d40a","line":72,"updated":"2026-02-03 09:59:30.000000000","message":"Wouldn\u0027t it make more sense to grab this from the snapshot created above rather than the image? According to the SDK it should also have a `created_at` attribute [1].\n\nI think the time of the snapshot is the actual point in time where the volume\u0027s data had been \"frozen\" for the backup and represents the timestamp of the data. The creation of the temporary volume and subsequent image for downloading takes variable time depending on the volume\u0027s size and will shift the timestamp unnecessarily if measured after image creation.\n\n[1] https://docs.openstack.org/openstacksdk/latest/user/resources/block_storage/v3/snapshot.html#openstack.block_storage.v3.snapshot.Snapshot","commit_id":"a16d82b9897189c76776f2013fe5046676aa3741"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"8e37f33f181828b584f7a5a31952263938d2f9fd","unresolved":true,"context_lines":[{"line_number":69,"context_line":"                                   copied_volume.id),"},{"line_number":70,"context_line":"            copied_volume)"},{"line_number":71,"context_line":"        LOG.debug(\"Download temporary glance image {0}\".format(image.id))"},{"line_number":72,"context_line":"        image_created_at \u003d image.created_at.split(\u0027.\u0027)[0]"},{"line_number":73,"context_line":"        image_timestamp \u003d utils.DateTime(image_created_at).timestamp"},{"line_number":74,"context_line":"        stream \u003d client_manager.download_image(image)"},{"line_number":75,"context_line":"        package \u003d \"{0}/{1}\".format(volume_id, image_timestamp)"}],"source_content_type":"text/x-python","patch_set":2,"id":"daab1c54_ca28a49f","line":72,"in_reply_to":"955760b1_1a86d40a","updated":"2026-02-03 15:06:40.000000000","message":"So I think I did the image and not snapshot, as the stream resource is being created from the image, and the name we\u0027re defining is for the resulting stream... But you are probably right, and it makes more sense to have a snapshot here, as actual data freeze one.","commit_id":"a16d82b9897189c76776f2013fe5046676aa3741"},{"author":{"_account_id":28619,"name":"Dmitriy Rabotyagov","email":"noonedeadpunk@gmail.com","username":"noonedeadpunk"},"change_message_id":"30f68ff38c8a88f3b720bb0e284c196e36a8567f","unresolved":false,"context_lines":[{"line_number":69,"context_line":"                                   copied_volume.id),"},{"line_number":70,"context_line":"            copied_volume)"},{"line_number":71,"context_line":"        LOG.debug(\"Download temporary glance image {0}\".format(image.id))"},{"line_number":72,"context_line":"        image_created_at \u003d image.created_at.split(\u0027.\u0027)[0]"},{"line_number":73,"context_line":"        image_timestamp \u003d utils.DateTime(image_created_at).timestamp"},{"line_number":74,"context_line":"        stream \u003d client_manager.download_image(image)"},{"line_number":75,"context_line":"        package \u003d \"{0}/{1}\".format(volume_id, image_timestamp)"}],"source_content_type":"text/x-python","patch_set":2,"id":"6ee24655_792f3f49","line":72,"in_reply_to":"daab1c54_ca28a49f","updated":"2026-02-04 14:23:13.000000000","message":"Done","commit_id":"a16d82b9897189c76776f2013fe5046676aa3741"}]}
