)]}'
{"cloud/lib/mflags/limiter.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":"aac1abf22c7ad765c062dec99c494d08fad135d3","unresolved":true,"context_lines":[{"line_number":1,"context_line":"// Package mflags implements custom flags for use in monogon projects."},{"line_number":2,"context_line":"// It provides them to be used like normal flag.$Var and registers the"},{"line_number":3,"context_line":"// required flag functions."},{"line_number":4,"context_line":"package mflags"}],"source_content_type":"text/x-go","patch_set":3,"id":"b3240c16_fd69259f","line":1,"updated":"2023-10-30 11:29:02.000000000","message":"Maybe move that to //go/mflags? Seems generic enough.","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"446066a148afce644c1622296573489b44ea6131","unresolved":false,"context_lines":[{"line_number":1,"context_line":"// Package mflags implements custom flags for use in monogon projects."},{"line_number":2,"context_line":"// It provides them to be used like normal flag.$Var and registers the"},{"line_number":3,"context_line":"// required flag functions."},{"line_number":4,"context_line":"package mflags"}],"source_content_type":"text/x-go","patch_set":3,"id":"133a3cda_f9d6224c","line":1,"in_reply_to":"b3240c16_fd69259f","updated":"2023-10-30 18:59:26.000000000","message":"Done","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"}],"cloud/shepherd/manager/initializer_test.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":"d9397cd6e8a4a2bad543c2f23a1b3faa69e2b12e","unresolved":true,"context_lines":[{"line_number":81,"context_line":"\t\tif len(machines) \u003d\u003d 0 {"},{"line_number":82,"context_line":"\t\t\tbreak"},{"line_number":83,"context_line":"\t\t}"},{"line_number":84,"context_line":"\t}"},{"line_number":85,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":10,"id":"dc0e4a3a_d4dfe9e9","line":84,"range":{"start_line":84,"start_character":1,"end_line":84,"end_character":2},"updated":"2023-11-07 09:38:16.000000000","message":"You should probably also check that the fake machines have been SSHed into (or at least that there\u0027s machines with an AgentStarted tag?) - otherwise this is indistinguishable from \"the test created machines which the initializer query isn\u0027t interested in\".","commit_id":"22518dd65bfa0971c23120cde669a7c26fed358f"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b6b9fb93d815f879a87324e56549a805433c2020","unresolved":false,"context_lines":[{"line_number":81,"context_line":"\t\tif len(machines) \u003d\u003d 0 {"},{"line_number":82,"context_line":"\t\t\tbreak"},{"line_number":83,"context_line":"\t\t}"},{"line_number":84,"context_line":"\t}"},{"line_number":85,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":10,"id":"d96ecb6d_b40f7a75","line":84,"range":{"start_line":84,"start_character":1,"end_line":84,"end_character":2},"in_reply_to":"dc0e4a3a_d4dfe9e9","updated":"2023-11-07 15:18:42.000000000","message":"I wrapped the ssh client to check if the initializer triggered the agent start. It uses a small-ish hack by reusing the uuid as IPv6 to identify the correct device.","commit_id":"22518dd65bfa0971c23120cde669a7c26fed358f"}],"cloud/shepherd/manager/provider_test.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":"aac1abf22c7ad765c062dec99c494d08fad135d3","unresolved":true,"context_lines":[{"line_number":19,"context_line":"\t}"},{"line_number":20,"context_line":"}"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"type fakeProvider struct {"},{"line_number":23,"context_line":"\tmtx      sync.Mutex"},{"line_number":24,"context_line":"\tcapacity int"},{"line_number":25,"context_line":"\tmachines []*fakeMachine"}],"source_content_type":"text/x-go","patch_set":3,"id":"3ee40219_2db36efb","line":22,"range":{"start_line":22,"start_character":5,"end_line":22,"end_character":17},"updated":"2023-10-30 11:29:02.000000000","message":"Adds `// fakeProvider implements shephers.Provider for tests` (or whatever the interface is actually called) notes, also for fakeMachine.","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"446066a148afce644c1622296573489b44ea6131","unresolved":false,"context_lines":[{"line_number":19,"context_line":"\t}"},{"line_number":20,"context_line":"}"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"type fakeProvider struct {"},{"line_number":23,"context_line":"\tmtx      sync.Mutex"},{"line_number":24,"context_line":"\tcapacity int"},{"line_number":25,"context_line":"\tmachines []*fakeMachine"}],"source_content_type":"text/x-go","patch_set":3,"id":"f82e7e49_9a997667","line":22,"range":{"start_line":22,"start_character":5,"end_line":22,"end_character":17},"in_reply_to":"3ee40219_2db36efb","updated":"2023-10-30 18:59:26.000000000","message":"Acknowledged","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"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":"aac1abf22c7ad765c062dec99c494d08fad135d3","unresolved":true,"context_lines":[{"line_number":20,"context_line":"}"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"type fakeProvider struct {"},{"line_number":23,"context_line":"\tmtx      sync.Mutex"},{"line_number":24,"context_line":"\tcapacity int"},{"line_number":25,"context_line":"\tmachines []*fakeMachine"},{"line_number":26,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":3,"id":"1b8b2137_9a5bb40a","line":23,"updated":"2023-10-30 11:29:02.000000000","message":"By convention this would be called \u0027mu\u0027.","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"446066a148afce644c1622296573489b44ea6131","unresolved":false,"context_lines":[{"line_number":20,"context_line":"}"},{"line_number":21,"context_line":""},{"line_number":22,"context_line":"type fakeProvider struct {"},{"line_number":23,"context_line":"\tmtx      sync.Mutex"},{"line_number":24,"context_line":"\tcapacity int"},{"line_number":25,"context_line":"\tmachines []*fakeMachine"},{"line_number":26,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":3,"id":"97e85b27_e3dd6060","line":23,"in_reply_to":"1b8b2137_9a5bb40a","updated":"2023-10-30 18:59:26.000000000","message":"Done","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"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":"aac1abf22c7ad765c062dec99c494d08fad135d3","unresolved":true,"context_lines":[{"line_number":47,"context_line":"\tf.mtx.Lock()"},{"line_number":48,"context_line":"\tdefer f.mtx.Unlock()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"\tvar machines []shepherd.Machine"},{"line_number":51,"context_line":"\tfor _, m :\u003d range f.machines {"},{"line_number":52,"context_line":"\t\tmachines \u003d append(machines, m)"},{"line_number":53,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":3,"id":"b9a5facd_82527079","line":50,"range":{"start_line":50,"start_character":1,"end_line":50,"end_character":32},"updated":"2023-10-30 11:29:02.000000000","message":"`return slices.Clone(f.machine), nil`","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"446066a148afce644c1622296573489b44ea6131","unresolved":false,"context_lines":[{"line_number":47,"context_line":"\tf.mtx.Lock()"},{"line_number":48,"context_line":"\tdefer f.mtx.Unlock()"},{"line_number":49,"context_line":""},{"line_number":50,"context_line":"\tvar machines []shepherd.Machine"},{"line_number":51,"context_line":"\tfor _, m :\u003d range f.machines {"},{"line_number":52,"context_line":"\t\tmachines \u003d append(machines, m)"},{"line_number":53,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":3,"id":"90175087_97b27e25","line":50,"range":{"start_line":50,"start_character":1,"end_line":50,"end_character":32},"in_reply_to":"b9a5facd_82527079","updated":"2023-10-30 18:59:26.000000000","message":"\u003e Cannot use \u0027slices.Clone(f.machines)\u0027 (type []*fakeMachine) as the type []shepherd.Machine","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"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":"aac1abf22c7ad765c062dec99c494d08fad135d3","unresolved":true,"context_lines":[{"line_number":81,"context_line":"}"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"func (f *fakeProvider) Type() model.Provider {"},{"line_number":84,"context_line":"\treturn \"fake\""},{"line_number":85,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":3,"id":"20714ce8_cb1fa361","line":84,"updated":"2023-10-30 11:29:02.000000000","message":"This provider doesn\u0027t exist in the bmdb schema (where provider is an enum), so will likely cause issues when attempting to insert to a real database, no?","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"446066a148afce644c1622296573489b44ea6131","unresolved":false,"context_lines":[{"line_number":81,"context_line":"}"},{"line_number":82,"context_line":""},{"line_number":83,"context_line":"func (f *fakeProvider) Type() model.Provider {"},{"line_number":84,"context_line":"\treturn \"fake\""},{"line_number":85,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":3,"id":"ba435f4b_7ca2df72","line":84,"in_reply_to":"20714ce8_cb1fa361","updated":"2023-10-30 18:59:26.000000000","message":"Yes and in another commit I actually added them to the model, gonna move the whole provider_test.go","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"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":"7a41389f159768d3df277fe927d82267c5254a2b","unresolved":true,"context_lines":[{"line_number":12,"context_line":"\t\"source.monogon.dev/cloud/shepherd\""},{"line_number":13,"context_line":")"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"// TODO(tim): Write tests for generic implementation"},{"line_number":16,"context_line":"func newFakeProvider(cap int) shepherd.Provider {"},{"line_number":17,"context_line":"\treturn \u0026fakeProvider{"},{"line_number":18,"context_line":"\t\tcapacity: cap,"}],"source_content_type":"text/x-go","patch_set":8,"id":"e57305bd_6c493999","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":52},"updated":"2023-11-02 11:25:01.000000000","message":"Actually implement and test this. This codebase needs to be well exercised before it goes into prod.\n\n(feel free to stack this as a separate CR on top though, but this shouldn\u0027t be submitted before that)","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"dd2a727709612c53b41a3dc2c9b8d9d7eca1c51a","unresolved":false,"context_lines":[{"line_number":12,"context_line":"\t\"source.monogon.dev/cloud/shepherd\""},{"line_number":13,"context_line":")"},{"line_number":14,"context_line":""},{"line_number":15,"context_line":"// TODO(tim): Write tests for generic implementation"},{"line_number":16,"context_line":"func newFakeProvider(cap int) shepherd.Provider {"},{"line_number":17,"context_line":"\treturn \u0026fakeProvider{"},{"line_number":18,"context_line":"\t\tcapacity: cap,"}],"source_content_type":"text/x-go","patch_set":8,"id":"67a94a15_f42e7813","line":15,"range":{"start_line":15,"start_character":0,"end_line":15,"end_character":52},"in_reply_to":"e57305bd_6c493999","updated":"2023-11-06 18:30:13.000000000","message":"I took the two smoke test from equinix and modified them to exercise with the dummyProvider. Also the resolvePossiblyUsed logic has test cases now too","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"}],"cloud/shepherd/manager/provisioner.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":"aac1abf22c7ad765c062dec99c494d08fad135d3","unresolved":true,"context_lines":[{"line_number":64,"context_line":"\treturn nil"},{"line_number":65,"context_line":"}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"// Provisioner implements the server provisioning logic. Provisioning entails"},{"line_number":68,"context_line":"// bringing all available machines (subject to limits) into BMDB."},{"line_number":69,"context_line":"type Provisioner struct {"},{"line_number":70,"context_line":"\tProvisionerConfig"},{"line_number":71,"context_line":"\tp shepherd.Provider"},{"line_number":72,"context_line":"}"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"// NewProvisioner creates a Provisioner instance, checking ProvisionerConfig and"},{"line_number":75,"context_line":"// providerConfig for errors."}],"source_content_type":"text/x-go","patch_set":3,"id":"1a2112fc_777f4059","line":72,"range":{"start_line":67,"start_character":0,"end_line":72,"end_character":1},"updated":"2023-10-30 11:29:02.000000000","message":"Move this to the top of the file to make this godoc more valuable for readers.","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"446066a148afce644c1622296573489b44ea6131","unresolved":false,"context_lines":[{"line_number":64,"context_line":"\treturn nil"},{"line_number":65,"context_line":"}"},{"line_number":66,"context_line":""},{"line_number":67,"context_line":"// Provisioner implements the server provisioning logic. Provisioning entails"},{"line_number":68,"context_line":"// bringing all available machines (subject to limits) into BMDB."},{"line_number":69,"context_line":"type Provisioner struct {"},{"line_number":70,"context_line":"\tProvisionerConfig"},{"line_number":71,"context_line":"\tp shepherd.Provider"},{"line_number":72,"context_line":"}"},{"line_number":73,"context_line":""},{"line_number":74,"context_line":"// NewProvisioner creates a Provisioner instance, checking ProvisionerConfig and"},{"line_number":75,"context_line":"// providerConfig for errors."}],"source_content_type":"text/x-go","patch_set":3,"id":"0a34abfe_624460da","line":72,"range":{"start_line":67,"start_character":0,"end_line":72,"end_character":1},"in_reply_to":"1a2112fc_777f4059","updated":"2023-10-30 18:59:26.000000000","message":"Done","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"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":"aac1abf22c7ad765c062dec99c494d08fad135d3","unresolved":true,"context_lines":[{"line_number":209,"context_line":"\t\t\tif err !\u003d nil {"},{"line_number":210,"context_line":"\t\t\t\tklog.Errorf(\"BMDB machine %s has unparseable provider ID %q\", machine.MachineID, machine.ProviderID)"},{"line_number":211,"context_line":"\t\t\t} else {"},{"line_number":212,"context_line":"\t\t\t\tres[i] \u003d shepherd.ProviderID(id.String())"},{"line_number":213,"context_line":"\t\t\t}"},{"line_number":214,"context_line":"\t\t}"},{"line_number":215,"context_line":"\t\treturn nil"}],"source_content_type":"text/x-go","patch_set":3,"id":"6ca6fb94_bb79b9ef","line":212,"range":{"start_line":212,"start_character":4,"end_line":212,"end_character":45},"updated":"2023-10-30 11:29:02.000000000","message":"If this branch isn\u0027t taken, we\u0027ll end up with a zero provider ID in the result. Instead, allocate res with capacity (`make([]shepherd.ProviderID, 0, len(machines))`) and use `append()` here instead of writing to `res[i]`.","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"446066a148afce644c1622296573489b44ea6131","unresolved":false,"context_lines":[{"line_number":209,"context_line":"\t\t\tif err !\u003d nil {"},{"line_number":210,"context_line":"\t\t\t\tklog.Errorf(\"BMDB machine %s has unparseable provider ID %q\", machine.MachineID, machine.ProviderID)"},{"line_number":211,"context_line":"\t\t\t} else {"},{"line_number":212,"context_line":"\t\t\t\tres[i] \u003d shepherd.ProviderID(id.String())"},{"line_number":213,"context_line":"\t\t\t}"},{"line_number":214,"context_line":"\t\t}"},{"line_number":215,"context_line":"\t\treturn nil"}],"source_content_type":"text/x-go","patch_set":3,"id":"b87a4069_568d412c","line":212,"range":{"start_line":212,"start_character":4,"end_line":212,"end_character":45},"in_reply_to":"6ca6fb94_bb79b9ef","updated":"2023-10-30 18:59:26.000000000","message":"Done","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"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":"7a41389f159768d3df277fe927d82267c5254a2b","unresolved":true,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"\t// resolveState checks if the state is set to possibly used and finds out"},{"line_number":263,"context_line":"\t// which state is the correct one."},{"line_number":264,"context_line":"\tresolveState :\u003d func(machine shepherd.Machine) shepherd.State {"},{"line_number":265,"context_line":"\t\tstate, id :\u003d machine.State(), machine.ID()"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"\t\t// bail out if this isn\u0027t a possibly used state."}],"source_content_type":"text/x-go","patch_set":8,"id":"2c3c2111_771e3c66","line":264,"range":{"start_line":264,"start_character":1,"end_line":264,"end_character":13},"updated":"2023-11-02 11:25:01.000000000","message":"`resolvePossiblyUsed` might be a bit more descriptive.","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"439e47398e9682296c3d25d4647757f9954fa964","unresolved":false,"context_lines":[{"line_number":261,"context_line":""},{"line_number":262,"context_line":"\t// resolveState checks if the state is set to possibly used and finds out"},{"line_number":263,"context_line":"\t// which state is the correct one."},{"line_number":264,"context_line":"\tresolveState :\u003d func(machine shepherd.Machine) shepherd.State {"},{"line_number":265,"context_line":"\t\tstate, id :\u003d machine.State(), machine.ID()"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"\t\t// bail out if this isn\u0027t a possibly used state."}],"source_content_type":"text/x-go","patch_set":8,"id":"7a599f48_459e8149","line":264,"range":{"start_line":264,"start_character":1,"end_line":264,"end_character":13},"in_reply_to":"2c3c2111_771e3c66","updated":"2023-11-03 01:25:55.000000000","message":"Done","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"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":"7a41389f159768d3df277fe927d82267c5254a2b","unresolved":true,"context_lines":[{"line_number":264,"context_line":"\tresolveState :\u003d func(machine shepherd.Machine) shepherd.State {"},{"line_number":265,"context_line":"\t\tstate, id :\u003d machine.State(), machine.ID()"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"\t\t// bail out if this isn\u0027t a possibly used state."},{"line_number":268,"context_line":"\t\tif state !\u003d shepherd.StatePossiblyUsed {"},{"line_number":269,"context_line":"\t\t\treturn state"},{"line_number":270,"context_line":"\t\t}"}],"source_content_type":"text/x-go","patch_set":8,"id":"e5bd82fe_08685f15","line":267,"range":{"start_line":267,"start_character":5,"end_line":267,"end_character":6},"updated":"2023-11-02 11:25:01.000000000","message":"Nit: comments are full sentences that stand with a capital letter and end in a period.\n\n(also elsewhere)","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"439e47398e9682296c3d25d4647757f9954fa964","unresolved":false,"context_lines":[{"line_number":264,"context_line":"\tresolveState :\u003d func(machine shepherd.Machine) shepherd.State {"},{"line_number":265,"context_line":"\t\tstate, id :\u003d machine.State(), machine.ID()"},{"line_number":266,"context_line":""},{"line_number":267,"context_line":"\t\t// bail out if this isn\u0027t a possibly used state."},{"line_number":268,"context_line":"\t\tif state !\u003d shepherd.StatePossiblyUsed {"},{"line_number":269,"context_line":"\t\t\treturn state"},{"line_number":270,"context_line":"\t\t}"}],"source_content_type":"text/x-go","patch_set":8,"id":"de21129d_01b01616","line":267,"range":{"start_line":267,"start_character":5,"end_line":267,"end_character":6},"in_reply_to":"e5bd82fe_08685f15","updated":"2023-11-03 01:25:55.000000000","message":"Done","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"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":"7a41389f159768d3df277fe927d82267c5254a2b","unresolved":true,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"\t\t// if the machine is not inside the bmdb, its seen as unused"},{"line_number":278,"context_line":"\t\tif _, ok :\u003d bmdb[id]; !ok {"},{"line_number":279,"context_line":"\t\t\tstate \u003d shepherd.StateKnownUnused"},{"line_number":280,"context_line":"\t\t}"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"\t\treturn shepherd.StateKnownUsed"}],"source_content_type":"text/x-go","patch_set":8,"id":"41b148db_04df5ee7","line":279,"range":{"start_line":279,"start_character":3,"end_line":279,"end_character":36},"updated":"2023-11-02 11:25:01.000000000","message":"This looks like a bug.\n\nWe would benefit from tests for this. It\u0027s a very critical codepath that we really want to make sure won\u0027t mess things up.","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"439e47398e9682296c3d25d4647757f9954fa964","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"\t\t// if the machine is not inside the bmdb, its seen as unused"},{"line_number":278,"context_line":"\t\tif _, ok :\u003d bmdb[id]; !ok {"},{"line_number":279,"context_line":"\t\t\tstate \u003d shepherd.StateKnownUnused"},{"line_number":280,"context_line":"\t\t}"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"\t\treturn shepherd.StateKnownUsed"}],"source_content_type":"text/x-go","patch_set":8,"id":"d7985a01_88db64b3","line":279,"range":{"start_line":279,"start_character":3,"end_line":279,"end_character":36},"in_reply_to":"41b148db_04df5ee7","updated":"2023-11-03 01:25:55.000000000","message":"If a machine is not inside the the bmdb, its unused. Thats the entire logic that exists. I will add tests to clarify this","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"dd2a727709612c53b41a3dc2c9b8d9d7eca1c51a","unresolved":false,"context_lines":[{"line_number":276,"context_line":""},{"line_number":277,"context_line":"\t\t// if the machine is not inside the bmdb, its seen as unused"},{"line_number":278,"context_line":"\t\tif _, ok :\u003d bmdb[id]; !ok {"},{"line_number":279,"context_line":"\t\t\tstate \u003d shepherd.StateKnownUnused"},{"line_number":280,"context_line":"\t\t}"},{"line_number":281,"context_line":""},{"line_number":282,"context_line":"\t\treturn shepherd.StateKnownUsed"}],"source_content_type":"text/x-go","patch_set":8,"id":"87ced5a7_33ff3646","line":279,"range":{"start_line":279,"start_character":3,"end_line":279,"end_character":36},"in_reply_to":"d7985a01_88db64b3","updated":"2023-11-06 18:30:13.000000000","message":"Ah I didn\u0027t see the assignment. Fixed now 😊","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"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":"7a41389f159768d3df277fe927d82267c5254a2b","unresolved":true,"context_lines":[{"line_number":282,"context_line":"\t\treturn shepherd.StateKnownUsed"},{"line_number":283,"context_line":"\t}"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"\tprovider, availableMachines :\u003d make(map[shepherd.ProviderID]bool), make([]shepherd.Machine, 0)"},{"line_number":286,"context_line":"\tfor _, machine :\u003d range inProvider {"},{"line_number":287,"context_line":"\t\tstate :\u003d resolveState(machine)"},{"line_number":288,"context_line":""}],"source_content_type":"text/x-go","patch_set":8,"id":"5c1aa4ab_43e2ced0","line":285,"range":{"start_line":285,"start_character":1,"end_line":285,"end_character":29},"updated":"2023-11-02 11:25:01.000000000","message":"Nit: split out into two separate lines (consistency with the rest of the codebase).","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"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":"7a41389f159768d3df277fe927d82267c5254a2b","unresolved":true,"context_lines":[{"line_number":282,"context_line":"\t\treturn shepherd.StateKnownUsed"},{"line_number":283,"context_line":"\t}"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"\tprovider, availableMachines :\u003d make(map[shepherd.ProviderID]bool), make([]shepherd.Machine, 0)"},{"line_number":286,"context_line":"\tfor _, machine :\u003d range inProvider {"},{"line_number":287,"context_line":"\t\tstate :\u003d resolveState(machine)"},{"line_number":288,"context_line":""}],"source_content_type":"text/x-go","patch_set":8,"id":"d079ea33_7f13067a","line":285,"range":{"start_line":285,"start_character":93,"end_line":285,"end_character":94},"updated":"2023-11-02 11:25:01.000000000","message":"You can omit the 0. In fact, you can also just `var availableMachines []shepherd.Machine`.","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"439e47398e9682296c3d25d4647757f9954fa964","unresolved":false,"context_lines":[{"line_number":282,"context_line":"\t\treturn shepherd.StateKnownUsed"},{"line_number":283,"context_line":"\t}"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"\tprovider, availableMachines :\u003d make(map[shepherd.ProviderID]bool), make([]shepherd.Machine, 0)"},{"line_number":286,"context_line":"\tfor _, machine :\u003d range inProvider {"},{"line_number":287,"context_line":"\t\tstate :\u003d resolveState(machine)"},{"line_number":288,"context_line":""}],"source_content_type":"text/x-go","patch_set":8,"id":"51c6f79f_3771883e","line":285,"range":{"start_line":285,"start_character":1,"end_line":285,"end_character":29},"in_reply_to":"5c1aa4ab_43e2ced0","updated":"2023-11-03 01:25:55.000000000","message":"Done","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"439e47398e9682296c3d25d4647757f9954fa964","unresolved":false,"context_lines":[{"line_number":282,"context_line":"\t\treturn shepherd.StateKnownUsed"},{"line_number":283,"context_line":"\t}"},{"line_number":284,"context_line":""},{"line_number":285,"context_line":"\tprovider, availableMachines :\u003d make(map[shepherd.ProviderID]bool), make([]shepherd.Machine, 0)"},{"line_number":286,"context_line":"\tfor _, machine :\u003d range inProvider {"},{"line_number":287,"context_line":"\t\tstate :\u003d resolveState(machine)"},{"line_number":288,"context_line":""}],"source_content_type":"text/x-go","patch_set":8,"id":"f679e3e5_b2b3b7b4","line":285,"range":{"start_line":285,"start_character":93,"end_line":285,"end_character":94},"in_reply_to":"d079ea33_7f13067a","updated":"2023-11-03 01:25:55.000000000","message":"Done","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"}],"cloud/shepherd/mini/main.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":"d9397cd6e8a4a2bad543c2f23a1b3faa69e2b12e","unresolved":true,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"func fetchDeviceList(s string) (deviceList, error) {"},{"line_number":73,"context_line":"\tvar r io.Reader"},{"line_number":74,"context_line":"\tif strings.HasPrefix(s, \"http\") {"},{"line_number":75,"context_line":"\t\tresp, err :\u003d http.Get(s)"},{"line_number":76,"context_line":"\t\tif err !\u003d nil {"},{"line_number":77,"context_line":"\t\t\treturn nil, err"}],"source_content_type":"text/x-go","patch_set":10,"id":"2ecd6242_fafca836","line":74,"range":{"start_line":74,"start_character":1,"end_line":74,"end_character":34},"updated":"2023-11-07 09:38:16.000000000","message":"A bit too magical IMO. Consider the confusion of whoever happens to have a locally saved file starting with \u0027http\u0027 and then runs this tool.\n\nEither make this more explicit (require file:// for local files, or have an explicit separate flag for web paths, or have another flag which switches the mode), or depend on people knowing to use `-mini_device_list_source \u003c(curl http://...)`.","commit_id":"22518dd65bfa0971c23120cde669a7c26fed358f"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b6b9fb93d815f879a87324e56549a805433c2020","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"func fetchDeviceList(s string) (deviceList, error) {"},{"line_number":73,"context_line":"\tvar r io.Reader"},{"line_number":74,"context_line":"\tif strings.HasPrefix(s, \"http\") {"},{"line_number":75,"context_line":"\t\tresp, err :\u003d http.Get(s)"},{"line_number":76,"context_line":"\t\tif err !\u003d nil {"},{"line_number":77,"context_line":"\t\t\treturn nil, err"}],"source_content_type":"text/x-go","patch_set":10,"id":"8cf0e771_082017d6","line":74,"range":{"start_line":74,"start_character":1,"end_line":74,"end_character":34},"in_reply_to":"2ecd6242_fafca836","updated":"2023-11-07 15:18:42.000000000","message":"TIL that passes a path to an anonymous fd. Done 😊","commit_id":"22518dd65bfa0971c23120cde669a7c26fed358f"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"02edec84a203e5a5024c03a83b4ff4177c595fa6","unresolved":true,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"func fetchDeviceList(s string) (deviceList, error) {"},{"line_number":73,"context_line":"\tvar r io.Reader"},{"line_number":74,"context_line":"\tif strings.HasPrefix(s, \"http\") {"},{"line_number":75,"context_line":"\t\tresp, err :\u003d http.Get(s)"},{"line_number":76,"context_line":"\t\tif err !\u003d nil {"},{"line_number":77,"context_line":"\t\t\treturn nil, err"}],"source_content_type":"text/x-go","patch_set":10,"id":"96ed62aa_870229a6","line":74,"range":{"start_line":74,"start_character":1,"end_line":74,"end_character":34},"in_reply_to":"8cf0e771_082017d6","updated":"2023-11-07 17:23:09.000000000","message":"Ah we don\u0027t have curl in the container as we are based on a SCRATCH container... I will add a file:// requirement.","commit_id":"22518dd65bfa0971c23120cde669a7c26fed358f"},{"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":"e68653d595aab899a001d0709ee52f0d6c4bd6bb","unresolved":false,"context_lines":[{"line_number":71,"context_line":""},{"line_number":72,"context_line":"func fetchDeviceList(s string) (deviceList, error) {"},{"line_number":73,"context_line":"\tvar r io.Reader"},{"line_number":74,"context_line":"\tif strings.HasPrefix(s, \"http\") {"},{"line_number":75,"context_line":"\t\tresp, err :\u003d http.Get(s)"},{"line_number":76,"context_line":"\t\tif err !\u003d nil {"},{"line_number":77,"context_line":"\t\t\treturn nil, err"}],"source_content_type":"text/x-go","patch_set":10,"id":"70b852d4_6ae5679b","line":74,"range":{"start_line":74,"start_character":1,"end_line":74,"end_character":34},"in_reply_to":"96ed62aa_870229a6","updated":"2023-11-08 09:51:08.000000000","message":"Done","commit_id":"22518dd65bfa0971c23120cde669a7c26fed358f"}],"cloud/shepherd/mini/provider.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":"d9397cd6e8a4a2bad543c2f23a1b3faa69e2b12e","unresolved":true,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"type deviceList []machine"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"func (dl deviceList) AsMap() map[shepherd.ProviderID]machine {"},{"line_number":25,"context_line":"\tmm :\u003d make(map[shepherd.ProviderID]machine)"},{"line_number":26,"context_line":"\tfor _, m :\u003d range dl {"},{"line_number":27,"context_line":"\t\tmm[m.ProviderID] \u003d m"}],"source_content_type":"text/x-go","patch_set":10,"id":"dc5be31c_3152cc7b","line":24,"range":{"start_line":24,"start_character":21,"end_line":24,"end_character":26},"updated":"2023-11-07 09:38:16.000000000","message":"nit: This probably doesn\u0027t need to be exported.","commit_id":"22518dd65bfa0971c23120cde669a7c26fed358f"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b6b9fb93d815f879a87324e56549a805433c2020","unresolved":false,"context_lines":[{"line_number":21,"context_line":""},{"line_number":22,"context_line":"type deviceList []machine"},{"line_number":23,"context_line":""},{"line_number":24,"context_line":"func (dl deviceList) AsMap() map[shepherd.ProviderID]machine {"},{"line_number":25,"context_line":"\tmm :\u003d make(map[shepherd.ProviderID]machine)"},{"line_number":26,"context_line":"\tfor _, m :\u003d range dl {"},{"line_number":27,"context_line":"\t\tmm[m.ProviderID] \u003d m"}],"source_content_type":"text/x-go","patch_set":10,"id":"3f4dafc8_7c7c3558","line":24,"range":{"start_line":24,"start_character":21,"end_line":24,"end_character":26},"in_reply_to":"dc5be31c_3152cc7b","updated":"2023-11-07 15:18:42.000000000","message":"Done","commit_id":"22518dd65bfa0971c23120cde669a7c26fed358f"}],"cloud/shepherd/provider/equinix/provider.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":"aac1abf22c7ad765c062dec99c494d08fad135d3","unresolved":true,"context_lines":[{"line_number":30,"context_line":"\t// machines."},{"line_number":31,"context_line":"\tbadReservations sinbin.Sinbin[string]"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"\treservationsMtx        sync.Mutex"},{"line_number":34,"context_line":"\tlastReservationsUpdate time.Time"},{"line_number":35,"context_line":"\treservations           []packngo.HardwareReservation"},{"line_number":36,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":3,"id":"ca550458_f0092331","line":33,"range":{"start_line":33,"start_character":1,"end_line":33,"end_character":16},"updated":"2023-10-30 11:29:02.000000000","message":"reservationsMu by convention","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"446066a148afce644c1622296573489b44ea6131","unresolved":false,"context_lines":[{"line_number":30,"context_line":"\t// machines."},{"line_number":31,"context_line":"\tbadReservations sinbin.Sinbin[string]"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"\treservationsMtx        sync.Mutex"},{"line_number":34,"context_line":"\tlastReservationsUpdate time.Time"},{"line_number":35,"context_line":"\treservations           []packngo.HardwareReservation"},{"line_number":36,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":3,"id":"8d3165dc_067eb40c","line":33,"range":{"start_line":33,"start_character":1,"end_line":33,"end_character":16},"in_reply_to":"ca550458_f0092331","updated":"2023-10-30 18:59:26.000000000","message":"Done","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"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":"aac1abf22c7ad765c062dec99c494d08fad135d3","unresolved":true,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"func (ep *equinixProvider) ReinstallMachine(ctx context.Context, id shepherd.ProviderID) error {"},{"line_number":55,"context_line":"\t//TODO implement me"},{"line_number":56,"context_line":"\tpanic(\"implement me\")"},{"line_number":57,"context_line":"}"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"func (ep *equinixProvider) GetMachine(ctx context.Context, id shepherd.ProviderID) (shepherd.Machine, error) {"}],"source_content_type":"text/x-go","patch_set":3,"id":"ccbffb6d_25ec7710","line":56,"range":{"start_line":56,"start_character":1,"end_line":56,"end_character":22},"updated":"2023-10-30 11:29:02.000000000","message":"Don\u0027t panic, return an error. There\u0027s no reason to crash the entire provider process here.","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"446066a148afce644c1622296573489b44ea6131","unresolved":false,"context_lines":[{"line_number":53,"context_line":""},{"line_number":54,"context_line":"func (ep *equinixProvider) ReinstallMachine(ctx context.Context, id shepherd.ProviderID) error {"},{"line_number":55,"context_line":"\t//TODO implement me"},{"line_number":56,"context_line":"\tpanic(\"implement me\")"},{"line_number":57,"context_line":"}"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"func (ep *equinixProvider) GetMachine(ctx context.Context, id shepherd.ProviderID) (shepherd.Machine, error) {"}],"source_content_type":"text/x-go","patch_set":3,"id":"bb482388_68c7e0dd","line":56,"range":{"start_line":56,"start_character":1,"end_line":56,"end_character":22},"in_reply_to":"ccbffb6d_25ec7710","updated":"2023-10-30 18:59:26.000000000","message":"Done","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"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":"aac1abf22c7ad765c062dec99c494d08fad135d3","unresolved":true,"context_lines":[{"line_number":57,"context_line":"}"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"func (ep *equinixProvider) GetMachine(ctx context.Context, id shepherd.ProviderID) (shepherd.Machine, error) {"},{"line_number":60,"context_line":"\tmachines, err :\u003d ep.ListMachines(ctx)"},{"line_number":61,"context_line":"\tif err !\u003d nil {"},{"line_number":62,"context_line":"\t\treturn nil, err"},{"line_number":63,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":3,"id":"d5cdf039_ab9b8b29","line":60,"range":{"start_line":60,"start_character":18,"end_line":60,"end_character":38},"updated":"2023-10-30 11:29:02.000000000","message":"Isn\u0027t there a less expensive call we could make here to get a machine by ProviderID?","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"396178c3c2c24d11c5e04ce5dc7c8f5abed4c6f6","unresolved":false,"context_lines":[{"line_number":57,"context_line":"}"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"func (ep *equinixProvider) GetMachine(ctx context.Context, id shepherd.ProviderID) (shepherd.Machine, error) {"},{"line_number":60,"context_line":"\tmachines, err :\u003d ep.ListMachines(ctx)"},{"line_number":61,"context_line":"\tif err !\u003d nil {"},{"line_number":62,"context_line":"\t\treturn nil, err"},{"line_number":63,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":3,"id":"e3cdf3de_7ed0a1d5","line":60,"range":{"start_line":60,"start_character":18,"end_line":60,"end_character":38},"in_reply_to":"0cfa1e55_9f3bcc5e","updated":"2023-10-31 13:08:12.000000000","message":"Fixed by refactoring to the new state system","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"f13413d5999a879fae81218d53f4acfbd1ada7a1","unresolved":true,"context_lines":[{"line_number":57,"context_line":"}"},{"line_number":58,"context_line":""},{"line_number":59,"context_line":"func (ep *equinixProvider) GetMachine(ctx context.Context, id shepherd.ProviderID) (shepherd.Machine, error) {"},{"line_number":60,"context_line":"\tmachines, err :\u003d ep.ListMachines(ctx)"},{"line_number":61,"context_line":"\tif err !\u003d nil {"},{"line_number":62,"context_line":"\t\treturn nil, err"},{"line_number":63,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":3,"id":"0cfa1e55_9f3bcc5e","line":60,"range":{"start_line":60,"start_character":18,"end_line":60,"end_character":38},"in_reply_to":"d5cdf039_ab9b8b29","updated":"2023-10-30 20:44:48.000000000","message":"We could cache the machines that are currently available inside Equinix or connect to the bmdb and return informations from there...","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"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":"aac1abf22c7ad765c062dec99c494d08fad135d3","unresolved":true,"context_lines":[{"line_number":76,"context_line":"\t\treturn 0, err"},{"line_number":77,"context_line":"\t}"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"\treturn len(ep.reservations), nil"},{"line_number":80,"context_line":"}"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"func (ep *equinixProvider) ListMachines(ctx context.Context) ([]shepherd.Machine, error) {"}],"source_content_type":"text/x-go","patch_set":3,"id":"45058f64_27ef7966","line":79,"range":{"start_line":79,"start_character":8,"end_line":79,"end_character":28},"updated":"2023-10-30 11:29:02.000000000","message":"You need to take the lock here.","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"446066a148afce644c1622296573489b44ea6131","unresolved":false,"context_lines":[{"line_number":76,"context_line":"\t\treturn 0, err"},{"line_number":77,"context_line":"\t}"},{"line_number":78,"context_line":""},{"line_number":79,"context_line":"\treturn len(ep.reservations), nil"},{"line_number":80,"context_line":"}"},{"line_number":81,"context_line":""},{"line_number":82,"context_line":"func (ep *equinixProvider) ListMachines(ctx context.Context) ([]shepherd.Machine, error) {"}],"source_content_type":"text/x-go","patch_set":3,"id":"9928b410_a83d0141","line":79,"range":{"start_line":79,"start_character":8,"end_line":79,"end_character":28},"in_reply_to":"45058f64_27ef7966","updated":"2023-10-30 18:59:26.000000000","message":"Done","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"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":"aac1abf22c7ad765c062dec99c494d08fad135d3","unresolved":true,"context_lines":[{"line_number":101,"context_line":"\tep.reservationsMtx.Lock()"},{"line_number":102,"context_line":"\tdefer ep.reservationsMtx.Unlock()"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"\tres :\u003d ep.reservations[0]"},{"line_number":105,"context_line":"\tep.reservations \u003d ep.reservations[1:]"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"\td, err :\u003d ep.provision(ctx, session, res)"},{"line_number":108,"context_line":"\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":3,"id":"9be706d2_175be943","line":105,"range":{"start_line":104,"start_character":1,"end_line":105,"end_character":38},"updated":"2023-10-30 11:29:02.000000000","message":"This can race in the following way:\n\n1. AvailableCapacity gets called, which calls updateReservations. Reservations start being listed by API.\n2. CreateMachine gets called, consumes ep.reservations[0].\n3. AvailableCapacity gets list, updates ep.reservations, which contain the reservation grabbed at 2 (because the reservation is still unused per the API).\n4. CreateMachine continues with the ep.provision call, a machine gets provisioned with the reservation from 2.\n5. We end up with a reservation both in ep.reservations and that\u0027s actually in use by a machine that we just created.","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"396178c3c2c24d11c5e04ce5dc7c8f5abed4c6f6","unresolved":false,"context_lines":[{"line_number":101,"context_line":"\tep.reservationsMtx.Lock()"},{"line_number":102,"context_line":"\tdefer ep.reservationsMtx.Unlock()"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"\tres :\u003d ep.reservations[0]"},{"line_number":105,"context_line":"\tep.reservations \u003d ep.reservations[1:]"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"\td, err :\u003d ep.provision(ctx, session, res)"},{"line_number":108,"context_line":"\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":3,"id":"3b1131db_3dbb9f29","line":105,"range":{"start_line":104,"start_character":1,"end_line":105,"end_character":38},"in_reply_to":"6dabbb56_cd8fc472","updated":"2023-10-31 13:08:12.000000000","message":"We dont allow concurrency anymore...","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"446066a148afce644c1622296573489b44ea6131","unresolved":true,"context_lines":[{"line_number":101,"context_line":"\tep.reservationsMtx.Lock()"},{"line_number":102,"context_line":"\tdefer ep.reservationsMtx.Unlock()"},{"line_number":103,"context_line":""},{"line_number":104,"context_line":"\tres :\u003d ep.reservations[0]"},{"line_number":105,"context_line":"\tep.reservations \u003d ep.reservations[1:]"},{"line_number":106,"context_line":""},{"line_number":107,"context_line":"\td, err :\u003d ep.provision(ctx, session, res)"},{"line_number":108,"context_line":"\tif err !\u003d nil {"}],"source_content_type":"text/x-go","patch_set":3,"id":"6dabbb56_cd8fc472","line":105,"range":{"start_line":104,"start_character":1,"end_line":105,"end_character":38},"in_reply_to":"9be706d2_175be943","updated":"2023-10-30 18:59:26.000000000","message":"Both are using the mutex and lock before interacting with the slice. If available capacity gets the lock before CreateMachine it will return an outdated capacity, which is fine as the CreateMachine is the only one mutating the slice outside of update. \n\nEven when it would be out of sync the api would not allow creation of two devices with the same reservation (yes thats not smth we want to rely on).\n\nDo you have any recommendation on how to solve this? I could migrate to multiple locks and prevent any call to AvailableCapacity to be executed while a CreateMachine call is running","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"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":"aac1abf22c7ad765c062dec99c494d08fad135d3","unresolved":true,"context_lines":[{"line_number":155,"context_line":"func (ep *equinixProvider) updateReservations(ctx context.Context) error {"},{"line_number":156,"context_line":"\tep.reservationsMtx.Lock()"},{"line_number":157,"context_line":"\t// Dont update if an update happened before the timeout"},{"line_number":158,"context_line":"\tif !time.Now().After(ep.lastReservationsUpdate.Add(reservationsTimeout)) {"},{"line_number":159,"context_line":"\t\tep.reservationsMtx.Unlock()"},{"line_number":160,"context_line":"\t\treturn nil"},{"line_number":161,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":3,"id":"c8d4061f_e4d83053","line":158,"range":{"start_line":158,"start_character":25,"end_line":158,"end_character":47},"updated":"2023-10-30 11:29:02.000000000","message":"We generally use deadlines instead of event timestamps in our code.\n\nThen, the reservation timeout is applied when generating the deadline, and the checks don\u0027t take the timeout into account, just the saved deadline.\n\nIt\u0027s mostly a subjective preference though.","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"396178c3c2c24d11c5e04ce5dc7c8f5abed4c6f6","unresolved":false,"context_lines":[{"line_number":155,"context_line":"func (ep *equinixProvider) updateReservations(ctx context.Context) error {"},{"line_number":156,"context_line":"\tep.reservationsMtx.Lock()"},{"line_number":157,"context_line":"\t// Dont update if an update happened before the timeout"},{"line_number":158,"context_line":"\tif !time.Now().After(ep.lastReservationsUpdate.Add(reservationsTimeout)) {"},{"line_number":159,"context_line":"\t\tep.reservationsMtx.Unlock()"},{"line_number":160,"context_line":"\t\treturn nil"},{"line_number":161,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":3,"id":"0b1b0a98_9763add4","line":158,"range":{"start_line":158,"start_character":25,"end_line":158,"end_character":47},"in_reply_to":"c8d4061f_e4d83053","updated":"2023-10-31 13:08:12.000000000","message":"Is removed now as its no longer needed","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"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":"aac1abf22c7ad765c062dec99c494d08fad135d3","unresolved":true,"context_lines":[{"line_number":159,"context_line":"\t\tep.reservationsMtx.Unlock()"},{"line_number":160,"context_line":"\t\treturn nil"},{"line_number":161,"context_line":"\t}"},{"line_number":162,"context_line":"\tep.reservationsMtx.Unlock()"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"\tklog.Infof(\"Retrieving hardware reservations, this will take a while...\")"},{"line_number":165,"context_line":"\treservations, err :\u003d ep.api.ListReservations(ctx, ep.config.ProjectId)"}],"source_content_type":"text/x-go","patch_set":3,"id":"70896545_b2766153","line":162,"range":{"start_line":162,"start_character":1,"end_line":162,"end_character":28},"updated":"2023-10-30 11:29:02.000000000","message":"Two concurrent AvailableCapacity calls can race here and cause two ListReservations calls to happen in parallel, which we should avoid.","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"396178c3c2c24d11c5e04ce5dc7c8f5abed4c6f6","unresolved":false,"context_lines":[{"line_number":159,"context_line":"\t\tep.reservationsMtx.Unlock()"},{"line_number":160,"context_line":"\t\treturn nil"},{"line_number":161,"context_line":"\t}"},{"line_number":162,"context_line":"\tep.reservationsMtx.Unlock()"},{"line_number":163,"context_line":""},{"line_number":164,"context_line":"\tklog.Infof(\"Retrieving hardware reservations, this will take a while...\")"},{"line_number":165,"context_line":"\treservations, err :\u003d ep.api.ListReservations(ctx, ep.config.ProjectId)"}],"source_content_type":"text/x-go","patch_set":3,"id":"2261d565_d4b19b03","line":162,"range":{"start_line":162,"start_character":1,"end_line":162,"end_character":28},"in_reply_to":"70896545_b2766153","updated":"2023-10-31 13:08:12.000000000","message":"Done","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"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":"aac1abf22c7ad765c062dec99c494d08fad135d3","unresolved":true,"context_lines":[{"line_number":224,"context_line":""},{"line_number":225,"context_line":"\terr \u003d ep.assimilate(ctx, sess, nd.ID)"},{"line_number":226,"context_line":"\tif err !\u003d nil {"},{"line_number":227,"context_line":"\t\t// TODO(mateusz@monogon.tech) at this point the device at Equinix isn\u0027t"},{"line_number":228,"context_line":"\t\t// matched by a BMDB record. Schedule device deletion or make sure this"},{"line_number":229,"context_line":"\t\t// case is being handled elsewhere."},{"line_number":230,"context_line":"\t\treturn nil, err"}],"source_content_type":"text/x-go","patch_set":3,"id":"3a81943d_f17cf7be","line":227,"range":{"start_line":227,"start_character":5,"end_line":227,"end_character":30},"updated":"2023-10-30 11:29:02.000000000","message":"We should commandeer that TODO.","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"446066a148afce644c1622296573489b44ea6131","unresolved":true,"context_lines":[{"line_number":224,"context_line":""},{"line_number":225,"context_line":"\terr \u003d ep.assimilate(ctx, sess, nd.ID)"},{"line_number":226,"context_line":"\tif err !\u003d nil {"},{"line_number":227,"context_line":"\t\t// TODO(mateusz@monogon.tech) at this point the device at Equinix isn\u0027t"},{"line_number":228,"context_line":"\t\t// matched by a BMDB record. Schedule device deletion or make sure this"},{"line_number":229,"context_line":"\t\t// case is being handled elsewhere."},{"line_number":230,"context_line":"\t\treturn nil, err"}],"source_content_type":"text/x-go","patch_set":3,"id":"50b0ca2d_2d7ed903","line":227,"range":{"start_line":227,"start_character":5,"end_line":227,"end_character":30},"in_reply_to":"3a81943d_f17cf7be","updated":"2023-10-30 18:59:26.000000000","message":"Should I do it or do you want it? 😊","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"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":"7a41389f159768d3df277fe927d82267c5254a2b","unresolved":true,"context_lines":[{"line_number":224,"context_line":""},{"line_number":225,"context_line":"\terr \u003d ep.assimilate(ctx, sess, nd.ID)"},{"line_number":226,"context_line":"\tif err !\u003d nil {"},{"line_number":227,"context_line":"\t\t// TODO(mateusz@monogon.tech) at this point the device at Equinix isn\u0027t"},{"line_number":228,"context_line":"\t\t// matched by a BMDB record. Schedule device deletion or make sure this"},{"line_number":229,"context_line":"\t\t// case is being handled elsewhere."},{"line_number":230,"context_line":"\t\treturn nil, err"}],"source_content_type":"text/x-go","patch_set":3,"id":"8a036d56_f30b77a7","line":227,"range":{"start_line":227,"start_character":5,"end_line":227,"end_character":30},"in_reply_to":"50b0ca2d_2d7ed903","updated":"2023-11-02 11:25:01.000000000","message":"I\u0027ll take it.","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"439e47398e9682296c3d25d4647757f9954fa964","unresolved":false,"context_lines":[{"line_number":224,"context_line":""},{"line_number":225,"context_line":"\terr \u003d ep.assimilate(ctx, sess, nd.ID)"},{"line_number":226,"context_line":"\tif err !\u003d nil {"},{"line_number":227,"context_line":"\t\t// TODO(mateusz@monogon.tech) at this point the device at Equinix isn\u0027t"},{"line_number":228,"context_line":"\t\t// matched by a BMDB record. Schedule device deletion or make sure this"},{"line_number":229,"context_line":"\t\t// case is being handled elsewhere."},{"line_number":230,"context_line":"\t\treturn nil, err"}],"source_content_type":"text/x-go","patch_set":3,"id":"05b447b2_15e8daca","line":227,"range":{"start_line":227,"start_character":5,"end_line":227,"end_character":30},"in_reply_to":"8a036d56_f30b77a7","updated":"2023-11-03 01:25:55.000000000","message":"Acknowledged","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"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":"7a41389f159768d3df277fe927d82267c5254a2b","unresolved":true,"context_lines":[{"line_number":93,"context_line":"\t\treturn nil, fmt.Errorf(\"parameter UnusedMachine is missing\")"},{"line_number":94,"context_line":"\t}"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"\t//TODO: Do we just trust the implementation to be correct?"},{"line_number":97,"context_line":"\tres, ok :\u003d request.UnusedMachine.(reservation)"},{"line_number":98,"context_line":"\tif !ok {"},{"line_number":99,"context_line":"\t\treturn nil, fmt.Errorf(\"invalid type for parameter UnusedMachine\")"}],"source_content_type":"text/x-go","patch_set":8,"id":"e412cb46_7f5f2236","line":96,"range":{"start_line":96,"start_character":1,"end_line":96,"end_character":59},"updated":"2023-11-02 11:25:01.000000000","message":"See my idea to make CreateMachineRequest more verbose. Then we don\u0027t need to do this type assertion.","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"439e47398e9682296c3d25d4647757f9954fa964","unresolved":false,"context_lines":[{"line_number":93,"context_line":"\t\treturn nil, fmt.Errorf(\"parameter UnusedMachine is missing\")"},{"line_number":94,"context_line":"\t}"},{"line_number":95,"context_line":""},{"line_number":96,"context_line":"\t//TODO: Do we just trust the implementation to be correct?"},{"line_number":97,"context_line":"\tres, ok :\u003d request.UnusedMachine.(reservation)"},{"line_number":98,"context_line":"\tif !ok {"},{"line_number":99,"context_line":"\t\treturn nil, fmt.Errorf(\"invalid type for parameter UnusedMachine\")"}],"source_content_type":"text/x-go","patch_set":8,"id":"20834405_e9bc9a9b","line":96,"range":{"start_line":96,"start_character":1,"end_line":96,"end_character":59},"in_reply_to":"e412cb46_7f5f2236","updated":"2023-11-03 01:25:55.000000000","message":"Acknowledged","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"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":"e68653d595aab899a001d0709ee52f0d6c4bd6bb","unresolved":true,"context_lines":[{"line_number":84,"context_line":"\t}"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"\tmachines :\u003d make([]shepherd.Machine, 0, len(ep.reservationCache)+len(devices))"},{"line_number":87,"context_line":"\tfor _, device :\u003d range devices {"},{"line_number":88,"context_line":"\t\tmachines \u003d append(machines, \u0026machine{device})"},{"line_number":89,"context_line":"\t}"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"\tfor _, res :\u003d range ep.reservationCache {"},{"line_number":92,"context_line":"\t\tmachines \u003d append(machines, reservation{res})"},{"line_number":93,"context_line":"\t}"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"\treturn machines, nil"},{"line_number":96,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":14,"id":"eb0540a2_a41e9220","line":93,"range":{"start_line":87,"start_character":0,"end_line":93,"end_character":2},"updated":"2023-11-08 09:51:08.000000000","message":"You might end up with duplicated data here: a reservation for a machine (from cache) and that same machine (live fetched) here right after it\u0027s been created.\n\nThis is because you\u0027re not invalidating the reservation cache on CreateMachine, or filtering out reservations which have since become machines from the cached data here.","commit_id":"c00b10dd090c8504a96f63a4008538fed96df88a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"dcbac97ec478c8d8fc735fe7a49f04e7306cba1d","unresolved":false,"context_lines":[{"line_number":84,"context_line":"\t}"},{"line_number":85,"context_line":""},{"line_number":86,"context_line":"\tmachines :\u003d make([]shepherd.Machine, 0, len(ep.reservationCache)+len(devices))"},{"line_number":87,"context_line":"\tfor _, device :\u003d range devices {"},{"line_number":88,"context_line":"\t\tmachines \u003d append(machines, \u0026machine{device})"},{"line_number":89,"context_line":"\t}"},{"line_number":90,"context_line":""},{"line_number":91,"context_line":"\tfor _, res :\u003d range ep.reservationCache {"},{"line_number":92,"context_line":"\t\tmachines \u003d append(machines, reservation{res})"},{"line_number":93,"context_line":"\t}"},{"line_number":94,"context_line":""},{"line_number":95,"context_line":"\treturn machines, nil"},{"line_number":96,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":14,"id":"adf63524_6f9f736f","line":93,"range":{"start_line":87,"start_character":0,"end_line":93,"end_character":2},"in_reply_to":"eb0540a2_a41e9220","updated":"2023-11-08 19:01:45.000000000","message":"Ah oopsi, missed that while adding the cache. Fixed now","commit_id":"c00b10dd090c8504a96f63a4008538fed96df88a"},{"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":"ffebdec8c3a7c9f045ba811cd043fe8804774243","unresolved":true,"context_lines":[{"line_number":203,"context_line":"}"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"func (ep *equinixProvider) removeFromCache(rsv packngo.HardwareReservation) error {"},{"line_number":206,"context_line":"\tresPos :\u003d -1"},{"line_number":207,"context_line":"\tfor i, hwr :\u003d range ep.reservationCache {"},{"line_number":208,"context_line":"\t\tif hwr.ID \u003d\u003d rsv.ID {"},{"line_number":209,"context_line":"\t\t\tresPos \u003d i"}],"source_content_type":"text/x-go","patch_set":15,"id":"00fe3da5_044832b1","line":206,"updated":"2023-11-13 11:35:34.000000000","message":"Use `slices.DeleteFunc` and compare the returned size if you want to error out as you currently are doing.","commit_id":"f75e1487be1c84467102ac22ec4411862b9d3b13"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6e84c072d2cb6733b2ca80f694fbfe863304bd76","unresolved":false,"context_lines":[{"line_number":203,"context_line":"}"},{"line_number":204,"context_line":""},{"line_number":205,"context_line":"func (ep *equinixProvider) removeFromCache(rsv packngo.HardwareReservation) error {"},{"line_number":206,"context_line":"\tresPos :\u003d -1"},{"line_number":207,"context_line":"\tfor i, hwr :\u003d range ep.reservationCache {"},{"line_number":208,"context_line":"\t\tif hwr.ID \u003d\u003d rsv.ID {"},{"line_number":209,"context_line":"\t\t\tresPos \u003d i"}],"source_content_type":"text/x-go","patch_set":15,"id":"dbd64a06_c20d8e23","line":206,"in_reply_to":"00fe3da5_044832b1","updated":"2023-11-13 23:58:40.000000000","message":"Done","commit_id":"f75e1487be1c84467102ac22ec4411862b9d3b13"},{"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":"ffebdec8c3a7c9f045ba811cd043fe8804774243","unresolved":true,"context_lines":[{"line_number":250,"context_line":"\t}"},{"line_number":251,"context_line":"\tklog.Infof(\"Created a new device within Equinix (RID: %s, PID: %s, HOST: %s)\", rsv.ID, nd.ID, hostname)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"\tif err :\u003d ep.removeFromCache(rsv); err !\u003d nil {"},{"line_number":254,"context_line":"\t\treturn nil, err"},{"line_number":255,"context_line":"\t}"},{"line_number":256,"context_line":""}],"source_content_type":"text/x-go","patch_set":15,"id":"bfb56635_d3cc391a","line":253,"range":{"start_line":253,"start_character":1,"end_line":253,"end_character":48},"updated":"2023-11-13 11:35:34.000000000","message":"I\u0027m not exactly sure this should fail the entire call like that. Is the cache that strongly coherent that this case merits this kind of action?","commit_id":"f75e1487be1c84467102ac22ec4411862b9d3b13"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"a6008587226f98dbe9ac4433a6b87640b8b81cad","unresolved":false,"context_lines":[{"line_number":250,"context_line":"\t}"},{"line_number":251,"context_line":"\tklog.Infof(\"Created a new device within Equinix (RID: %s, PID: %s, HOST: %s)\", rsv.ID, nd.ID, hostname)"},{"line_number":252,"context_line":""},{"line_number":253,"context_line":"\tif err :\u003d ep.removeFromCache(rsv); err !\u003d nil {"},{"line_number":254,"context_line":"\t\treturn nil, err"},{"line_number":255,"context_line":"\t}"},{"line_number":256,"context_line":""}],"source_content_type":"text/x-go","patch_set":15,"id":"e322d9d0_1e2c1ae0","line":253,"range":{"start_line":253,"start_character":1,"end_line":253,"end_character":48},"in_reply_to":"bfb56635_d3cc391a","updated":"2023-11-13 23:58:30.000000000","message":"Yeah you are right. Failing there will make us loose the machine as we already created the machine on the provider side but don\u0027t persist it into the bmdb. Lets just ignore the error, as the worst case would be an invalid machine listing which will fail as soon as we actually try to use a reservation that wasn\u0027t removed.","commit_id":"f75e1487be1c84467102ac22ec4411862b9d3b13"}],"cloud/shepherd/provider/equinix/provider_config.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":"aac1abf22c7ad765c062dec99c494d08fad135d3","unresolved":true,"context_lines":[{"line_number":23,"context_line":"\t// documentation for details. Must be set."},{"line_number":24,"context_line":"\tProjectId string"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"\t// Label specifies the ID to use when handling the Equinix-registered SSH key"},{"line_number":27,"context_line":"\t// used to authenticate to newly created servers. Must be set."},{"line_number":28,"context_line":"\tKeyLabel string"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-go","patch_set":3,"id":"a33241c0_ce1ad1a5","line":26,"range":{"start_line":26,"start_character":4,"end_line":26,"end_character":9},"updated":"2023-10-30 11:29:02.000000000","message":"KeyLabel","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"446066a148afce644c1622296573489b44ea6131","unresolved":false,"context_lines":[{"line_number":23,"context_line":"\t// documentation for details. Must be set."},{"line_number":24,"context_line":"\tProjectId string"},{"line_number":25,"context_line":""},{"line_number":26,"context_line":"\t// Label specifies the ID to use when handling the Equinix-registered SSH key"},{"line_number":27,"context_line":"\t// used to authenticate to newly created servers. Must be set."},{"line_number":28,"context_line":"\tKeyLabel string"},{"line_number":29,"context_line":""}],"source_content_type":"text/x-go","patch_set":3,"id":"a244577c_d1caef5d","line":26,"range":{"start_line":26,"start_character":4,"end_line":26,"end_character":9},"in_reply_to":"a33241c0_ce1ad1a5","updated":"2023-10-30 18:59:26.000000000","message":"Done","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"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":"aac1abf22c7ad765c062dec99c494d08fad135d3","unresolved":true,"context_lines":[{"line_number":27,"context_line":"\t// used to authenticate to newly created servers. Must be set."},{"line_number":28,"context_line":"\tKeyLabel string"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"\t// Prefix applied to all devices (machines) created by the Provisioner, and used"},{"line_number":31,"context_line":"\t// by the Provisioner to identify machines which it managed. Must be set."},{"line_number":32,"context_line":"\tDevicePrefix string"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-go","patch_set":3,"id":"34a1bf88_9b3a4040","line":30,"range":{"start_line":30,"start_character":4,"end_line":30,"end_character":10},"updated":"2023-10-30 11:29:02.000000000","message":"DevicePrefix","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"446066a148afce644c1622296573489b44ea6131","unresolved":false,"context_lines":[{"line_number":27,"context_line":"\t// used to authenticate to newly created servers. Must be set."},{"line_number":28,"context_line":"\tKeyLabel string"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"\t// Prefix applied to all devices (machines) created by the Provisioner, and used"},{"line_number":31,"context_line":"\t// by the Provisioner to identify machines which it managed. Must be set."},{"line_number":32,"context_line":"\tDevicePrefix string"},{"line_number":33,"context_line":""}],"source_content_type":"text/x-go","patch_set":3,"id":"a6045e64_a574faff","line":30,"range":{"start_line":30,"start_character":4,"end_line":30,"end_character":10},"in_reply_to":"34a1bf88_9b3a4040","updated":"2023-10-30 18:59:26.000000000","message":"Done","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"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":"aac1abf22c7ad765c062dec99c494d08fad135d3","unresolved":true,"context_lines":[{"line_number":38,"context_line":"\t// UseProjectKeys defines if the provisioner adds all ssh keys defined inside"},{"line_number":39,"context_line":"\t// the used project to every new machine. This is only used for debug purposes."},{"line_number":40,"context_line":"\tUseProjectKeys    bool"},{"line_number":41,"context_line":"\tRebootWaitSeconds int"},{"line_number":42,"context_line":"}"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"func (pc *providerConfig) check() error {"}],"source_content_type":"text/x-go","patch_set":3,"id":"3fac58f4_8dbf2af0","line":41,"range":{"start_line":41,"start_character":1,"end_line":41,"end_character":18},"updated":"2023-10-30 11:29:02.000000000","message":"Add a comment.","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"446066a148afce644c1622296573489b44ea6131","unresolved":false,"context_lines":[{"line_number":38,"context_line":"\t// UseProjectKeys defines if the provisioner adds all ssh keys defined inside"},{"line_number":39,"context_line":"\t// the used project to every new machine. This is only used for debug purposes."},{"line_number":40,"context_line":"\tUseProjectKeys    bool"},{"line_number":41,"context_line":"\tRebootWaitSeconds int"},{"line_number":42,"context_line":"}"},{"line_number":43,"context_line":""},{"line_number":44,"context_line":"func (pc *providerConfig) check() error {"}],"source_content_type":"text/x-go","patch_set":3,"id":"08399c74_d1f4da7a","line":41,"range":{"start_line":41,"start_character":1,"end_line":41,"end_character":18},"in_reply_to":"3fac58f4_8dbf2af0","updated":"2023-10-30 18:59:26.000000000","message":"Done","commit_id":"1dcdf4e1c6258e9003f641d8252e389c1362df7a"}],"cloud/shepherd/provider/lumen/main.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":"7a41389f159768d3df277fe927d82267c5254a2b","unresolved":true,"context_lines":[{"line_number":1,"context_line":"package main"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import ("},{"line_number":4,"context_line":"\t\"context\""}],"source_content_type":"text/x-go","patch_set":8,"id":"0b62f76c_abdde6b3","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":12},"updated":"2023-11-02 11:25:01.000000000","message":"Maybe we should roll this into the mini shepherd code itself? Especially if we make everything configurable.\n\nI don\u0027t think we ever intended the mini shepherd to be usable as a library... Just as a CLI tool.","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"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":"d9397cd6e8a4a2bad543c2f23a1b3faa69e2b12e","unresolved":false,"context_lines":[{"line_number":1,"context_line":"package main"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import ("},{"line_number":4,"context_line":"\t\"context\""}],"source_content_type":"text/x-go","patch_set":8,"id":"76007a98_215e5180","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":12},"in_reply_to":"00fcd86d_303faf90","updated":"2023-11-07 09:38:16.000000000","message":"Done","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"439e47398e9682296c3d25d4647757f9954fa964","unresolved":true,"context_lines":[{"line_number":1,"context_line":"package main"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import ("},{"line_number":4,"context_line":"\t\"context\""}],"source_content_type":"text/x-go","patch_set":8,"id":"973ce9cd_e8fdf50a","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":12},"in_reply_to":"0b62f76c_abdde6b3","updated":"2023-11-03 01:25:55.000000000","message":"Sure but deployment would still be like the other shepherd. This reduces the amount of special work for authentication against bmdb and we don\u0027t have to keep any tool running locally for x amount of time for the assimilation.","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"dd2a727709612c53b41a3dc2c9b8d9d7eca1c51a","unresolved":true,"context_lines":[{"line_number":1,"context_line":"package main"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import ("},{"line_number":4,"context_line":"\t\"context\""}],"source_content_type":"text/x-go","patch_set":8,"id":"9cb6cf95_337a9fb7","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":12},"in_reply_to":"21cad7bb_af60ce47","updated":"2023-11-06 18:30:13.000000000","message":"Aaaalso how do we tell the mini shepherd which provider it is?","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"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":"e75d23835563a752fc4443eb30d513eef1b9f44b","unresolved":true,"context_lines":[{"line_number":1,"context_line":"package main"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import ("},{"line_number":4,"context_line":"\t\"context\""}],"source_content_type":"text/x-go","patch_set":8,"id":"c95720e0_a6fd7499","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":12},"in_reply_to":"973ce9cd_e8fdf50a","updated":"2023-11-06 12:24:47.000000000","message":"Hm, maybe I don\u0027t understand the problem. I was suggesting we move all of shepherd/mini and shepherd/provider/lumen into something like shepherd/provider/mini, which would be the single-shot binary to run against a JSON inventory file.\n\nIt\u0027s just that I don\u0027t see why we need to have anything Lumen-specific in the repository, and instead I feel like the mini shepherd should be pretty much provider-agnostic?","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"51dfbd177eef4c08798eb754f6d3b390fc80737b","unresolved":true,"context_lines":[{"line_number":1,"context_line":"package main"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import ("},{"line_number":4,"context_line":"\t\"context\""}],"source_content_type":"text/x-go","patch_set":8,"id":"00fcd86d_303faf90","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":12},"in_reply_to":"9cb6cf95_337a9fb7","updated":"2023-11-06 18:35:20.000000000","message":"I added it as flag for now...","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"856effdb63d94da6de6e43cdca3e74c214108a3d","unresolved":true,"context_lines":[{"line_number":1,"context_line":"package main"},{"line_number":2,"context_line":""},{"line_number":3,"context_line":"import ("},{"line_number":4,"context_line":"\t\"context\""}],"source_content_type":"text/x-go","patch_set":8,"id":"21cad7bb_af60ce47","line":1,"range":{"start_line":1,"start_character":0,"end_line":1,"end_character":12},"in_reply_to":"c95720e0_a6fd7499","updated":"2023-11-06 15:31:06.000000000","message":"Yeah I understood that, but you said that the mini shepherd should be used as a CLI tool, which I interpreted as \"somebody is running this locally\". \n\nThe Mini shepherd should just be a simple thing to point against a json file with all information about the boxes and some command line arguments for ssh auth etc. right?","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"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":"7a41389f159768d3df277fe927d82267c5254a2b","unresolved":true,"context_lines":[{"line_number":73,"context_line":"\tprovider :\u003d mini.NewMiniShepherd(model.ProviderLumen)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"\tsshClient :\u003d \u0026manager.PlainSSHClient{"},{"line_number":76,"context_line":"\t\tAuthMethod: ssh.Password(\"1234\"), //TODO: load password from secret"},{"line_number":77,"context_line":"\t\t// Lumen OS installations always use sfboot."},{"line_number":78,"context_line":"\t\tUsername: \"sfboot\","},{"line_number":79,"context_line":"\t}"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"\tprovisioner, err :\u003d manager.NewProvisioner(provider, c.ProvisionerConfig)"}],"source_content_type":"text/x-go","patch_set":8,"id":"e8b10023_75e50a5c","line":78,"range":{"start_line":76,"start_character":1,"end_line":78,"end_character":21},"updated":"2023-11-02 11:25:01.000000000","message":"Make these flags.","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"439e47398e9682296c3d25d4647757f9954fa964","unresolved":false,"context_lines":[{"line_number":73,"context_line":"\tprovider :\u003d mini.NewMiniShepherd(model.ProviderLumen)"},{"line_number":74,"context_line":""},{"line_number":75,"context_line":"\tsshClient :\u003d \u0026manager.PlainSSHClient{"},{"line_number":76,"context_line":"\t\tAuthMethod: ssh.Password(\"1234\"), //TODO: load password from secret"},{"line_number":77,"context_line":"\t\t// Lumen OS installations always use sfboot."},{"line_number":78,"context_line":"\t\tUsername: \"sfboot\","},{"line_number":79,"context_line":"\t}"},{"line_number":80,"context_line":""},{"line_number":81,"context_line":"\tprovisioner, err :\u003d manager.NewProvisioner(provider, c.ProvisionerConfig)"}],"source_content_type":"text/x-go","patch_set":8,"id":"cb3ce08f_da98bc01","line":78,"range":{"start_line":76,"start_character":1,"end_line":78,"end_character":21},"in_reply_to":"e8b10023_75e50a5c","updated":"2023-11-03 01:25:55.000000000","message":"Done","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"}],"cloud/shepherd/shepherd.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":"7a41389f159768d3df277fe927d82267c5254a2b","unresolved":true,"context_lines":[{"line_number":30,"context_line":"// See the different states for more information."},{"line_number":31,"context_line":"type State int"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"const ("},{"line_number":34,"context_line":"\t// StateKnownUnused defines the state where a machine is know to be free,"},{"line_number":35,"context_line":"\t// e.g. a hardware reservation at equinix."},{"line_number":36,"context_line":"\tStateKnownUnused State \u003d iota"},{"line_number":37,"context_line":"\t// StateKnownUsed defines the state where a machine is known to be used,"},{"line_number":38,"context_line":"\t// e.g. a deployed machine that is in use."}],"source_content_type":"text/x-go","patch_set":8,"id":"ded835b7_87b009c4","line":35,"range":{"start_line":33,"start_character":7,"end_line":35,"end_character":43},"updated":"2023-11-02 11:25:01.000000000","message":"Mention that these kind of machines may not have an ID and Addr.\n\n(equinix reservation ID !\u003d equinix machine ID, which is what we use for the ProviderID)","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"439e47398e9682296c3d25d4647757f9954fa964","unresolved":false,"context_lines":[{"line_number":30,"context_line":"// See the different states for more information."},{"line_number":31,"context_line":"type State int"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"const ("},{"line_number":34,"context_line":"\t// StateKnownUnused defines the state where a machine is know to be free,"},{"line_number":35,"context_line":"\t// e.g. a hardware reservation at equinix."},{"line_number":36,"context_line":"\tStateKnownUnused State \u003d iota"},{"line_number":37,"context_line":"\t// StateKnownUsed defines the state where a machine is known to be used,"},{"line_number":38,"context_line":"\t// e.g. a deployed machine that is in use."}],"source_content_type":"text/x-go","patch_set":8,"id":"d94b2216_144be52f","line":35,"range":{"start_line":33,"start_character":7,"end_line":35,"end_character":43},"in_reply_to":"ded835b7_87b009c4","updated":"2023-11-03 01:25:55.000000000","message":"Done","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"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":"7a41389f159768d3df277fe927d82267c5254a2b","unresolved":true,"context_lines":[{"line_number":34,"context_line":"\t// StateKnownUnused defines the state where a machine is know to be free,"},{"line_number":35,"context_line":"\t// e.g. a hardware reservation at equinix."},{"line_number":36,"context_line":"\tStateKnownUnused State \u003d iota"},{"line_number":37,"context_line":"\t// StateKnownUsed defines the state where a machine is known to be used,"},{"line_number":38,"context_line":"\t// e.g. a deployed machine that is in use."},{"line_number":39,"context_line":"\tStateKnownUsed"},{"line_number":40,"context_line":"\t// StatePossiblyUsed defines the state where a machine is possibly used,"},{"line_number":41,"context_line":"\t// this is a special state for the mini-shepherd where the shepherd has"}],"source_content_type":"text/x-go","patch_set":8,"id":"290b348f_311e542d","line":38,"range":{"start_line":37,"start_character":0,"end_line":38,"end_character":43},"updated":"2023-11-02 11:25:01.000000000","message":"Mention that these kind of machines must have a valid ID and Addr.","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"439e47398e9682296c3d25d4647757f9954fa964","unresolved":false,"context_lines":[{"line_number":34,"context_line":"\t// StateKnownUnused defines the state where a machine is know to be free,"},{"line_number":35,"context_line":"\t// e.g. a hardware reservation at equinix."},{"line_number":36,"context_line":"\tStateKnownUnused State \u003d iota"},{"line_number":37,"context_line":"\t// StateKnownUsed defines the state where a machine is known to be used,"},{"line_number":38,"context_line":"\t// e.g. a deployed machine that is in use."},{"line_number":39,"context_line":"\tStateKnownUsed"},{"line_number":40,"context_line":"\t// StatePossiblyUsed defines the state where a machine is possibly used,"},{"line_number":41,"context_line":"\t// this is a special state for the mini-shepherd where the shepherd has"}],"source_content_type":"text/x-go","patch_set":8,"id":"d61c0b29_2be9db0c","line":38,"range":{"start_line":37,"start_character":0,"end_line":38,"end_character":43},"in_reply_to":"290b348f_311e542d","updated":"2023-11-03 01:25:55.000000000","message":"Done","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"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":"7a41389f159768d3df277fe927d82267c5254a2b","unresolved":true,"context_lines":[{"line_number":37,"context_line":"\t// StateKnownUsed defines the state where a machine is known to be used,"},{"line_number":38,"context_line":"\t// e.g. a deployed machine that is in use."},{"line_number":39,"context_line":"\tStateKnownUsed"},{"line_number":40,"context_line":"\t// StatePossiblyUsed defines the state where a machine is possibly used,"},{"line_number":41,"context_line":"\t// this is a special state for the mini-shepherd where the shepherd has"},{"line_number":42,"context_line":"\t// to check against the bmdb if Machine.ID is already provisioned or not."},{"line_number":43,"context_line":"\tStatePossiblyUsed"},{"line_number":44,"context_line":")"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-go","patch_set":8,"id":"fda4df43_d8540025","line":42,"range":{"start_line":40,"start_character":0,"end_line":42,"end_character":74},"updated":"2023-11-02 11:25:01.000000000","message":"Not necessarily a special case, just a case for \u0027stateless\u0027 providers.\n\nAlso mention that these kind of machines must have a valid ID and Addr.","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"439e47398e9682296c3d25d4647757f9954fa964","unresolved":false,"context_lines":[{"line_number":37,"context_line":"\t// StateKnownUsed defines the state where a machine is known to be used,"},{"line_number":38,"context_line":"\t// e.g. a deployed machine that is in use."},{"line_number":39,"context_line":"\tStateKnownUsed"},{"line_number":40,"context_line":"\t// StatePossiblyUsed defines the state where a machine is possibly used,"},{"line_number":41,"context_line":"\t// this is a special state for the mini-shepherd where the shepherd has"},{"line_number":42,"context_line":"\t// to check against the bmdb if Machine.ID is already provisioned or not."},{"line_number":43,"context_line":"\tStatePossiblyUsed"},{"line_number":44,"context_line":")"},{"line_number":45,"context_line":""}],"source_content_type":"text/x-go","patch_set":8,"id":"1d1d3d53_b25a61aa","line":42,"range":{"start_line":40,"start_character":0,"end_line":42,"end_character":74},"in_reply_to":"fda4df43_d8540025","updated":"2023-11-03 01:25:55.000000000","message":"Done","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"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":"7a41389f159768d3df277fe927d82267c5254a2b","unresolved":true,"context_lines":[{"line_number":55,"context_line":"}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"type CreateMachineRequest struct {"},{"line_number":58,"context_line":"\t// UnusedMachine resembles a machine to use as deployment target."},{"line_number":59,"context_line":"\tUnusedMachine Machine"},{"line_number":60,"context_line":"}"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-go","patch_set":8,"id":"f1ff6316_02da3cc5","line":58,"range":{"start_line":58,"start_character":1,"end_line":58,"end_character":66},"updated":"2023-11-02 11:25:01.000000000","message":"Maybe instead of a full Machine, specify here a State and nullable ProviderID, and explicitly mention the validity of possible states and how that influences the validity of the ProviderID?","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"b6b9fb93d815f879a87324e56549a805433c2020","unresolved":true,"context_lines":[{"line_number":55,"context_line":"}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"type CreateMachineRequest struct {"},{"line_number":58,"context_line":"\t// UnusedMachine resembles a machine to use as deployment target."},{"line_number":59,"context_line":"\tUnusedMachine Machine"},{"line_number":60,"context_line":"}"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-go","patch_set":8,"id":"5ba62cff_e94b8e1b","line":58,"range":{"start_line":58,"start_character":1,"end_line":58,"end_character":66},"in_reply_to":"2a2e1b89_46f5935e","updated":"2023-11-07 15:18:42.000000000","message":"In my opinion this error should always create a panic, as there is no code path that should ever tamper with the machine and even in a long running process nothing changes that behavior. We already have tests that exercise this path and would fail if there would be an error. \n\nYes we could return an error but that error would be handled as if there was some error inside the provider, which in return would not be noticed by us if we don\u0027t actively notice that the shepherd doesn\u0027t do its thing. A crash on the other side would be noticed and I would even go as far and write it into the docs that this is a thing the provider can trust on.","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"1d818b6b16a88b3ffcba612ee192e0fda2bda78d","unresolved":false,"context_lines":[{"line_number":55,"context_line":"}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"type CreateMachineRequest struct {"},{"line_number":58,"context_line":"\t// UnusedMachine resembles a machine to use as deployment target."},{"line_number":59,"context_line":"\tUnusedMachine Machine"},{"line_number":60,"context_line":"}"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-go","patch_set":8,"id":"0656cad9_ca967901","line":58,"range":{"start_line":58,"start_character":1,"end_line":58,"end_character":66},"in_reply_to":"5ba62cff_e94b8e1b","updated":"2023-11-08 01:03:20.000000000","message":"Done","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"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":"e75d23835563a752fc4443eb30d513eef1b9f44b","unresolved":true,"context_lines":[{"line_number":55,"context_line":"}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"type CreateMachineRequest struct {"},{"line_number":58,"context_line":"\t// UnusedMachine resembles a machine to use as deployment target."},{"line_number":59,"context_line":"\tUnusedMachine Machine"},{"line_number":60,"context_line":"}"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-go","patch_set":8,"id":"92fa1e1c_c13d73f3","line":58,"range":{"start_line":58,"start_character":1,"end_line":58,"end_character":66},"in_reply_to":"85d0067a_65db4b62","updated":"2023-11-06 12:24:47.000000000","message":"Oh, I see, you actually want to smuggle data through that interface object.\n\nYeah, then I guess this works? But then we definitely should do some type assertions that gracefully handle programming errors instead of crashing the whole thing.","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"856effdb63d94da6de6e43cdca3e74c214108a3d","unresolved":true,"context_lines":[{"line_number":55,"context_line":"}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"type CreateMachineRequest struct {"},{"line_number":58,"context_line":"\t// UnusedMachine resembles a machine to use as deployment target."},{"line_number":59,"context_line":"\tUnusedMachine Machine"},{"line_number":60,"context_line":"}"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-go","patch_set":8,"id":"d78b1910_6132019d","line":58,"range":{"start_line":58,"start_character":1,"end_line":58,"end_character":66},"in_reply_to":"92fa1e1c_c13d73f3","updated":"2023-11-06 15:31:06.000000000","message":"Yeah that\u0027s what I meant, but I would reside to crashing/panicing as there is no way we can recover from that and its an unexpected behavior.","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"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":"d9397cd6e8a4a2bad543c2f23a1b3faa69e2b12e","unresolved":true,"context_lines":[{"line_number":55,"context_line":"}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"type CreateMachineRequest struct {"},{"line_number":58,"context_line":"\t// UnusedMachine resembles a machine to use as deployment target."},{"line_number":59,"context_line":"\tUnusedMachine Machine"},{"line_number":60,"context_line":"}"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-go","patch_set":8,"id":"2a2e1b89_46f5935e","line":58,"range":{"start_line":58,"start_character":1,"end_line":58,"end_character":66},"in_reply_to":"d78b1910_6132019d","updated":"2023-11-07 09:38:16.000000000","message":"I would\u0027ve maybe agreed if this was just in the mini shepherd, but it\u0027s also in the equinix shepherd, which can run long term and we don\u0027t want to kill it all just because of an error in one of the codepaths.\n\nIn addition, wherever we currently use an unchecked typecast, we\u0027re in a method signature that\u0027s free to return errors. So why _not_ return an error there instead?","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"439e47398e9682296c3d25d4647757f9954fa964","unresolved":true,"context_lines":[{"line_number":55,"context_line":"}"},{"line_number":56,"context_line":""},{"line_number":57,"context_line":"type CreateMachineRequest struct {"},{"line_number":58,"context_line":"\t// UnusedMachine resembles a machine to use as deployment target."},{"line_number":59,"context_line":"\tUnusedMachine Machine"},{"line_number":60,"context_line":"}"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-go","patch_set":8,"id":"85d0067a_65db4b62","line":58,"range":{"start_line":58,"start_character":1,"end_line":58,"end_character":66},"in_reply_to":"f1ff6316_02da3cc5","updated":"2023-11-03 01:25:55.000000000","message":"I don\u0027t like that idea as we don\u0027t have any provider ID we can trust (ID() on unused machines should not be a valid way) nor do we want to have the provider to cache everything always. By always returning all machines including e.g. reservations/unused machines we allow the provider to only list everything once and then rely on the logic inside the shepherd.","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"}],"go/mflags/limiter.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":"7a41389f159768d3df277fe927d82267c5254a2b","unresolved":true,"context_lines":[{"line_number":14,"context_line":")"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"// FlagLimiter configures a *rate.Limiter as a flag."},{"line_number":17,"context_line":"func FlagLimiter(l **rate.Limiter, name, defval, help string) {"},{"line_number":18,"context_line":"\tsyntax :\u003d \"\u0027duration,count\u0027 eg. \u00272m,10\u0027 for a 10-sized bucket refilled at one token every 2 minutes\""},{"line_number":19,"context_line":"\thelp \u003d help + fmt.Sprintf(\" (default: %q, syntax: %s)\", defval, syntax)"},{"line_number":20,"context_line":"\tflag.Func(name, help, func(val string) error {"}],"source_content_type":"text/x-go","patch_set":8,"id":"7f69bb6b_6e05d497","line":17,"range":{"start_line":17,"start_character":5,"end_line":17,"end_character":16},"updated":"2023-11-02 11:25:01.000000000","message":"Should probably called `Limiter` because a) stutter b) that\u0027s how things are named in the std flags package.","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"},{"author":{"_account_id":1000019,"name":"Tim Windelschmidt","display_name":"Tim","email":"tim@monogon.tech","username":"fionera","avatars":[{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/57e6137fdb8185cd15ac27ba188780ff.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"439e47398e9682296c3d25d4647757f9954fa964","unresolved":false,"context_lines":[{"line_number":14,"context_line":")"},{"line_number":15,"context_line":""},{"line_number":16,"context_line":"// FlagLimiter configures a *rate.Limiter as a flag."},{"line_number":17,"context_line":"func FlagLimiter(l **rate.Limiter, name, defval, help string) {"},{"line_number":18,"context_line":"\tsyntax :\u003d \"\u0027duration,count\u0027 eg. \u00272m,10\u0027 for a 10-sized bucket refilled at one token every 2 minutes\""},{"line_number":19,"context_line":"\thelp \u003d help + fmt.Sprintf(\" (default: %q, syntax: %s)\", defval, syntax)"},{"line_number":20,"context_line":"\tflag.Func(name, help, func(val string) error {"}],"source_content_type":"text/x-go","patch_set":8,"id":"7e8c5139_56607aa9","line":17,"range":{"start_line":17,"start_character":5,"end_line":17,"end_character":16},"in_reply_to":"7f69bb6b_6e05d497","updated":"2023-11-03 01:25:55.000000000","message":"Done","commit_id":"4183c438126b2025e39b83ef6d66de85d04e0072"}]}
