type activeQueuer … type unlockedActiveQueuer … type unlockedActiveQueueReader … type activeQueue … func newActiveQueue(queue *heap.Heap[*framework.QueuedPodInfo], isSchedulingQueueHintEnabled bool, metricRecorder metrics.MetricAsyncRecorder) *activeQueue { … } // underLock runs the fn function under the lock.Lock. // fn can run unlockedActiveQueuer methods but should NOT run any other activeQueue method, // as it would end up in deadlock. func (aq *activeQueue) underLock(fn func(unlockedActiveQ unlockedActiveQueuer)) { … } // underLock runs the fn function under the lock.RLock. // fn can run unlockedActiveQueueReader methods but should NOT run any other activeQueue method, // as it would end up in deadlock. func (aq *activeQueue) underRLock(fn func(unlockedActiveQ unlockedActiveQueueReader)) { … } // update updates the pod in activeQ if oldPodInfo is already in the queue. // It returns new pod info if updated, nil otherwise. func (aq *activeQueue) update(newPod *v1.Pod, oldPodInfo *framework.QueuedPodInfo) *framework.QueuedPodInfo { … } // delete deletes the pod info from activeQ. func (aq *activeQueue) delete(pInfo *framework.QueuedPodInfo) error { … } // pop removes the head of the queue and returns it. // It blocks if the queue is empty and waits until a new item is added to the queue. // It increments scheduling cycle when a pod is popped. func (aq *activeQueue) pop(logger klog.Logger) (*framework.QueuedPodInfo, error) { … } func (aq *activeQueue) unlockedPop(logger klog.Logger) (*framework.QueuedPodInfo, error) { … } // list returns all pods that are in the queue. func (aq *activeQueue) list() []*v1.Pod { … } // len returns length of the queue. func (aq *activeQueue) len() int { … } // has inform if pInfo exists in the queue. func (aq *activeQueue) has(pInfo *framework.QueuedPodInfo) bool { … } // listInFlightEvents returns all inFlightEvents. func (aq *activeQueue) listInFlightEvents() []interface{ … } // listInFlightPods returns all inFlightPods. func (aq *activeQueue) listInFlightPods() []*v1.Pod { … } // clusterEventsForPod gets all cluster events that have happened during pod for pInfo is being scheduled. func (aq *activeQueue) clusterEventsForPod(logger klog.Logger, pInfo *framework.QueuedPodInfo) ([]*clusterEvent, error) { … } // addEventsIfPodInFlight adds clusterEvent to inFlightEvents if the newPod is in inFlightPods. // It returns true if pushed the event to the inFlightEvents. func (aq *activeQueue) addEventsIfPodInFlight(oldPod, newPod *v1.Pod, events []framework.ClusterEvent) bool { … } // addEventIfAnyInFlight adds clusterEvent to inFlightEvents if any pod is in inFlightPods. // It returns true if pushed the event to the inFlightEvents. func (aq *activeQueue) addEventIfAnyInFlight(oldObj, newObj interface{ … } func (aq *activeQueue) schedulingCycle() int64 { … } // done must be called for pod returned by Pop. This allows the queue to // keep track of which pods are currently being processed. func (aq *activeQueue) done(pod types.UID) { … } // close closes the activeQueue. func (aq *activeQueue) close() { … } // broadcast notifies the pop() operation that new pod(s) was added to the activeQueue. func (aq *activeQueue) broadcast() { … }