)]}'
{"/PATCHSET_LEVEL":[{"author":{"_account_id":1000000,"name":"Leopold Schabel","display_name":"Leo","email":"leo@monogon.tech","username":"leo","avatars":[{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"bb67fd69c67b7447c328732f67c77620a45ea4b2","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"112b4246_0bcbc944","updated":"2021-06-22 13:58:17.000000000","message":"\u003e Test plan: needs tests, DO NOT MERGE UNTIL THEN.\n\nWhy not as a follow-up CL?","commit_id":"f3f274fb470ba27b9fa137808728782e09e4f9c6"},{"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":"df92d70cd1bbabefc6f4e49132dde5844191e500","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"de13542e_1018166e","updated":"2021-06-22 16:25:34.000000000","message":"Overall design looks solid, found a few typos and some nits.\nHolding off on a +1 until either tests are added or it\u0027s decided that they will arrive in a follow-up.","commit_id":"f3f274fb470ba27b9fa137808728782e09e4f9c6"},{"author":{"_account_id":1000000,"name":"Leopold Schabel","display_name":"Leo","email":"leo@monogon.tech","username":"leo","avatars":[{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/98f8f79a6bb45adef37defa7ead8f3d2.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"4575093f252f48ef6aa1c0adbca327832f5df26b","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":3,"id":"a31080a3_bb91d07d","in_reply_to":"112b4246_0bcbc944","updated":"2021-06-22 13:59:46.000000000","message":"(background: in my mind, a non-WIP CL which is sent for review should be complete and there\u0027s no harm in adding tests as a follow up - but I can see where you come from)","commit_id":"f3f274fb470ba27b9fa137808728782e09e4f9c6"},{"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":"050e00f4cb2e86b902c4d8907b6d544507b073d7","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":6,"id":"16f3d1ad_61856b26","updated":"2021-06-24 14:10:41.000000000","message":"LGTM, the etcd injection tests are nice","commit_id":"8cbc26cb4fac0c82571379d1bb6f0ba29f734807"},{"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":"a054d408d4507b7ea1a792aded32bc240c880214","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"219ea269_78a864ed","updated":"2021-06-30 12:29:54.000000000","message":"... or maybe not.","commit_id":"b54a9b54c1e4e0165e25072960508ea7603d547b"},{"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":"944f9f6266e250e14a7eb4af3f2379f8101e1778","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":7,"id":"d95ac20e_aabaf0e4","updated":"2021-06-30 12:29:43.000000000","message":"Sorry, need another +1 after rebase :).","commit_id":"b54a9b54c1e4e0165e25072960508ea7603d547b"}],"metropolis/node/core/curator/curator.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":"df92d70cd1bbabefc6f4e49132dde5844191e500","unresolved":true,"context_lines":[{"line_number":1,"context_line":"// package curator implements the Curator, a service responsible for management"},{"line_number":2,"context_line":"// of the Metropolis cluster that it is running on."},{"line_number":3,"context_line":"//"},{"line_number":4,"context_line":"// The Curator is implemented as a leader elected service. Instances of the"},{"line_number":5,"context_line":"// service are running colocated with all nodes that run a consensus (etcd)"},{"line_number":6,"context_line":"// server."},{"line_number":7,"context_line":"// Each instance listens locally over gRPC for requests from code running on the"}],"source_content_type":"text/x-go","patch_set":3,"id":"62c37d6a_09190010","line":4,"range":{"start_line":4,"start_character":35,"end_line":4,"end_character":49},"updated":"2021-06-22 16:25:34.000000000","message":"\u0027leader-elected service\u0027?","commit_id":"f3f274fb470ba27b9fa137808728782e09e4f9c6"},{"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":"02996b71a04950eecad1df530472d249c35d9bb3","unresolved":false,"context_lines":[{"line_number":1,"context_line":"// package curator implements the Curator, a service responsible for management"},{"line_number":2,"context_line":"// of the Metropolis cluster that it is running on."},{"line_number":3,"context_line":"//"},{"line_number":4,"context_line":"// The Curator is implemented as a leader elected service. Instances of the"},{"line_number":5,"context_line":"// service are running colocated with all nodes that run a consensus (etcd)"},{"line_number":6,"context_line":"// server."},{"line_number":7,"context_line":"// Each instance listens locally over gRPC for requests from code running on the"}],"source_content_type":"text/x-go","patch_set":3,"id":"b9789557_86e00032","line":4,"range":{"start_line":4,"start_character":35,"end_line":4,"end_character":49},"in_reply_to":"62c37d6a_09190010","updated":"2021-06-23 17:22:23.000000000","message":"Done","commit_id":"f3f274fb470ba27b9fa137808728782e09e4f9c6"},{"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":"df92d70cd1bbabefc6f4e49132dde5844191e500","unresolved":true,"context_lines":[{"line_number":7,"context_line":"// Each instance listens locally over gRPC for requests from code running on the"},{"line_number":8,"context_line":"// same node, and publicly over gRPC for traffic from other nodes (eg. ones that"},{"line_number":9,"context_line":"// do not run an instance of the Curator) and external users."},{"line_number":10,"context_line":"// The curator leader keeps it state fully in etcd. Followers forward all"},{"line_number":11,"context_line":"// requests to the active leader."},{"line_number":12,"context_line":"package curator"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-go","patch_set":3,"id":"ea08ae05_f2208e47","line":10,"range":{"start_line":10,"start_character":28,"end_line":10,"end_character":30},"updated":"2021-06-22 16:25:34.000000000","message":"\u0027its\u0027","commit_id":"f3f274fb470ba27b9fa137808728782e09e4f9c6"},{"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":"02996b71a04950eecad1df530472d249c35d9bb3","unresolved":false,"context_lines":[{"line_number":7,"context_line":"// Each instance listens locally over gRPC for requests from code running on the"},{"line_number":8,"context_line":"// same node, and publicly over gRPC for traffic from other nodes (eg. ones that"},{"line_number":9,"context_line":"// do not run an instance of the Curator) and external users."},{"line_number":10,"context_line":"// The curator leader keeps it state fully in etcd. Followers forward all"},{"line_number":11,"context_line":"// requests to the active leader."},{"line_number":12,"context_line":"package curator"},{"line_number":13,"context_line":""}],"source_content_type":"text/x-go","patch_set":3,"id":"c93dff52_548b7da3","line":10,"range":{"start_line":10,"start_character":28,"end_line":10,"end_character":30},"in_reply_to":"ea08ae05_f2208e47","updated":"2021-06-23 17:22:23.000000000","message":"Done","commit_id":"f3f274fb470ba27b9fa137808728782e09e4f9c6"},{"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":"df92d70cd1bbabefc6f4e49132dde5844191e500","unresolved":true,"context_lines":[{"line_number":49,"context_line":"\tDirectory *localstorage.EphemeralCuratorDirectory"},{"line_number":50,"context_line":"}"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"// Service is the Curator service. See the pacakge-level documentation for more"},{"line_number":53,"context_line":"// information."},{"line_number":54,"context_line":"type Service struct {"},{"line_number":55,"context_line":"\t// config is the configuration with which the service was started."}],"source_content_type":"text/x-go","patch_set":3,"id":"b78684f7_7a9c381a","line":52,"range":{"start_line":52,"start_character":43,"end_line":52,"end_character":50},"updated":"2021-06-22 16:25:34.000000000","message":"\u0027package-level\u0027","commit_id":"f3f274fb470ba27b9fa137808728782e09e4f9c6"},{"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":"02996b71a04950eecad1df530472d249c35d9bb3","unresolved":false,"context_lines":[{"line_number":49,"context_line":"\tDirectory *localstorage.EphemeralCuratorDirectory"},{"line_number":50,"context_line":"}"},{"line_number":51,"context_line":""},{"line_number":52,"context_line":"// Service is the Curator service. See the pacakge-level documentation for more"},{"line_number":53,"context_line":"// information."},{"line_number":54,"context_line":"type Service struct {"},{"line_number":55,"context_line":"\t// config is the configuration with which the service was started."}],"source_content_type":"text/x-go","patch_set":3,"id":"154409b3_a96ece94","line":52,"range":{"start_line":52,"start_character":43,"end_line":52,"end_character":50},"in_reply_to":"b78684f7_7a9c381a","updated":"2021-06-23 17:22:23.000000000","message":"Done","commit_id":"f3f274fb470ba27b9fa137808728782e09e4f9c6"},{"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":"df92d70cd1bbabefc6f4e49132dde5844191e500","unresolved":true,"context_lines":[{"line_number":119,"context_line":"\tif err !\u003d nil {"},{"line_number":120,"context_line":"\t\treturn \"\", fmt.Errorf(\"when marshaling value: %w\", err)"},{"line_number":121,"context_line":"\t}"},{"line_number":122,"context_line":"\treturn base64.StdEncoding.EncodeToString(bytes), nil"},{"line_number":123,"context_line":"}"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"var ("}],"source_content_type":"text/x-go","patch_set":3,"id":"c38451ac_c8d7e289","line":122,"updated":"2021-06-22 16:25:34.000000000","message":"The etcd election IDL (https://etcd.io/docs/v3.5/dev-guide/api_concurrency_reference_v3/#message-campaignrequest-serveretcdserverapiv3electionv3electionpbv3electionproto) supports passing raw bytes, do we need to base64-encode this?","commit_id":"f3f274fb470ba27b9fa137808728782e09e4f9c6"},{"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":"02996b71a04950eecad1df530472d249c35d9bb3","unresolved":false,"context_lines":[{"line_number":119,"context_line":"\tif err !\u003d nil {"},{"line_number":120,"context_line":"\t\treturn \"\", fmt.Errorf(\"when marshaling value: %w\", err)"},{"line_number":121,"context_line":"\t}"},{"line_number":122,"context_line":"\treturn base64.StdEncoding.EncodeToString(bytes), nil"},{"line_number":123,"context_line":"}"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"var ("}],"source_content_type":"text/x-go","patch_set":3,"id":"c75a44fe_b8272259","line":122,"in_reply_to":"c38451ac_c8d7e289","updated":"2021-06-23 17:22:23.000000000","message":"That\u0027s not the API used by the concurrency library. We use a client-side-implemented clientv3/concurrency, this is v3lock/v3elect which is a direct gRPC API for leader election. I didn\u0027t event know this existed, I\u0027ve always just used the Go library... I can\u0027t find information about one being recommended over the other. Do you know anything? Should I rewrite this to use the gRPC API directly?\n\nBut I checked, and even the one that is being used does effectively convert to []byte:\n\nhttps://github.com/etcd-io/etcd/blob/2c834459e1aab78a5d5219c7dfe42335fc4b617a/clientv3/concurrency/election.go#L67\n\nhttps://github.com/LK4D4/etcd/blob/24a90baff8dd153a8481876fb27db64d7ec7e3c7/clientv3/op.go#L117\n\nso I went ahead and changed this to not use base64 anyway.","commit_id":"f3f274fb470ba27b9fa137808728782e09e4f9c6"},{"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":"7746f63747878ed2532d4c1673939672bbd9ffb8","unresolved":false,"context_lines":[{"line_number":119,"context_line":"\tif err !\u003d nil {"},{"line_number":120,"context_line":"\t\treturn \"\", fmt.Errorf(\"when marshaling value: %w\", err)"},{"line_number":121,"context_line":"\t}"},{"line_number":122,"context_line":"\treturn base64.StdEncoding.EncodeToString(bytes), nil"},{"line_number":123,"context_line":"}"},{"line_number":124,"context_line":""},{"line_number":125,"context_line":"var ("}],"source_content_type":"text/x-go","patch_set":3,"id":"cca7a129_652a5b03","line":122,"in_reply_to":"c75a44fe_b8272259","updated":"2021-06-23 17:27:40.000000000","message":"Whoops, second link is to a fork, but it\u0027s still all right: https://github.com/etcd-io/etcd/blob/2c834459e1aab78a5d5219c7dfe42335fc4b617a/clientv3/op.go#L249","commit_id":"f3f274fb470ba27b9fa137808728782e09e4f9c6"},{"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":"df92d70cd1bbabefc6f4e49132dde5844191e500","unresolved":true,"context_lines":[{"line_number":225,"context_line":"\t\ts.status.Set(electionStatus{leader: false})"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"\t\tif err !\u003d nil \u0026\u0026 errors.Is(err, ctx.Err()) {"},{"line_number":228,"context_line":"\t\t\treturn fmt.Errorf(\"while running election round: %w\", err)"},{"line_number":229,"context_line":"\t\t}"},{"line_number":230,"context_line":"\t\tsupervisor.Logger(ctx).Infof(\"Curator election round done: %w\", err)"},{"line_number":231,"context_line":"\t\tsupervisor.Logger(ctx).Info(\"Curator election restarting...\")"}],"source_content_type":"text/x-go","patch_set":3,"id":"999699d6_23c5401e","line":228,"range":{"start_line":228,"start_character":22,"end_line":228,"end_character":50},"updated":"2021-06-22 16:25:34.000000000","message":"As far as I can see this can only happen if the context is canceled so this should probably have a more specific error message.","commit_id":"f3f274fb470ba27b9fa137808728782e09e4f9c6"},{"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":"02996b71a04950eecad1df530472d249c35d9bb3","unresolved":false,"context_lines":[{"line_number":225,"context_line":"\t\ts.status.Set(electionStatus{leader: false})"},{"line_number":226,"context_line":""},{"line_number":227,"context_line":"\t\tif err !\u003d nil \u0026\u0026 errors.Is(err, ctx.Err()) {"},{"line_number":228,"context_line":"\t\t\treturn fmt.Errorf(\"while running election round: %w\", err)"},{"line_number":229,"context_line":"\t\t}"},{"line_number":230,"context_line":"\t\tsupervisor.Logger(ctx).Infof(\"Curator election round done: %w\", err)"},{"line_number":231,"context_line":"\t\tsupervisor.Logger(ctx).Info(\"Curator election restarting...\")"}],"source_content_type":"text/x-go","patch_set":3,"id":"bee2d83b_bc3d1157","line":228,"range":{"start_line":228,"start_character":22,"end_line":228,"end_character":50},"in_reply_to":"999699d6_23c5401e","updated":"2021-06-23 17:22:23.000000000","message":"Done","commit_id":"f3f274fb470ba27b9fa137808728782e09e4f9c6"}]}
