)]}'
{"/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":"e97f2f9d7ff63d6eee1f00d8ea0d1a61982f1e9f","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":1,"id":"f00daa14_e7bbd9ba","updated":"2023-10-30 15:06:55.000000000","message":"While the new library does help in reducing code complexity, I am not happy with this as a whole as it lends itself to a lot of accidentally-slow implementations as well as using watchers to feed more maps.","commit_id":"cc3366e5c782a59f1fbf80c0bf811c2f0a6bdeca"},{"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":"2abd718925c4b7f4790eaa321ad1dc247fa60e10","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":4,"id":"bd11de8a_c51f934b","updated":"2023-11-13 18:36:34.000000000","message":"One final complexity fix, otherwise this now looks a lot better.","commit_id":"d56863fe0c846e6b71527287f8d3e37f62d18823"}],"metropolis/node/core/clusternet/wireguard.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":"e97f2f9d7ff63d6eee1f00d8ea0d1a61982f1e9f","unresolved":true,"context_lines":[{"line_number":30,"context_line":"type wireguard interface {"},{"line_number":31,"context_line":"\tensureOnDiskKey(dir *localstorage.DataKubernetesClusterNetworkingDirectory) error"},{"line_number":32,"context_line":"\tsetup(clusterNet *net.IPNet) error"},{"line_number":33,"context_line":"\tconfigurePeer(n *ipb.Node) error"},{"line_number":34,"context_line":"\tunconfigurePeer(n *ipb.Node) error"},{"line_number":35,"context_line":"\tkey() wgtypes.Key"},{"line_number":36,"context_line":"\tclose()"}],"source_content_type":"text/x-go","patch_set":1,"id":"f2920ad2_cd6121d9","line":33,"range":{"start_line":33,"start_character":1,"end_line":33,"end_character":14},"updated":"2023-10-30 15:06:55.000000000","message":"Previously this issued one WG_CMD_SET_DEVICE netlink request for the initial (potentially very large) set of nodes, now this always configures them serially. If there is any O(n) behavior in WG_CMD_SET_DEVICE (which is not unlikely), this is now O(n^2). Do you know what sort of performance this will have with a few thousand nodes?","commit_id":"cc3366e5c782a59f1fbf80c0bf811c2f0a6bdeca"},{"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":"1c8a6eba5ba2a336c9b76c1ccbabc8dfea9955c9","unresolved":false,"context_lines":[{"line_number":30,"context_line":"type wireguard interface {"},{"line_number":31,"context_line":"\tensureOnDiskKey(dir *localstorage.DataKubernetesClusterNetworkingDirectory) error"},{"line_number":32,"context_line":"\tsetup(clusterNet *net.IPNet) error"},{"line_number":33,"context_line":"\tconfigurePeer(n *ipb.Node) error"},{"line_number":34,"context_line":"\tunconfigurePeer(n *ipb.Node) error"},{"line_number":35,"context_line":"\tkey() wgtypes.Key"},{"line_number":36,"context_line":"\tclose()"}],"source_content_type":"text/x-go","patch_set":1,"id":"9793d166_cb2429d1","line":33,"range":{"start_line":33,"start_character":1,"end_line":33,"end_character":14},"in_reply_to":"f2920ad2_cd6121d9","updated":"2023-11-13 13:52:08.000000000","message":"Done","commit_id":"cc3366e5c782a59f1fbf80c0bf811c2f0a6bdeca"},{"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":"e97f2f9d7ff63d6eee1f00d8ea0d1a61982f1e9f","unresolved":true,"context_lines":[{"line_number":141,"context_line":"\t\t}"},{"line_number":142,"context_line":"\t\tallowedIPs \u003d append(allowedIPs, *podNet)"},{"line_number":143,"context_line":"\t}"},{"line_number":144,"context_line":"\tsort.Slice(allowedIPs, func(i, j int) bool { return allowedIPs[i].String() \u003c allowedIPs[j].String() })"},{"line_number":145,"context_line":"\tendpoint :\u003d net.UDPAddr{Port: int(common.WireGuardPort), IP: addressParsed}"},{"line_number":146,"context_line":"\tconfig :\u003d wgtypes.PeerConfig{"},{"line_number":147,"context_line":"\t\tPublicKey:         pubkeyParsed,"}],"source_content_type":"text/x-go","patch_set":1,"id":"12b855e0_f9ee3296","line":144,"range":{"start_line":144,"start_character":12,"end_line":144,"end_character":22},"updated":"2023-10-30 15:06:55.000000000","message":"Why sort this? The WireGuard PeerConfig doesn\u0027t care as the kernel is going to build them into a prefix tree anyways and this value is as far as I can see not used otherwise.","commit_id":"cc3366e5c782a59f1fbf80c0bf811c2f0a6bdeca"},{"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":"1c8a6eba5ba2a336c9b76c1ccbabc8dfea9955c9","unresolved":false,"context_lines":[{"line_number":141,"context_line":"\t\t}"},{"line_number":142,"context_line":"\t\tallowedIPs \u003d append(allowedIPs, *podNet)"},{"line_number":143,"context_line":"\t}"},{"line_number":144,"context_line":"\tsort.Slice(allowedIPs, func(i, j int) bool { return allowedIPs[i].String() \u003c allowedIPs[j].String() })"},{"line_number":145,"context_line":"\tendpoint :\u003d net.UDPAddr{Port: int(common.WireGuardPort), IP: addressParsed}"},{"line_number":146,"context_line":"\tconfig :\u003d wgtypes.PeerConfig{"},{"line_number":147,"context_line":"\t\tPublicKey:         pubkeyParsed,"}],"source_content_type":"text/x-go","patch_set":1,"id":"4baa65dd_609a3d87","line":144,"range":{"start_line":144,"start_character":12,"end_line":144,"end_character":22},"in_reply_to":"12b855e0_f9ee3296","updated":"2023-11-13 13:52:08.000000000","message":"Done","commit_id":"cc3366e5c782a59f1fbf80c0bf811c2f0a6bdeca"}],"metropolis/node/core/metrics/discovery.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":"e97f2f9d7ff63d6eee1f00d8ea0d1a61982f1e9f","unresolved":true,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"\t\ts.sdResp \u003d nil"},{"line_number":42,"context_line":"\t\tfor _, n :\u003d range nodes {"},{"line_number":43,"context_line":"\t\t\t// Only care about nodes that have all required configuration set."},{"line_number":44,"context_line":"\t\t\tif n.Status \u003d\u003d nil || n.Status.ExternalAddress \u003d\u003d \"\" || n.Roles \u003d\u003d nil {"},{"line_number":45,"context_line":"\t\t\t\tcontinue"},{"line_number":46,"context_line":"\t\t\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"bda5fd08_f118ee43","line":43,"range":{"start_line":43,"start_character":3,"end_line":43,"end_character":69},"updated":"2023-10-30 15:06:55.000000000","message":"This is handled by FilterFn, right?","commit_id":"cc3366e5c782a59f1fbf80c0bf811c2f0a6bdeca"},{"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":"1c8a6eba5ba2a336c9b76c1ccbabc8dfea9955c9","unresolved":false,"context_lines":[{"line_number":40,"context_line":""},{"line_number":41,"context_line":"\t\ts.sdResp \u003d nil"},{"line_number":42,"context_line":"\t\tfor _, n :\u003d range nodes {"},{"line_number":43,"context_line":"\t\t\t// Only care about nodes that have all required configuration set."},{"line_number":44,"context_line":"\t\t\tif n.Status \u003d\u003d nil || n.Status.ExternalAddress \u003d\u003d \"\" || n.Roles \u003d\u003d nil {"},{"line_number":45,"context_line":"\t\t\t\tcontinue"},{"line_number":46,"context_line":"\t\t\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"2e8a82b8_6cc90f20","line":43,"range":{"start_line":43,"start_character":3,"end_line":43,"end_character":69},"in_reply_to":"bda5fd08_f118ee43","updated":"2023-11-13 13:52:08.000000000","message":"Done","commit_id":"cc3366e5c782a59f1fbf80c0bf811c2f0a6bdeca"},{"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":"e97f2f9d7ff63d6eee1f00d8ea0d1a61982f1e9f","unresolved":true,"context_lines":[{"line_number":94,"context_line":"\t\t},"},{"line_number":95,"context_line":"\t\tOnNewUpdated: func(new *ipb.Node) error {"},{"line_number":96,"context_line":"\t\t\tnodes[new.Id] \u003d new"},{"line_number":97,"context_line":"\t\t\tupdate()"},{"line_number":98,"context_line":"\t\t\treturn nil"},{"line_number":99,"context_line":"\t\t},"},{"line_number":100,"context_line":"\t\tOnDeleted: func(prev *ipb.Node) error {"}],"source_content_type":"text/x-go","patch_set":1,"id":"373a1c98_48c63bc5","line":97,"range":{"start_line":97,"start_character":3,"end_line":97,"end_character":9},"updated":"2023-10-30 15:06:55.000000000","message":"Similar issue as with WG: This is now doing O(n^2) work, as update loops over all nodes every time.","commit_id":"cc3366e5c782a59f1fbf80c0bf811c2f0a6bdeca"},{"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":"1c8a6eba5ba2a336c9b76c1ccbabc8dfea9955c9","unresolved":false,"context_lines":[{"line_number":94,"context_line":"\t\t},"},{"line_number":95,"context_line":"\t\tOnNewUpdated: func(new *ipb.Node) error {"},{"line_number":96,"context_line":"\t\t\tnodes[new.Id] \u003d new"},{"line_number":97,"context_line":"\t\t\tupdate()"},{"line_number":98,"context_line":"\t\t\treturn nil"},{"line_number":99,"context_line":"\t\t},"},{"line_number":100,"context_line":"\t\tOnDeleted: func(prev *ipb.Node) error {"}],"source_content_type":"text/x-go","patch_set":1,"id":"3a076414_ea7009f6","line":97,"range":{"start_line":97,"start_character":3,"end_line":97,"end_character":9},"in_reply_to":"373a1c98_48c63bc5","updated":"2023-11-13 13:52:08.000000000","message":"Done","commit_id":"cc3366e5c782a59f1fbf80c0bf811c2f0a6bdeca"}],"metropolis/node/core/network/hostsfile/hostsfile.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":"e97f2f9d7ff63d6eee1f00d8ea0d1a61982f1e9f","unresolved":true,"context_lines":[{"line_number":274,"context_line":"func (s *Service) runCluster(ctx context.Context) error {"},{"line_number":275,"context_line":"\tnodes :\u003d make(nodeMap)"},{"line_number":276,"context_line":"\tsend :\u003d func() {"},{"line_number":277,"context_line":"\t\tnodesCopy :\u003d make(nodeMap)"},{"line_number":278,"context_line":"\t\tfor k, v :\u003d range nodes {"},{"line_number":279,"context_line":"\t\t\tnodesCopy[k] \u003d v"},{"line_number":280,"context_line":"\t\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"e84b0eb3_41a2444e","line":277,"range":{"start_line":277,"start_character":20,"end_line":277,"end_character":27},"updated":"2023-10-30 15:06:55.000000000","message":"Is that copy still needed? These are now immutable according to the watcher doc.","commit_id":"cc3366e5c782a59f1fbf80c0bf811c2f0a6bdeca"},{"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":"1c8a6eba5ba2a336c9b76c1ccbabc8dfea9955c9","unresolved":true,"context_lines":[{"line_number":274,"context_line":"func (s *Service) runCluster(ctx context.Context) error {"},{"line_number":275,"context_line":"\tnodes :\u003d make(nodeMap)"},{"line_number":276,"context_line":"\tsend :\u003d func() {"},{"line_number":277,"context_line":"\t\tnodesCopy :\u003d make(nodeMap)"},{"line_number":278,"context_line":"\t\tfor k, v :\u003d range nodes {"},{"line_number":279,"context_line":"\t\t\tnodesCopy[k] \u003d v"},{"line_number":280,"context_line":"\t\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"f8319359_1de5c3be","line":277,"range":{"start_line":277,"start_character":20,"end_line":277,"end_character":27},"in_reply_to":"e84b0eb3_41a2444e","updated":"2023-11-13 13:52:08.000000000","message":"Yes, because we\u0027re sending this over a channel to be processed at some other point.\n\nThe nodes are immutable, but the map here isn\u0027t.","commit_id":"cc3366e5c782a59f1fbf80c0bf811c2f0a6bdeca"},{"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":"2abd718925c4b7f4790eaa321ad1dc247fa60e10","unresolved":false,"context_lines":[{"line_number":274,"context_line":"func (s *Service) runCluster(ctx context.Context) error {"},{"line_number":275,"context_line":"\tnodes :\u003d make(nodeMap)"},{"line_number":276,"context_line":"\tsend :\u003d func() {"},{"line_number":277,"context_line":"\t\tnodesCopy :\u003d make(nodeMap)"},{"line_number":278,"context_line":"\t\tfor k, v :\u003d range nodes {"},{"line_number":279,"context_line":"\t\t\tnodesCopy[k] \u003d v"},{"line_number":280,"context_line":"\t\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"02f73f9a_def7270f","line":277,"range":{"start_line":277,"start_character":20,"end_line":277,"end_character":27},"in_reply_to":"f8319359_1de5c3be","updated":"2023-11-13 18:36:34.000000000","message":"Done","commit_id":"cc3366e5c782a59f1fbf80c0bf811c2f0a6bdeca"},{"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":"e97f2f9d7ff63d6eee1f00d8ea0d1a61982f1e9f","unresolved":true,"context_lines":[{"line_number":276,"context_line":"\tsend :\u003d func() {"},{"line_number":277,"context_line":"\t\tnodesCopy :\u003d make(nodeMap)"},{"line_number":278,"context_line":"\t\tfor k, v :\u003d range nodes {"},{"line_number":279,"context_line":"\t\t\tnodesCopy[k] \u003d v"},{"line_number":280,"context_line":"\t\t}"},{"line_number":281,"context_line":"\t\ts.clusterC \u003c- nodesCopy"},{"line_number":282,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"e20a9f7a_f3ecb463","line":279,"range":{"start_line":279,"start_character":3,"end_line":279,"end_character":12},"updated":"2023-10-30 15:06:55.000000000","message":"Another O(n^2) operation here","commit_id":"cc3366e5c782a59f1fbf80c0bf811c2f0a6bdeca"},{"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":"1c8a6eba5ba2a336c9b76c1ccbabc8dfea9955c9","unresolved":false,"context_lines":[{"line_number":276,"context_line":"\tsend :\u003d func() {"},{"line_number":277,"context_line":"\t\tnodesCopy :\u003d make(nodeMap)"},{"line_number":278,"context_line":"\t\tfor k, v :\u003d range nodes {"},{"line_number":279,"context_line":"\t\t\tnodesCopy[k] \u003d v"},{"line_number":280,"context_line":"\t\t}"},{"line_number":281,"context_line":"\t\ts.clusterC \u003c- nodesCopy"},{"line_number":282,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"bb0dd1b2_99270607","line":279,"range":{"start_line":279,"start_character":3,"end_line":279,"end_character":12},"in_reply_to":"e20a9f7a_f3ecb463","updated":"2023-11-13 13:52:08.000000000","message":"Done","commit_id":"cc3366e5c782a59f1fbf80c0bf811c2f0a6bdeca"}],"metropolis/node/core/rpc/resolver/resolver.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":"2abd718925c4b7f4790eaa321ad1dc247fa60e10","unresolved":true,"context_lines":[{"line_number":267,"context_line":"\t\t\t},"},{"line_number":268,"context_line":"\t\t\tOnNewUpdated: func(new *apb.Node) error {"},{"line_number":269,"context_line":"\t\t\t\tnodes[new.Id] \u003d new.Status"},{"line_number":270,"context_line":"\t\t\t\treturn update()"},{"line_number":271,"context_line":"\t\t\t},"},{"line_number":272,"context_line":"\t\t\tOnDeleted: func(prev *apb.Node) error {"},{"line_number":273,"context_line":"\t\t\t\tdelete(nodes, prev.Id)"}],"source_content_type":"text/x-go","patch_set":4,"id":"34514ad8_6f5516e9","line":270,"range":{"start_line":270,"start_character":11,"end_line":270,"end_character":17},"updated":"2023-11-13 18:36:34.000000000","message":"Call this per-batch, it performs O(n) work.","commit_id":"d56863fe0c846e6b71527287f8d3e37f62d18823"},{"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":"f2ed60180393795c84a25d833bd9eca94ef95d11","unresolved":false,"context_lines":[{"line_number":267,"context_line":"\t\t\t},"},{"line_number":268,"context_line":"\t\t\tOnNewUpdated: func(new *apb.Node) error {"},{"line_number":269,"context_line":"\t\t\t\tnodes[new.Id] \u003d new.Status"},{"line_number":270,"context_line":"\t\t\t\treturn update()"},{"line_number":271,"context_line":"\t\t\t},"},{"line_number":272,"context_line":"\t\t\tOnDeleted: func(prev *apb.Node) error {"},{"line_number":273,"context_line":"\t\t\t\tdelete(nodes, prev.Id)"}],"source_content_type":"text/x-go","patch_set":4,"id":"c13831c3_33fe228b","line":270,"range":{"start_line":270,"start_character":11,"end_line":270,"end_character":17},"in_reply_to":"34514ad8_6f5516e9","updated":"2023-11-13 19:52:08.000000000","message":"Done","commit_id":"d56863fe0c846e6b71527287f8d3e37f62d18823"}]}
