var cleanAssumedPeriod … // New returns a Cache implementation. // It automatically starts a go routine that manages expiration of assumed pods. // "ttl" is how long the assumed pod will get expired. // "ctx" is the context that would close the background goroutine. func New(ctx context.Context, ttl time.Duration) Cache { … } type nodeInfoListItem … type cacheImpl … type podState … func newCache(ctx context.Context, ttl, period time.Duration) *cacheImpl { … } // newNodeInfoListItem initializes a new nodeInfoListItem. func newNodeInfoListItem(ni *framework.NodeInfo) *nodeInfoListItem { … } // moveNodeInfoToHead moves a NodeInfo to the head of "cache.nodes" doubly // linked list. The head is the most recently updated NodeInfo. // We assume cache lock is already acquired. func (cache *cacheImpl) moveNodeInfoToHead(logger klog.Logger, name string) { … } // removeNodeInfoFromList removes a NodeInfo from the "cache.nodes" doubly // linked list. // We assume cache lock is already acquired. func (cache *cacheImpl) removeNodeInfoFromList(logger klog.Logger, name string) { … } // Dump produces a dump of the current scheduler cache. This is used for // debugging purposes only and shouldn't be confused with UpdateSnapshot // function. // This method is expensive, and should be only used in non-critical path. func (cache *cacheImpl) Dump() *Dump { … } // UpdateSnapshot takes a snapshot of cached NodeInfo map. This is called at // beginning of every scheduling cycle. // The snapshot only includes Nodes that are not deleted at the time this function is called. // nodeInfo.Node() is guaranteed to be not nil for all the nodes in the snapshot. // This function tracks generation number of NodeInfo and updates only the // entries of an existing snapshot that have changed after the snapshot was taken. func (cache *cacheImpl) UpdateSnapshot(logger klog.Logger, nodeSnapshot *Snapshot) error { … } func (cache *cacheImpl) updateNodeInfoSnapshotList(logger klog.Logger, snapshot *Snapshot, updateAll bool) { … } // If certain nodes were deleted after the last snapshot was taken, we should remove them from the snapshot. func (cache *cacheImpl) removeDeletedNodesFromSnapshot(snapshot *Snapshot) { … } // NodeCount returns the number of nodes in the cache. // DO NOT use outside of tests. func (cache *cacheImpl) NodeCount() int { … } // PodCount returns the number of pods in the cache (including those from deleted nodes). // DO NOT use outside of tests. func (cache *cacheImpl) PodCount() (int, error) { … } func (cache *cacheImpl) AssumePod(logger klog.Logger, pod *v1.Pod) error { … } func (cache *cacheImpl) FinishBinding(logger klog.Logger, pod *v1.Pod) error { … } // finishBinding exists to make tests deterministic by injecting now as an argument func (cache *cacheImpl) finishBinding(logger klog.Logger, pod *v1.Pod, now time.Time) error { … } func (cache *cacheImpl) ForgetPod(logger klog.Logger, pod *v1.Pod) error { … } // Assumes that lock is already acquired. func (cache *cacheImpl) addPod(logger klog.Logger, pod *v1.Pod, assumePod bool) error { … } // Assumes that lock is already acquired. func (cache *cacheImpl) updatePod(logger klog.Logger, oldPod, newPod *v1.Pod) error { … } // Assumes that lock is already acquired. // Removes a pod from the cached node info. If the node information was already // removed and there are no more pods left in the node, cleans up the node from // the cache. func (cache *cacheImpl) removePod(logger klog.Logger, pod *v1.Pod) error { … } func (cache *cacheImpl) AddPod(logger klog.Logger, pod *v1.Pod) error { … } func (cache *cacheImpl) UpdatePod(logger klog.Logger, oldPod, newPod *v1.Pod) error { … } func (cache *cacheImpl) RemovePod(logger klog.Logger, pod *v1.Pod) error { … } func (cache *cacheImpl) IsAssumedPod(pod *v1.Pod) (bool, error) { … } // GetPod might return a pod for which its node has already been deleted from // the main cache. This is useful to properly process pod update events. func (cache *cacheImpl) GetPod(pod *v1.Pod) (*v1.Pod, error) { … } func (cache *cacheImpl) AddNode(logger klog.Logger, node *v1.Node) *framework.NodeInfo { … } func (cache *cacheImpl) UpdateNode(logger klog.Logger, oldNode, newNode *v1.Node) *framework.NodeInfo { … } // RemoveNode removes a node from the cache's tree. // The node might still have pods because their deletion events didn't arrive // yet. Those pods are considered removed from the cache, being the node tree // the source of truth. // However, we keep a ghost node with the list of pods until all pod deletion // events have arrived. A ghost node is skipped from snapshots. func (cache *cacheImpl) RemoveNode(logger klog.Logger, node *v1.Node) error { … } // addNodeImageStates adds states of the images on given node to the given nodeInfo and update the imageStates in // scheduler cache. This function assumes the lock to scheduler cache has been acquired. func (cache *cacheImpl) addNodeImageStates(node *v1.Node, nodeInfo *framework.NodeInfo) { … } // removeNodeImageStates removes the given node record from image entries having the node // in imageStates cache. After the removal, if any image becomes free, i.e., the image // is no longer available on any node, the image entry will be removed from imageStates. func (cache *cacheImpl) removeNodeImageStates(node *v1.Node) { … } func (cache *cacheImpl) run(logger klog.Logger) { … } // cleanupAssumedPods exists for making test deterministic by taking time as input argument. // It also reports metrics on the cache size for nodes, pods, and assumed pods. func (cache *cacheImpl) cleanupAssumedPods(logger klog.Logger, now time.Time) { … } // updateMetrics updates cache size metric values for pods, assumed pods, and nodes func (cache *cacheImpl) updateMetrics() { … }