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

Skip to content

Conversation

naoNao89
Copy link
Contributor

@naoNao89 naoNao89 commented Oct 14, 2025

On macOS, the uptime command would sometimes fail in CI when utmpx couldn't provide a BOOT_TIME entry. This was causing flaky test failures, especially for uptime --since.

Fixes #3621

The fix adds a fallback using sysctl to query kern.boottime directly from the kernel. If we can't get boot time from utmpx, we now try sysctl before giving up. This makes uptime much more reliable on macOS.

blame:

2774274 added file support to uptime in, they added macOS-specific validation for utmpx paths but only implemented a graceful degradation fallback that printed "couldn't get boot time". Later when 047ec99 refactored uptime into uucore in, this utmpx-only approach was preserved. 6818bbe also had to relax error messages in due to macOS errno differences, showing ongoing macOS-specific issues.

None of these commits implemented the sysctl kern.boottime fallback that macOS has always provided as the canonical way to get boot time. This PR finally adds that missing piece that should have been there from the start.

@naoNao89 naoNao89 force-pushed the fix/issue-3621-uptime-macos-sysctl branch 2 times, most recently from c936518 to 7ba7816 Compare October 14, 2025 05:19
If utmpx BOOT_TIME is unavailable, derive boot time via sysctl CTL_KERN.KERN_BOOTTIME to reduce intermittent macOS failures (e.g., uutils#3621).

Context (blame/history):

- 2774274 ("uptime: Support files in uptime (uutils#6400)"): added macOS utmpxname validation and non-fatal 'unknown uptime' fallback with tests (tests/by-util/test_uptime.rs).

- 920d29f ("uptime: add support for OpenBSD using utmp"): reorganized uptime.rs and solidified utmp/utmpx-driven paths.
@naoNao89 naoNao89 force-pushed the fix/issue-3621-uptime-macos-sysctl branch from 7ba7816 to f99bfd1 Compare October 14, 2025 05:38
@github-actions
Copy link

GNU testsuite comparison:

Skipping an intermittent issue tests/timeout/timeout (passes in this run but fails in the 'main' branch)

@github-actions
Copy link

GNU testsuite comparison:

Skip an intermittent issue tests/misc/usage_vs_getopt (fails in this run but passes in the 'main' branch)

Add unit tests for sysctl boottime availability and get_uptime reliability on macOS, verifying the fallback mechanism works correctly when utmpx BOOT_TIME is unavailable.

Add integration tests to ensure uptime command consistently succeeds on macOS with various flags (default, --since) and produces properly formatted output.

Enhance documentation of the sysctl fallback code with detailed comments explaining why it exists, the issue it addresses (uutils#3621), and comprehensive SAFETY comments for the unsafe sysctl call.

All tests are properly gated with #[cfg(target_os = "macos")] to ensure they only run on macOS and don't interfere with other platforms.
@naoNao89 naoNao89 force-pushed the fix/issue-3621-uptime-macos-sysctl branch from cebba15 to 256dbd3 Compare October 15, 2025 02:22
@github-actions
Copy link

GNU testsuite comparison:

Skip an intermittent issue tests/tail/overlay-headers (fails in this run but passes in the 'main' branch)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

test_uptime is intermittent

1 participant