Skip to content

Commit

Permalink
needs-restarting: Revert using systemd start time
Browse files Browse the repository at this point in the history
Since commit a0ac871 "dnf
needs-restarting -s" failed to spot services started withing few
seconds before updating their RPM package.

The cause was using systemd start time instead of a kernel boot time
when computing an absolute start time of processes.

This patch removes using the systemd start time until a proper fix is
found.

https://issues.redhat.com/browse/RHEL-39775
  • Loading branch information
ppisar committed Jun 6, 2024
1 parent a054dcb commit ddfbf04
Show file tree
Hide file tree
Showing 2 changed files with 0 additions and 28 deletions.
4 changes: 0 additions & 4 deletions doc/needs_restarting.rst
Original file line number Diff line number Diff line change
Expand Up @@ -38,10 +38,6 @@ Note that in most cases a process should survive update of its binary and librar
.. note::
Needs-restarting will try to guess the boot time using three different methods:

``UnitsLoadStartTimestamp``
D-Bus property on ``/org/freedesktop/systemd1``.
Works unless the system was not booted with systemd,
such as in (most) containers.
``st_mtime of /proc/1``
Reflects the time the first process was run after booting.
This works for all known cases except machines without
Expand Down
24 changes: 0 additions & 24 deletions plugins/needs_restarting.py
Original file line number Diff line number Diff line change
Expand Up @@ -218,11 +218,6 @@ def get_boot_time():
We have two sources from which to derive the boot time. These values vary
depending on containerization, existence of a Real Time Clock, etc.
For our purposes we want the latest derived value.
- UnitsLoadStartTimestamp property on /org/freedesktop/systemd1
The start time of the service manager, according to systemd itself.
Seems to be more reliable than UserspaceTimestamp when the RTC is
in local time. Works unless the system was not booted with systemd,
such as in (most) containers.
- st_mtime of /proc/1
Reflects the time the first process was run after booting
This works for all known cases except machines without
Expand All @@ -233,25 +228,6 @@ def get_boot_time():
Does not work on containers which share their kernel with the
host - there the host kernel uptime is returned
"""
units_load_start_timestamp = None
try:
bus = dbus.SystemBus()
systemd1 = bus.get_object(
'org.freedesktop.systemd1',
'/org/freedesktop/systemd1'
)
props = dbus.Interface(
systemd1,
dbus.PROPERTIES_IFACE
)
units_load_start_timestamp = props.Get(
'org.freedesktop.systemd1.Manager',
'UnitsLoadStartTimestamp'
)
if units_load_start_timestamp != 0:
return int(units_load_start_timestamp / (1000 * 1000))
except dbus.exceptions.DBusException as e:
logger.debug("D-Bus error getting boot time from systemd: {}".format(e))

proc_1_boot_time = int(os.stat('/proc/1').st_mtime)
if os.path.isfile('/proc/uptime'):
Expand Down

0 comments on commit ddfbf04

Please sign in to comment.