)]}'
{"/PATCHSET_LEVEL":[{"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":"f69bab431a0be9073edd5a69a9244c0f8bec5070","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":2,"id":"f94a4f65_e621c40a","updated":"2021-06-23 15:18:25.000000000","message":"A few typos, otherwise this looks fine from a code quality POV. I\u0027m not sure that this is the best way to do this as this is basically a bespoke gRPC proxy, but we can easily change this if there\u0027s a need to have a more generic or simpler implementation. A solution based on a gRPC resolver and leaders cancelling their calls when they step down/are demoted would work as well, but would probably be even more code at least for now.\n\nHolding off +1 until some test coverage is here.","commit_id":"53ce533fb5ba14a16e023f6ff49a1a72d8ac1cae"},{"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":"802c75adab2a091f2518bac9094a929d9bb5c950","unresolved":false,"context_lines":[],"source_content_type":"","patch_set":8,"id":"1f9f7476_b940c633","updated":"2021-07-05 14:20:35.000000000","message":"LGTM","commit_id":"7980b9bc87ebebafbe4f763d3a7aa3570651d55c"}],"metropolis/node/core/curator/listener.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":"f69bab431a0be9073edd5a69a9244c0f8bec5070","unresolved":true,"context_lines":[{"line_number":17,"context_line":"\t\"source.monogon.dev/metropolis/pkg/supervisor\""},{"line_number":18,"context_line":")"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"// listener is the curator runnable responsible for listening for gRP"},{"line_number":21,"context_line":"// connections and forwarding them over to one of two possible implementations:"},{"line_number":22,"context_line":"// - a local leader implementation which is backed in etcd"},{"line_number":23,"context_line":"// - a follower implementation that forwards the RPCs over to a remote leader."}],"source_content_type":"text/x-go","patch_set":2,"id":"05426bf9_2789f312","line":20,"range":{"start_line":20,"start_character":66,"end_line":20,"end_character":69},"updated":"2021-06-23 15:18:25.000000000","message":"\u0027gRPC\u0027","commit_id":"53ce533fb5ba14a16e023f6ff49a1a72d8ac1cae"},{"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":"f037f57bb5b8ae735b0a18631bf7ee3d91514a94","unresolved":false,"context_lines":[{"line_number":17,"context_line":"\t\"source.monogon.dev/metropolis/pkg/supervisor\""},{"line_number":18,"context_line":")"},{"line_number":19,"context_line":""},{"line_number":20,"context_line":"// listener is the curator runnable responsible for listening for gRP"},{"line_number":21,"context_line":"// connections and forwarding them over to one of two possible implementations:"},{"line_number":22,"context_line":"// - a local leader implementation which is backed in etcd"},{"line_number":23,"context_line":"// - a follower implementation that forwards the RPCs over to a remote leader."}],"source_content_type":"text/x-go","patch_set":2,"id":"dc12e4dd_8e4e0c79","line":20,"range":{"start_line":20,"start_character":66,"end_line":20,"end_character":69},"in_reply_to":"05426bf9_2789f312","updated":"2021-06-30 11:27:52.000000000","message":"Done","commit_id":"53ce533fb5ba14a16e023f6ff49a1a72d8ac1cae"},{"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":"f69bab431a0be9073edd5a69a9244c0f8bec5070","unresolved":true,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"// listener is the curator runnable responsible for listening for gRP"},{"line_number":21,"context_line":"// connections and forwarding them over to one of two possible implementations:"},{"line_number":22,"context_line":"// - a local leader implementation which is backed in etcd"},{"line_number":23,"context_line":"// - a follower implementation that forwards the RPCs over to a remote leader."},{"line_number":24,"context_line":"//"},{"line_number":25,"context_line":"// Its goal is to make any switches over between leader and follower painless to"}],"source_content_type":"text/x-go","patch_set":2,"id":"7fcb6e37_a42e03b0","line":22,"range":{"start_line":22,"start_character":51,"end_line":22,"end_character":53},"updated":"2021-06-23 15:18:25.000000000","message":"\u0027backed by\u0027?","commit_id":"53ce533fb5ba14a16e023f6ff49a1a72d8ac1cae"},{"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":"f037f57bb5b8ae735b0a18631bf7ee3d91514a94","unresolved":false,"context_lines":[{"line_number":19,"context_line":""},{"line_number":20,"context_line":"// listener is the curator runnable responsible for listening for gRP"},{"line_number":21,"context_line":"// connections and forwarding them over to one of two possible implementations:"},{"line_number":22,"context_line":"// - a local leader implementation which is backed in etcd"},{"line_number":23,"context_line":"// - a follower implementation that forwards the RPCs over to a remote leader."},{"line_number":24,"context_line":"//"},{"line_number":25,"context_line":"// Its goal is to make any switches over between leader and follower painless to"}],"source_content_type":"text/x-go","patch_set":2,"id":"09240ffd_5344b97e","line":22,"range":{"start_line":22,"start_character":51,"end_line":22,"end_character":53},"in_reply_to":"7fcb6e37_a42e03b0","updated":"2021-06-30 11:27:52.000000000","message":"Done","commit_id":"53ce533fb5ba14a16e023f6ff49a1a72d8ac1cae"},{"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":"f69bab431a0be9073edd5a69a9244c0f8bec5070","unresolved":true,"context_lines":[{"line_number":25,"context_line":"// Its goal is to make any switches over between leader and follower painless to"},{"line_number":26,"context_line":"// the gRPC callers."},{"line_number":27,"context_line":"// Any pending calls will be canceled with UNAVAILABLE and an error message"},{"line_number":28,"context_line":"// describing the fact that tha implementation has been switched over."},{"line_number":29,"context_line":"// The gRPC sockets will always be listening for connections, and block until"},{"line_number":30,"context_line":"// able to serve a request (either locally or by forwarding)."},{"line_number":31,"context_line":"// No retries will be attempted on switchover, as some calls might not be"}],"source_content_type":"text/x-go","patch_set":2,"id":"e98bb449_e2754780","line":28,"range":{"start_line":28,"start_character":28,"end_line":28,"end_character":31},"updated":"2021-06-23 15:18:25.000000000","message":"\u0027the\u0027","commit_id":"53ce533fb5ba14a16e023f6ff49a1a72d8ac1cae"},{"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":"f037f57bb5b8ae735b0a18631bf7ee3d91514a94","unresolved":false,"context_lines":[{"line_number":25,"context_line":"// Its goal is to make any switches over between leader and follower painless to"},{"line_number":26,"context_line":"// the gRPC callers."},{"line_number":27,"context_line":"// Any pending calls will be canceled with UNAVAILABLE and an error message"},{"line_number":28,"context_line":"// describing the fact that tha implementation has been switched over."},{"line_number":29,"context_line":"// The gRPC sockets will always be listening for connections, and block until"},{"line_number":30,"context_line":"// able to serve a request (either locally or by forwarding)."},{"line_number":31,"context_line":"// No retries will be attempted on switchover, as some calls might not be"}],"source_content_type":"text/x-go","patch_set":2,"id":"aa581448_6e293220","line":28,"range":{"start_line":28,"start_character":28,"end_line":28,"end_character":31},"in_reply_to":"e98bb449_e2754780","updated":"2021-06-30 11:27:52.000000000","message":"Done","commit_id":"53ce533fb5ba14a16e023f6ff49a1a72d8ac1cae"}]}
