)]}'
{"/PATCHSET_LEVEL":[{"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":"63d6d679770d4105446c1517060b0d2072387c98","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"00040969_817b371f","updated":"2023-02-15 22:53:32.000000000","message":"Generally looks fine, two small nits. Sweeping only on Add() is smart, it keeps the  size bounded while not needing to do complicated locking.","commit_id":"e6812f42bf9ec05d495a0eda93b84e7a366e174a"}],"cloud/lib/sinbin/sinbin.go":[{"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":"63d6d679770d4105446c1517060b0d2072387c98","unresolved":true,"context_lines":[{"line_number":39,"context_line":"\t\treturn"},{"line_number":40,"context_line":"\t}"},{"line_number":41,"context_line":"\tnow :\u003d time.Now()"},{"line_number":42,"context_line":"\ttoRemove :\u003d make(map[*T]struct{})"},{"line_number":43,"context_line":"\tfor k, e :\u003d range s.bench {"},{"line_number":44,"context_line":"\t\tif now.After(e.until) {"},{"line_number":45,"context_line":"\t\t\ttoRemove[\u0026k] \u003d struct{}{}"}],"source_content_type":"text/x-go","patch_set":3,"id":"4c788ca5_87ac6f57","line":42,"range":{"start_line":42,"start_character":1,"end_line":42,"end_character":9},"updated":"2023-02-15 22:53:32.000000000","message":"Deleting values from a map while iterating it is permitted in Go. No need to mark and delete. Even \"Effective Go\" is doing it: https://go.dev/doc/effective_go#for","commit_id":"e6812f42bf9ec05d495a0eda93b84e7a366e174a"},{"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":"792ac7625a6d8d7ab583c5e31b454bd7cddc5a32","unresolved":false,"context_lines":[{"line_number":39,"context_line":"\t\treturn"},{"line_number":40,"context_line":"\t}"},{"line_number":41,"context_line":"\tnow :\u003d time.Now()"},{"line_number":42,"context_line":"\ttoRemove :\u003d make(map[*T]struct{})"},{"line_number":43,"context_line":"\tfor k, e :\u003d range s.bench {"},{"line_number":44,"context_line":"\t\tif now.After(e.until) {"},{"line_number":45,"context_line":"\t\t\ttoRemove[\u0026k] \u003d struct{}{}"}],"source_content_type":"text/x-go","patch_set":3,"id":"fef15614_c11b9371","line":42,"range":{"start_line":42,"start_character":1,"end_line":42,"end_character":9},"in_reply_to":"4c788ca5_87ac6f57","updated":"2023-02-15 23:09:23.000000000","message":"Oh, whoops, Python brain.","commit_id":"e6812f42bf9ec05d495a0eda93b84e7a366e174a"},{"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":"63d6d679770d4105446c1517060b0d2072387c98","unresolved":true,"context_lines":[{"line_number":48,"context_line":"\tfor k, _ :\u003d range toRemove {"},{"line_number":49,"context_line":"\t\tdelete(s.bench, *k)"},{"line_number":50,"context_line":"\t}"},{"line_number":51,"context_line":"\ts.lastSweep \u003d time.Now()"},{"line_number":52,"context_line":"}"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"// Add an element \u0027t\u0027 to a Sinbin with a given deadline. From now until that"}],"source_content_type":"text/x-go","patch_set":3,"id":"3a4719e0_aa547579","line":51,"range":{"start_line":51,"start_character":15,"end_line":51,"end_character":25},"updated":"2023-02-15 22:53:32.000000000","message":"You\u0027re already using a local \"now\" as a single instant for dropping expired records, use that instant here? Technically doesn\u0027t matter as there is no interval at play, but half-using the single now pattern seems a bit weird to me.","commit_id":"e6812f42bf9ec05d495a0eda93b84e7a366e174a"},{"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":"792ac7625a6d8d7ab583c5e31b454bd7cddc5a32","unresolved":false,"context_lines":[{"line_number":48,"context_line":"\tfor k, _ :\u003d range toRemove {"},{"line_number":49,"context_line":"\t\tdelete(s.bench, *k)"},{"line_number":50,"context_line":"\t}"},{"line_number":51,"context_line":"\ts.lastSweep \u003d time.Now()"},{"line_number":52,"context_line":"}"},{"line_number":53,"context_line":""},{"line_number":54,"context_line":"// Add an element \u0027t\u0027 to a Sinbin with a given deadline. From now until that"}],"source_content_type":"text/x-go","patch_set":3,"id":"5ae89e87_617769c3","line":51,"range":{"start_line":51,"start_character":15,"end_line":51,"end_character":25},"in_reply_to":"3a4719e0_aa547579","updated":"2023-02-15 23:09:23.000000000","message":"Indeed.","commit_id":"e6812f42bf9ec05d495a0eda93b84e7a366e174a"}]}
