)]}'
{"metropolis/node/core/curator/impl_leader_background.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":"f53d127612496190d6c3dc94b49ef462544e4484","unresolved":true,"context_lines":[{"line_number":61,"context_line":"\tdefer l.muNodes.Unlock()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"\t// Get etcd members."},{"line_number":64,"context_line":"\tetcdMembers :\u003d make(map[string]bool)"},{"line_number":65,"context_line":"\tetcdMemberIDs :\u003d make(map[uint64]string)"},{"line_number":66,"context_line":"\tmembers, err :\u003d l.consensusStatus.ClusterClient().MemberList(ctx)"},{"line_number":67,"context_line":"\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":1,"id":"af26d00d_9ef397da","line":64,"range":{"start_line":64,"start_character":1,"end_line":64,"end_character":12},"updated":"2024-09-19 12:35:12.000000000","message":"Document the string/uint64 types\u0027 meaning.","commit_id":"f6f1397cb3a7200341b169100be8d89622d3e5b3"},{"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":"de35827fc36ad3bb82ec3f8092ada5f60d01145c","unresolved":false,"context_lines":[{"line_number":61,"context_line":"\tdefer l.muNodes.Unlock()"},{"line_number":62,"context_line":""},{"line_number":63,"context_line":"\t// Get etcd members."},{"line_number":64,"context_line":"\tetcdMembers :\u003d make(map[string]bool)"},{"line_number":65,"context_line":"\tetcdMemberIDs :\u003d make(map[uint64]string)"},{"line_number":66,"context_line":"\tmembers, err :\u003d l.consensusStatus.ClusterClient().MemberList(ctx)"},{"line_number":67,"context_line":"\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":1,"id":"06b7d5fc_ed1c53a2","line":64,"range":{"start_line":64,"start_character":1,"end_line":64,"end_character":12},"in_reply_to":"af26d00d_9ef397da","updated":"2024-09-24 12:51:34.000000000","message":"Done","commit_id":"f6f1397cb3a7200341b169100be8d89622d3e5b3"},{"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":"f53d127612496190d6c3dc94b49ef462544e4484","unresolved":true,"context_lines":[{"line_number":92,"context_line":"\t\t\tsupervisor.Logger(ctx).Infof(\"Adding ConsensusMember role to node which is etcd member: %s...\", nodeID)"},{"line_number":93,"context_line":"\t\t\t// The node is already etcd member. We only call AddNode to obtain the"},{"line_number":94,"context_line":"\t\t\t// join parameters."},{"line_number":95,"context_line":"\t\t\tjoin, err :\u003d l.consensusStatus.AddNode(ctx, node.pubkey)"},{"line_number":96,"context_line":"\t\t\tif err !\u003d nil {"},{"line_number":97,"context_line":"\t\t\t\treturn fmt.Errorf(\"failed to obtain consensus join parameters: %w\", err)"},{"line_number":98,"context_line":"\t\t\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"9d2607e3_c5ddfe8c","line":95,"range":{"start_line":95,"start_character":3,"end_line":95,"end_character":59},"updated":"2024-09-19 12:35:12.000000000","message":"It\u0027s probably better to accumulate an intent of actions to perform and then perform them after this main loop.\n\nThat intent can be concisely shown to the user and only applied after we make sure we can make sense of the entirety of the state of the system. We can also then double-check some actions for consistency, or for example limit the amount of actions we\u0027re willing to take in a single loop iteration.\n\nThat should make also the code testable (as state to intent calculation can be expressed as a pure function for which writing tests is trivial).","commit_id":"f6f1397cb3a7200341b169100be8d89622d3e5b3"},{"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":"de35827fc36ad3bb82ec3f8092ada5f60d01145c","unresolved":true,"context_lines":[{"line_number":92,"context_line":"\t\t\tsupervisor.Logger(ctx).Infof(\"Adding ConsensusMember role to node which is etcd member: %s...\", nodeID)"},{"line_number":93,"context_line":"\t\t\t// The node is already etcd member. We only call AddNode to obtain the"},{"line_number":94,"context_line":"\t\t\t// join parameters."},{"line_number":95,"context_line":"\t\t\tjoin, err :\u003d l.consensusStatus.AddNode(ctx, node.pubkey)"},{"line_number":96,"context_line":"\t\t\tif err !\u003d nil {"},{"line_number":97,"context_line":"\t\t\t\treturn fmt.Errorf(\"failed to obtain consensus join parameters: %w\", err)"},{"line_number":98,"context_line":"\t\t\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"c8e4524f_f3915fe4","line":95,"range":{"start_line":95,"start_character":3,"end_line":95,"end_character":59},"in_reply_to":"9d2607e3_c5ddfe8c","updated":"2024-09-24 12:51:34.000000000","message":"I added some safety checks, adjusted the order in which we make changes, and limited it to make one change per loop iteration. I also added a test.","commit_id":"f6f1397cb3a7200341b169100be8d89622d3e5b3"},{"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":"63a2227f4751fee4be548902136cf0a91430bca9","unresolved":false,"context_lines":[{"line_number":92,"context_line":"\t\t\tsupervisor.Logger(ctx).Infof(\"Adding ConsensusMember role to node which is etcd member: %s...\", nodeID)"},{"line_number":93,"context_line":"\t\t\t// The node is already etcd member. We only call AddNode to obtain the"},{"line_number":94,"context_line":"\t\t\t// join parameters."},{"line_number":95,"context_line":"\t\t\tjoin, err :\u003d l.consensusStatus.AddNode(ctx, node.pubkey)"},{"line_number":96,"context_line":"\t\t\tif err !\u003d nil {"},{"line_number":97,"context_line":"\t\t\t\treturn fmt.Errorf(\"failed to obtain consensus join parameters: %w\", err)"},{"line_number":98,"context_line":"\t\t\t}"}],"source_content_type":"text/x-go","patch_set":1,"id":"79f92556_8e4909de","line":95,"range":{"start_line":95,"start_character":3,"end_line":95,"end_character":59},"in_reply_to":"c8e4524f_f3915fe4","updated":"2024-09-26 11:14:16.000000000","message":"Done","commit_id":"f6f1397cb3a7200341b169100be8d89622d3e5b3"}]}
