我正在努力从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
)开始,然后您获得以下内容并且只有以下内容:
Add()
来电,eventually sets up or appends to an event queue,Pop()
来电pops it off and chews it up,然后Delete()
call。赢了Delete()
relevant event queue no longer exists?因此,由于queueActionLocked()
在这种情况下不会被调用,所以不会发现任何下游ResourceEventListener
将永远不会收到此删除的通知吗?
相关稳定的代码链接:
Delete
:https://github.com/kubernetes/kubernetes/blob/v1.9.0/staging/src/k8s.io/client-go/tools/cache/delta_fifo.go#L201-L205 Pop
:https://github.com/kubernetes/kubernetes/blob/v1.9.0/staging/src/k8s.io/client-go/tools/cache/delta_fifo.go#L440-L450 任何帮助非常感谢;谢谢!
答案 0 :(得分:0)
只有在knownObjects
为零时才会调用您在Delete()中突出显示的路径。该选项的文档表明它用于确定队列消费者知道哪些对象,如果为nil,则表示消费者不关心检测所有删除