Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Conversation

@bitoku
Copy link
Contributor

@bitoku bitoku commented Nov 18, 2025

What type of PR is this?

/kind feature

What this PR does / why we need it:

building on #9565

Which issue(s) this PR fixes:

Special notes for your reviewer:

Apparently only uint64 is supported in CRI stats.
In cAdvisor, it emits in float64 (converted to microseconds to seconds).
Do we have a way to do in the same way as cAdvisor? In this implementation it converts it in seconds, but the value below the decimal point is ignored.

ref: https://github.com/google/cadvisor/pull/3649/files#diff-583dd1a38478c42e7ee4f90a9c3dfb5fd8a07b82f57d4ed24fa6a98a5951a4e7R1754

Does this PR introduce a user-facing change?

Added PSI metrics for containers

Summary by CodeRabbit

  • New Features

    • Adds six container pressure metrics (CPU/Memory/IO stalled & waiting) and a "pressure" config option to enable them.
    • Resource stats now include PSI-based pressure telemetry so pressure metrics can be reported on supported platforms.
  • Platform

    • Pressure metrics implemented on Linux; non-Linux platforms return no pressure metrics.
  • Tests

    • New automated test validating presence of the six pressure metrics.
  • Documentation

    • Configuration docs updated to list "pressure" as a valid metric.

✏️ Tip: You can customize this high-level summary in your review settings.

@bitoku bitoku requested a review from mrunalp as a code owner November 18, 2025 15:30
@openshift-ci openshift-ci bot added release-note Denotes a PR that will be considered when it comes time to generate release notes. kind/feature Categorizes issue or PR as related to a new feature. dco-signoff: yes Indicates the PR's author has DCO signed all their commits. labels Nov 18, 2025
@openshift-ci openshift-ci bot requested review from hasan4791 and klihub November 18, 2025 15:30
@codecov
Copy link

codecov bot commented Nov 18, 2025

Codecov Report

❌ Patch coverage is 96.20253% with 3 lines in your changes missing coverage. Please review.
✅ Project coverage is 67.01%. Comparing base (482be4b) to head (1a7db25).
⚠️ Report is 19 commits behind head on main.

Additional details and impacted files
@@            Coverage Diff             @@
##             main    #9608      +/-   ##
==========================================
+ Coverage   64.27%   67.01%   +2.73%     
==========================================
  Files         205      206       +1     
  Lines       28826    28920      +94     
==========================================
+ Hits        18529    19380     +851     
+ Misses       8649     7883     -766     
- Partials     1648     1657       +9     
🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.

@openshift-merge-robot openshift-merge-robot added the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Nov 28, 2025
@openshift-merge-robot openshift-merge-robot removed the needs-rebase Indicates a PR cannot be merged because it has merge conflicts with HEAD. label Dec 4, 2025
@coderabbitai
Copy link

coderabbitai bot commented Dec 4, 2025

Walkthrough

Adds PSI (Pressure Stall Information) support: new "pressure" metric option, PSI data types and fields in cgroup stats, six new pressure metric descriptors and registration, Linux generator and non-Linux stub, server integration, docs/config update, and tests verifying six new metrics.

Changes

Cohort / File(s) Summary
Configuration & docs
docs/crio.conf.5.md, pkg/config/config.go
Added "pressure" to valid included_pod_metrics; added PressureMetrics constant and included it in AvailableMetrics.
Cgroup stats types
internal/config/cgmgr/stats_linux.go
Added public types PSIStats and PSIData; added PSI *PSIStats to MemoryStats, CPUStats, and DiskIOStats; implemented cgroupPSIStats conversion and wired PSI into stats construction.
Metric descriptors & registration
internal/lib/stats/descriptors.go, internal/lib/stats/metrics.go
Added six unexported metric descriptors for container pressure (cpu/memory/io × stalled/waiting) and registered them under the pressure descriptor group.
Pressure metrics generation
internal/lib/stats/pressure_metrics_linux.go, internal/lib/stats/pressure_metrics_unsupported.go
Implemented generateContainerPressureMetrics on Linux to produce six counter metrics from PSI (Full/Some) with microsecond→second conversion; added non-Linux stub returning nil.
Server integration
internal/lib/stats/stats_server_linux.go
Added handling for config.PressureMetrics to invoke generateContainerPressureMetrics and append resulting metrics.
Tests
test/cri-metrics.bats
Adjusted metrics setup assertions; added @test "container pressure metrics" that enables pressure metrics and asserts presence of six pressure metric names.
sequenceDiagram
    autonumber
    participant Cgroup as Cgroup subsystem
    participant StatsCol as Stats Collector\n(internal/config/cgmgr)
    participant PSI_Types as PSI Types\n(PSIStats/PSIData)
    participant Generator as Pressure Generator\n(internal/lib/stats)
    participant Server as Metrics Server\n(internal/lib/stats)
    participant Registry as Metrics Registry\n(descriptors/metrics)

    Cgroup->>StatsCol: emit libctr PSI stats (CPU, Memory, IO)
    StatsCol->>PSI_Types: cgroupPSIStats() → populate PSI fields
    PSI_Types->>Generator: containerStats with CPU/Memory/IO.PSI
    Generator->>Registry: emit 6 counter metrics (stalled/waiting per resource)
    Generator-->>Server: return []*Metric
    Server->>Registry: include metrics in response
Loading

Estimated code review effort

