)]}'
{"metropolis/cli/takeover/takeover.go":[{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"3e0a0ba8209693a95ad62c5aa95c85a9c4e49a28","unresolved":true,"context_lines":[{"line_number":128,"context_line":"\t\treturn nil, err"},{"line_number":129,"context_line":"\t}"},{"line_number":130,"context_line":"\tdefer bundleRaw.Close()"},{"line_number":131,"context_line":"\tbundle, err :\u003d zip.NewReader(bundleRaw.(io.ReaderAt), bundleBlob.Size())"},{"line_number":132,"context_line":"\tif err !\u003d nil {"},{"line_number":133,"context_line":"\t\treturn nil, fmt.Errorf(\"failed to open node bundle: %w\", err)"},{"line_number":134,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"b26b2ba9_eac045ae","line":131,"range":{"start_line":131,"start_character":40,"end_line":131,"end_character":53},"updated":"2025-03-26 13:23:15.000000000","message":"Not really a fan of this. Do we maybe wan\u0027t to make this a ReadSeekCloser? The Bytes implementation would also support this.","commit_id":"78342a62d8f94781fe7a34224b53d79924af9a2d"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"8852e282f8f3886125ff5fd8a5dbef419af7d006","unresolved":false,"context_lines":[{"line_number":128,"context_line":"\t\treturn nil, err"},{"line_number":129,"context_line":"\t}"},{"line_number":130,"context_line":"\tdefer bundleRaw.Close()"},{"line_number":131,"context_line":"\tbundle, err :\u003d zip.NewReader(bundleRaw.(io.ReaderAt), bundleBlob.Size())"},{"line_number":132,"context_line":"\tif err !\u003d nil {"},{"line_number":133,"context_line":"\t\treturn nil, fmt.Errorf(\"failed to open node bundle: %w\", err)"},{"line_number":134,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"cda4de13_8c80aa7c","line":131,"range":{"start_line":131,"start_character":40,"end_line":131,"end_character":53},"in_reply_to":"7b9b3d00_076ebd1c","updated":"2025-03-26 18:31:11.000000000","message":"Acknowledged","commit_id":"78342a62d8f94781fe7a34224b53d79924af9a2d"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2c9e91290b07c36ef7aef53dbdc2de4a532b0f02","unresolved":true,"context_lines":[{"line_number":128,"context_line":"\t\treturn nil, err"},{"line_number":129,"context_line":"\t}"},{"line_number":130,"context_line":"\tdefer bundleRaw.Close()"},{"line_number":131,"context_line":"\tbundle, err :\u003d zip.NewReader(bundleRaw.(io.ReaderAt), bundleBlob.Size())"},{"line_number":132,"context_line":"\tif err !\u003d nil {"},{"line_number":133,"context_line":"\t\treturn nil, fmt.Errorf(\"failed to open node bundle: %w\", err)"},{"line_number":134,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"7b9b3d00_076ebd1c","line":131,"range":{"start_line":131,"start_character":40,"end_line":131,"end_character":53},"in_reply_to":"b26b2ba9_eac045ae","updated":"2025-03-26 14:41:08.000000000","message":"This wouldn\u0027t work, because ReadSeekCloser doesn\u0027t implement ReadAt.\n\nstructfs.Blob could also be backed by an HTTP request, where we can\u0027t easily seek. In this case, we know that it\u0027s backed by an os.File, so the conversion can\u0027t fail.\n\nThis code is also only temporary, because the zip reader will go away soon.","commit_id":"78342a62d8f94781fe7a34224b53d79924af9a2d"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"3e0a0ba8209693a95ad62c5aa95c85a9c4e49a28","unresolved":true,"context_lines":[{"line_number":217,"context_line":"\t\treturn nil, err"},{"line_number":218,"context_line":"\t}"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"\t// The bundle is already compressed, so don\u0027t try to compress it again."},{"line_number":221,"context_line":"\tuncompressedRoot :\u003d structfs.Tree{"},{"line_number":222,"context_line":"\t\tstructfs.File(\"bundle.zip\", bundleBlob),"},{"line_number":223,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"8ca16a1e_d5555485","line":220,"updated":"2025-03-26 13:23:15.000000000","message":"Personally I think this is a bit too much optimization. We could just put the bundle inside the compressed part as that\u0027s totally fine. Additionally we would not need the aligning stuff. We are using zstd level 1 here, which is barely noticeable speed wise. I would propose to remove said special behavior","commit_id":"78342a62d8f94781fe7a34224b53d79924af9a2d"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2c9e91290b07c36ef7aef53dbdc2de4a532b0f02","unresolved":false,"context_lines":[{"line_number":217,"context_line":"\t\treturn nil, err"},{"line_number":218,"context_line":"\t}"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"\t// The bundle is already compressed, so don\u0027t try to compress it again."},{"line_number":221,"context_line":"\tuncompressedRoot :\u003d structfs.Tree{"},{"line_number":222,"context_line":"\t\tstructfs.File(\"bundle.zip\", bundleBlob),"},{"line_number":223,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"d342d8ae_9a2d2952","line":220,"in_reply_to":"8ca16a1e_d5555485","updated":"2025-03-26 14:41:08.000000000","message":"I will split this out as a separate change and do some benchmarks to see if it\u0027s worth it.","commit_id":"78342a62d8f94781fe7a34224b53d79924af9a2d"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"baf209eead51e94028c4d3fca1b006fc20362b49","unresolved":false,"context_lines":[{"line_number":217,"context_line":"\t\treturn nil, err"},{"line_number":218,"context_line":"\t}"},{"line_number":219,"context_line":""},{"line_number":220,"context_line":"\t// The bundle is already compressed, so don\u0027t try to compress it again."},{"line_number":221,"context_line":"\tuncompressedRoot :\u003d structfs.Tree{"},{"line_number":222,"context_line":"\t\tstructfs.File(\"bundle.zip\", bundleBlob),"},{"line_number":223,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"971740db_09f9b650","line":220,"in_reply_to":"d342d8ae_9a2d2952","updated":"2025-03-26 16:25:38.000000000","message":"It turns out that it\u0027s indeed not worth it. With compression, it only takes 40 ms longer to write a 170 MB bundle. This does not include decompression, but that should also be fast.","commit_id":"78342a62d8f94781fe7a34224b53d79924af9a2d"}]}
