)]}'
{"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":"e84acd2392a93c0dcb85f54c87d6722e2116489b","unresolved":true,"context_lines":[{"line_number":309,"context_line":"\t// No node exists, create one."},{"line_number":310,"context_line":"\tnode \u003d \u0026Node{"},{"line_number":311,"context_line":"\t\tpubkey: pubkey,"},{"line_number":312,"context_line":"\t\tjkey:   req.JoinKey,"},{"line_number":313,"context_line":"\t\tstate:  cpb.NodeState_NODE_STATE_NEW,"},{"line_number":314,"context_line":"\t}"},{"line_number":315,"context_line":"\tif err :\u003d nodeSave(ctx, l.leadership, node); err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":3,"id":"d1c0aeb6_6de3e94d","line":312,"range":{"start_line":312,"start_character":10,"end_line":312,"end_character":21},"updated":"2022-04-26 11:55:05.000000000","message":"This should be early checked for length.\n\n    if want, got :\u003d ed25519.PublicKeySize, len(req.JoinKey); want !\u003d got {\n        return nil, status.Errorf(codes.InvalidArgument, \"join_key must be set and %d bytes long\", want)\n    }","commit_id":"9da86dc9f054dd35c9feb7efc0113d0318948a3c"},{"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":"3669bc4332dc28bfa2030e6c0583bdd9cb3495c2","unresolved":false,"context_lines":[{"line_number":309,"context_line":"\t// No node exists, create one."},{"line_number":310,"context_line":"\tnode \u003d \u0026Node{"},{"line_number":311,"context_line":"\t\tpubkey: pubkey,"},{"line_number":312,"context_line":"\t\tjkey:   req.JoinKey,"},{"line_number":313,"context_line":"\t\tstate:  cpb.NodeState_NODE_STATE_NEW,"},{"line_number":314,"context_line":"\t}"},{"line_number":315,"context_line":"\tif err :\u003d nodeSave(ctx, l.leadership, node); err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":3,"id":"919f80cc_d8aed7d7","line":312,"range":{"start_line":312,"start_character":10,"end_line":312,"end_character":21},"in_reply_to":"36d4b8a0_15bcf7de","updated":"2022-04-27 12:58:31.000000000","message":"Ack","commit_id":"9da86dc9f054dd35c9feb7efc0113d0318948a3c"},{"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":"c326c0939f8c6faf9d25c6a45ae31b5b9c7940f2","unresolved":true,"context_lines":[{"line_number":309,"context_line":"\t// No node exists, create one."},{"line_number":310,"context_line":"\tnode \u003d \u0026Node{"},{"line_number":311,"context_line":"\t\tpubkey: pubkey,"},{"line_number":312,"context_line":"\t\tjkey:   req.JoinKey,"},{"line_number":313,"context_line":"\t\tstate:  cpb.NodeState_NODE_STATE_NEW,"},{"line_number":314,"context_line":"\t}"},{"line_number":315,"context_line":"\tif err :\u003d nodeSave(ctx, l.leadership, node); err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":3,"id":"36d4b8a0_15bcf7de","line":312,"range":{"start_line":312,"start_character":10,"end_line":312,"end_character":21},"in_reply_to":"d1c0aeb6_6de3e94d","updated":"2022-04-27 12:48:21.000000000","message":"This will need to remain unchecked until the client-side patch goes in (next one in the stack). I\u0027ll add a TODO here.","commit_id":"9da86dc9f054dd35c9feb7efc0113d0318948a3c"}],"metropolis/node/core/curator/state_node.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":"e84acd2392a93c0dcb85f54c87d6722e2116489b","unresolved":true,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"var ("},{"line_number":176,"context_line":"\tnodeEtcdPrefix \u003d mustNewEtcdPrefix(\"/nodes/\")"},{"line_number":177,"context_line":"\tjoinCredPrefix \u003d mustNewEtcdPrefix(\"/join_keys/\")"},{"line_number":178,"context_line":")"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"// etcdNodePath builds the etcd path in which this node\u0027s protobuf-serialized"}],"source_content_type":"text/x-go","patch_set":3,"id":"e5d88866_574ea502","line":177,"range":{"start_line":177,"start_character":1,"end_line":177,"end_character":15},"updated":"2022-04-26 11:55:05.000000000","message":"Add a comment that this is a mapping from join key to node ID. Also probably a good time to comment that nodeEtcdPrefix is a mapping from node ID to ppb.Node.","commit_id":"9da86dc9f054dd35c9feb7efc0113d0318948a3c"},{"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":"c326c0939f8c6faf9d25c6a45ae31b5b9c7940f2","unresolved":false,"context_lines":[{"line_number":174,"context_line":""},{"line_number":175,"context_line":"var ("},{"line_number":176,"context_line":"\tnodeEtcdPrefix \u003d mustNewEtcdPrefix(\"/nodes/\")"},{"line_number":177,"context_line":"\tjoinCredPrefix \u003d mustNewEtcdPrefix(\"/join_keys/\")"},{"line_number":178,"context_line":")"},{"line_number":179,"context_line":""},{"line_number":180,"context_line":"// etcdNodePath builds the etcd path in which this node\u0027s protobuf-serialized"}],"source_content_type":"text/x-go","patch_set":3,"id":"2fade741_5e3e7f01","line":177,"range":{"start_line":177,"start_character":1,"end_line":177,"end_character":15},"in_reply_to":"e5d88866_574ea502","updated":"2022-04-27 12:48:21.000000000","message":"Done","commit_id":"9da86dc9f054dd35c9feb7efc0113d0318948a3c"},{"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":"e84acd2392a93c0dcb85f54c87d6722e2116489b","unresolved":true,"context_lines":[{"line_number":329,"context_line":"\tif n.jkey !\u003d nil {"},{"line_number":330,"context_line":"\t\tjkey, err :\u003d n.etcdJoinKeyPath()"},{"line_number":331,"context_line":"\t\tif err !\u003d nil {"},{"line_number":332,"context_line":"\t\t\t// TODO(issues/85): log err"},{"line_number":333,"context_line":"\t\t\t// This should not happen."},{"line_number":334,"context_line":"\t\t\treturn status.Errorf(codes.InvalidArgument, \"invalid join key representation\")"},{"line_number":335,"context_line":"\t\t}"}],"source_content_type":"text/x-go","patch_set":3,"id":"9183beb2_1bd07fa3","line":332,"range":{"start_line":332,"start_character":3,"end_line":332,"end_character":30},"updated":"2022-04-26 11:55:05.000000000","message":"Issue 85 is resolved, we can now log things:\n\n rpc.Trace(ctx).Printf(\"foo %v\", bar)","commit_id":"9da86dc9f054dd35c9feb7efc0113d0318948a3c"},{"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":"c326c0939f8c6faf9d25c6a45ae31b5b9c7940f2","unresolved":false,"context_lines":[{"line_number":329,"context_line":"\tif n.jkey !\u003d nil {"},{"line_number":330,"context_line":"\t\tjkey, err :\u003d n.etcdJoinKeyPath()"},{"line_number":331,"context_line":"\t\tif err !\u003d nil {"},{"line_number":332,"context_line":"\t\t\t// TODO(issues/85): log err"},{"line_number":333,"context_line":"\t\t\t// This should not happen."},{"line_number":334,"context_line":"\t\t\treturn status.Errorf(codes.InvalidArgument, \"invalid join key representation\")"},{"line_number":335,"context_line":"\t\t}"}],"source_content_type":"text/x-go","patch_set":3,"id":"8497f52e_e06faa3f","line":332,"range":{"start_line":332,"start_character":3,"end_line":332,"end_character":30},"in_reply_to":"9183beb2_1bd07fa3","updated":"2022-04-27 12:48:21.000000000","message":"Done","commit_id":"9da86dc9f054dd35c9feb7efc0113d0318948a3c"},{"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":"3669bc4332dc28bfa2030e6c0583bdd9cb3495c2","unresolved":true,"context_lines":[{"line_number":371,"context_line":"\tkey, err :\u003d joinCredPrefix.Key(cred)"},{"line_number":372,"context_line":"\tif err !\u003d nil {"},{"line_number":373,"context_line":"\t\t// This should never happen."},{"line_number":374,"context_line":"\t\trpc.Trace(ctx).Printf(\"invalid join key representation\")"},{"line_number":375,"context_line":"\t\treturn \"\", status.Errorf(codes.InvalidArgument, \"invalid join key representation\")"},{"line_number":376,"context_line":"\t}"},{"line_number":377,"context_line":"\tres, err :\u003d l.txnAsLeader(ctx, clientv3.OpGet(key))"}],"source_content_type":"text/x-go","patch_set":6,"id":"c5cf9822_96ae8872","line":374,"range":{"start_line":374,"start_character":2,"end_line":374,"end_character":58},"updated":"2022-04-27 12:58:31.000000000","message":"The point was to log the err here (instead of silently dropping it), not the exact same thing we\u0027re returning 😊\n\n(also elsewhere)","commit_id":"0f817a6e8526b316260a364e802e75ccbe3f8a7b"},{"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":"b737c829c64916d451b6a38edb058edbbcc66267","unresolved":false,"context_lines":[{"line_number":371,"context_line":"\tkey, err :\u003d joinCredPrefix.Key(cred)"},{"line_number":372,"context_line":"\tif err !\u003d nil {"},{"line_number":373,"context_line":"\t\t// This should never happen."},{"line_number":374,"context_line":"\t\trpc.Trace(ctx).Printf(\"invalid join key representation\")"},{"line_number":375,"context_line":"\t\treturn \"\", status.Errorf(codes.InvalidArgument, \"invalid join key representation\")"},{"line_number":376,"context_line":"\t}"},{"line_number":377,"context_line":"\tres, err :\u003d l.txnAsLeader(ctx, clientv3.OpGet(key))"}],"source_content_type":"text/x-go","patch_set":6,"id":"1d1a9c4e_0b1f7f88","line":374,"range":{"start_line":374,"start_character":2,"end_line":374,"end_character":58},"in_reply_to":"c5cf9822_96ae8872","updated":"2022-04-28 13:28:50.000000000","message":"Oops. This patchset is turning me into a zombie.","commit_id":"0f817a6e8526b316260a364e802e75ccbe3f8a7b"}],"metropolis/proto/common/common.proto":[{"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":"e84acd2392a93c0dcb85f54c87d6722e2116489b","unresolved":true,"context_lines":[{"line_number":132,"context_line":"    // listening for gRPC, and role-specific services like etcd and"},{"line_number":133,"context_line":"    // Kubernetes)."},{"line_number":134,"context_line":"    string external_address \u003d 1;"},{"line_number":135,"context_line":"    // timestamp is an epoch number associated with the last status update."},{"line_number":136,"context_line":"    // It\u0027s set by Curator with a nanosecond granularity."},{"line_number":137,"context_line":"    int64 timestamp \u003d 2;"},{"line_number":138,"context_line":"}"}],"source_content_type":"text/x-protobuf","patch_set":3,"id":"c61a0687_9c9aca03","line":135,"range":{"start_line":135,"start_character":7,"end_line":135,"end_character":75},"updated":"2022-04-26 11:55:05.000000000","message":"Mentioning the curator in the public protobuf is a bit of an abstraction leak. At this level, we should be talking about cluster state, not about the implementation details of the cluster (unless necessary).\n\n // timestamp (nanoseconds from epoch) when this NodeStatus was received. Set by cluster.","commit_id":"9da86dc9f054dd35c9feb7efc0113d0318948a3c"},{"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":"c326c0939f8c6faf9d25c6a45ae31b5b9c7940f2","unresolved":false,"context_lines":[{"line_number":132,"context_line":"    // listening for gRPC, and role-specific services like etcd and"},{"line_number":133,"context_line":"    // Kubernetes)."},{"line_number":134,"context_line":"    string external_address \u003d 1;"},{"line_number":135,"context_line":"    // timestamp is an epoch number associated with the last status update."},{"line_number":136,"context_line":"    // It\u0027s set by Curator with a nanosecond granularity."},{"line_number":137,"context_line":"    int64 timestamp \u003d 2;"},{"line_number":138,"context_line":"}"}],"source_content_type":"text/x-protobuf","patch_set":3,"id":"a734afcd_203d9f81","line":135,"range":{"start_line":135,"start_character":7,"end_line":135,"end_character":75},"in_reply_to":"c61a0687_9c9aca03","updated":"2022-04-27 12:48:21.000000000","message":"Done","commit_id":"9da86dc9f054dd35c9feb7efc0113d0318948a3c"}]}
