)]}'
{"metropolis/pkg/devicemapper/devicemapper.go":[{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"7a797a1fa9540cb6c7c0821d3572f24651cdf4c0","unresolved":true,"context_lines":[{"line_number":172,"context_line":"var ctrlFileError error"},{"line_number":173,"context_line":"var ctrlFileOnce sync.Once"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"func initCtrlFile() {"},{"line_number":176,"context_line":"\tctrlFile, ctrlFileError \u003d os.Open(\"/dev/mapper/control\")"},{"line_number":177,"context_line":"\tif os.IsNotExist(ctrlFileError) {"},{"line_number":178,"context_line":"\t\tctrlFileError \u003d nil"}],"source_content_type":"text/x-go","patch_set":2,"id":"0d76f1db_4428491a","line":175,"updated":"2021-08-24 13:15:56.000000000","message":"Couldn\u0027t we do this in a `func init()`?","commit_id":"91bc560374c9311a59bd43e16920dee7de444718"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"480d9584ebd81e3a8389fb4d286f3f6478526276","unresolved":true,"context_lines":[{"line_number":172,"context_line":"var ctrlFileError error"},{"line_number":173,"context_line":"var ctrlFileOnce sync.Once"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"func initCtrlFile() {"},{"line_number":176,"context_line":"\tctrlFile, ctrlFileError \u003d os.Open(\"/dev/mapper/control\")"},{"line_number":177,"context_line":"\tif os.IsNotExist(ctrlFileError) {"},{"line_number":178,"context_line":"\t\tctrlFileError \u003d nil"}],"source_content_type":"text/x-go","patch_set":2,"id":"e38fdd57_fce2b6cf","line":175,"in_reply_to":"0d76f1db_4428491a","updated":"2021-08-24 16:11:18.000000000","message":"Yes, we could. But we\u0027d be opening a file descriptor for every transitive user of this library even if they never interacted with it. sync.Once is very cheap if it\u0027s already initialized.","commit_id":"91bc560374c9311a59bd43e16920dee7de444718"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"fcd54f9896a164483f90dd1be69467ee54cdd908","unresolved":false,"context_lines":[{"line_number":172,"context_line":"var ctrlFileError error"},{"line_number":173,"context_line":"var ctrlFileOnce sync.Once"},{"line_number":174,"context_line":""},{"line_number":175,"context_line":"func initCtrlFile() {"},{"line_number":176,"context_line":"\tctrlFile, ctrlFileError \u003d os.Open(\"/dev/mapper/control\")"},{"line_number":177,"context_line":"\tif os.IsNotExist(ctrlFileError) {"},{"line_number":178,"context_line":"\t\tctrlFileError \u003d nil"}],"source_content_type":"text/x-go","patch_set":2,"id":"9d4003ac_3ae9e36e","line":175,"in_reply_to":"e38fdd57_fce2b6cf","updated":"2021-08-25 11:55:21.000000000","message":"Sure. I was thinking it\u0027s not worth the effort to do this instead of doing an init(), but it\u0027s also not worth discussing it this much :).\n\nLet\u0027s keep this.","commit_id":"91bc560374c9311a59bd43e16920dee7de444718"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"7a797a1fa9540cb6c7c0821d3572f24651cdf4c0","unresolved":true,"context_lines":[{"line_number":182,"context_line":"\t\t\tctrlFileError \u003d fmt.Errorf(\"devicemapper control device doesn\u0027t exist and can\u0027t be mknod()ed: %w\", ctrlFileError)"},{"line_number":183,"context_line":"\t\t\treturn"},{"line_number":184,"context_line":"\t\t}"},{"line_number":185,"context_line":"\t\tctrlFile, ctrlFileError \u003d os.Open(\"/dev/mapper/control\")"},{"line_number":186,"context_line":"\t}"},{"line_number":187,"context_line":"\tif ctrlFileError !\u003d nil {"},{"line_number":188,"context_line":"\t\tctrlFileError \u003d fmt.Errorf(\"failed to devicemapper control device: %w\", ctrlFileError)"}],"source_content_type":"text/x-go","patch_set":2,"id":"47a8bd34_eaa9515b","line":185,"range":{"start_line":185,"start_character":2,"end_line":185,"end_character":58},"updated":"2021-08-24 13:15:56.000000000","message":"This should likely be outside the `if os.IsNotExist()` check, this will fail to open /dev/mapper/control if it already exists without having to create it first.","commit_id":"91bc560374c9311a59bd43e16920dee7de444718"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"480d9584ebd81e3a8389fb4d286f3f6478526276","unresolved":false,"context_lines":[{"line_number":182,"context_line":"\t\t\tctrlFileError \u003d fmt.Errorf(\"devicemapper control device doesn\u0027t exist and can\u0027t be mknod()ed: %w\", ctrlFileError)"},{"line_number":183,"context_line":"\t\t\treturn"},{"line_number":184,"context_line":"\t\t}"},{"line_number":185,"context_line":"\t\tctrlFile, ctrlFileError \u003d os.Open(\"/dev/mapper/control\")"},{"line_number":186,"context_line":"\t}"},{"line_number":187,"context_line":"\tif ctrlFileError !\u003d nil {"},{"line_number":188,"context_line":"\t\tctrlFileError \u003d fmt.Errorf(\"failed to devicemapper control device: %w\", ctrlFileError)"}],"source_content_type":"text/x-go","patch_set":2,"id":"da8da824_240985fa","line":185,"range":{"start_line":185,"start_character":2,"end_line":185,"end_character":58},"in_reply_to":"47a8bd34_eaa9515b","updated":"2021-08-24 16:11:18.000000000","message":"The first os.Open will already succeed then, thus not even entering that block. But there was an inverted logic issue in there which I fixed.","commit_id":"91bc560374c9311a59bd43e16920dee7de444718"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"fcd54f9896a164483f90dd1be69467ee54cdd908","unresolved":false,"context_lines":[{"line_number":182,"context_line":"\t\t\tctrlFileError \u003d fmt.Errorf(\"devicemapper control device doesn\u0027t exist and can\u0027t be mknod()ed: %w\", ctrlFileError)"},{"line_number":183,"context_line":"\t\t\treturn"},{"line_number":184,"context_line":"\t\t}"},{"line_number":185,"context_line":"\t\tctrlFile, ctrlFileError \u003d os.Open(\"/dev/mapper/control\")"},{"line_number":186,"context_line":"\t}"},{"line_number":187,"context_line":"\tif ctrlFileError !\u003d nil {"},{"line_number":188,"context_line":"\t\tctrlFileError \u003d fmt.Errorf(\"failed to devicemapper control device: %w\", ctrlFileError)"}],"source_content_type":"text/x-go","patch_set":2,"id":"807c04fc_88cbab24","line":185,"range":{"start_line":185,"start_character":2,"end_line":185,"end_character":58},"in_reply_to":"da8da824_240985fa","updated":"2021-08-25 11:55:21.000000000","message":"Oh yeah, missed that.","commit_id":"91bc560374c9311a59bd43e16920dee7de444718"},{"author":{"_account_id":1000002,"name":"Serge Bazanski","display_name":"Serge","email":"serge@monogon.tech","username":"serge","avatars":[{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/52c41428b6369f2c02b9717425216f7d.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"7a797a1fa9540cb6c7c0821d3572f24651cdf4c0","unresolved":true,"context_lines":[{"line_number":185,"context_line":"\t\tctrlFile, ctrlFileError \u003d os.Open(\"/dev/mapper/control\")"},{"line_number":186,"context_line":"\t}"},{"line_number":187,"context_line":"\tif ctrlFileError !\u003d nil {"},{"line_number":188,"context_line":"\t\tctrlFileError \u003d fmt.Errorf(\"failed to devicemapper control device: %w\", ctrlFileError)"},{"line_number":189,"context_line":"\t}"},{"line_number":190,"context_line":"}"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-go","patch_set":2,"id":"2920d497_59fbcc50","line":188,"range":{"start_line":188,"start_character":30,"end_line":188,"end_character":52},"updated":"2021-08-24 13:15:56.000000000","message":"... failed to create ... ?","commit_id":"91bc560374c9311a59bd43e16920dee7de444718"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"480d9584ebd81e3a8389fb4d286f3f6478526276","unresolved":false,"context_lines":[{"line_number":185,"context_line":"\t\tctrlFile, ctrlFileError \u003d os.Open(\"/dev/mapper/control\")"},{"line_number":186,"context_line":"\t}"},{"line_number":187,"context_line":"\tif ctrlFileError !\u003d nil {"},{"line_number":188,"context_line":"\t\tctrlFileError \u003d fmt.Errorf(\"failed to devicemapper control device: %w\", ctrlFileError)"},{"line_number":189,"context_line":"\t}"},{"line_number":190,"context_line":"}"},{"line_number":191,"context_line":""}],"source_content_type":"text/x-go","patch_set":2,"id":"884354a0_e0807728","line":188,"range":{"start_line":188,"start_character":30,"end_line":188,"end_character":52},"in_reply_to":"2920d497_59fbcc50","updated":"2021-08-24 16:11:18.000000000","message":"Done","commit_id":"91bc560374c9311a59bd43e16920dee7de444718"}]}
