Merge pull request #23357 from Luap99/pod-stats-err

podman pod stats: fix race when ctr process exits
This commit is contained in:
openshift-merge-bot[bot]
2024-07-22 10:45:02 +00:00
committed by GitHub
2 changed files with 9 additions and 9 deletions

View File

@ -459,7 +459,7 @@ type PodContainerStats struct {
}
// GetPodStats returns the stats for each of its containers
func (p *Pod) GetPodStats(previousContainerStats map[string]*define.ContainerStats) (map[string]*define.ContainerStats, error) {
func (p *Pod) GetPodStats() (map[string]*define.ContainerStats, error) {
p.lock.Lock()
defer p.lock.Unlock()
@ -472,15 +472,15 @@ func (p *Pod) GetPodStats(previousContainerStats map[string]*define.ContainerSta
}
newContainerStats := make(map[string]*define.ContainerStats)
for _, c := range containers {
newStats, err := c.GetContainerStats(previousContainerStats[c.ID()])
// If the container wasn't running, don't include it
// but also suppress the error
if err != nil && !errors.Is(err, define.ErrCtrStateInvalid) {
newStats, err := c.GetContainerStats(nil)
if err != nil {
// If the container wasn't running ignore it
if errors.Is(err, define.ErrCtrStateInvalid) || errors.Is(err, define.ErrCtrStopped) {
continue
}
return nil, err
}
if err == nil {
newContainerStats[c.ID()] = newStats
}
newContainerStats[c.ID()] = newStats
}
return newContainerStats, nil
}

View File

@ -38,7 +38,7 @@ func (ic *ContainerEngine) PodStats(ctx context.Context, namesOrIds []string, op
func (ic *ContainerEngine) podsToStatsReport(pods []*libpod.Pod) ([]*entities.PodStatsReport, error) {
reports := []*entities.PodStatsReport{}
for i := range pods { // Access by index to prevent potential loop-variable leaks.
podStats, err := pods[i].GetPodStats(nil)
podStats, err := pods[i].GetPodStats()
if err != nil {
// pod was removed, skip it
if errors.Is(err, define.ErrNoSuchPod) {