跳到主要内容

40.improveWatch

PR #805

Improve watch

PR #837

It took a few weeks, but I got my fuzzing thing split out into its own project. Improvements welcome at: https://github.com/google/gofuzz

I increased the number of fuzz iterations because I made the number of elements created always 1, so it doesn't exponentially blow up into huge objects.

PR #722

Normalize apiserver error handling of standard errors

NewAlreadyExistsErr(kind, name string) - 这个函数创建一个新的apiServerError,表明请求的资源已经存在。其中,kind和name定义了资源的类型和名称,HTTP状态代码设为http.StatusConflict,表明请求的资源与服务器上的当前状态冲突。

NewConflictErr(kind, name string, err error) - 这个函数创建一个新的apiServerError,表明请求的更新与服务器的当前状态冲突。资源的类型和名称由kind和name定义,err提供了有关冲突的更多细节。

IsNotFound(err error) - 这个函数检查一个错误是否由NewNotFoundErr创建。如果是,则返回true,否则返回false。

IsAlreadyExists(err error) - 这个函数检查一个错误是否表明一个资源已经存在。如果是,则返回true,否则返回false。

IsConflict(err error) - 这个函数检查一个错误是否表明提供的更新冲突。如果是,则返回true,否则返回false。

reasonForError(err error) - 这个函数从apiServerError中提取原因。如果错误不是apiServerError,则返回未知的原因。

errToAPIStatus(err error) - 这个函数将一个错误转换为一个api.Status对象。如果错误是apiServerError,则返回其状态,如果错误是其他类型,则返回一个新的api.Status对象,其代码为内部服务器错误(HTTP 500),原因未知。

PR #855

Apply resource versioning to list extractions from etcd

如果ResourceVersioner字段非空,SetResourceVersion方法会被调用,为解析出的Go对象设置资源版本。node.ModifiedIndex是etcd数据项的修改序号,这里用作资源版本。

最后,解析出的对象会被添加到slicePtr指向的切片中。如果在解析过程中出现错误,ExtractList方法会立即返回错误。

这个函数的目的是从etcd中获取数据,并解析为Go对象的列表,同时设置每个对象的资源版本,防止在更新过程中总是被解释为新对象

PR #852

提供一个转换函数,用来在返回前对从etcd获取的数据进行处理。

TransformFunc 是一个类型别名,代表一个转换函数的类型。这样的函数接收一个interface{}类型的参数,并返回一个interface{}类型的结果和一个error。

PR #592

Proposal for scheduler API

PR #557

Prepare for external scheduler

AssignPod(podID string, machine string) error:该函数接受一个pod ID和一台机器的名称作为参数,它将这个Pod分配给这台机器。这个函数首先创建一个与Pod对应的键,然后通过一个原子操作更新Etcd中的Pod对象,将Pod的DesiredState.Host设置为输入的机器名。如果这个操作成功,函数会返回一个没有错误的Pod对象。

registry.helper.AtomicUpdate:这是一个原子操作函数,它接收一个键,一个初始对象和一个更新函数。更新函数接受一个对象,并返回一个新的对象以及一个可能存在的错误。AtomicUpdate确保了这个操作是原子性的,即这个操作要么全部执行,要么全部不执行,不会出现部分执行的情况。

registry.manifestFactory.MakeManifest:这个函数根据给定的机器和最终的Pod对象生成一个manifest。

在成功创建manifest后,函数会再次进行一个原子更新操作,将新的manifest添加到机器的ContainerManifestList中。

如果在将manifest添加到ContainerManifestList的过程中出现错误,函数会尝试删除刚刚创建的Pod。这是为了确保系统不会在错误的状态下持续运行。