🎯 4 (Complex) | ⏱️ ~45 minutes

  • Inspect cgroupPSIStats nil handling and field conversions (Total, Avg10/60/300).
  • Verify PSI fields are correctly wired into MemoryStats, CPUStats, and DiskIOStats.
  • Confirm generateContainerPressureMetrics uses the correct Full/Some mapping and unit conversion (µs → s) and sets COUNTER semantics.
  • Check descriptor label consistency and that registration ties descriptors to the new config group.
  • Review tests (test/cri-metrics.bats) for correct setup, enabling of pressure metrics, and robust assertions.

Poem

🐰 I dug through cgroups late at night,
Found six small counters, shining bright;
CPU, memory, IO — stalled and waiting too,
I counted their ticks and whispered "woohoo!"
Hop, hop, metrics hum — observability delight.

Pre-merge checks and finishing touches

❌ Failed checks (1 warning)
Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 11.11% which is insufficient. The required threshold is 80.00%. You can run @coderabbitai generate docstrings to improve docstring coverage.
✅ Passed checks (2 passed)
Check name Status Explanation
Title check ✅ Passed The title 'Support PSI metrics' accurately describes the main change: adding PSI (Pressure Stall Information) metrics support for containers across multiple files and systems.
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
✨ Finishing touches
  • 📝 Generate docstrings
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🧹 Nitpick comments (1)
test/cri-metrics.bats (1)

528-563: Consider skipping test on systems without PSI support.

The test looks well-structured and follows existing patterns. However, PSI (Pressure Stall Information) requires kernel support and is typically only available on cgroup v2 with PSI enabled. The test may fail on cgroup v1 systems or systems where PSI is disabled.

