)]}'
{"metropolis/node/core/curator/impl_leader_management.go":[{"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":"afe88f91464026a8a64a05c9e8bde868859bdba5","unresolved":true,"context_lines":[{"line_number":156,"context_line":"}"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"func (l *leaderManagement) ApproveNode(ctx context.Context, req *apb.ApproveNodeRequest) (*apb.ApproveNodeResponse, error) {"},{"line_number":159,"context_line":"\t// MVP: check if policy allows for this node to be approved for this cluster."},{"line_number":160,"context_line":"\t// This should happen automatically, if possible, via hardware attestation"},{"line_number":161,"context_line":"\t// against policy, not manually."},{"line_number":162,"context_line":""}],"source_content_type":"text/x-go","patch_set":2,"id":"1ccd906c_5a594dc1","line":159,"updated":"2021-11-18 13:45:25.000000000","message":"Isn\u0027t MVP just another form of a TODO?","commit_id":"72e2a2e5f16513dbd5c018705892056629a9ddf5"},{"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":"4dc0e77860bd684edc02141abb6b1a50c0ca3ca1","unresolved":true,"context_lines":[{"line_number":156,"context_line":"}"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"func (l *leaderManagement) ApproveNode(ctx context.Context, req *apb.ApproveNodeRequest) (*apb.ApproveNodeResponse, error) {"},{"line_number":159,"context_line":"\t// MVP: check if policy allows for this node to be approved for this cluster."},{"line_number":160,"context_line":"\t// This should happen automatically, if possible, via hardware attestation"},{"line_number":161,"context_line":"\t// against policy, not manually."},{"line_number":162,"context_line":""}],"source_content_type":"text/x-go","patch_set":2,"id":"9156b6ec_531c6365","line":159,"in_reply_to":"1ccd906c_5a594dc1","updated":"2021-11-18 15:52:52.000000000","message":"It is, but it allows for more easily finding all relevant implementation shortcomings post-MVP and turning them into issues. This could be TODO(MVP) instead, but I\u0027ve already used \u0027MVP: \u0027 in a bunch of spots in the code.","commit_id":"72e2a2e5f16513dbd5c018705892056629a9ddf5"},{"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":"dcd7039745b2893766a64d063a4b5a78fe0bf5af","unresolved":false,"context_lines":[{"line_number":156,"context_line":"}"},{"line_number":157,"context_line":""},{"line_number":158,"context_line":"func (l *leaderManagement) ApproveNode(ctx context.Context, req *apb.ApproveNodeRequest) (*apb.ApproveNodeResponse, error) {"},{"line_number":159,"context_line":"\t// MVP: check if policy allows for this node to be approved for this cluster."},{"line_number":160,"context_line":"\t// This should happen automatically, if possible, via hardware attestation"},{"line_number":161,"context_line":"\t// against policy, not manually."},{"line_number":162,"context_line":""}],"source_content_type":"text/x-go","patch_set":2,"id":"a23e3f75_3c2ac3c3","line":159,"in_reply_to":"9156b6ec_531c6365","updated":"2021-11-19 15:37:29.000000000","message":"Done","commit_id":"72e2a2e5f16513dbd5c018705892056629a9ddf5"},{"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":"afe88f91464026a8a64a05c9e8bde868859bdba5","unresolved":true,"context_lines":[{"line_number":167,"context_line":"\tl.muNodes.Lock()"},{"line_number":168,"context_line":"\tdefer l.muNodes.Unlock()"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"\t// Find node by pubkey/ID."},{"line_number":171,"context_line":"\tid :\u003d identity.NodeID(req.Pubkey)"},{"line_number":172,"context_line":"\tkey, err :\u003d nodeEtcdPrefix.Key(id)"},{"line_number":173,"context_line":"\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":2,"id":"120fb4c7_20f00917","line":170,"updated":"2021-11-18 13:45:25.000000000","message":"There\u0027s a similar block in CommitNode (CL 443). Would it make sense to move the common parts into a helper function?","commit_id":"72e2a2e5f16513dbd5c018705892056629a9ddf5"},{"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":"4dc0e77860bd684edc02141abb6b1a50c0ca3ca1","unresolved":false,"context_lines":[{"line_number":167,"context_line":"\tl.muNodes.Lock()"},{"line_number":168,"context_line":"\tdefer l.muNodes.Unlock()"},{"line_number":169,"context_line":""},{"line_number":170,"context_line":"\t// Find node by pubkey/ID."},{"line_number":171,"context_line":"\tid :\u003d identity.NodeID(req.Pubkey)"},{"line_number":172,"context_line":"\tkey, err :\u003d nodeEtcdPrefix.Key(id)"},{"line_number":173,"context_line":"\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":2,"id":"629dbaca_23112749","line":170,"in_reply_to":"120fb4c7_20f00917","updated":"2021-11-18 15:52:52.000000000","message":"Done in followup CL: https://review.monogon.dev/c/monogon/+/447","commit_id":"72e2a2e5f16513dbd5c018705892056629a9ddf5"},{"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":"afe88f91464026a8a64a05c9e8bde868859bdba5","unresolved":true,"context_lines":[{"line_number":197,"context_line":"\t\treturn nil, status.Errorf(codes.FailedPrecondition, \"node in state %s cannot be approved\", node.state)"},{"line_number":198,"context_line":"\t}"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"\tnode.state \u003d cpb.NodeState_NODE_STATE_STANDBY"},{"line_number":201,"context_line":"\tnodeBytes, err :\u003d proto.Marshal(node.proto())"},{"line_number":202,"context_line":"\tif err !\u003d nil {"},{"line_number":203,"context_line":"\t\t// TODO(issues/85): log this"}],"source_content_type":"text/x-go","patch_set":2,"id":"fb90b987_34cdd335","line":200,"updated":"2021-11-18 13:45:25.000000000","message":"This appears to be another common operation.","commit_id":"72e2a2e5f16513dbd5c018705892056629a9ddf5"},{"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":"4dc0e77860bd684edc02141abb6b1a50c0ca3ca1","unresolved":false,"context_lines":[{"line_number":197,"context_line":"\t\treturn nil, status.Errorf(codes.FailedPrecondition, \"node in state %s cannot be approved\", node.state)"},{"line_number":198,"context_line":"\t}"},{"line_number":199,"context_line":""},{"line_number":200,"context_line":"\tnode.state \u003d cpb.NodeState_NODE_STATE_STANDBY"},{"line_number":201,"context_line":"\tnodeBytes, err :\u003d proto.Marshal(node.proto())"},{"line_number":202,"context_line":"\tif err !\u003d nil {"},{"line_number":203,"context_line":"\t\t// TODO(issues/85): log this"}],"source_content_type":"text/x-go","patch_set":2,"id":"946ef80c_b097fd3f","line":200,"in_reply_to":"fb90b987_34cdd335","updated":"2021-11-18 15:52:52.000000000","message":"Done in followup CL: https://review.monogon.dev/c/monogon/+/447","commit_id":"72e2a2e5f16513dbd5c018705892056629a9ddf5"}]}
