openSUSE / salt

openSUSE and SUSE patches and backports for SaltStack
Apache License 2.0
22 stars 52 forks source link

Enhance cleanup mechanism after Salt Bundle upgrade (bsc#1228690) #685

Closed meaksh closed 6 days ago

meaksh commented 1 week ago

What does this PR do?

This PR simply makes venv-salt-minion-postinstall.service to pass WAIT_IF_SALT_JOBS=1 as environment variable when calling post_start_cleanup.sh script after a Salt Bundle upgrade.

This PR makes sense together with some other changes to post_start_cleanup.sh that are done here: https://build.opensuse.org/request/show/1206552

The idea here is that, when post_start_cleanup.sh is executed by venv-salt-minion-postinstall.service, then it waits until there are no active Salt jobs to perform the cleanup. This way we can prevent cleaning up the environment too early while there is an active Salt job which is still making use of it.

Since post_start_cleanup.sh is also executed as part of a Salt highstate, and also triggered via the RPM scriptlets of venv-salt-minion package, we cannot make this script wait all the times until no Salt job running, as it would cause a deadlock.

This new behavior helps to prevent the following exception we have seen on long running upgrades:

    The minion function caused an exception: Traceback (most recent call last):
      File "/usr/lib/venv-salt-minion/lib64/python3.10/site-packages/salt/minion.py", line 1917, in _thread_return
      File "/usr/lib/venv-salt-minion/lib64/python3.10/site-packages/salt/minion.py", line 1876, in _execute_job_function
      File "/usr/lib/venv-salt-minion/lib64/python3.10/site-packages/salt/loader/lazy.py", line 149, in __call__
      File "/usr/lib/venv-salt-minion/lib64/python3.10/site-packages/salt/loader/lazy.py", line 1234, in run
      File "/usr/lib/venv-salt-minion/lib64/python3.10/site-packages/salt/loader/lazy.py", line 1249, in _run_as
      File "/usr/lib/venv-salt-minion/lib/python3.10/site-packages/salt/executors/venv.py", line 24, in execute
      File "/usr/lib/venv-salt-minion/lib64/python3.10/site-packages/salt/loader/lazy.py", line 149, in __call__
      File "/usr/lib/venv-salt-minion/lib64/python3.10/site-packages/salt/loader/lazy.py", line 1234, in run
      File "/usr/lib/venv-salt-minion/lib64/python3.10/site-packages/salt/loader/lazy.py", line 1249, in _run_as
      File "/usr/lib/venv-salt-minion/lib/python3.10/site-packages/salt/executors/direct_call.py", line 10, in execute
      File "/usr/lib/venv-salt-minion/lib64/python3.10/site-packages/salt/loader/lazy.py", line 149, in __call__
      File "/usr/lib/venv-salt-minion/lib64/python3.10/site-packages/salt/loader/lazy.py", line 1234, in run
      File "/usr/lib/venv-salt-minion/lib64/python3.10/site-packages/salt/loader/lazy.py", line 1249, in _run_as
      File "/usr/lib/venv-salt-minion/lib/python3.10/site-packages/salt/modules/state.py", line 833, in apply_
      File "/usr/lib/venv-salt-minion/lib/python3.10/site-packages/salt/modules/state.py", line 1479, in sls
      File "/usr/lib/venv-salt-minion/lib64/python3.10/site-packages/salt/state.py", line 3555, in call_high
      File "/usr/lib/venv-salt-minion/lib64/python3.10/site-packages/salt/state.py", line 2723, in call_chunks
      File "/usr/lib/venv-salt-minion/lib64/python3.10/site-packages/salt/state.py", line 3245, in call_chunk
      File "/usr/lib/venv-salt-minion/lib64/python3.10/site-packages/salt/utils/decorators/state.py", line 45, in _func
      File "/usr/lib/venv-salt-minion/lib64/python3.10/site-packages/salt/state.py", line 2463, in call
      File "/usr/lib/venv-salt-minion/lib64/python3.10/site-packages/salt/state.py", line 1368, in check_refresh
      File "/usr/lib/venv-salt-minion/lib64/python3.10/site-packages/salt/state.py", line 1316, in module_refresh
      File "/usr/lib/venv-salt-minion/lib64/python3.10/importlib/__init__.py", line 168, in reload
    ModuleNotFoundError: spec not found for the module 'site'

What issues does this PR fix or reference?

Fixes: https://github.com/SUSE/spacewalk/issues/24978

Merge requirements satisfied?

[NOTICE] Bug fixes or features added to Salt require tests.

Commits signed with GPG?

Yes

Please review Salt's Contributing Guide for best practices.

See GitHub's page on GPG signing for more information about signing commits with GPG.