Является ли ThreadSafeStore индексатора SharedIndexInformer пустым? - PullRequest
0 голосов
/ 31 августа 2018

Я осторожно пробираюсь через код Go в пакете tools/cache в сотый раз.

При чтении кода при создании нового SharedIndexInformer происходит следующее:

  1. SharedIndexInformer создает новый Indexer.
  2. Созданный таким образом Indexer создает новый ThreadSafeStore для хранения представлений ресурсов Kubernetes.
  3. SharedIndexInformer.Run() создает новый DeltaFIFO с новым Indexer в качестве второго параметра.
  4. Indexer, поставляемый для нового DeltaFIFO, поэтому функционирует как KeyLister и его KeyGetter. (Это используется для отслеживания «предыдущего состояния» для удалений; т. Е. Если в нем есть объект, но последняя синхронизация с Kubernetes не содержит этот объект, то мы знаем, что он был удален из кластера.)
  5. Функция HandleDeltas - это та, которую базовый controller будет вызывать при добавлении, обновлении или удалении ресурсов Kubernetes.
  6. Функция HandleDeltas вызовет методы Add, Update и Delete для Indexer (и, расширение, лежащее в его основе ThreadSafeStore).

Допустим, я пишу новый контроллер, используя SharedIndexInformer. Далее скажем, что он наблюдает за Pod с. Давайте, наконец, скажем, что в кластере 10 Pod с.

Означает ли это, что после вызова SharedIndexInformer метода Run и некоторого необходимого промежутка времени пройдет 10 JSON-представлений Pod s в ThreadSafeStore, и, далее, , что никто не будет удален из этого хранилища, пока фактическое удаление одного из соответствующих Pod s не произойдет в Kubernetes ?

1 Ответ

0 голосов
/ 02 сентября 2018

Правильно, кроме части JSON.

Хранилище содержит собственные структуры объектов, десериализованные из сообщений protobuf. * ​​1003 *

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...