Consider adding a skip condition similar to other cgroup v2-specific tests:

 @test "container pressure metrics" {
+	if ! is_cgroup_v2; then
+		skip "PSI metrics require cgroup v2"
+	fi
+	# Also check if PSI is enabled
+	if [[ ! -f /proc/pressure/cpu ]]; then
+		skip "PSI is not enabled on this system"
+	fi
+
 	CONTAINER_ENABLE_METRICS="true" CONTAINER_METRICS_PORT=$(free_port) setup_crio
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 482be4b and 2f8d870.

📒 Files selected for processing (8)
  • docs/crio.conf.5.md (1 hunks)
  • internal/config/cgmgr/stats_linux.go (6 hunks)
  • internal/lib/stats/descriptors.go (1 hunks)
  • internal/lib/stats/metrics.go (1 hunks)
  • internal/lib/stats/pressure_metrics.go (1 hunks)
  • internal/lib/stats/stats_server_linux.go (1 hunks)
  • pkg/config/config.go (1 hunks)
  • test/cri-metrics.bats (2 hunks)
🧰 Additional context used
📓 Path-based instructions (3)
**/*.md

📄 CodeRabbit inference engine (AGENTS.md)

Edit .md source files for documentation, not generated files

Files:

  • docs/crio.conf.5.md
**/*.go

📄 CodeRabbit inference engine (AGENTS.md)

**/*.go: Use interface-based design and dependency injection patterns in Go code
Propagate context.Context through function calls in Go code
Use fmt.Errorf with %w for error wrapping in Go code
Use logrus with structured fields for logging in Go code
Add comments explaining 'why' not 'what' in Go code
Use platform-specific file naming: *_{linux,freebsd}.go for platform-dependent code

Files:

  • pkg/config/config.go
  • internal/lib/stats/pressure_metrics.go
  • internal/lib/stats/metrics.go
  • internal/lib/stats/stats_server_linux.go
  • internal/lib/stats/descriptors.go
  • internal/config/cgmgr/stats_linux.go
**/*.bats

📄 CodeRabbit inference engine (AGENTS.md)

Use .bats file extension for BATS integration test files

Files:

  • test/cri-metrics.bats
🧬 Code graph analysis (5)
internal/lib/stats/pressure_metrics.go (2)
internal/config/cgmgr/stats_linux.go (3)
  • CPUStats (56-71)
  • MemoryStats (34-54)
  • DiskIOStats (89-93)
vendor/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go (1)
  • MetricType_COUNTER (679-679)
internal/lib/stats/metrics.go (1)
pkg/config/config.go (1)
  • PressureMetrics (90-90)
internal/lib/stats/stats_server_linux.go (1)
pkg/config/config.go (1)
  • PressureMetrics (90-90)
internal/config/cgmgr/stats_linux.go (1)
vendor/github.com/opencontainers/cgroups/stats.go (1)
  • BlkioStats (151-166)
test/cri-metrics.bats (1)
test/helpers.bash (5)
  • crictl (86-88)
  • free_port (249-251)
  • setup_crio (145-195)
  • start_crio_no_setup (219-228)
  • set_container_pod_cgroup_root (626-640)
🪛 GitHub Check: build-freebsd
internal/lib/stats/pressure_metrics.go

[failure] 61-61:
blkio.PSI undefined (type *cgmgr.DiskIOStats has no field or method PSI)


[failure] 52-52:
blkio.PSI undefined (type *cgmgr.DiskIOStats has no field or method PSI)


[failure] 43-43:
memory.PSI undefined (type *cgmgr.MemoryStats has no field or method PSI)


[failure] 34-34:
memory.PSI undefined (type *cgmgr.MemoryStats has no field or method PSI)


[failure] 25-25:
cpu.PSI undefined (type *cgmgr.CPUStats has no field or method PSI)


[failure] 16-16:
cpu.PSI undefined (type *cgmgr.CPUStats has no field or method PSI)

⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (26)
  • GitHub Check: rpm-build:fedora-rawhide-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:centos-stream-9-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:centos-stream-9-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-rawhide-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:centos-stream-9-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-rawhide-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:centos-stream-9-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-rawhide-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-aarch64:fedora-rawhide
  • GitHub Check: unit / amd64 / root
  • GitHub Check: build
  • GitHub Check: build static / s390x
  • GitHub Check: unit / amd64 / rootless
  • GitHub Check: build static / arm64
  • GitHub Check: security-checks
  • GitHub Check: build static / amd64
  • GitHub Check: build static / ppc64le
  • GitHub Check: unit / arm64 / root
  • GitHub Check: docs
  • GitHub Check: codeql-build
  • GitHub Check: lint
  • GitHub Check: binaries / arm64
  • GitHub Check: binaries / amd64
🔇 Additional comments (6)
pkg/config/config.go (1)

78-105: LGTM!

The new PressureMetrics constant follows the established naming pattern and is correctly added to AvailableMetrics. The validation in StatsConfig.Validate() will properly handle this new metric type.

docs/crio.conf.5.md (1)

592-593: LGTM!

Documentation correctly updated to include "pressure" in the available metrics list, consistent with the code changes.

internal/lib/stats/stats_server_linux.go (1)

313-316: LGTM!

The new PressureMetrics case follows the established pattern for metric generation. The nil check on pressureMetrics before appending is consistent with other metric cases.

internal/lib/stats/metrics.go (1)

119-126: LGTM!

The pressure metrics are correctly registered in availableMetricDescriptors following the established pattern for other metric categories.

internal/config/cgmgr/stats_linux.go (1)

189-208: LGTM!

The cgroupPSIStats helper correctly handles nil input and properly maps the cgroups PSIStats to the internal representation.

test/cri-metrics.bats (1)

48-50: LGTM!

The assertion change to container_last_seen is appropriate since this is an always-on metric, making the test more reliable regardless of which optional metrics are configured.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
internal/config/cgmgr/stats_linux.go (1)

34-53: Fix PSI unit documentation from nanoseconds to microseconds.

The comment on PSIData.Total incorrectly documents the unit as "nanoseconds," but PSI total counters from /proc/pressure/* (per Linux kernel documentation) are reported in microseconds. Update all PSI struct field comments across the file to reflect this:

 type PSIData struct {
-	// Total is total duration for tasks in the cgroup have waited due to congestion.
-	// Unit: nanoseconds.
+	// Total is total duration tasks in the cgroup have waited due to congestion.
+	// Unit: microseconds (as reported by PSI in /proc/pressure/*).
 	Total uint64

This applies to PSI field comments in MemoryStats, CPUStats, DiskIOStats, and any other PSI-related struct definitions in the file.

♻️ Duplicate comments (2)
internal/lib/stats/descriptors.go (1)

298-326: Align pressure metric descriptors’ LabelKeys with the rest of the container metrics.

The CPU pressure descriptors specify LabelKeys: baseLabelKeys, but the memory and IO pressure descriptors omit LabelKeys. All other per-container descriptors in this file consistently define label keys, so these four are inconsistent and may result in missing or mismatched labels for memory/IO pressure metrics.

Recommend adding LabelKeys: baseLabelKeys to keep the label schema uniform:

 	containerPressureMemoryStalledSecondsTotal = &types.MetricDescriptor{
-		Name: "container_pressure_memory_stalled_seconds_total",
-		Help: "Total time duration no tasks in the container could make progress due to memory congestion.",
+		Name:      "container_pressure_memory_stalled_seconds_total",
+		Help:      "Total time duration no tasks in the container could make progress due to memory congestion.",
+		LabelKeys: baseLabelKeys,
 	}
 	containerPressureMemoryWaitingSecondsTotal = &types.MetricDescriptor{
-		Name: "container_pressure_memory_waiting_seconds_total",
-		Help: "Total time duration tasks in the container have waited due to memory congestion.",
+		Name:      "container_pressure_memory_waiting_seconds_total",
+		Help:      "Total time duration tasks in the container have waited due to memory congestion.",
+		LabelKeys: baseLabelKeys,
 	}
 	containerPressureIOStalledSecondsTotal = &types.MetricDescriptor{
-		Name: "container_pressure_io_stalled_seconds_total",
-		Help: "Total time duration no tasks in the container could make progress due to IO congestion.",
+		Name:      "container_pressure_io_stalled_seconds_total",
+		Help:      "Total time duration no tasks in the container could make progress due to IO congestion.",
+		LabelKeys: baseLabelKeys,
 	}
 	containerPressureIOWaitingSecondsTotal = &types.MetricDescriptor{
-		Name: "container_pressure_io_waiting_seconds_total",
-		Help: "Total time duration tasks in the container have waited due to IO congestion.",
+		Name:      "container_pressure_io_waiting_seconds_total",
+		Help:      "Total time duration tasks in the container have waited due to IO congestion.",
+		LabelKeys: baseLabelKeys,
 	}

This will make pressure metrics align with other container metrics and reduce surprises for metric consumers.

internal/lib/stats/pressure_metrics_linux.go (1)

10-69: Guard against nil PSI data to avoid panics on systems without PSI.

generateContainerPressureMetrics dereferences cpu.PSI, memory.PSI, and blkio.PSI without checks. On kernels/cgroup configs where PSI isn’t available, those pointers can be nil, which would cause a panic when pressure metrics are enabled.

Add an early return when PSI data is missing, so we simply omit pressure metrics instead of crashing:

 func generateContainerPressureMetrics(ctr *oci.Container, cpu *cgmgr.CPUStats, memory *cgmgr.MemoryStats, blkio *cgmgr.DiskIOStats) []*types.Metric {
+	// PSI stats may be nil on systems that don't support pressure stall information.
+	if cpu == nil || cpu.PSI == nil || memory == nil || memory.PSI == nil || blkio == nil || blkio.PSI == nil {
+		return nil
+	}
+
 	metrics := []*containerMetric{

This matches the existing pattern where callers already handle a nil slice of metrics gracefully.

🧹 Nitpick comments (1)
test/cri-metrics.bats (1)

528-563: Consider skipping the pressure test when PSI is unavailable.

The new "container pressure metrics" test correctly validates that all six pressure metrics are present and parseable once "pressure" is enabled. However, on hosts without PSI support (no /proc/pressure/{cpu,memory,io} or old kernels / cgroup setups), generateContainerPressureMetrics will legitimately return no metrics and this test will fail.

You may want to guard the test with a quick PSI capability check (e.g., skip if /proc/pressure/cpu is missing) to avoid spurious failures on such environments.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2f8d870 and 0b3f03a.

📒 Files selected for processing (9)
  • docs/crio.conf.5.md (1 hunks)
  • internal/config/cgmgr/stats_linux.go (6 hunks)
  • internal/lib/stats/descriptors.go (1 hunks)
  • internal/lib/stats/metrics.go (1 hunks)
  • internal/lib/stats/pressure_metrics_linux.go (1 hunks)
  • internal/lib/stats/pressure_metrics_unsupported.go (1 hunks)
  • internal/lib/stats/stats_server_linux.go (1 hunks)
  • pkg/config/config.go (1 hunks)
  • test/cri-metrics.bats (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (1)
  • internal/lib/stats/metrics.go
🧰 Additional context used
📓 Path-based instructions (3)
**/*.bats

📄 CodeRabbit inference engine (AGENTS.md)

Use .bats file extension for BATS integration test files

Files:

  • test/cri-metrics.bats
**/*.go

📄 CodeRabbit inference engine (AGENTS.md)

**/*.go: Use interface-based design and dependency injection patterns in Go code
Propagate context.Context through function calls in Go code
Use fmt.Errorf with %w for error wrapping in Go code
Use logrus with structured fields for logging in Go code
Add comments explaining 'why' not 'what' in Go code
Use platform-specific file naming: *_{linux,freebsd}.go for platform-dependent code

Files:

  • internal/lib/stats/pressure_metrics_linux.go
  • internal/lib/stats/pressure_metrics_unsupported.go
  • internal/lib/stats/descriptors.go
  • pkg/config/config.go
  • internal/config/cgmgr/stats_linux.go
  • internal/lib/stats/stats_server_linux.go
**/*.md

📄 CodeRabbit inference engine (AGENTS.md)

Edit .md source files for documentation, not generated files

Files:

  • docs/crio.conf.5.md
🧬 Code graph analysis (5)
test/cri-metrics.bats (1)
test/helpers.bash (1)
  • crictl (86-88)
internal/lib/stats/pressure_metrics_linux.go (2)
internal/config/cgmgr/stats_linux.go (3)
  • CPUStats (56-71)
  • MemoryStats (34-54)
  • DiskIOStats (89-93)
vendor/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go (1)
  • MetricType_COUNTER (679-679)
internal/lib/stats/pressure_metrics_unsupported.go (1)
internal/config/cgmgr/stats_linux.go (3)
  • CPUStats (56-71)
  • MemoryStats (34-54)
  • DiskIOStats (89-93)
internal/config/cgmgr/stats_linux.go (1)
vendor/github.com/opencontainers/cgroups/stats.go (1)
  • BlkioStats (151-166)
internal/lib/stats/stats_server_linux.go (1)
pkg/config/config.go (1)
  • PressureMetrics (90-90)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (26)
  • GitHub Check: integration / conmon-rs / crun / amd64
  • GitHub Check: integration / conmon / crun / arm64
  • GitHub Check: integration / userns / crun / amd64
  • GitHub Check: integration / conmon / crun / amd64
  • GitHub Check: critest / conmon / crun / arm64
  • GitHub Check: critest / conmon-rs / crun / arm64
  • GitHub Check: critest / conmon-rs / crun / amd64
  • GitHub Check: critest / conmon / crun / amd64
  • GitHub Check: rpm-build:centos-stream-9-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-rawhide-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:centos-stream-9-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-rawhide-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-aarch64:fedora-rawhide
  • GitHub Check: lint
  • GitHub Check: codeql-build
  • GitHub Check: docs
  • GitHub Check: build static / amd64
  • GitHub Check: build
  • GitHub Check: security-checks
  • GitHub Check: unit / amd64 / rootless
  • GitHub Check: unit / amd64 / root
  • GitHub Check: unit / arm64 / root
  • GitHub Check: build static / s390x
  • GitHub Check: build static / ppc64le
  • GitHub Check: build static / arm64
🔇 Additional comments (5)
docs/crio.conf.5.md (1)

589-593: Docs and config stay in sync for included_pod_metrics.

The newly documented "pressure" value matches PressureMetrics in pkg/config/config.go and AvailableMetrics, keeping user-facing config in sync with implementation. No further changes needed here.

pkg/config/config.go (1)

78-105: Pressure metric wiring in config looks consistent.

Adding PressureMetrics = "pressure" and including it in AvailableMetrics, along with the StatsConfig.Validate check, cleanly integrates the new metric type with existing validation and matches the docs.

Also applies to: 2213-2223

internal/lib/stats/stats_server_linux.go (1)

264-320: Pressure metrics integration into container metrics loop is correct.

The new case config.PressureMetrics follows the same pattern as other metric groups, safely appending returned metrics when non-nil and leaving behavior unchanged when pressure metrics are disabled. The actual safety and availability concerns are localized to generateContainerPressureMetrics.

internal/lib/stats/pressure_metrics_unsupported.go (1)

1-15: Non-Linux stub cleanly disables pressure metrics.

The //go:build !linux stub returning nil is appropriate for platforms without PSI support and keeps non-Linux builds compiling without extra conditionals in callers.

test/cri-metrics.bats (1)

32-51: Using container_last_seen in metrics_setup is more robust.

Switching the “container metrics present” assertion to container_last_seen decouples setup from any specific optional metric group like network, which fits better now that tests selectively enable metrics.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

♻️ Duplicate comments (2)
internal/config/cgmgr/stats_linux.go (1)

102-105: Update comment to reflect microseconds, not nanoseconds.

The comment on line 104 states "Unit: nanoseconds" but Linux PSI reports the total stall time in microseconds. This should be corrected to avoid confusion.

 type PSIData struct {
 	// Total is total duration for tasks in the cgroup have waited due to congestion.
-	// Unit: nanoseconds.
+	// Unit: microseconds.
 	Total uint64
internal/lib/stats/descriptors.go (1)

298-326: Align pressure descriptors’ labels and units with the rest of the metrics.

Two separate issues in this block:

  1. Missing LabelKeys on memory/IO pressure metrics (repeat from earlier review).
    All other descriptors in this file, including the CPU pressure ones, specify LabelKeys (usually baseLabelKeys). The four memory/IO descriptors omit them, which is inconsistent and may break label handling if the stats code assumes the standard label set.

    Recommend adding LabelKeys: baseLabelKeys to keep them consistent:

 	containerPressureMemoryStalledSecondsTotal = &types.MetricDescriptor{
-		Name: "container_pressure_memory_stalled_seconds_total",
-		Help: "Total time duration no tasks in the container could make progress due to memory congestion.",
+		Name:      "container_pressure_memory_stalled_seconds_total",
+		Help:      "Total time duration no tasks in the container could make progress due to memory congestion.",
+		LabelKeys: baseLabelKeys,
 	}
 	containerPressureMemoryWaitingSecondsTotal = &types.MetricDescriptor{
-		Name: "container_pressure_memory_waiting_seconds_total",
-		Help: "Total time duration tasks in the container have waited due to memory congestion.",
+		Name:      "container_pressure_memory_waiting_seconds_total",
+		Help:      "Total time duration tasks in the container have waited due to memory congestion.",
+		LabelKeys: baseLabelKeys,
 	}
 	containerPressureIOStalledSecondsTotal = &types.MetricDescriptor{
-		Name: "container_pressure_io_stalled_seconds_total",
-		Help: "Total time duration no tasks in the container could make progress due to IO congestion.",
+		Name:      "container_pressure_io_stalled_seconds_total",
+		Help:      "Total time duration no tasks in the container could make progress due to IO congestion.",
+		LabelKeys: baseLabelKeys,
 	}
 	containerPressureIOWaitingSecondsTotal = &types.MetricDescriptor{
-		Name: "container_pressure_io_waiting_seconds_total",
-		Help: "Total time duration tasks in the container have waited due to IO congestion.",
+		Name:      "container_pressure_io_waiting_seconds_total",
+		Help:      "Total time duration tasks in the container have waited due to IO congestion.",
+		LabelKeys: baseLabelKeys,
 	}
  1. Verify units vs metric names (*_seconds_total).
    Linux PSI total fields are in microseconds; if generateContainerPressureMetrics is forwarding those raw values, the *_seconds_total names and “time duration … in seconds” Help text are inaccurate. Either:

    • Convert to seconds in the generator (and, if needed, use a float value type), or
    • Rename these metrics (and Help) to *_microseconds_total to reflect the real unit.

    Given this is a new metrics surface, it’s better to get the units right now before users depend on the current naming.

🧹 Nitpick comments (1)
test/cri-metrics.bats (1)

528-563: Consider adding a guard for PSI availability.

PSI (Pressure Stall Information) requires cgroup v2 and Linux kernel 4.20+. Without a guard, this test may fail on systems with older kernels or cgroup v1-only configurations, causing false negatives in CI/CD pipelines.

Consider adding a skip condition:

 @test "container pressure metrics" {
+	if ! is_cgroup_v2; then
+		skip "PSI metrics require cgroup v2"
+	fi
+
 	CONTAINER_ENABLE_METRICS="true" CONTAINER_METRICS_PORT=$(free_port) setup_crio

Alternatively, check for PSI availability directly by testing for cgroup PSI files (e.g., /sys/fs/cgroup/cpu.pressure or equivalent in the container's cgroup path).

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 0b3f03a and 363b2fd.

📒 Files selected for processing (9)
  • docs/crio.conf.5.md (1 hunks)
  • internal/config/cgmgr/stats_linux.go (6 hunks)
  • internal/lib/stats/descriptors.go (1 hunks)
  • internal/lib/stats/metrics.go (1 hunks)
  • internal/lib/stats/pressure_metrics_linux.go (1 hunks)
  • internal/lib/stats/pressure_metrics_unsupported.go (1 hunks)
  • internal/lib/stats/stats_server_linux.go (1 hunks)
  • pkg/config/config.go (1 hunks)
  • test/cri-metrics.bats (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • internal/lib/stats/pressure_metrics_unsupported.go
  • docs/crio.conf.5.md
🧰 Additional context used
📓 Path-based instructions (2)
**/*.go

📄 CodeRabbit inference engine (AGENTS.md)

**/*.go: Use interface-based design and dependency injection patterns in Go code
Propagate context.Context through function calls in Go code
Use fmt.Errorf with %w for error wrapping in Go code
Use logrus with structured fields for logging in Go code
Add comments explaining 'why' not 'what' in Go code
Use platform-specific file naming: *_{linux,freebsd}.go for platform-dependent code

Files:

  • internal/lib/stats/metrics.go
  • internal/lib/stats/pressure_metrics_linux.go
  • internal/lib/stats/stats_server_linux.go
  • internal/lib/stats/descriptors.go
  • pkg/config/config.go
  • internal/config/cgmgr/stats_linux.go
**/*.bats

📄 CodeRabbit inference engine (AGENTS.md)

Use .bats file extension for BATS integration test files

Files:

  • test/cri-metrics.bats
🧬 Code graph analysis (5)
internal/lib/stats/metrics.go (1)
pkg/config/config.go (1)
  • PressureMetrics (90-90)
internal/lib/stats/pressure_metrics_linux.go (2)
internal/config/cgmgr/stats_linux.go (3)
  • CPUStats (56-71)
  • MemoryStats (34-54)
  • DiskIOStats (89-93)
vendor/k8s.io/cri-api/pkg/apis/runtime/v1/api.pb.go (1)
  • MetricType_COUNTER (679-679)
internal/lib/stats/stats_server_linux.go (1)
pkg/config/config.go (1)
  • PressureMetrics (90-90)
test/cri-metrics.bats (1)
test/helpers.bash (3)
  • crictl (86-88)
  • free_port (249-251)
  • setup_crio (145-195)
internal/config/cgmgr/stats_linux.go (1)
vendor/github.com/opencontainers/cgroups/stats.go (1)
  • BlkioStats (151-166)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (44)
  • GitHub Check: rpm-build:fedora-rawhide-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:centos-stream-9-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-aarch64:fedora-rawhide
  • GitHub Check: integration / conmon / crun / amd64
  • GitHub Check: integration / conmon-rs / crun / amd64
  • GitHub Check: critest / conmon / crun / amd64
  • GitHub Check: integration / userns / crun / amd64
  • GitHub Check: critest / conmon-rs / crun / arm64
  • GitHub Check: integration / conmon / crun / arm64
  • GitHub Check: critest / conmon / crun / arm64
  • GitHub Check: critest / conmon-rs / crun / amd64
  • GitHub Check: rpm-build:centos-stream-9-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-rawhide-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-rawhide-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:centos-stream-9-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:centos-stream-9-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-rawhide-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-rawhide-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:centos-stream-9-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-rawhide-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:centos-stream-9-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-rawhide-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:centos-stream-9-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:centos-stream-9-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-rawhide-aarch64:fedora-rawhide
  • GitHub Check: docs
  • GitHub Check: codeql-build
  • GitHub Check: build
  • GitHub Check: unit / arm64 / root
  • GitHub Check: security-checks
  • GitHub Check: build static / arm64
  • GitHub Check: build static / ppc64le
  • GitHub Check: build static / s390x
  • GitHub Check: unit / amd64 / root
  • GitHub Check: unit / amd64 / rootless
  • GitHub Check: build static / amd64
  • GitHub Check: lint
🔇 Additional comments (10)
internal/config/cgmgr/stats_linux.go (3)

52-53: LGTM! PSI fields properly added to stats structs.

The PSI *PSIStats fields are consistently added to MemoryStats, CPUStats, and DiskIOStats, enabling pressure stall information to be propagated through the stats pipeline.

Also applies to: 69-70, 91-93


189-208: LGTM! Well-structured conversion with proper nil handling.

The cgroupPSIStats helper correctly handles nil input and maps all PSI fields from the cgroups library type to the internal representation.


180-184: LGTM! PSI data properly wired into stats construction.

PSI stats are correctly integrated into the stats assembly:

  • statsFromLibctrMgr sets DiskIO.PSI from BlkioStats.PSI
  • cgroupMemStats sets PSI from memStats.PSI
  • cgroupCPUStats sets PSI from cpuStats.PSI

Also applies to: 282-282, 295-295

internal/lib/stats/metrics.go (1)

119-126: LGTM! Pressure metrics descriptors properly registered.

The six new pressure metrics are correctly added to availableMetricDescriptors following the same pattern as other metric categories. This enables the metrics to be exposed when pressure is included in included_pod_metrics.

internal/lib/stats/stats_server_linux.go (1)

313-316: LGTM! Pressure metrics case properly integrated.

The new config.PressureMetrics case follows the established pattern of other metric handlers in the switch statement. The nil check before appending ensures graceful handling when PSI data is unavailable.

internal/lib/stats/pressure_metrics_linux.go (3)

10-34: LGTM! CPU pressure metrics with proper nil handling.

The CPU pressure metrics are correctly guarded with nil checks for both cpu and cpu.PSI. The mapping of Full.Total to "stalled" and Some.Total to "waiting" aligns with PSI semantics.


36-80: LGTM! Memory and IO pressure metrics properly implemented.

Both memory and IO pressure metrics have appropriate nil guards and follow the same pattern as CPU metrics.


82-82: Verify the "cpu" label passed to computeContainerMetrics.

The hardcoded "cpu" label appears semantically inconsistent if this function generates memory and IO pressure metrics. Verify whether this label should reflect the metric type (e.g., "memory", "io") or if the current usage is intentional. Check other callers of computeContainerMetrics to confirm the expected pattern for this parameter.

test/cri-metrics.bats (1)

48-48: LGTM! Updated assertion uses always-on metric.

Changing from container_network_receive_bytes_total to container_last_seen is appropriate since container_last_seen is an always-on metric that will be present regardless of which metric groups are enabled.

pkg/config/config.go (1)

78-105: New PressureMetrics config key is wired correctly into validation.

The "pressure" metric selector and its inclusion in AvailableMetrics align with existing patterns, and StatsConfig.Validate will correctly accept it. No issues from the config side.

Copy link

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 0

🧹 Nitpick comments (1)
internal/lib/stats/pressure_metrics_linux.go (1)

10-12: Integer division loses sub-second precision.

The conversion from microseconds to seconds using integer division will truncate any value less than 1 second to 0. For example, 500,000 microseconds (0.5 seconds) becomes 0. This could be significant for short-lived containers or low-pressure scenarios where PSI values are small.

The PR description mentions that CRI stats accept uint64 while cAdvisor emits PSI as float64. If precision is important, consider emitting values in microseconds and documenting the unit in the metric name (e.g., container_pressure_cpu_stalled_microseconds_total), or acknowledge this limitation in the code comment.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 363b2fd and 1a7db25.

📒 Files selected for processing (9)
  • docs/crio.conf.5.md (1 hunks)
  • internal/config/cgmgr/stats_linux.go (6 hunks)
  • internal/lib/stats/descriptors.go (1 hunks)
  • internal/lib/stats/metrics.go (1 hunks)
  • internal/lib/stats/pressure_metrics_linux.go (1 hunks)
  • internal/lib/stats/pressure_metrics_unsupported.go (1 hunks)
  • internal/lib/stats/stats_server_linux.go (1 hunks)
  • pkg/config/config.go (1 hunks)
  • test/cri-metrics.bats (2 hunks)
🚧 Files skipped from review as they are similar to previous changes (2)
  • pkg/config/config.go
  • internal/lib/stats/metrics.go
🧰 Additional context used
📓 Path-based instructions (3)
**/*.md

📄 CodeRabbit inference engine (AGENTS.md)

Edit .md source files for documentation, not generated files

Files:

  • docs/crio.conf.5.md
**/*.bats

📄 CodeRabbit inference engine (AGENTS.md)

Use .bats file extension for BATS integration test files

Files:

  • test/cri-metrics.bats
**/*.go

📄 CodeRabbit inference engine (AGENTS.md)

**/*.go: Use interface-based design and dependency injection patterns in Go code
Propagate context.Context through function calls in Go code
Use fmt.Errorf with %w for error wrapping in Go code
Use logrus with structured fields for logging in Go code
Add comments explaining 'why' not 'what' in Go code
Use platform-specific file naming: *_{linux,freebsd}.go for platform-dependent code

Files:

  • internal/lib/stats/stats_server_linux.go
  • internal/lib/stats/pressure_metrics_linux.go
  • internal/lib/stats/pressure_metrics_unsupported.go
  • internal/config/cgmgr/stats_linux.go
  • internal/lib/stats/descriptors.go
🧬 Code graph analysis (4)
test/cri-metrics.bats (1)
test/helpers.bash (5)
  • crictl (86-88)
  • free_port (249-251)
  • setup_crio (145-195)
  • start_crio_no_setup (219-228)
  • set_container_pod_cgroup_root (626-640)
internal/lib/stats/stats_server_linux.go (1)
pkg/config/config.go (1)
  • PressureMetrics (90-90)
internal/lib/stats/pressure_metrics_unsupported.go (1)
internal/config/cgmgr/stats_linux.go (3)
  • CPUStats (56-71)
  • MemoryStats (34-54)
  • DiskIOStats (89-93)
internal/config/cgmgr/stats_linux.go (1)
vendor/github.com/opencontainers/cgroups/stats.go (1)
  • BlkioStats (151-166)
⏰ Context from checks skipped due to timeout of 90000ms. You can increase the timeout in your CodeRabbit configuration to a maximum of 15 minutes (900000ms). (43)
  • GitHub Check: rpm-build:fedora-43-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-rawhide-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-rawhide-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:centos-stream-9-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-rawhide-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:centos-stream-9-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-rawhide-aarch64:fedora-rawhide
  • GitHub Check: critest / conmon-rs / crun / arm64
  • GitHub Check: integration / userns / crun / amd64
  • GitHub Check: integration / conmon / crun / arm64
  • GitHub Check: integration / conmon / crun / amd64
  • GitHub Check: critest / conmon / crun / amd64
  • GitHub Check: integration / conmon-rs / crun / amd64
  • GitHub Check: critest / conmon-rs / crun / amd64
  • GitHub Check: critest / conmon / crun / arm64
  • GitHub Check: rpm-build:centos-stream-9-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-rawhide-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-rawhide-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:centos-stream-9-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:centos-stream-9-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:centos-stream-9-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:centos-stream-9-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-rawhide-aarch64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-rawhide-x86_64:fedora-rawhide
  • GitHub Check: rpm-build:fedora-43-aarch64:fedora-rawhide
  • GitHub Check: lint
  • GitHub Check: docs
  • GitHub Check: security-checks
  • GitHub Check: build
  • GitHub Check: unit / amd64 / rootless
  • GitHub Check: build static / amd64
  • GitHub Check: unit / arm64 / root
  • GitHub Check: build static / ppc64le
  • GitHub Check: build static / s390x
  • GitHub Check: codeql-build
  • GitHub Check: build static / arm64
  • GitHub Check: unit / amd64 / root
🔇 Additional comments (16)
docs/crio.conf.5.md (1)

592-592: Documentation update looks good.

The "pressure" value is correctly added to the list of available included_pod_metrics options, consistent with the new PressureMetrics constant in pkg/config/config.go.

internal/lib/stats/stats_server_linux.go (1)

313-316: Integration follows established patterns.

The pressure metrics case correctly follows the same pattern as other metric types (CPU, Memory, DiskIO), including the nil check before appending. The parameters passed match the PSI fields available in the respective stat structs.

internal/lib/stats/pressure_metrics_unsupported.go (1)

1-15: Non-Linux stub correctly implemented.

The build constraint //go:build !linux ensures this stub is used on non-Linux platforms. The function signature matches the Linux implementation, and returning nil is the appropriate behavior since PSI is a Linux-only feature. This follows the coding guidelines for platform-specific file naming.

test/cri-metrics.bats (2)

48-48: Appropriate change to use always-on metric.

Using container_last_seen instead of container_network_receive_bytes_total is a better choice for the setup assertion since it's an always-on metric that doesn't depend on the included_pod_metrics configuration.


528-563: Test covers all six pressure metrics, but may need a skip condition for systems without PSI support.

The test correctly verifies the presence of all six pressure metrics. However, PSI (Pressure Stall Information) requires either cgroup v2, or cgroup v1 with PSI explicitly enabled (kernel parameter psi=1). On systems where PSI is not available, this test may fail because the metrics won't be generated (the Linux implementation returns nil when PSI is nil).

Consider adding a skip condition similar to the cgroup v2 checks in other tests. Verify that the helper function is_cgroup_v2 exists and that checking for /proc/pressure/cpu is the appropriate method to detect PSI availability on your target systems.

internal/lib/stats/pressure_metrics_linux.go (4)

22-43: Nil safety correctly implemented for CPU PSI metrics.

The nil checks for both cpu and cpu.PSI prevent panics on systems without PSI support. This addresses the concern from the previous review.


45-66: Memory PSI metrics properly guarded.

Consistent nil safety pattern applied for memory PSI metrics.


68-89: IO PSI metrics properly guarded.

Consistent nil safety pattern applied for IO PSI metrics.


91-91: Verify the hardcoded "cpu" label is intentional.

The third parameter to computeContainerMetrics is "cpu", which appears to be a label applied to all pressure metrics. Since this function generates metrics for CPU, memory, and IO pressure, using "cpu" as the label for all of them may be confusing or incorrect.

Please verify this is the intended behavior. If each metric type should have its own label, consider restructuring to call computeContainerMetrics separately for each resource type.

internal/config/cgmgr/stats_linux.go (6)

52-53: LGTM!

The PSI field additions to MemoryStats, CPUStats, and DiskIOStats are consistent and appropriately use pointer types to handle the optional nature of PSI data.

Also applies to: 69-70, 92-93


95-112: LGTM!

The PSI types are well-structured with clear documentation. The unit comment correctly states microseconds.


189-208: LGTM!

The cgroupPSIStats helper correctly handles nil input and performs a clean mapping from the cgroups library types to the local PSI types.


180-186: LGTM!

DiskIO PSI is correctly wired using the cgroupPSIStats helper.


280-283: LGTM!

Memory PSI is correctly wired, consistent with the pattern used for other PSI fields.


293-296: LGTM!

CPU PSI is correctly wired, completing the consistent PSI integration across all stat types.

internal/lib/stats/descriptors.go (1)

297-330: LGTM!

The six new pressure metric descriptors are well-defined with consistent naming patterns, appropriate help text, and proper LabelKeys assignments. The naming follows Prometheus conventions with the _seconds_total suffix for counter metrics.

@bitoku
Copy link
Contributor Author

bitoku commented Dec 4, 2025

@cri-o/cri-o-maintainers PTAL

PSI *PSIStats
}

