将Kubernetes' client-go delta_fifo类型会导致错过删除通知吗?

时间:2018-01-23 00:16:18

标签: kubernetes

我正在努力从delta_fifo.go项目深入理解client-go。我正在研究可能会丢失资源删除报告的情况。

我98%偏向于支持我自己未能正确阅读代码,但在我看来Delete() will skip a deletion if it doesn't find an appropriate "event queue" (my term for Deltas)Pop() will remove an event queue that it is processing,即使是最后一个事件在队列中是添加,更新或同步。

假设您从一组空的事件队列(空queue和空items)开始,然后您获得以下内容并且只有以下内容:

skip broadcasting the deletion以来,

赢了Delete() relevant event queue no longer exists?因此,由于queueActionLocked()在这种情况下不会被调用,所以不会发现任何下游ResourceEventListener将永远不会收到此删除的通知吗?

相关稳定的代码链接:

任何帮助非常感谢;谢谢!

1 个答案:

答案 0 :(得分:0)

只有在knownObjects为零时才会调用您在Delete()中突出显示的路径。该选项的文档表明它用于确定队列消费者知道哪些对象,如果为nil,则表示消费者不关心检测所有删除

https://github.com/kubernetes/kubernetes/blob/v1.9.0/staging/src/k8s.io/client-go/tools/cache/delta_fifo.go#L39-L42