)]}'
{"metropolis/node/kubernetes/networkpolicy/networkpolicy.go":[{"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":"a65fd029fb647fe6543aa3be178417679b22ce3c","unresolved":true,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"// MetricsRegistry is the metrics registry in which all NPC metrics are"},{"line_number":28,"context_line":"// registered."},{"line_number":29,"context_line":"var MetricsRegistry \u003d prometheus.NewRegistry()"},{"line_number":30,"context_line":"var MetricsFactory \u003d promauto.With(MetricsRegistry)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"var ("}],"source_content_type":"text/x-go","patch_set":9,"id":"fd1c04b1_5ba95494","line":29,"updated":"2025-02-03 22:54:09.000000000","message":"We should cleanup this to not have three different ways our metrics are registered depending on the package","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0986dacdad4a35bb2d79ba3c31ae1e82dfa2e9fb","unresolved":false,"context_lines":[{"line_number":26,"context_line":""},{"line_number":27,"context_line":"// MetricsRegistry is the metrics registry in which all NPC metrics are"},{"line_number":28,"context_line":"// registered."},{"line_number":29,"context_line":"var MetricsRegistry \u003d prometheus.NewRegistry()"},{"line_number":30,"context_line":"var MetricsFactory \u003d promauto.With(MetricsRegistry)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"var ("}],"source_content_type":"text/x-go","patch_set":9,"id":"74b51abb_81c97f2f","line":29,"in_reply_to":"fd1c04b1_5ba95494","updated":"2025-02-05 21:08:16.000000000","message":"Package no longer handles metrics itself.","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"643b0f2a381b80f7ab0b79a310fb4a0ecf8ba88c","unresolved":true,"context_lines":[{"line_number":27,"context_line":"// MetricsRegistry is the metrics registry in which all NPC metrics are"},{"line_number":28,"context_line":"// registered."},{"line_number":29,"context_line":"var MetricsRegistry \u003d prometheus.NewRegistry()"},{"line_number":30,"context_line":"var MetricsFactory \u003d promauto.With(MetricsRegistry)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"var ("},{"line_number":33,"context_line":"\tapplyDuration \u003d MetricsFactory.NewHistogramVec(prometheus.HistogramOpts{"}],"source_content_type":"text/x-go","patch_set":9,"id":"54ba3ce9_6011f13c","line":30,"updated":"2025-02-04 09:07:38.000000000","message":"The Kubernetes workqueue already has metrics itself. These include queue depth and work duration, and there are some additional metrics, see https://pkg.go.dev/k8s.io/client-go/util/workqueue#MetricsProvider\n\nI would consider using those. We could still keep applyDuration if the separation by type is important, because the builtin metrics don\u0027t support that.","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0986dacdad4a35bb2d79ba3c31ae1e82dfa2e9fb","unresolved":false,"context_lines":[{"line_number":27,"context_line":"// MetricsRegistry is the metrics registry in which all NPC metrics are"},{"line_number":28,"context_line":"// registered."},{"line_number":29,"context_line":"var MetricsRegistry \u003d prometheus.NewRegistry()"},{"line_number":30,"context_line":"var MetricsFactory \u003d promauto.With(MetricsRegistry)"},{"line_number":31,"context_line":""},{"line_number":32,"context_line":"var ("},{"line_number":33,"context_line":"\tapplyDuration \u003d MetricsFactory.NewHistogramVec(prometheus.HistogramOpts{"}],"source_content_type":"text/x-go","patch_set":9,"id":"291803f2_4f2fd207","line":30,"in_reply_to":"54ba3ce9_6011f13c","updated":"2025-02-05 21:08:16.000000000","message":"Done","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"643b0f2a381b80f7ab0b79a310fb4a0ecf8ba88c","unresolved":true,"context_lines":[{"line_number":55,"context_line":"\tq            workqueue.TypedRateLimitingInterface[workItem]"},{"line_number":56,"context_line":"\thasProcessed synctrack.AsyncTracker[workItem]"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"\teventRecorder record.EventRecorder"},{"line_number":59,"context_line":"\tl             logging.Leveled"},{"line_number":60,"context_line":"}"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-go","patch_set":9,"id":"c7260730_4c48508d","line":58,"range":{"start_line":58,"start_character":1,"end_line":58,"end_character":35},"updated":"2025-02-04 09:07:38.000000000","message":"This field is unused and can be removed.","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0986dacdad4a35bb2d79ba3c31ae1e82dfa2e9fb","unresolved":false,"context_lines":[{"line_number":55,"context_line":"\tq            workqueue.TypedRateLimitingInterface[workItem]"},{"line_number":56,"context_line":"\thasProcessed synctrack.AsyncTracker[workItem]"},{"line_number":57,"context_line":""},{"line_number":58,"context_line":"\teventRecorder record.EventRecorder"},{"line_number":59,"context_line":"\tl             logging.Leveled"},{"line_number":60,"context_line":"}"},{"line_number":61,"context_line":""}],"source_content_type":"text/x-go","patch_set":9,"id":"87a65e0c_8c6620ae","line":58,"range":{"start_line":58,"start_character":1,"end_line":58,"end_character":35},"in_reply_to":"c7260730_4c48508d","updated":"2025-02-05 21:08:16.000000000","message":"Done","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"643b0f2a381b80f7ab0b79a310fb4a0ecf8ba88c","unresolved":true,"context_lines":[{"line_number":79,"context_line":"\titem :\u003d workItem{typ: c.typ, name: name}"},{"line_number":80,"context_line":"\tc.q.Add(item)"},{"line_number":81,"context_line":"\tif isInInitialList {"},{"line_number":82,"context_line":"\t\tc.hasProcessed.Start(item)"},{"line_number":83,"context_line":"\t}"},{"line_number":84,"context_line":"}"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-go","patch_set":9,"id":"cf73fc0a_dc0c1e38","line":82,"range":{"start_line":82,"start_character":2,"end_line":82,"end_character":28},"updated":"2025-02-04 09:07:38.000000000","message":"This needs to be moved before `c.q.Add(item)`. Otherwise, `c.hasProcessed.Start(item)` races with `c.hasProcessed.Finished(i)`, and if they are called in the wrong order, the item will stay in the tracker.","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0986dacdad4a35bb2d79ba3c31ae1e82dfa2e9fb","unresolved":false,"context_lines":[{"line_number":79,"context_line":"\titem :\u003d workItem{typ: c.typ, name: name}"},{"line_number":80,"context_line":"\tc.q.Add(item)"},{"line_number":81,"context_line":"\tif isInInitialList {"},{"line_number":82,"context_line":"\t\tc.hasProcessed.Start(item)"},{"line_number":83,"context_line":"\t}"},{"line_number":84,"context_line":"}"},{"line_number":85,"context_line":""}],"source_content_type":"text/x-go","patch_set":9,"id":"1c8fadc8_e1556cfe","line":82,"range":{"start_line":82,"start_character":2,"end_line":82,"end_character":28},"in_reply_to":"cf73fc0a_dc0c1e38","updated":"2025-02-05 21:08:16.000000000","message":"Done","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"643b0f2a381b80f7ab0b79a310fb4a0ecf8ba88c","unresolved":true,"context_lines":[{"line_number":95,"context_line":"\tname, err :\u003d cache.DeletionHandlingObjectToName(obj)"},{"line_number":96,"context_line":"\tif err !\u003d nil {"},{"line_number":97,"context_line":"\t\tc.l.Warningf(\"OnAdd name for type %q cannot be derived: %v\", c.typ, err)"},{"line_number":98,"context_line":"\t\treturn"},{"line_number":99,"context_line":"\t}"},{"line_number":100,"context_line":"\tc.q.Add(workItem{typ: c.typ, name: name})"},{"line_number":101,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":9,"id":"7ccec001_5322aa3b","line":98,"range":{"start_line":98,"start_character":2,"end_line":98,"end_character":8},"updated":"2025-02-04 09:07:38.000000000","message":"This return is missing for OnAdd and OnUpdate.","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0986dacdad4a35bb2d79ba3c31ae1e82dfa2e9fb","unresolved":false,"context_lines":[{"line_number":95,"context_line":"\tname, err :\u003d cache.DeletionHandlingObjectToName(obj)"},{"line_number":96,"context_line":"\tif err !\u003d nil {"},{"line_number":97,"context_line":"\t\tc.l.Warningf(\"OnAdd name for type %q cannot be derived: %v\", c.typ, err)"},{"line_number":98,"context_line":"\t\treturn"},{"line_number":99,"context_line":"\t}"},{"line_number":100,"context_line":"\tc.q.Add(workItem{typ: c.typ, name: name})"},{"line_number":101,"context_line":"}"}],"source_content_type":"text/x-go","patch_set":9,"id":"26b5cdf4_15d3ca1c","line":98,"range":{"start_line":98,"start_character":2,"end_line":98,"end_character":8},"in_reply_to":"7ccec001_5322aa3b","updated":"2025-02-05 21:08:16.000000000","message":"Done","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"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":"a65fd029fb647fe6543aa3be178417679b22ce3c","unresolved":true,"context_lines":[{"line_number":105,"context_line":"\t\ti, shut :\u003d c.q.Get()"},{"line_number":106,"context_line":"\t\tstart :\u003d time.Now()"},{"line_number":107,"context_line":"\t\tswitch i.typ {"},{"line_number":108,"context_line":"\t\tcase \"pod\":"},{"line_number":109,"context_line":"\t\t\tpod, _ :\u003d c.podInformer.Lister().Pods(i.name.Namespace).Get(i.name.Name)"},{"line_number":110,"context_line":"\t\t\tc.nft.SetPod(i.name, pod)"},{"line_number":111,"context_line":"\t\t\tc.q.Done(i)"}],"source_content_type":"text/x-go","patch_set":9,"id":"4a660cb1_41dc1029","line":108,"updated":"2025-02-03 22:54:09.000000000","message":"As already said, I am not a real fan of this. I don\u0027t know how to make it prettier without over-engineering it, but hmm","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0986dacdad4a35bb2d79ba3c31ae1e82dfa2e9fb","unresolved":true,"context_lines":[{"line_number":105,"context_line":"\t\ti, shut :\u003d c.q.Get()"},{"line_number":106,"context_line":"\t\tstart :\u003d time.Now()"},{"line_number":107,"context_line":"\t\tswitch i.typ {"},{"line_number":108,"context_line":"\t\tcase \"pod\":"},{"line_number":109,"context_line":"\t\t\tpod, _ :\u003d c.podInformer.Lister().Pods(i.name.Namespace).Get(i.name.Name)"},{"line_number":110,"context_line":"\t\t\tc.nft.SetPod(i.name, pod)"},{"line_number":111,"context_line":"\t\t\tc.q.Done(i)"}],"source_content_type":"text/x-go","patch_set":9,"id":"b97a7fea_6c750a28","line":108,"in_reply_to":"4a660cb1_41dc1029","updated":"2025-02-05 21:08:16.000000000","message":"It cannot be done while keeping the workqueue. These objects need to be hashable to a consistent identity and we need a single queue to get local total event ordering. Also it is type-safe as there aren\u0027t even any actual objects in there, just names.","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"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":"eabc0bf78a27d99eb8d25a01ce1fd66f4cadea0c","unresolved":false,"context_lines":[{"line_number":105,"context_line":"\t\ti, shut :\u003d c.q.Get()"},{"line_number":106,"context_line":"\t\tstart :\u003d time.Now()"},{"line_number":107,"context_line":"\t\tswitch i.typ {"},{"line_number":108,"context_line":"\t\tcase \"pod\":"},{"line_number":109,"context_line":"\t\t\tpod, _ :\u003d c.podInformer.Lister().Pods(i.name.Namespace).Get(i.name.Name)"},{"line_number":110,"context_line":"\t\t\tc.nft.SetPod(i.name, pod)"},{"line_number":111,"context_line":"\t\t\tc.q.Done(i)"}],"source_content_type":"text/x-go","patch_set":9,"id":"c2b9b086_4b9cb6d2","line":108,"in_reply_to":"b97a7fea_6c750a28","updated":"2025-02-06 14:58:23.000000000","message":"Acknowledged","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"643b0f2a381b80f7ab0b79a310fb4a0ecf8ba88c","unresolved":true,"context_lines":[{"line_number":108,"context_line":"\t\tcase \"pod\":"},{"line_number":109,"context_line":"\t\t\tpod, _ :\u003d c.podInformer.Lister().Pods(i.name.Namespace).Get(i.name.Name)"},{"line_number":110,"context_line":"\t\t\tc.nft.SetPod(i.name, pod)"},{"line_number":111,"context_line":"\t\t\tc.q.Done(i)"},{"line_number":112,"context_line":"\t\t\tif c.hasProcessed.HasSynced() {"},{"line_number":113,"context_line":"\t\t\t\tif err :\u003d c.nft.Flush(); err !\u003d nil {"},{"line_number":114,"context_line":"\t\t\t\t\tc.l.Errorf(\"Failed to flush pod %v: %v\", i.name, err)"}],"source_content_type":"text/x-go","patch_set":9,"id":"0931c74c_929f0bca","line":111,"range":{"start_line":111,"start_character":3,"end_line":111,"end_character":14},"updated":"2025-02-04 09:07:38.000000000","message":"I would move this after the switch, instead of duplicating it in each case. It\u0027s fine to call this after `c.nft.Flush()`.","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0986dacdad4a35bb2d79ba3c31ae1e82dfa2e9fb","unresolved":false,"context_lines":[{"line_number":108,"context_line":"\t\tcase \"pod\":"},{"line_number":109,"context_line":"\t\t\tpod, _ :\u003d c.podInformer.Lister().Pods(i.name.Namespace).Get(i.name.Name)"},{"line_number":110,"context_line":"\t\t\tc.nft.SetPod(i.name, pod)"},{"line_number":111,"context_line":"\t\t\tc.q.Done(i)"},{"line_number":112,"context_line":"\t\t\tif c.hasProcessed.HasSynced() {"},{"line_number":113,"context_line":"\t\t\t\tif err :\u003d c.nft.Flush(); err !\u003d nil {"},{"line_number":114,"context_line":"\t\t\t\t\tc.l.Errorf(\"Failed to flush pod %v: %v\", i.name, err)"}],"source_content_type":"text/x-go","patch_set":9,"id":"a9bed87d_8b536765","line":111,"range":{"start_line":111,"start_character":3,"end_line":111,"end_character":14},"in_reply_to":"0931c74c_929f0bca","updated":"2025-02-05 21:08:16.000000000","message":"Done","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"643b0f2a381b80f7ab0b79a310fb4a0ecf8ba88c","unresolved":true,"context_lines":[{"line_number":111,"context_line":"\t\t\tc.q.Done(i)"},{"line_number":112,"context_line":"\t\t\tif c.hasProcessed.HasSynced() {"},{"line_number":113,"context_line":"\t\t\t\tif err :\u003d c.nft.Flush(); err !\u003d nil {"},{"line_number":114,"context_line":"\t\t\t\t\tc.l.Errorf(\"Failed to flush pod %v: %v\", i.name, err)"},{"line_number":115,"context_line":"\t\t\t\t}"},{"line_number":116,"context_line":"\t\t\t}"},{"line_number":117,"context_line":"\t\t\tc.hasProcessed.Finished(i)"}],"source_content_type":"text/x-go","patch_set":9,"id":"a42b3472_adcb60b1","line":114,"range":{"start_line":114,"start_character":5,"end_line":114,"end_character":15},"updated":"2025-02-04 09:07:38.000000000","message":"If the Flush() fails, then the kernel state might not consistent with our state anymore, and future delta updates might fail as well or result in an inconsistent state. I think we should not just log the error, but instead restart the Service, such that we reset the kernel state.","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0986dacdad4a35bb2d79ba3c31ae1e82dfa2e9fb","unresolved":false,"context_lines":[{"line_number":111,"context_line":"\t\t\tc.q.Done(i)"},{"line_number":112,"context_line":"\t\t\tif c.hasProcessed.HasSynced() {"},{"line_number":113,"context_line":"\t\t\t\tif err :\u003d c.nft.Flush(); err !\u003d nil {"},{"line_number":114,"context_line":"\t\t\t\t\tc.l.Errorf(\"Failed to flush pod %v: %v\", i.name, err)"},{"line_number":115,"context_line":"\t\t\t\t}"},{"line_number":116,"context_line":"\t\t\t}"},{"line_number":117,"context_line":"\t\t\tc.hasProcessed.Finished(i)"}],"source_content_type":"text/x-go","patch_set":9,"id":"0bcbf9dd_96fab82c","line":114,"range":{"start_line":114,"start_character":5,"end_line":114,"end_character":15},"in_reply_to":"a42b3472_adcb60b1","updated":"2025-02-05 21:08:16.000000000","message":"Done","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"643b0f2a381b80f7ab0b79a310fb4a0ecf8ba88c","unresolved":true,"context_lines":[{"line_number":121,"context_line":"\t\t\t\tc.q.Forget(i)"},{"line_number":122,"context_line":"\t\t\t} else {"},{"line_number":123,"context_line":"\t\t\t\tc.l.Errorf(\"SetNetworkPolicy error, requeuing: %v\", err)"},{"line_number":124,"context_line":"\t\t\t\tc.q.AddRateLimited(i)"},{"line_number":125,"context_line":"\t\t\t}"},{"line_number":126,"context_line":"\t\t\tc.q.Done(i)"},{"line_number":127,"context_line":"\t\t\tif c.hasProcessed.HasSynced() {"}],"source_content_type":"text/x-go","patch_set":9,"id":"64638fa7_9afdb6a3","line":124,"range":{"start_line":124,"start_character":4,"end_line":124,"end_character":25},"updated":"2025-02-04 09:07:38.000000000","message":"Can SetNetworkPolicy fail in such a way that a retry could succeed? It doesn\u0027t look like that to me; as far as I can see, SetNetworkPolicy only does computation and no syscalls at all. So I would remove this, and you can then replace NewTypedRateLimitingQueue with NewTyped.","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0986dacdad4a35bb2d79ba3c31ae1e82dfa2e9fb","unresolved":false,"context_lines":[{"line_number":121,"context_line":"\t\t\t\tc.q.Forget(i)"},{"line_number":122,"context_line":"\t\t\t} else {"},{"line_number":123,"context_line":"\t\t\t\tc.l.Errorf(\"SetNetworkPolicy error, requeuing: %v\", err)"},{"line_number":124,"context_line":"\t\t\t\tc.q.AddRateLimited(i)"},{"line_number":125,"context_line":"\t\t\t}"},{"line_number":126,"context_line":"\t\t\tc.q.Done(i)"},{"line_number":127,"context_line":"\t\t\tif c.hasProcessed.HasSynced() {"}],"source_content_type":"text/x-go","patch_set":9,"id":"b4f01725_ec0ff320","line":124,"range":{"start_line":124,"start_character":4,"end_line":124,"end_character":25},"in_reply_to":"64638fa7_9afdb6a3","updated":"2025-02-05 21:08:16.000000000","message":"Can no longer happen, the namespace updates got refactored.","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"643b0f2a381b80f7ab0b79a310fb4a0ecf8ba88c","unresolved":true,"context_lines":[{"line_number":143,"context_line":"\t\t\t}"},{"line_number":144,"context_line":"\t\t\tc.hasProcessed.Finished(i)"},{"line_number":145,"context_line":"\t\tcase \"flush\":"},{"line_number":146,"context_line":"\t\t\tif err :\u003d c.nft.Flush(); err !\u003d nil {"},{"line_number":147,"context_line":"\t\t\t\tc.l.Errorf(\"Failed to perform initial flush: %v\", err)"},{"line_number":148,"context_line":"\t\t\t}"},{"line_number":149,"context_line":"\t\t\tc.l.Info(\"Initial sync completed\")"}],"source_content_type":"text/x-go","patch_set":9,"id":"1cca2089_6a74cf5b","line":146,"range":{"start_line":146,"start_character":13,"end_line":146,"end_character":26},"updated":"2025-02-04 09:07:38.000000000","message":"Currently, it is not guaranteed that this is the first Flush(), because an update could have been inserted in the workqueue before the flush item.\n\nI would rewrite the worker function like this and remove the flush item, which I think is simpler:\n```\nfunc (c *Service) worker(ctx context.Context) error {\n\thasSynced :\u003d false\n\tfor {\n\t\tif err :\u003d ctx.Err(); err !\u003d nil {\n\t\t\t// Return immediately when the context is canceled instead of continuing until the queue is empty.\n\t\t\treturn err\n\t\t}\n\t\ti, shut :\u003d c.q.Get()\n\t\tif shut {\n\t\t\treturn ctx.Err()\n\t\t}\n\t\tstart :\u003d time.Now()\n\t\tswitch i.typ {\n\t\tcase \"pod\":\n\t\t\tpod, _ :\u003d c.podInformer.Lister().Pods(i.name.Namespace).Get(i.name.Name)\n\t\t\tc.nft.SetPod(i.name, pod)\n\t\tcase \"nwp\":\n\t\t\t...\n\t\tcase \"ns\":\n\t\t\t...\n\t\t}\n\t\t\n\t\tc.hasProcessed.Finished(i)\n\t\tif hasSynced {\n\t\t\tif err :\u003d c.nft.Flush(); err !\u003d nil {\n\t\t\t\treturn fmt.Errorf(\"Failed to flush after update of %s %v: %w\", i.typ, i.name, err)\n\t\t\t}\n\t\t\tapplyDuration.WithLabelValues(i.typ).Observe(time.Since(start).Seconds())\n\t\t} else if c.hasProcessed.HasSynced() {\n\t\t\tif err :\u003d c.nft.Flush(); err !\u003d nil {\n\t\t\t\treturn fmt.Errorf(\"Failed to perform initial flush: %w\", err)\n\t\t\t}\n\t\t\tc.l.Info(\"Initial sync completed\")\n\t\t\thasSynced \u003d true\n\t\t\tapplyDuration.WithLabelValues(\"flush\").Observe(time.Since(start).Seconds())\n\t\t}\n\t\tc.q.Done(i)\n\t}\n}\n```","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0986dacdad4a35bb2d79ba3c31ae1e82dfa2e9fb","unresolved":false,"context_lines":[{"line_number":143,"context_line":"\t\t\t}"},{"line_number":144,"context_line":"\t\t\tc.hasProcessed.Finished(i)"},{"line_number":145,"context_line":"\t\tcase \"flush\":"},{"line_number":146,"context_line":"\t\t\tif err :\u003d c.nft.Flush(); err !\u003d nil {"},{"line_number":147,"context_line":"\t\t\t\tc.l.Errorf(\"Failed to perform initial flush: %v\", err)"},{"line_number":148,"context_line":"\t\t\t}"},{"line_number":149,"context_line":"\t\t\tc.l.Info(\"Initial sync completed\")"}],"source_content_type":"text/x-go","patch_set":9,"id":"30420835_bef73b69","line":146,"range":{"start_line":146,"start_character":13,"end_line":146,"end_character":26},"in_reply_to":"1cca2089_6a74cf5b","updated":"2025-02-05 21:08:16.000000000","message":"Done","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"643b0f2a381b80f7ab0b79a310fb4a0ecf8ba88c","unresolved":true,"context_lines":[{"line_number":152,"context_line":"\t\t\tc.q.Done(i)"},{"line_number":153,"context_line":"\t\t}"},{"line_number":154,"context_line":"\t\tapplyDuration.WithLabelValues(i.typ).Observe(time.Since(start).Seconds())"},{"line_number":155,"context_line":"\t\tif shut {"},{"line_number":156,"context_line":"\t\t\treturn"},{"line_number":157,"context_line":"\t\t}"},{"line_number":158,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":9,"id":"a1894ef8_5b90a0b0","line":155,"range":{"start_line":155,"start_character":2,"end_line":155,"end_character":9},"updated":"2025-02-04 09:07:38.000000000","message":"Move this directly after `c.q.Get()`.","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0986dacdad4a35bb2d79ba3c31ae1e82dfa2e9fb","unresolved":false,"context_lines":[{"line_number":152,"context_line":"\t\t\tc.q.Done(i)"},{"line_number":153,"context_line":"\t\t}"},{"line_number":154,"context_line":"\t\tapplyDuration.WithLabelValues(i.typ).Observe(time.Since(start).Seconds())"},{"line_number":155,"context_line":"\t\tif shut {"},{"line_number":156,"context_line":"\t\t\treturn"},{"line_number":157,"context_line":"\t\t}"},{"line_number":158,"context_line":"\t}"}],"source_content_type":"text/x-go","patch_set":9,"id":"aa167351_6115b085","line":155,"range":{"start_line":155,"start_character":2,"end_line":155,"end_character":9},"in_reply_to":"a1894ef8_5b90a0b0","updated":"2025-02-05 21:08:16.000000000","message":"Done","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"643b0f2a381b80f7ab0b79a310fb4a0ecf8ba88c","unresolved":true,"context_lines":[{"line_number":171,"context_line":"\teventBroadcaster.StartRecordingToSink(\u0026typedcorev1.EventSinkImpl{Interface: c.Kubernetes.CoreV1().Events(\"\")})"},{"line_number":172,"context_line":"\trecorder :\u003d eventBroadcaster.NewRecorder(scheme.Scheme, v1.EventSource{Component: \"npc\"})"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"\tc.nft \u003d nftctrl.New(recorder, node.LinkGroupK8sPod)"},{"line_number":175,"context_line":"\tc.eventRecorder \u003d recorder"},{"line_number":176,"context_line":"\tc.l \u003d supervisor.Logger(ctx)"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-go","patch_set":9,"id":"7d9ef86b_34b3782f","line":174,"range":{"start_line":174,"start_character":9,"end_line":174,"end_character":20},"updated":"2025-02-04 09:07:38.000000000","message":"There should be a `defer c.nft.Close()` after this line. This function still needs to be implemented and should call CloseLasting() on the nftables.Conn. Otherwise, a netlink socket is leaked each time the service restarts.","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0986dacdad4a35bb2d79ba3c31ae1e82dfa2e9fb","unresolved":false,"context_lines":[{"line_number":171,"context_line":"\teventBroadcaster.StartRecordingToSink(\u0026typedcorev1.EventSinkImpl{Interface: c.Kubernetes.CoreV1().Events(\"\")})"},{"line_number":172,"context_line":"\trecorder :\u003d eventBroadcaster.NewRecorder(scheme.Scheme, v1.EventSource{Component: \"npc\"})"},{"line_number":173,"context_line":""},{"line_number":174,"context_line":"\tc.nft \u003d nftctrl.New(recorder, node.LinkGroupK8sPod)"},{"line_number":175,"context_line":"\tc.eventRecorder \u003d recorder"},{"line_number":176,"context_line":"\tc.l \u003d supervisor.Logger(ctx)"},{"line_number":177,"context_line":""}],"source_content_type":"text/x-go","patch_set":9,"id":"ac526f43_49e8311a","line":174,"range":{"start_line":174,"start_character":9,"end_line":174,"end_character":20},"in_reply_to":"7d9ef86b_34b3782f","updated":"2025-02-05 21:08:16.000000000","message":"Done","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"643b0f2a381b80f7ab0b79a310fb4a0ecf8ba88c","unresolved":true,"context_lines":[{"line_number":192,"context_line":"\tc.informerFactory.Start(ctx.Done())"},{"line_number":193,"context_line":"\tdefer c.informerFactory.Shutdown()"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"\tgo c.worker()"},{"line_number":196,"context_line":"\tdefer c.q.ShutDown()"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"\tcache.WaitForNamedCacheSync(\"k8s-nft-npc\", ctx.Done(), c.hasProcessed.HasSynced)"}],"source_content_type":"text/x-go","patch_set":9,"id":"c35d4384_f6cb8829","line":195,"range":{"start_line":195,"start_character":1,"end_line":195,"end_character":3},"updated":"2025-02-04 09:07:38.000000000","message":"Using plain `go` here means that the service could restart before the worker returns, so we could potentially have two workers running at the same time. That could cause problems.\n\nMaybe it would be easier to run the shutdown handler instead of the worker in a goroutine, like this, which also simplifies error handling:\n\n```\nsupervisor.Signal(ctx, supervisor.SignalHealthy)\ngo func() {\n\t\u003c-ctx.Done()\n\tc.q.ShutDown()\n}()\nreturn c.worker(ctx)\n```","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0986dacdad4a35bb2d79ba3c31ae1e82dfa2e9fb","unresolved":false,"context_lines":[{"line_number":192,"context_line":"\tc.informerFactory.Start(ctx.Done())"},{"line_number":193,"context_line":"\tdefer c.informerFactory.Shutdown()"},{"line_number":194,"context_line":""},{"line_number":195,"context_line":"\tgo c.worker()"},{"line_number":196,"context_line":"\tdefer c.q.ShutDown()"},{"line_number":197,"context_line":""},{"line_number":198,"context_line":"\tcache.WaitForNamedCacheSync(\"k8s-nft-npc\", ctx.Done(), c.hasProcessed.HasSynced)"}],"source_content_type":"text/x-go","patch_set":9,"id":"44913904_5afee8f7","line":195,"range":{"start_line":195,"start_character":1,"end_line":195,"end_character":3},"in_reply_to":"c35d4384_f6cb8829","updated":"2025-02-05 21:08:16.000000000","message":"Done","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2495023da190f4f57cdd9dbab408f2d9aa2c95cd","unresolved":true,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"// MetricsRegistry is the metrics registry in which all NPC metrics are"},{"line_number":27,"context_line":"// registered."},{"line_number":28,"context_line":"var MetricsRegistry \u003d prometheus.NewRegistry()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"type Service struct {"},{"line_number":31,"context_line":"\tKubernetes kubernetes.Interface"}],"source_content_type":"text/x-go","patch_set":13,"id":"8533d602_3dca01f6","line":28,"range":{"start_line":28,"start_character":4,"end_line":28,"end_character":19},"updated":"2025-02-06 09:14:53.000000000","message":"This is now unused and can be removed.","commit_id":"0971608c4b42155929e9e399b2cb5f9ad687ffb6"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"4a4c603982ce46be7c0de5112607afc58b3b7fe4","unresolved":false,"context_lines":[{"line_number":25,"context_line":""},{"line_number":26,"context_line":"// MetricsRegistry is the metrics registry in which all NPC metrics are"},{"line_number":27,"context_line":"// registered."},{"line_number":28,"context_line":"var MetricsRegistry \u003d prometheus.NewRegistry()"},{"line_number":29,"context_line":""},{"line_number":30,"context_line":"type Service struct {"},{"line_number":31,"context_line":"\tKubernetes kubernetes.Interface"}],"source_content_type":"text/x-go","patch_set":13,"id":"2502f076_a6334da9","line":28,"range":{"start_line":28,"start_character":4,"end_line":28,"end_character":19},"in_reply_to":"8533d602_3dca01f6","updated":"2025-02-06 17:12:53.000000000","message":"Done","commit_id":"0971608c4b42155929e9e399b2cb5f9ad687ffb6"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"987d374b3abab22908e33363180fffc9015190a1","unresolved":true,"context_lines":[{"line_number":30,"context_line":"type Service struct {"},{"line_number":31,"context_line":"\tKubernetes kubernetes.Interface"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"\tnft             *nftctrl.Controller"},{"line_number":34,"context_line":"\tinformerFactory informers.SharedInformerFactory"},{"line_number":35,"context_line":"\tpodInformer     cv1if.PodInformer"},{"line_number":36,"context_line":"\tnsInformer      cv1if.NamespaceInformer"}],"source_content_type":"text/x-go","patch_set":13,"id":"a86bb010_5f8c344f","line":33,"range":{"start_line":33,"start_character":1,"end_line":33,"end_character":4},"updated":"2025-02-06 09:20:29.000000000","message":"Now that the worker function is integrated into Run, all these private fields could instead be local variables in Run.","commit_id":"0971608c4b42155929e9e399b2cb5f9ad687ffb6"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"4a4c603982ce46be7c0de5112607afc58b3b7fe4","unresolved":false,"context_lines":[{"line_number":30,"context_line":"type Service struct {"},{"line_number":31,"context_line":"\tKubernetes kubernetes.Interface"},{"line_number":32,"context_line":""},{"line_number":33,"context_line":"\tnft             *nftctrl.Controller"},{"line_number":34,"context_line":"\tinformerFactory informers.SharedInformerFactory"},{"line_number":35,"context_line":"\tpodInformer     cv1if.PodInformer"},{"line_number":36,"context_line":"\tnsInformer      cv1if.NamespaceInformer"}],"source_content_type":"text/x-go","patch_set":13,"id":"e0d70d77_7d23256d","line":33,"range":{"start_line":33,"start_character":1,"end_line":33,"end_character":4},"in_reply_to":"a86bb010_5f8c344f","updated":"2025-02-06 17:12:53.000000000","message":"Done","commit_id":"0971608c4b42155929e9e399b2cb5f9ad687ffb6"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"6d7200999d256f3b8d84e10753f62521e556b68d","unresolved":true,"context_lines":[{"line_number":55,"context_line":"func (c *updateEnqueuer) OnUpdate(oldObj, newObj interface{}) {"},{"line_number":56,"context_line":"\tname, err :\u003d cache.ObjectToName(newObj)"},{"line_number":57,"context_line":"\tif err !\u003d nil {"},{"line_number":58,"context_line":"\t\tc.l.Warningf(\"OnAdd name for type %q cannot be derived: %v\", c.typ, err)"},{"line_number":59,"context_line":"\t\treturn"},{"line_number":60,"context_line":"\t}"},{"line_number":61,"context_line":"\tc.q.Add(workItem{typ: c.typ, name: name})"}],"source_content_type":"text/x-go","patch_set":18,"id":"f6a34988_bb435c6b","line":58,"range":{"start_line":58,"start_character":16,"end_line":58,"end_character":21},"updated":"2025-02-10 17:29:40.000000000","message":"This should be OnUpdate, and OnDelete below.","commit_id":"3a3d4317916716d9bb6b3d9b5996d8eaa65787fd"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c62628b95edf38a98b765f2d9fdbba81dbfdaf83","unresolved":false,"context_lines":[{"line_number":55,"context_line":"func (c *updateEnqueuer) OnUpdate(oldObj, newObj interface{}) {"},{"line_number":56,"context_line":"\tname, err :\u003d cache.ObjectToName(newObj)"},{"line_number":57,"context_line":"\tif err !\u003d nil {"},{"line_number":58,"context_line":"\t\tc.l.Warningf(\"OnAdd name for type %q cannot be derived: %v\", c.typ, err)"},{"line_number":59,"context_line":"\t\treturn"},{"line_number":60,"context_line":"\t}"},{"line_number":61,"context_line":"\tc.q.Add(workItem{typ: c.typ, name: name})"}],"source_content_type":"text/x-go","patch_set":18,"id":"1a24ed53_4c01fbf8","line":58,"range":{"start_line":58,"start_character":16,"end_line":58,"end_character":21},"in_reply_to":"f6a34988_bb435c6b","updated":"2025-02-11 13:43:42.000000000","message":"Done","commit_id":"3a3d4317916716d9bb6b3d9b5996d8eaa65787fd"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"2491a0385751ba7f5f22df80f2f9053f6891eb92","unresolved":true,"context_lines":[{"line_number":96,"context_line":"\t\treturn nsHandler.HasSynced() \u0026\u0026 podHandler.HasSynced() \u0026\u0026 nwpHandler.HasSynced()"},{"line_number":97,"context_line":"\t}"},{"line_number":98,"context_line":"\tinformerFactory.Start(ctx.Done())"},{"line_number":99,"context_line":"\tdefer informerFactory.Shutdown()"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"\tgo func() {"},{"line_number":102,"context_line":"\t\t\u003c-ctx.Done()"}],"source_content_type":"text/x-go","patch_set":18,"id":"25ff6e25_94c16361","line":99,"range":{"start_line":99,"start_character":7,"end_line":99,"end_character":33},"updated":"2025-02-11 09:17:13.000000000","message":"I noticed that there is a deadlock here: Shutdown blocks until ctx is canceled. However, if we return because of a Flush error, ctx is only canceled by the supervisor after we return. You can fix this by moving `informerFactory.Shutdown()` after the `q.ShutDown()`.","commit_id":"3a3d4317916716d9bb6b3d9b5996d8eaa65787fd"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"c62628b95edf38a98b765f2d9fdbba81dbfdaf83","unresolved":false,"context_lines":[{"line_number":96,"context_line":"\t\treturn nsHandler.HasSynced() \u0026\u0026 podHandler.HasSynced() \u0026\u0026 nwpHandler.HasSynced()"},{"line_number":97,"context_line":"\t}"},{"line_number":98,"context_line":"\tinformerFactory.Start(ctx.Done())"},{"line_number":99,"context_line":"\tdefer informerFactory.Shutdown()"},{"line_number":100,"context_line":""},{"line_number":101,"context_line":"\tgo func() {"},{"line_number":102,"context_line":"\t\t\u003c-ctx.Done()"}],"source_content_type":"text/x-go","patch_set":18,"id":"806e0981_019da73a","line":99,"range":{"start_line":99,"start_character":7,"end_line":99,"end_character":33},"in_reply_to":"25ff6e25_94c16361","updated":"2025-02-11 13:43:42.000000000","message":"Done","commit_id":"3a3d4317916716d9bb6b3d9b5996d8eaa65787fd"}],"metropolis/test/e2e/suites/kubernetes/run_test.go":[{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"643b0f2a381b80f7ab0b79a310fb4a0ecf8ba88c","unresolved":true,"context_lines":[{"line_number":401,"context_line":"\t\t\t\t// Spread pods out over nodes to test inter-node network"},{"line_number":402,"context_line":"\t\t\t\tpod.Labels \u003d make(map[string]string)"},{"line_number":403,"context_line":"\t\t\t\tpod.Labels[\"name\"] \u003d \"npc-smoke\""},{"line_number":404,"context_line":"\t\t\t\tpod.Spec.TopologySpreadConstraints \u003d []corev1.TopologySpreadConstraint{{"},{"line_number":405,"context_line":"\t\t\t\t\tMaxSkew:           1,"},{"line_number":406,"context_line":"\t\t\t\t\tTopologyKey:       \"kubernetes.io/hostname\","},{"line_number":407,"context_line":"\t\t\t\t\tWhenUnsatisfiable: corev1.DoNotSchedule,"}],"source_content_type":"text/x-go","patch_set":9,"id":"b96cf6d2_7620be22","line":404,"range":{"start_line":404,"start_character":13,"end_line":404,"end_character":38},"updated":"2025-02-04 09:07:38.000000000","message":"The LabelSelector is missing here. In the connectivity-smoketest just above, it\u0027s there.","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0986dacdad4a35bb2d79ba3c31ae1e82dfa2e9fb","unresolved":false,"context_lines":[{"line_number":401,"context_line":"\t\t\t\t// Spread pods out over nodes to test inter-node network"},{"line_number":402,"context_line":"\t\t\t\tpod.Labels \u003d make(map[string]string)"},{"line_number":403,"context_line":"\t\t\t\tpod.Labels[\"name\"] \u003d \"npc-smoke\""},{"line_number":404,"context_line":"\t\t\t\tpod.Spec.TopologySpreadConstraints \u003d []corev1.TopologySpreadConstraint{{"},{"line_number":405,"context_line":"\t\t\t\t\tMaxSkew:           1,"},{"line_number":406,"context_line":"\t\t\t\t\tTopologyKey:       \"kubernetes.io/hostname\","},{"line_number":407,"context_line":"\t\t\t\t\tWhenUnsatisfiable: corev1.DoNotSchedule,"}],"source_content_type":"text/x-go","patch_set":9,"id":"bad39f26_89b3c740","line":404,"range":{"start_line":404,"start_character":13,"end_line":404,"end_character":38},"in_reply_to":"b96cf6d2_7620be22","updated":"2025-02-05 21:08:16.000000000","message":"Done","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000038,"name":"Jan Schär","display_name":"Jan","email":"jan@monogon.tech","username":"jan","avatars":[{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/fd0e7f48847aa0e46c8f361df2d6c26b.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"643b0f2a381b80f7ab0b79a310fb4a0ecf8ba88c","unresolved":true,"context_lines":[{"line_number":431,"context_line":"\t\tif _, err :\u003d clientSet.NetworkingV1().NetworkPolicies(\"default\").Create(context.Background(), nwp, metav1.CreateOptions{}); err !\u003d nil {"},{"line_number":432,"context_line":"\t\t\tt.Fatal(err)"},{"line_number":433,"context_line":"\t\t}"},{"line_number":434,"context_line":"\t\ttime.Sleep(2 * time.Second) // Wait for policy to apply, no synchronization available currently"},{"line_number":435,"context_line":"\t\t// Check if policy is in effect"},{"line_number":436,"context_line":"\t\tct.TestPodConnectivity(t, 0, 1, 1234, connectivity.ExpectedSuccess)"},{"line_number":437,"context_line":"\t\tct.TestPodConnectivity(t, 0, 1, 1235, connectivity.ExpectedReject)"}],"source_content_type":"text/x-go","patch_set":9,"id":"950e8389_f3f9bde1","line":434,"range":{"start_line":434,"start_character":2,"end_line":434,"end_character":29},"updated":"2025-02-04 09:07:38.000000000","message":"This is likely to make the test flaky. I suggest to use util.TestEventual instead. For that, you would have to adjust TestPodConnectivity so it returns an error instead of calling t.Errorf. I would then also move the reject test first, so we know the policy is already applied when we do the success test.","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"},{"author":{"_account_id":1000001,"name":"Lorenz Brun","display_name":"Lorenz","email":"lorenz@monogon.tech","username":"lorenz","avatars":[{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d32","height":32},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d56","height":56},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d100","height":100},{"url":"https://www.gravatar.com/avatar/75c04f6e9881c24ee621fba80667eed8.jpg?d\u003didenticon\u0026r\u003dpg\u0026s\u003d120","height":120}]},"change_message_id":"0986dacdad4a35bb2d79ba3c31ae1e82dfa2e9fb","unresolved":false,"context_lines":[{"line_number":431,"context_line":"\t\tif _, err :\u003d clientSet.NetworkingV1().NetworkPolicies(\"default\").Create(context.Background(), nwp, metav1.CreateOptions{}); err !\u003d nil {"},{"line_number":432,"context_line":"\t\t\tt.Fatal(err)"},{"line_number":433,"context_line":"\t\t}"},{"line_number":434,"context_line":"\t\ttime.Sleep(2 * time.Second) // Wait for policy to apply, no synchronization available currently"},{"line_number":435,"context_line":"\t\t// Check if policy is in effect"},{"line_number":436,"context_line":"\t\tct.TestPodConnectivity(t, 0, 1, 1234, connectivity.ExpectedSuccess)"},{"line_number":437,"context_line":"\t\tct.TestPodConnectivity(t, 0, 1, 1235, connectivity.ExpectedReject)"}],"source_content_type":"text/x-go","patch_set":9,"id":"4c73ee1b_1d7cf24a","line":434,"range":{"start_line":434,"start_character":2,"end_line":434,"end_character":29},"in_reply_to":"950e8389_f3f9bde1","updated":"2025-02-05 21:08:16.000000000","message":"Implemented it a bit differently, but now has a bigger timeout and retries.","commit_id":"81005f38e13b426adc62b6d94d47b57f8370373e"}]}
