Skip to content

Commit 4b6312e

Browse files
author
Zhang Jun
committed
add TOC
1 parent 39c5f70 commit 4b6312e

File tree

2 files changed

+46
-6
lines changed

2 files changed

+46
-6
lines changed

client-go/1.store-indexer-lister-cache.md

+13
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,19 @@
11

22
# Kubernetes 缓存
33

4+
<!-- TOC -->
5+
6+
- [Kubernetes 缓存](#kubernetes-缓存)
7+
- [对象缓存 Store](#对象缓存-store)
8+
- [对象索引 Indexer](#对象索引-indexer)
9+
- [为对象生成索引值列表的 IndexFunc 和命名的 IndexFunc 集合 Indexers](#为对象生成索引值列表的-indexfunc-和命名的-indexfunc-集合-indexers)
10+
- [索引缓存 Index 和 Indices](#索引缓存-index-和-indices)
11+
- [GenericLister 和 GenericNamespaceLister 接口](#genericlister-和-genericnamespacelister-接口)
12+
- [可并发访问的索引缓存 ThreadSafeStore](#可并发访问的索引缓存-threadsafestore)
13+
- [KeyFunc 和实现 Store/Indexer 接口的 cache](#keyfunc-和实现-storeindexer-接口的-cache)
14+
15+
<!-- /TOC -->
16+
417
`Store` 是 K-V 类型的对象缓存。
518

619
`Indexer``Store` 的基础上添加了对象索引功能,从而实现快速查找对象。对象的索引由 `IndexFunc` 类型的函数生成。

client-go/2.queue-fifo-delta_fifo.md

+33-6
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,32 @@
11
# Kubernetes 事件队列
22

3+
<!-- TOC -->
4+
5+
- [Kubernetes 事件队列](#kubernetes-事件队列)
6+
- [Queue 是添加了 Pop 方法的 Store](#queue-是添加了-pop-方法的-store)
7+
- [FIFO 实现了 Queue/Store 接口](#fifo-实现了-queuestore-接口)
8+
- [`Add()` 方法](#add-方法)
9+
- [`Update()` 方法](#update-方法)
10+
- [`Delete()` 方法](#delete-方法)
11+
- [`Pop()` 方法](#pop-方法)
12+
- [`Replace()` 方法](#replace-方法)
13+
- [HasSyncd() 方法](#hassyncd-方法)
14+
- [`Resync()` 方法](#resync-方法)
15+
- [DeltaFIFO 是可以记录对象操作事件的 FIFO](#deltafifo-是可以记录对象操作事件的-fifo)
16+
- [DeltaFIFO 的生产者和消费者](#deltafifo-的生产者和消费者)
17+
- [记录对象事件的 Delta、Deltas 和 DeletedFinalStateUnknown 类型](#记录对象事件的-deltadeltas-和-deletedfinalstateunknown-类型)
18+
- [Add() 和 Update() 方法](#add-和-update-方法)
19+
- [queueActionLocked() 方法](#queueactionlocked-方法)
20+
- [Delete() 方法](#delete-方法)
21+
- [Get/GetByKey/List/ListKeys() 方法](#getgetbykeylistlistkeys-方法)
22+
- [Replace() 方法](#replace-方法)
23+
- [Resync() 方法](#resync-方法)
24+
- [Pop() 方法](#pop-方法)
25+
- [HasSyncd() 方法](#hassyncd-方法-1)
26+
- [DeltaFIFO 和 knownObjects 对象缓存的同步](#deltafifo-和-knownobjects-对象缓存的同步)
27+
28+
<!-- /TOC -->
29+
330
Queue 接口是在 `Store` 的基础上,添加了 `Pop()` 方法。
431

532
FIFO 和 DeltaFIFO 类型(非接口)实现了 `Queue` 接口。
@@ -320,7 +347,7 @@ func NewDeltaFIFO(keyFunc KeyFunc, knownObjects KeyListerGetter) *DeltaFIFO {
320347
2. 根据配置的 Resync 时间,**周期调用** DeltaFIFO 的 `Resync()` 方法(见后文),将 knownObjects 中的对象更新到 DeltaFIFO 中;
321348
3. Watch etcd,这是阻塞式的,根据事件的类型分别调用 DeltaFIFO 的 Add/Update/Delete 方法,将对象更新到 DeltaFIFO;
322349

323-
Watch etcd 会**周期性的**超时,这时 `ListAndWatch()` 出错返回,Reflector 会等待一段时间再执行它,从而实现**周期的将 `etcd` 中的特定类型的全部对象**同步到 `DeltaFIFO`
350+
Watch etcd 会**周期性的**超时,这时 `ListAndWatch()` 出错返回,Reflector 会等待一段时间再执行它,从而实现**周期的将 `etcd` 中特定类型的全部对象**同步到 `DeltaFIFO`
324351

325352
**`controller``DeltaFIFO` 的消费者,它用 DeltaFIFO 弹出的对象更新 `knownObjects` 缓存,然后调用注册的 OnUpdate/OnAdd/OnDelete 回调函数**。详情参考 [Reflector](3.reflector.md)[controller 和 Informer](4.controller-informer.md) 文档。
326353

@@ -419,7 +446,7 @@ func (f *DeltaFIFO) queueActionLocked(actionType DeltaType, obj interface{}) err
419446
1. 遍历 list 中的对象,为每个对象生成 `Sync` 事件;
420447
2. 遍历 f.knownObjects.ListKeys() 中的对象,对于不在传入的 list 中的对象,生成 `Deleted` 事件,对象类型为 `DeletedFinalStateUnknown`(非 Delta 类型);
421448

422-
Reflector 的 `ListAndWatch()` 因 Watch 超时而周期调用 Replace() 方法, etcd 中的特定类型的所有对象同步到 DeltaFIFO 中。`controller` 用 DeltaFIFO 弹出的对象更新 `knownObjects` 缓存,详情参考 [Reflector](3.reflector.md)[controller 和 Informer](4.controller-informer.md) 文档。
449+
Reflector 的 `ListAndWatch()` 因 Watch 超时而周期调用 Replace() 方法,从而周期地将 etcd 中特定类型的所有对象同步到 DeltaFIFO 中。`controller` 用 DeltaFIFO 弹出的对象更新 `knownObjects` 缓存,详情参考 [Reflector](3.reflector.md)[controller 和 Informer](4.controller-informer.md) 文档。
423450

424451
### Resync() 方法
425452

@@ -432,17 +459,17 @@ Reflector 的 `ListAndWatch()` 因 Watch 超时而周期调用 Replace() 方法
432459

433460
Reflector 的 `ListAndWatch()` 方法周期执行 DeltaFIFO 的 Resync() 方法,目的就是**为对象产生新的 Sync 事件**,从而有机会再次调用注册的 `OnUpdate()` 处理函数。因此 Resync 时,如果对象已经在 f.items,则后续因有机会被弹出,所以不需要为它生成 Sync 事件。
434461

435-
** 只有 Replace() 和 Rsync() 方法会产生 Sync 事件**
462+
**只有 Replace() 和 Rsync() 方法才产生 Sync 事件**
436463

437464
### Pop() 方法
438465

439466
Pop(process PopProcessFunc)
440467

441468
1. 如果弹出队列 f.queue 为空,则阻塞等待;
442-
2. 每次弹出队列头部的对象对应的事件列表(Deltas 类型),然后将该对象从事件列表缓存(f.items)中删除;
443-
3. 调用配置的回调函数 PopProcessFunc传入事件列表 Deltas;
469+
2. 每次弹出队列头部对象的事件列表(Deltas 类型),然后将该对象的事件列表从缓存(f.items)中删除;
470+
3. 调用配置的回调函数 PopProcessFunc传入事件列表 Deltas
444471

445-
如果函数 PopProcessFunc 执行失败,应该再调用 `AddIfNotPresent()` 方法将 Deltas 重新加回 DeltaFIFO,这样后续可以再次被弹出处理,防止丢事件。(controler 已实现该逻辑)
472+
如果函数 PopProcessFunc 执行失败,应该调用 `AddIfNotPresent()` 方法将 Deltas 重新加回 DeltaFIFO,这样后续可以再次被弹出处理,防止丢事件。(controler 已实现该逻辑)
446473

447474
### HasSyncd() 方法
448475

0 commit comments

Comments
 (0)