type PSIStats struct {
Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

why are we pretty much fully duplicating here?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

imo we should just use the libctr version

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

https://github.com/cri-o/cri-o/pull/7658/files#diff-d9db4f1729b93e9ec3b256488380d0ee3b8b06756cfc30d406b9de6976c30779

We should reinstate this discussion. I totally agree with you, but fixing this will include more changes not related to PSI (even if we fix only PSI, we need new _unsupported.go files in /oci).

I can follow up if it's ok, or do you want me to change this before merging this?

Copy link
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🙃 no this is fine, sorry I forgot

@haircommander
Copy link
Member

/approve

LGTM @cri-o/cri-o-maintainers PTAL

@openshift-ci
Copy link
Contributor

openshift-ci bot commented Dec 4, 2025

[APPROVALNOTIFIER] This PR is APPROVED

This pull-request has been approved by: bitoku, haircommander

The full list of commands accepted by this bot can be found here.

The pull request process is described here

Details Needs approval from an approver in each of these files:

Approvers can indicate their approval by writing /approve in a comment
Approvers can cancel approval by writing /approve cancel in a comment

@openshift-ci openshift-ci bot added the approved Indicates a PR has been approved by an approver from all required OWNERS files. label Dec 4, 2025
@bitoku
Copy link
Contributor Author

bitoku commented Dec 8, 2025

@cri-o/cri-o-maintainers PTAL

@haircommander
Copy link
Member

/lgtm

@openshift-ci openshift-ci bot added the lgtm Indicates that a PR is ready to be merged. label Dec 9, 2025
@openshift-merge-bot openshift-merge-bot bot merged commit ba7bba6 into cri-o:main Dec 9, 2025
71 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

approved Indicates a PR has been approved by an approver from all required OWNERS files. dco-signoff: yes Indicates the PR's author has DCO signed all their commits. kind/feature Categorizes issue or PR as related to a new feature. lgtm Indicates that a PR is ready to be merged. release-note Denotes a PR that will be considered when it comes time to generate release notes.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants