)]}'
{"metropolis/node/core/curator/impl_leader.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":"22c8a5e7fc44e0e297d9f2b6be1828f615c006bc","unresolved":true,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"\t// startTs is a local monotonic clock timestamp associated with this node\u0027s"},{"line_number":59,"context_line":"\t// assumption of Curator leadership."},{"line_number":60,"context_line":"\tstartTs time.Time"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"\t// ls contains the current leader\u0027s non-persistent local state."},{"line_number":63,"context_line":"\tls leaderState"}],"source_content_type":"text/x-go","patch_set":1,"id":"d9550b0e_0544674f","line":60,"range":{"start_line":60,"start_character":1,"end_line":60,"end_character":18},"updated":"2022-05-24 15:48:10.000000000","message":"Why not put this into leaderState, too?","commit_id":"5f07934c5a4163833d4ca39ce31d27c25c202979"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b3ceb909b9bddf0064ff208c35414e454c118ef1","unresolved":false,"context_lines":[{"line_number":57,"context_line":""},{"line_number":58,"context_line":"\t// startTs is a local monotonic clock timestamp associated with this node\u0027s"},{"line_number":59,"context_line":"\t// assumption of Curator leadership."},{"line_number":60,"context_line":"\tstartTs time.Time"},{"line_number":61,"context_line":""},{"line_number":62,"context_line":"\t// ls contains the current leader\u0027s non-persistent local state."},{"line_number":63,"context_line":"\tls leaderState"}],"source_content_type":"text/x-go","patch_set":1,"id":"8c926137_1f5e07c3","line":60,"range":{"start_line":60,"start_character":1,"end_line":60,"end_character":18},"in_reply_to":"d9550b0e_0544674f","updated":"2022-05-25 14:52:17.000000000","message":"Done","commit_id":"5f07934c5a4163833d4ca39ce31d27c25c202979"},{"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":"626d958f8276690e7f078c87990bc57b71d1e285","unresolved":true,"context_lines":[{"line_number":24,"context_line":"\t// heartbeatTimestamps maps node IDs to monotonic clock timestamps matching"},{"line_number":25,"context_line":"\t// the last corresponding node heartbeats received by the current Curator"},{"line_number":26,"context_line":"\t// leader."},{"line_number":27,"context_line":"\theartbeatTimestamps sync.Map"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"\t// startTs is a local monotonic clock timestamp associated with this node\u0027s"},{"line_number":30,"context_line":"\t// assumption of Curator leadership."}],"source_content_type":"text/x-go","patch_set":3,"id":"33fa5976_c8926c91","line":27,"range":{"start_line":27,"start_character":21,"end_line":27,"end_character":29},"updated":"2022-05-27 08:59:53.000000000","message":"Per the sync.Map docs:\n\n The Map type is optimized for two common use cases: (1) when the entry for a given key is only ever written once but read many times, as in caches that only grow, or (2) when multiple goroutines read, write, and overwrite entries for disjoint sets of keys. In these two cases, use of a Map may significantly reduce lock contention compared to a Go map paired with a separate Mutex or RWMutex.\n    \nSo a typed map behind an RWLock would\u0027ve probably been just as good (and with less interface{}). But this is probably also fine.","commit_id":"43457a2160a7120a01b135754a21031ac6c636f5"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"62bf34ed25c5ec3a68e9928624f98dda825c02e1","unresolved":false,"context_lines":[{"line_number":24,"context_line":"\t// heartbeatTimestamps maps node IDs to monotonic clock timestamps matching"},{"line_number":25,"context_line":"\t// the last corresponding node heartbeats received by the current Curator"},{"line_number":26,"context_line":"\t// leader."},{"line_number":27,"context_line":"\theartbeatTimestamps sync.Map"},{"line_number":28,"context_line":""},{"line_number":29,"context_line":"\t// startTs is a local monotonic clock timestamp associated with this node\u0027s"},{"line_number":30,"context_line":"\t// assumption of Curator leadership."}],"source_content_type":"text/x-go","patch_set":3,"id":"1affea9b_e8f17e8d","line":27,"range":{"start_line":27,"start_character":21,"end_line":27,"end_character":29},"in_reply_to":"33fa5976_c8926c91","updated":"2022-05-27 09:22:52.000000000","message":"I could take a lock once per call, which would make batch processing of the node entries quicker, but that would also stall processing of incoming heartbeats, so meh. I\u0027d rather not go into this before it becomes a measurable problem.","commit_id":"43457a2160a7120a01b135754a21031ac6c636f5"}],"metropolis/node/core/curator/impl_leader_curator.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":"22c8a5e7fc44e0e297d9f2b6be1828f615c006bc","unresolved":true,"context_lines":[{"line_number":277,"context_line":"\t\t}"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"\t\t// Update the node\u0027s timestamp within the local Curator state."},{"line_number":280,"context_line":"\t\tif l.ls.heartbeatTimestamps \u003d\u003d nil {"},{"line_number":281,"context_line":"\t\t\tl.ls.heartbeatTimestamps \u003d make(map[string]time.Time)"},{"line_number":282,"context_line":"\t\t}"},{"line_number":283,"context_line":"\t\tl.ls.heartbeatTimestamps[id] \u003d time.Now()"}],"source_content_type":"text/x-go","patch_set":1,"id":"dd4bdfe5_e4c8354f","line":280,"range":{"start_line":280,"start_character":2,"end_line":280,"end_character":30},"updated":"2022-05-24 15:48:10.000000000","message":"Data race. Use a lock here.","commit_id":"5f07934c5a4163833d4ca39ce31d27c25c202979"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b3ceb909b9bddf0064ff208c35414e454c118ef1","unresolved":false,"context_lines":[{"line_number":277,"context_line":"\t\t}"},{"line_number":278,"context_line":""},{"line_number":279,"context_line":"\t\t// Update the node\u0027s timestamp within the local Curator state."},{"line_number":280,"context_line":"\t\tif l.ls.heartbeatTimestamps \u003d\u003d nil {"},{"line_number":281,"context_line":"\t\t\tl.ls.heartbeatTimestamps \u003d make(map[string]time.Time)"},{"line_number":282,"context_line":"\t\t}"},{"line_number":283,"context_line":"\t\tl.ls.heartbeatTimestamps[id] \u003d time.Now()"}],"source_content_type":"text/x-go","patch_set":1,"id":"ff95cbdd_50eacb80","line":280,"range":{"start_line":280,"start_character":2,"end_line":280,"end_character":30},"in_reply_to":"dd4bdfe5_e4c8354f","updated":"2022-05-25 14:52:17.000000000","message":"Done","commit_id":"5f07934c5a4163833d4ca39ce31d27c25c202979"}],"metropolis/node/core/curator/impl_leader_management.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":"22c8a5e7fc44e0e297d9f2b6be1828f615c006bc","unresolved":true,"context_lines":[{"line_number":154,"context_line":"\t\t\troles.KubernetesWorker \u003d \u0026cpb.NodeRoles_KubernetesWorker{}"},{"line_number":155,"context_line":"\t\t}"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"\t\t// Get the node\u0027s last heartbeat timestamp, as seen from the Curator"},{"line_number":158,"context_line":"\t\t// leader\u0027s perspective."},{"line_number":159,"context_line":"\t\tnid :\u003d identity.NodeID(node.pubkey)"},{"line_number":160,"context_line":"\t\tvar nts time.Time"},{"line_number":161,"context_line":"\t\tif v, ok :\u003d l.ls.heartbeatTimestamps[nid]; ok {"}],"source_content_type":"text/x-go","patch_set":1,"id":"ab35029a_c9acabbb","line":158,"range":{"start_line":157,"start_character":2,"end_line":158,"end_character":26},"updated":"2022-05-24 15:48:10.000000000","message":"Factor this out to a separate function.","commit_id":"5f07934c5a4163833d4ca39ce31d27c25c202979"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b3ceb909b9bddf0064ff208c35414e454c118ef1","unresolved":false,"context_lines":[{"line_number":154,"context_line":"\t\t\troles.KubernetesWorker \u003d \u0026cpb.NodeRoles_KubernetesWorker{}"},{"line_number":155,"context_line":"\t\t}"},{"line_number":156,"context_line":""},{"line_number":157,"context_line":"\t\t// Get the node\u0027s last heartbeat timestamp, as seen from the Curator"},{"line_number":158,"context_line":"\t\t// leader\u0027s perspective."},{"line_number":159,"context_line":"\t\tnid :\u003d identity.NodeID(node.pubkey)"},{"line_number":160,"context_line":"\t\tvar nts time.Time"},{"line_number":161,"context_line":"\t\tif v, ok :\u003d l.ls.heartbeatTimestamps[nid]; ok {"}],"source_content_type":"text/x-go","patch_set":1,"id":"23a0fe4b_52eeb926","line":158,"range":{"start_line":157,"start_character":2,"end_line":158,"end_character":26},"in_reply_to":"ab35029a_c9acabbb","updated":"2022-05-25 14:52:17.000000000","message":"Done","commit_id":"5f07934c5a4163833d4ca39ce31d27c25c202979"},{"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":"22c8a5e7fc44e0e297d9f2b6be1828f615c006bc","unresolved":true,"context_lines":[{"line_number":157,"context_line":"\t\t// Get the node\u0027s last heartbeat timestamp, as seen from the Curator"},{"line_number":158,"context_line":"\t\t// leader\u0027s perspective."},{"line_number":159,"context_line":"\t\tnid :\u003d identity.NodeID(node.pubkey)"},{"line_number":160,"context_line":"\t\tvar nts time.Time"},{"line_number":161,"context_line":"\t\tif v, ok :\u003d l.ls.heartbeatTimestamps[nid]; ok {"},{"line_number":162,"context_line":"\t\t\tnts \u003d v"},{"line_number":163,"context_line":"\t\t}"},{"line_number":164,"context_line":"\t\t// lhb is the duration since the last heartbeat was received."},{"line_number":165,"context_line":"\t\tlhb :\u003d now.Sub(nts)"},{"line_number":166,"context_line":"\t\t// Determine the node\u0027s health based on the heartbeat timestamp."}],"source_content_type":"text/x-go","patch_set":1,"id":"201074cc_ce7d1a04","line":163,"range":{"start_line":160,"start_character":2,"end_line":163,"end_character":3},"updated":"2022-05-24 15:48:10.000000000","message":"Equivalent to just doing\n\n    nts :\u003d l.ls.heartbeatTimestamps[nid]\n    \n(maps in go default to zero values for missing/unknown keys)","commit_id":"5f07934c5a4163833d4ca39ce31d27c25c202979"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b3ceb909b9bddf0064ff208c35414e454c118ef1","unresolved":false,"context_lines":[{"line_number":157,"context_line":"\t\t// Get the node\u0027s last heartbeat timestamp, as seen from the Curator"},{"line_number":158,"context_line":"\t\t// leader\u0027s perspective."},{"line_number":159,"context_line":"\t\tnid :\u003d identity.NodeID(node.pubkey)"},{"line_number":160,"context_line":"\t\tvar nts time.Time"},{"line_number":161,"context_line":"\t\tif v, ok :\u003d l.ls.heartbeatTimestamps[nid]; ok {"},{"line_number":162,"context_line":"\t\t\tnts \u003d v"},{"line_number":163,"context_line":"\t\t}"},{"line_number":164,"context_line":"\t\t// lhb is the duration since the last heartbeat was received."},{"line_number":165,"context_line":"\t\tlhb :\u003d now.Sub(nts)"},{"line_number":166,"context_line":"\t\t// Determine the node\u0027s health based on the heartbeat timestamp."}],"source_content_type":"text/x-go","patch_set":1,"id":"a9cbc1cb_dfdb5214","line":163,"range":{"start_line":160,"start_character":2,"end_line":163,"end_character":3},"in_reply_to":"201074cc_ce7d1a04","updated":"2022-05-25 14:52:17.000000000","message":"Done","commit_id":"5f07934c5a4163833d4ca39ce31d27c25c202979"}],"metropolis/node/core/curator/listener.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":"22c8a5e7fc44e0e297d9f2b6be1828f615c006bc","unresolved":true,"context_lines":[{"line_number":362,"context_line":"\treturn"},{"line_number":363,"context_line":"}"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"type heartbeatServer struct {"},{"line_number":366,"context_line":"\tgrpc.ServerStream"},{"line_number":367,"context_line":"\tctx context.Context"},{"line_number":368,"context_line":"}"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"func (s *heartbeatServer) Context() context.Context {"},{"line_number":371,"context_line":"\treturn s.ctx"},{"line_number":372,"context_line":"}"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"func (s *heartbeatServer) Recv() (*cpb.HeartbeatUpdateRequest, error) {"},{"line_number":375,"context_line":"\tvar m cpb.HeartbeatUpdateRequest"},{"line_number":376,"context_line":"\treturn \u0026m, s.ServerStream.RecvMsg(\u0026m)"},{"line_number":377,"context_line":"}"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"func (s *heartbeatServer) Send(m *cpb.HeartbeatUpdateResponse) error {"},{"line_number":380,"context_line":"\treturn s.ServerStream.SendMsg(m)"},{"line_number":381,"context_line":"}"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"func (l *listener) Heartbeat(srv cpb.Curator_HeartbeatServer) error {"},{"line_number":384,"context_line":"\tproxy :\u003d func(ctx context.Context, impl rpc.ClusterServices) error {"},{"line_number":385,"context_line":"\t\treturn impl.Heartbeat(\u0026heartbeatServer{"},{"line_number":386,"context_line":"\t\t\tServerStream: srv,"},{"line_number":387,"context_line":"\t\t\tctx:          ctx,"},{"line_number":388,"context_line":"\t\t})"},{"line_number":389,"context_line":"\t}"},{"line_number":390,"context_line":"\treturn l.callImpl(srv.Context(), proxy)"},{"line_number":391,"context_line":"}"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"func (l *listener) GetClusterInfo(ctx context.Context, req *apb.GetClusterInfoRequest) (res *apb.GetClusterInfoResponse, err error) {"},{"line_number":394,"context_line":"\terr \u003d l.callImpl(ctx, func(ctx context.Context, impl rpc.ClusterServices) error {"}],"source_content_type":"text/x-go","patch_set":1,"id":"9a2bba9f_c546ec8d","line":391,"range":{"start_line":365,"start_character":0,"end_line":391,"end_character":1},"updated":"2022-05-24 15:48:10.000000000","message":"Not needed anymore.","commit_id":"5f07934c5a4163833d4ca39ce31d27c25c202979"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b3ceb909b9bddf0064ff208c35414e454c118ef1","unresolved":false,"context_lines":[{"line_number":362,"context_line":"\treturn"},{"line_number":363,"context_line":"}"},{"line_number":364,"context_line":""},{"line_number":365,"context_line":"type heartbeatServer struct {"},{"line_number":366,"context_line":"\tgrpc.ServerStream"},{"line_number":367,"context_line":"\tctx context.Context"},{"line_number":368,"context_line":"}"},{"line_number":369,"context_line":""},{"line_number":370,"context_line":"func (s *heartbeatServer) Context() context.Context {"},{"line_number":371,"context_line":"\treturn s.ctx"},{"line_number":372,"context_line":"}"},{"line_number":373,"context_line":""},{"line_number":374,"context_line":"func (s *heartbeatServer) Recv() (*cpb.HeartbeatUpdateRequest, error) {"},{"line_number":375,"context_line":"\tvar m cpb.HeartbeatUpdateRequest"},{"line_number":376,"context_line":"\treturn \u0026m, s.ServerStream.RecvMsg(\u0026m)"},{"line_number":377,"context_line":"}"},{"line_number":378,"context_line":""},{"line_number":379,"context_line":"func (s *heartbeatServer) Send(m *cpb.HeartbeatUpdateResponse) error {"},{"line_number":380,"context_line":"\treturn s.ServerStream.SendMsg(m)"},{"line_number":381,"context_line":"}"},{"line_number":382,"context_line":""},{"line_number":383,"context_line":"func (l *listener) Heartbeat(srv cpb.Curator_HeartbeatServer) error {"},{"line_number":384,"context_line":"\tproxy :\u003d func(ctx context.Context, impl rpc.ClusterServices) error {"},{"line_number":385,"context_line":"\t\treturn impl.Heartbeat(\u0026heartbeatServer{"},{"line_number":386,"context_line":"\t\t\tServerStream: srv,"},{"line_number":387,"context_line":"\t\t\tctx:          ctx,"},{"line_number":388,"context_line":"\t\t})"},{"line_number":389,"context_line":"\t}"},{"line_number":390,"context_line":"\treturn l.callImpl(srv.Context(), proxy)"},{"line_number":391,"context_line":"}"},{"line_number":392,"context_line":""},{"line_number":393,"context_line":"func (l *listener) GetClusterInfo(ctx context.Context, req *apb.GetClusterInfoRequest) (res *apb.GetClusterInfoResponse, err error) {"},{"line_number":394,"context_line":"\terr \u003d l.callImpl(ctx, func(ctx context.Context, impl rpc.ClusterServices) error {"}],"source_content_type":"text/x-go","patch_set":1,"id":"b5690366_c19227e7","line":391,"range":{"start_line":365,"start_character":0,"end_line":391,"end_character":1},"in_reply_to":"9a2bba9f_c546ec8d","updated":"2022-05-25 14:52:17.000000000","message":"Done","commit_id":"5f07934c5a4163833d4ca39ce31d27c25c202979"}],"metropolis/node/core/roleserve/worker_heartbeat.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":"22c8a5e7fc44e0e297d9f2b6be1828f615c006bc","unresolved":true,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"\tfor {"},{"line_number":49,"context_line":"\t\tif err :\u003d stream.Send(\u0026ipb.HeartbeatUpdateRequest{}); err !\u003d nil {"},{"line_number":50,"context_line":"\t\t\treturn err"},{"line_number":51,"context_line":"\t\t}"},{"line_number":52,"context_line":"\t\tnext :\u003d time.Now().Add(curator.HeartbeatTimeout)"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-go","patch_set":1,"id":"a1de6455_9b5ba212","line":50,"range":{"start_line":50,"start_character":10,"end_line":50,"end_character":13},"updated":"2022-05-24 15:48:10.000000000","message":"Wrap this error (also others where some context would be useful).","commit_id":"5f07934c5a4163833d4ca39ce31d27c25c202979"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b3ceb909b9bddf0064ff208c35414e454c118ef1","unresolved":false,"context_lines":[{"line_number":47,"context_line":""},{"line_number":48,"context_line":"\tfor {"},{"line_number":49,"context_line":"\t\tif err :\u003d stream.Send(\u0026ipb.HeartbeatUpdateRequest{}); err !\u003d nil {"},{"line_number":50,"context_line":"\t\t\treturn err"},{"line_number":51,"context_line":"\t\t}"},{"line_number":52,"context_line":"\t\tnext :\u003d time.Now().Add(curator.HeartbeatTimeout)"},{"line_number":53,"context_line":""}],"source_content_type":"text/x-go","patch_set":1,"id":"28ba9301_c904ecb0","line":50,"range":{"start_line":50,"start_character":10,"end_line":50,"end_character":13},"in_reply_to":"a1de6455_9b5ba212","updated":"2022-05-25 14:52:17.000000000","message":"Done","commit_id":"5f07934c5a4163833d4ca39ce31d27c25c202979"},{"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":"22c8a5e7fc44e0e297d9f2b6be1828f615c006bc","unresolved":true,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"\t\t_, err :\u003d stream.Recv()"},{"line_number":55,"context_line":"\t\tif err \u003d\u003d io.EOF {"},{"line_number":56,"context_line":"\t\t\treturn nil"},{"line_number":57,"context_line":"\t\t}"},{"line_number":58,"context_line":"\t\tif err !\u003d nil {"},{"line_number":59,"context_line":"\t\t\treturn err"}],"source_content_type":"text/x-go","patch_set":1,"id":"cea9cfe7_fd35fe1a","line":56,"range":{"start_line":56,"start_character":10,"end_line":56,"end_character":13},"updated":"2022-05-24 15:48:10.000000000","message":"Explicitly error out with something like \"EOF from server, restarting worker...\"","commit_id":"5f07934c5a4163833d4ca39ce31d27c25c202979"},{"author":{"_account_id":1000010,"name":"Mateusz Zalega","display_name":"msgctl","email":"mateusz@monogon.tech","username":"mateusz","avatars":[{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/30cae8ca0782f23ce0a60ac80fda3dd9.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b3ceb909b9bddf0064ff208c35414e454c118ef1","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"\t\t_, err :\u003d stream.Recv()"},{"line_number":55,"context_line":"\t\tif err \u003d\u003d io.EOF {"},{"line_number":56,"context_line":"\t\t\treturn nil"},{"line_number":57,"context_line":"\t\t}"},{"line_number":58,"context_line":"\t\tif err !\u003d nil {"},{"line_number":59,"context_line":"\t\t\treturn err"}],"source_content_type":"text/x-go","patch_set":1,"id":"22f0d124_04eeb15b","line":56,"range":{"start_line":56,"start_character":10,"end_line":56,"end_character":13},"in_reply_to":"cea9cfe7_fd35fe1a","updated":"2022-05-25 14:52:17.000000000","message":"Done","commit_id":"5f07934c5a4163833d4ca39ce31d27c25c202979"}]}
