{"action":"created","comment":{"url":"https://api.github.com/repos/cilium/cilium/pulls/comments/218603571","pull_request_review_id":156579980,"id":218603571,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIxODYwMzU3MQ==","diff_hunk":"@@ -154,3 +175,331 @@ func copyObjToV1Namespace(obj interface{}) meta_v1.Object {\n \t}\n \treturn ns.DeepCopy()\n }\n+\n+func listV1NetworkPolicies(client interface{}) func() (versioned.Map, error) {\n+\tk8sClient, ok := client.(kubernetes.Interface)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %s: expecting 'kubernetes.Interface'\", reflect.TypeOf(client))\n+\t}\n+\treturn func() (versioned.Map, error) {\n+\t\tm := versioned.NewMap()\n+\t\t// Limit the number of elements to avoid network congestion every N minutes\n+\t\tlo := meta_v1.ListOptions{Limit: 50}\n+\t\tfor {\n+\t\t\tlist, err := k8sClient.NetworkingV1().NetworkPolicies(\"\").List(lo)\n+\t\t\tif err != nil {\n+\t\t\t\treturn nil, err\n+\t\t\t}\n+\t\t\tlo.Continue = list.Continue\n+\t\t\tfor i := range list.Items {\n+\t\t\t\tm.Add(utils.GetVerStructFrom(&list.Items[i]))\n+\t\t\t}\n+\t\t\tif lo.Continue == \"\" {\n+\t\t\t\tbreak\n+\t\t\t}\n+\t\t}\n+\t\treturn m, nil\n+\t}\n+}\n+\n+func listV1Services(client interface{}) func() (versioned.Map, error) {\n+\tk8sClient, ok := client.(kubernetes.Interface)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %s: expecting 'kubernetes.Interface'\", reflect.TypeOf(client))\n+\t}\n+\treturn func() (versioned.Map, error) {\n+\t\tm := versioned.NewMap()\n+\t\t// Limit the number of elements to avoid network congestion every N minutes\n+\t\tlo := meta_v1.ListOptions{Limit: 50}\n+\t\tfor {\n+\t\t\tlist, err := k8sClient.CoreV1().Services(\"\").List(lo)\n+\t\t\tif err != nil {\n+\t\t\t\treturn nil, err\n+\t\t\t}\n+\t\t\tlo.Continue = list.Continue\n+\t\t\tfor i := range list.Items {\n+\t\t\t\tm.Add(utils.GetVerStructFrom(&list.Items[i]))\n+\t\t\t}\n+\t\t\tif lo.Continue == \"\" {\n+\t\t\t\tbreak\n+\t\t\t}\n+\t\t}\n+\t\treturn m, nil\n+\t}\n+}\n+\n+func listV1Endpoints(client interface{}) func() (versioned.Map, error) {\n+\tk8sClient, ok := client.(kubernetes.Interface)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %s: expecting 'kubernetes.Interface'\", reflect.TypeOf(client))\n+\t}\n+\treturn func() (versioned.Map, error) {\n+\t\tm := versioned.NewMap()\n+\t\t// Limit the number of elements to avoid network congestion every N minutes\n+\t\tlo := meta_v1.ListOptions{Limit: 50}\n+\t\tfor {\n+\t\t\tlist, err := k8sClient.CoreV1().Endpoints(\"\").List(lo)\n+\t\t\tif err != nil {\n+\t\t\t\treturn nil, err\n+\t\t\t}\n+\t\t\tlo.Continue = list.Continue\n+\t\t\tfor i := range list.Items {\n+\t\t\t\tm.Add(utils.GetVerStructFrom(&list.Items[i]))\n+\t\t\t}\n+\t\t\tif lo.Continue == \"\" {\n+\t\t\t\tbreak\n+\t\t\t}\n+\t\t}\n+\t\treturn m, nil\n+\t}\n+}\n+\n+func listV1beta1Ingress(client interface{}) func() (versioned.Map, error) {\n+\tk8sClient, ok := client.(kubernetes.Interface)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %s: expecting 'kubernetes.Interface'\", reflect.TypeOf(client))\n+\t}\n+\treturn func() (versioned.Map, error) {\n+\t\tm := versioned.NewMap()\n+\t\t// Limit the number of elements to avoid network congestion every N minutes\n+\t\tlo := meta_v1.ListOptions{Limit: 50}\n+\t\tfor {\n+\t\t\tlist, err := k8sClient.ExtensionsV1beta1().Ingresses(\"\").List(lo)\n+\t\t\tif err != nil {\n+\t\t\t\treturn nil, err\n+\t\t\t}\n+\t\t\tlo.Continue = list.Continue\n+\t\t\tfor i := range list.Items {\n+\t\t\t\tm.Add(utils.GetVerStructFrom(&list.Items[i]))\n+\t\t\t}\n+\t\t\tif lo.Continue == \"\" {\n+\t\t\t\tbreak\n+\t\t\t}\n+\t\t}\n+\t\treturn m, nil\n+\t}\n+}\n+\n+func listV2CNP(client interface{}) func() (versioned.Map, error) {\n+\tk8sClient, ok := client.(versionedClient.Interface)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %s: expecting 'versionedClient.Interface'\", reflect.TypeOf(client))\n+\t}\n+\treturn func() (versioned.Map, error) {\n+\t\tm := versioned.NewMap()\n+\t\t// Limit the number of elements to avoid network congestion every N minutes\n+\t\tlo := meta_v1.ListOptions{Limit: 50}\n+\t\tfor {\n+\t\t\tlist, err := k8sClient.CiliumV2().CiliumNetworkPolicies(\"\").List(lo)\n+\t\t\tif err != nil {\n+\t\t\t\treturn nil, err\n+\t\t\t}\n+\t\t\tlo.Continue = list.Continue\n+\t\t\tfor i := range list.Items {\n+\t\t\t\tm.Add(utils.GetVerStructFrom(&list.Items[i]))\n+\t\t\t}\n+\t\t\tif lo.Continue == \"\" {\n+\t\t\t\tbreak\n+\t\t\t}\n+\t\t}\n+\t\treturn m, nil\n+\t}\n+}\n+\n+func listV1Pod(client interface{}) func() (versioned.Map, error) {\n+\tk8sClient, ok := client.(kubernetes.Interface)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %s: expecting 'kubernetes.Interface'\", reflect.TypeOf(client))\n+\t}\n+\treturn func() (versioned.Map, error) {\n+\t\tm := versioned.NewMap()\n+\t\t// Limit the number of elements to avoid network congestion every N minutes\n+\t\tlo := meta_v1.ListOptions{Limit: 50}\n+\t\tfor {\n+\t\t\tlist, err := k8sClient.CoreV1().Pods(\"\").List(lo)\n+\t\t\tif err != nil {\n+\t\t\t\treturn nil, err\n+\t\t\t}\n+\t\t\tlo.Continue = list.Continue\n+\t\t\tfor i := range list.Items {\n+\t\t\t\tm.Add(utils.GetVerStructFrom(&list.Items[i]))\n+\t\t\t}\n+\t\t\tif lo.Continue == \"\" {\n+\t\t\t\tbreak\n+\t\t\t}\n+\t\t}\n+\t\treturn m, nil\n+\t}\n+}\n+\n+func listV1Node(client interface{}) func() (versioned.Map, error) {\n+\tk8sClient, ok := client.(kubernetes.Interface)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %s: expecting 'kubernetes.Interface'\", reflect.TypeOf(client))\n+\t}\n+\treturn func() (versioned.Map, error) {\n+\t\tm := versioned.NewMap()\n+\t\t// Limit the number of elements to avoid network congestion every N minutes\n+\t\tlo := meta_v1.ListOptions{Limit: 50}\n+\t\tfor {\n+\t\t\tlist, err := k8sClient.CoreV1().Nodes().List(lo)\n+\t\t\tif err != nil {\n+\t\t\t\treturn nil, err\n+\t\t\t}\n+\t\t\tlo.Continue = list.Continue\n+\t\t\tfor i := range list.Items {\n+\t\t\t\tm.Add(utils.GetVerStructFrom(&list.Items[i]))\n+\t\t\t}\n+\t\t\tif lo.Continue == \"\" {\n+\t\t\t\tbreak\n+\t\t\t}\n+\t\t}\n+\t\treturn m, nil\n+\t}\n+}\n+\n+func listV1Namespace(client interface{}) func() (versioned.Map, error) {\n+\tk8sClient, ok := client.(kubernetes.Interface)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %s: expecting 'kubernetes.Interface'\", reflect.TypeOf(client))\n+\t}\n+\treturn func() (versioned.Map, error) {\n+\t\tm := versioned.NewMap()\n+\t\t// Limit the number of elements to avoid network congestion every N minutes\n+\t\tlo := meta_v1.ListOptions{Limit: 50}\n+\t\tfor {\n+\t\t\tlist, err := k8sClient.CoreV1().Namespaces().List(lo)\n+\t\t\tif err != nil {\n+\t\t\t\treturn nil, err\n+\t\t\t}\n+\t\t\tlo.Continue = list.Continue\n+\t\t\tfor i := range list.Items {\n+\t\t\t\tm.Add(utils.GetVerStructFrom(&list.Items[i]))\n+\t\t\t}\n+\t\t\tif lo.Continue == \"\" {\n+\t\t\t\tbreak\n+\t\t\t}\n+\t\t}\n+\t\treturn m, nil\n+\t}\n+}\n+\n+func equalV1NetworkPolicy(o1, o2 interface{}) bool {\n+\t_, ok := o1.(*networkingv1.NetworkPolicy)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %q, expecting *networkingv1.NetworkPolicy\", reflect.TypeOf(o1))\n+\t\treturn false\n+\t}\n+\t_, ok = o1.(*networkingv1.NetworkPolicy)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %q, expecting *networkingv1.NetworkPolicy\", reflect.TypeOf(o2))\n+\t\treturn false\n+\t}\n+\t// FIXME write dedicated deep equal function\n+\treturn false\n+}\n+\n+func equalV1Services(o1, o2 interface{}) bool {\n+\t_, ok := o1.(*v1.Service)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %q, expecting *v1.Service\", reflect.TypeOf(o1))\n+\t\treturn false\n+\t}\n+\t_, ok = o1.(*v1.Service)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %q, expecting *v1.Service\", reflect.TypeOf(o2))\n+\t\treturn false\n+\t}\n+\t// FIXME write dedicated deep equal function\n+\treturn false\n+}\n+\n+func equalV1Endpoints(o1, o2 interface{}) bool {\n+\t_, ok := o1.(*v1.Endpoints)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %q, expecting *v1.Endpoints\", reflect.TypeOf(o1))\n+\t\treturn false\n+\t}\n+\t_, ok = o1.(*v1.Endpoints)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %q, expecting *v1.Endpoints\", reflect.TypeOf(o2))\n+\t\treturn false\n+\t}\n+\t// FIXME write dedicated deep equal function\n+\treturn false\n+}\n+\n+func equalV1beta1Ingress(o1, o2 interface{}) bool {\n+\t_, ok := o1.(*v1beta1.Ingress)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %q, expecting *v1beta1.Ingress\", reflect.TypeOf(o1))\n+\t\treturn false\n+\t}\n+\t_, ok = o1.(*v1beta1.Ingress)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %q, expecting *v1beta1.Ingress\", reflect.TypeOf(o2))\n+\t\treturn false\n+\t}\n+\t// FIXME write dedicated deep equal function\n+\treturn false\n+}\n+\n+func equalV2CNP(o1, o2 interface{}) bool {\n+\t_, ok := o1.(*cilium_v2.CiliumNetworkPolicy)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %q, expecting *cilium_v2.CiliumNetworkPolicy\", reflect.TypeOf(o1))\n+\t\treturn false\n+\t}\n+\t_, ok = o1.(*cilium_v2.CiliumNetworkPolicy)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %q, expecting *cilium_v2.CiliumNetworkPolicy\", reflect.TypeOf(o2))\n+\t\treturn false\n+\t}\n+\t// FIXME write dedicated deep equal function\n+\treturn false\n+}\n+\n+func equalV1Pod(o1, o2 interface{}) bool {\n+\t_, ok := o1.(*v1.Pod)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %q, expecting *v1.Pod\", reflect.TypeOf(o1))\n+\t\treturn false\n+\t}\n+\t_, ok = o1.(*v1.Pod)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %q, expecting *v1.Pod\", reflect.TypeOf(o2))\n+\t\treturn false\n+\t}\n+\t// FIXME write dedicated deep equal function\n+\treturn false\n+}\n+\n+func equalV1Node(o1, o2 interface{}) bool {\n+\t_, ok := o1.(*v1.Node)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %q, expecting *v1.Node\", reflect.TypeOf(o1))\n+\t\treturn false\n+\t}\n+\t_, ok = o1.(*v1.Node)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %q, expecting *v1.Node\", reflect.TypeOf(o2))\n+\t\treturn false\n+\t}\n+\t// FIXME write dedicated deep equal function\n+\treturn false\n+}\n+\n+func equalV1Namespace(o1, o2 interface{}) bool {\n+\t_, ok := o1.(*v1.Namespace)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %q, expecting *v1.Namespace\", reflect.TypeOf(o1))\n+\t\treturn false\n+\t}\n+\t_, ok = o1.(*v1.Namespace)\n+\tif !ok {\n+\t\tlog.Panicf(\"Invalid resource type %q, expecting *v1.Namespace\", reflect.TypeOf(o2))\n+\t\treturn false\n+\t}\n+\t// FIXME write dedicated deep equal function","path":"pkg/k8s/factory_functions.go","position":414,"original_position":414,"commit_id":"7bae2516963ba01a2864c8af7d0a247e99308fce","original_commit_id":"7bae2516963ba01a2864c8af7d0a247e99308fce","user":{"login":"aanm","id":5714066,"node_id":"MDQ6VXNlcjU3MTQwNjY=","avatar_url":"https://avatars0.githubusercontent.com/u/5714066?v=4","gravatar_id":"","url":"https://api.github.com/users/aanm","html_url":"https://github.com/aanm","followers_url":"https://api.github.com/users/aanm/followers","following_url":"https://api.github.com/users/aanm/following{/other_user}","gists_url":"https://api.github.com/users/aanm/gists{/gist_id}","starred_url":"https://api.github.com/users/aanm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aanm/subscriptions","organizations_url":"https://api.github.com/users/aanm/orgs","repos_url":"https://api.github.com/users/aanm/repos","events_url":"https://api.github.com/users/aanm/events{/privacy}","received_events_url":"https://api.github.com/users/aanm/received_events","type":"User","site_admin":false},"body":"https://github.com/cilium/cilium/pull/5449#issue-212469985\r\n\r\n>In following PRs the dedicated Equalness and MissingFunc should be written for each object. Without those functions the default behavior of kubernetes watcher remains the same.\r\n>\r\n>An example of the of those dedicated function implementations can be found in the last commit of #5519\r\n","created_at":"2018-09-18T21:36:34Z","updated_at":"2018-09-18T21:36:34Z","html_url":"https://github.com/cilium/cilium/pull/5449#discussion_r218603571","pull_request_url":"https://api.github.com/repos/cilium/cilium/pulls/5449","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/cilium/cilium/pulls/comments/218603571"},"html":{"href":"https://github.com/cilium/cilium/pull/5449#discussion_r218603571"},"pull_request":{"href":"https://api.github.com/repos/cilium/cilium/pulls/5449"}},"in_reply_to_id":218600650},"pull_request":{"url":"https://api.github.com/repos/cilium/cilium/pulls/5449","id":212469985,"node_id":"MDExOlB1bGxSZXF1ZXN0MjEyNDY5OTg1","html_url":"https://github.com/cilium/cilium/pull/5449","diff_url":"https://github.com/cilium/cilium/pull/5449.diff","patch_url":"https://github.com/cilium/cilium/pull/5449.patch","issue_url":"https://api.github.com/repos/cilium/cilium/issues/5449","number":5449,"state":"open","locked":false,"title":"Create framework to stop unnecessary re syncing of k8s object updates","user":{"login":"aanm","id":5714066,"node_id":"MDQ6VXNlcjU3MTQwNjY=","avatar_url":"https://avatars0.githubusercontent.com/u/5714066?v=4","gravatar_id":"","url":"https://api.github.com/users/aanm","html_url":"https://github.com/aanm","followers_url":"https://api.github.com/users/aanm/followers","following_url":"https://api.github.com/users/aanm/following{/other_user}","gists_url":"https://api.github.com/users/aanm/gists{/gist_id}","starred_url":"https://api.github.com/users/aanm/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/aanm/subscriptions","organizations_url":"https://api.github.com/users/aanm/orgs","repos_url":"https://api.github.com/users/aanm/repos","events_url":"https://api.github.com/users/aanm/events{/privacy}","received_events_url":"https://api.github.com/users/aanm/received_events","type":"User","site_admin":false},"body":"This PR introduces a framework to prevent Cilium from receiving useless \"Adds\" events every N minutes.\r\n\r\nIt also fixes a bug where in the case Cilium would not receive a Delete event, the default resync from kubernetes library wouldn't be aware of this missing Delete event. The new framework is also aware of objects that no longer exist in kube api-server and should be deleted from Cilium.\r\n\r\nIn following PRs the dedicated Equalness and MissingFunc should be written for each object. Without those functions the default behavior of kubernetes watcher remains the same.\r\n\r\nAn example of the of those dedicated function implementations can be found in the last commit of https://github.com/cilium/cilium/pull/5519\r\n\r\nReead per commit basis\r\n\r\n<!-- Reviewable:start -->\r\n---\r\nThis change is [<img src=\"https://reviewable.io/review_button.svg\" height=\"34\" align=\"absmiddle\" alt=\"Reviewable\"/>](https://reviewable.io/reviews/cilium/cilium/5449)\r\n<!-- Reviewable:end -->\r\n","created_at":"2018-08-31T19:04:19Z","updated_at":"2018-09-18T21:36:34Z","closed_at":null,"merged_at":null,"merge_commit_sha":"1ad91c463d129bbe71ef7fd7e8de004ef494c2ec","assignee":null,"assignees":[],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":721366651,"node_id":"MDU6TGFiZWw3MjEzNjY2NTE=","url":"https://api.github.com/repos/cilium/cilium/labels/area/k8s","name":"area/k8s","color":"2c3aa0","default":false},{"id":721408505,"node_id":"MDU6TGFiZWw3MjE0MDg1MDU=","url":"https://api.github.com/repos/cilium/cilium/labels/kind/performance","name":"kind/performance","color":"20a37c","default":false},{"id":403149902,"node_id":"MDU6TGFiZWw0MDMxNDk5MDI=","url":"https://api.github.com/repos/cilium/cilium/labels/pending-review","name":"pending-review","color":"fbca04","default":false}],"milestone":{"url":"https://api.github.com/repos/cilium/cilium/milestones/17","html_url":"https://github.com/cilium/cilium/milestone/17","labels_url":"https://api.github.com/repos/cilium/cilium/milestones/17/labels","id":3568157,"node_id":"MDk6TWlsZXN0b25lMzU2ODE1Nw==","number":17,"title":"1.3-feature-exception","description":"","creator":{"login":"tgraf","id":1417913,"node_id":"MDQ6VXNlcjE0MTc5MTM=","avatar_url":"https://avatars1.githubusercontent.com/u/1417913?v=4","gravatar_id":"","url":"https://api.github.com/users/tgraf","html_url":"https://github.com/tgraf","followers_url":"https://api.github.com/users/tgraf/followers","following_url":"https://api.github.com/users/tgraf/following{/other_user}","gists_url":"https://api.github.com/users/tgraf/gists{/gist_id}","starred_url":"https://api.github.com/users/tgraf/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/tgraf/subscriptions","organizations_url":"https://api.github.com/users/tgraf/orgs","repos_url":"https://api.github.com/users/tgraf/repos","events_url":"https://api.github.com/users/tgraf/events{/privacy}","received_events_url":"https://api.github.com/users/tgraf/received_events","type":"User","site_admin":false},"open_issues":8,"closed_issues":8,"state":"open","created_at":"2018-08-14T09:52:47Z","updated_at":"2018-09-18T09:10:14Z","due_on":"2018-09-19T07:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/cilium/cilium/pulls/5449/commits","review_comments_url":"https://api.github.com/repos/cilium/cilium/pulls/5449/comments","review_comment_url":"https://api.github.com/repos/cilium/cilium/pulls/comments{/number}","comments_url":"https://api.github.com/repos/cilium/cilium/issues/5449/comments","statuses_url":"https://api.github.com/repos/cilium/cilium/statuses/7bae2516963ba01a2864c8af7d0a247e99308fce","head":{"label":"cilium:pr/fix-k8s-watcher-for-missed-events","ref":"pr/fix-k8s-watcher-for-missed-events","sha":"7bae2516963ba01a2864c8af7d0a247e99308fce","user":{"login":"cilium","id":21054566,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIxMDU0NTY2","avatar_url":"https://avatars0.githubusercontent.com/u/21054566?v=4","gravatar_id":"","url":"https://api.github.com/users/cilium","html_url":"https://github.com/cilium","followers_url":"https://api.github.com/users/cilium/followers","following_url":"https://api.github.com/users/cilium/following{/other_user}","gists_url":"https://api.github.com/users/cilium/gists{/gist_id}","starred_url":"https://api.github.com/users/cilium/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cilium/subscriptions","organizations_url":"https://api.github.com/users/cilium/orgs","repos_url":"https://api.github.com/users/cilium/repos","events_url":"https://api.github.com/users/cilium/events{/privacy}","received_events_url":"https://api.github.com/users/cilium/received_events","type":"Organization","site_admin":false},"repo":{"id":48109239,"node_id":"MDEwOlJlcG9zaXRvcnk0ODEwOTIzOQ==","name":"cilium","full_name":"cilium/cilium","private":false,"owner":{"login":"cilium","id":21054566,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIxMDU0NTY2","avatar_url":"https://avatars0.githubusercontent.com/u/21054566?v=4","gravatar_id":"","url":"https://api.github.com/users/cilium","html_url":"https://github.com/cilium","followers_url":"https://api.github.com/users/cilium/followers","following_url":"https://api.github.com/users/cilium/following{/other_user}","gists_url":"https://api.github.com/users/cilium/gists{/gist_id}","starred_url":"https://api.github.com/users/cilium/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cilium/subscriptions","organizations_url":"https://api.github.com/users/cilium/orgs","repos_url":"https://api.github.com/users/cilium/repos","events_url":"https://api.github.com/users/cilium/events{/privacy}","received_events_url":"https://api.github.com/users/cilium/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/cilium/cilium","description":"HTTP, gRPC, and Kafka Aware Security and Networking for Containers with BPF and XDP","fork":false,"url":"https://api.github.com/repos/cilium/cilium","forks_url":"https://api.github.com/repos/cilium/cilium/forks","keys_url":"https://api.github.com/repos/cilium/cilium/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cilium/cilium/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cilium/cilium/teams","hooks_url":"https://api.github.com/repos/cilium/cilium/hooks","issue_events_url":"https://api.github.com/repos/cilium/cilium/issues/events{/number}","events_url":"https://api.github.com/repos/cilium/cilium/events","assignees_url":"https://api.github.com/repos/cilium/cilium/assignees{/user}","branches_url":"https://api.github.com/repos/cilium/cilium/branches{/branch}","tags_url":"https://api.github.com/repos/cilium/cilium/tags","blobs_url":"https://api.github.com/repos/cilium/cilium/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cilium/cilium/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cilium/cilium/git/refs{/sha}","trees_url":"https://api.github.com/repos/cilium/cilium/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cilium/cilium/statuses/{sha}","languages_url":"https://api.github.com/repos/cilium/cilium/languages","stargazers_url":"https://api.github.com/repos/cilium/cilium/stargazers","contributors_url":"https://api.github.com/repos/cilium/cilium/contributors","subscribers_url":"https://api.github.com/repos/cilium/cilium/subscribers","subscription_url":"https://api.github.com/repos/cilium/cilium/subscription","commits_url":"https://api.github.com/repos/cilium/cilium/commits{/sha}","git_commits_url":"https://api.github.com/repos/cilium/cilium/git/commits{/sha}","comments_url":"https://api.github.com/repos/cilium/cilium/comments{/number}","issue_comment_url":"https://api.github.com/repos/cilium/cilium/issues/comments{/number}","contents_url":"https://api.github.com/repos/cilium/cilium/contents/{+path}","compare_url":"https://api.github.com/repos/cilium/cilium/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cilium/cilium/merges","archive_url":"https://api.github.com/repos/cilium/cilium/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cilium/cilium/downloads","issues_url":"https://api.github.com/repos/cilium/cilium/issues{/number}","pulls_url":"https://api.github.com/repos/cilium/cilium/pulls{/number}","milestones_url":"https://api.github.com/repos/cilium/cilium/milestones{/number}","notifications_url":"https://api.github.com/repos/cilium/cilium/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cilium/cilium/labels{/name}","releases_url":"https://api.github.com/repos/cilium/cilium/releases{/id}","deployments_url":"https://api.github.com/repos/cilium/cilium/deployments","created_at":"2015-12-16T12:33:31Z","updated_at":"2018-09-18T18:20:58Z","pushed_at":"2018-09-18T21:32:08Z","git_url":"git://github.com/cilium/cilium.git","ssh_url":"git@github.com:cilium/cilium.git","clone_url":"https://github.com/cilium/cilium.git","svn_url":"https://github.com/cilium/cilium","homepage":"","size":61911,"stargazers_count":2829,"watchers_count":2829,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":252,"mirror_url":null,"archived":false,"open_issues_count":544,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":252,"open_issues":544,"watchers":2829,"default_branch":"master"}},"base":{"label":"cilium:master","ref":"master","sha":"269537fe780f04310e2b73c5e85fdd6231a716d9","user":{"login":"cilium","id":21054566,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIxMDU0NTY2","avatar_url":"https://avatars0.githubusercontent.com/u/21054566?v=4","gravatar_id":"","url":"https://api.github.com/users/cilium","html_url":"https://github.com/cilium","followers_url":"https://api.github.com/users/cilium/followers","following_url":"https://api.github.com/users/cilium/following{/other_user}","gists_url":"https://api.github.com/users/cilium/gists{/gist_id}","starred_url":"https://api.github.com/users/cilium/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cilium/subscriptions","organizations_url":"https://api.github.com/users/cilium/orgs","repos_url":"https://api.github.com/users/cilium/repos","events_url":"https://api.github.com/users/cilium/events{/privacy}","received_events_url":"https://api.github.com/users/cilium/received_events","type":"Organization","site_admin":false},"repo":{"id":48109239,"node_id":"MDEwOlJlcG9zaXRvcnk0ODEwOTIzOQ==","name":"cilium","full_name":"cilium/cilium","private":false,"owner":{"login":"cilium","id":21054566,"node_id":"MDEyOk9yZ2FuaXphdGlvbjIxMDU0NTY2","avatar_url":"https://avatars0.githubusercontent.com/u/21054566?v=4","gravatar_id":"","url":"https://api.github.com/users/cilium","html_url":"https://github.com/cilium","followers_url":"https://api.github.com/users/cilium/followers","following_url":"https://api.github.com/users/cilium/following{/other_user}","gists_url":"https://api.github.com/users/cilium/gists{/gist_id}","starred_url":"https://api.github.com/users/cilium/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cilium/subscriptions","organizations_url":"https://api.github.com/users/cilium/orgs","repos_url":"https://api.github.com/users/cilium/repos","events_url":"https://api.github.com/users/cilium/events{/privacy}","received_events_url":"https://api.github.com/users/cilium/received_events","type":"Organization","site_admin":false},"html_url":"https://github.com/cilium/cilium","description":"HTTP, gRPC, and Kafka Aware Security and Networking for Containers with BPF and XDP","fork":false,"url":"https://api.github.com/repos/cilium/cilium","forks_url":"https://api.github.com/repos/cilium/cilium/forks","keys_url":"https://api.github.com/repos/cilium/cilium/keys{/key_id}","collaborators_url":"https://api.github.com/repos/cilium/cilium/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/cilium/cilium/teams","hooks_url":"https://api.github.com/repos/cilium/cilium/hooks","issue_events_url":"https://api.github.com/repos/cilium/cilium/issues/events{/number}","events_url":"https://api.github.com/repos/cilium/cilium/events","assignees_url":"https://api.github.com/repos/cilium/cilium/assignees{/user}","branches_url":"https://api.github.com/repos/cilium/cilium/branches{/branch}","tags_url":"https://api.github.com/repos/cilium/cilium/tags","blobs_url":"https://api.github.com/repos/cilium/cilium/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/cilium/cilium/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/cilium/cilium/git/refs{/sha}","trees_url":"https://api.github.com/repos/cilium/cilium/git/trees{/sha}","statuses_url":"https://api.github.com/repos/cilium/cilium/statuses/{sha}","languages_url":"https://api.github.com/repos/cilium/cilium/languages","stargazers_url":"https://api.github.com/repos/cilium/cilium/stargazers","contributors_url":"https://api.github.com/repos/cilium/cilium/contributors","subscribers_url":"https://api.github.com/repos/cilium/cilium/subscribers","subscription_url":"https://api.github.com/repos/cilium/cilium/subscription","commits_url":"https://api.github.com/repos/cilium/cilium/commits{/sha}","git_commits_url":"https://api.github.com/repos/cilium/cilium/git/commits{/sha}","comments_url":"https://api.github.com/repos/cilium/cilium/comments{/number}","issue_comment_url":"https://api.github.com/repos/cilium/cilium/issues/comments{/number}","contents_url":"https://api.github.com/repos/cilium/cilium/contents/{+path}","compare_url":"https://api.github.com/repos/cilium/cilium/compare/{base}...{head}","merges_url":"https://api.github.com/repos/cilium/cilium/merges","archive_url":"https://api.github.com/repos/cilium/cilium/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/cilium/cilium/downloads","issues_url":"https://api.github.com/repos/cilium/cilium/issues{/number}","pulls_url":"https://api.github.com/repos/cilium/cilium/pulls{/number}","milestones_url":"https://api.github.com/repos/cilium/cilium/milestones{/number}","notifications_url":"https://api.github.com/repos/cilium/cilium/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/cilium/cilium/labels{/name}","releases_url":"https://api.github.com/repos/cilium/cilium/releases{/id}","deployments_url":"https://api.github.com/repos/cilium/cilium/deployments","created_at":"2015-12-16T12:33:31Z","updated_at":"2018-09-18T18:20:58Z","pushed_at":"2018-09-18T21:32:08Z","git_url":"git://github.com/cilium/cilium.git","ssh_url":"git@github.com:cilium/cilium.git","clone_url":"https://github.com/cilium/cilium.git","svn_url":"https://github.com/cilium/cilium","homepage":"","size":61911,"stargazers_count":2829,"watchers_count":2829,"language":"Go","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":252,"mirror_url":null,"archived":false,"open_issues_count":544,"license":{"key":"apache-2.0","name":"Apache License 2.0","spdx_id":"Apache-2.0","url":"https://api.github.com/licenses/apache-2.0","node_id":"MDc6TGljZW5zZTI="},"forks":252,"open_issues":544,"watchers":2829,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/cilium/cilium/pulls/5449"},"html":{"href":"https://github.com/cilium/cilium/pull/5449"},"issue":{"href":"https://api.github.com/repos/cilium/cilium/issues/5449"},"comments":{"href":"https://api.github.com/repos/cilium/cilium/issues/5449/comments"},"review_comments":{"href":"https://api.github.com/repos/cilium/cilium/pulls/5449/comments"},"review_comment":{"href":"https://api.github.com/repos/cilium/cilium/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/cilium/cilium/pulls/5449/commits"},"statuses":{"href":"https://api.github.com/repos/cilium/cilium/statuses/7bae2516963ba01a2864c8af7d0a247e99308fce"}},"author_association":"MEMBER"}}
{"actor":{"display_login":"aanm"}}