3ebbc3cd7b
- Improve error handling with different OpenSSL versions - Remove redundant run_func from salt.master.MWorker._handle_aes - Added: * avoid-crash-on-wrong-output-of-systemctl-version-bsc.patch * improve-error-handling-with-different-openssl-versio.patch * remove-redundant-run_func-from-salt.master.mworker._.patch OBS-URL: https://build.opensuse.org/package/show/systemsmanagement:saltstack/salt?expand=0&rev=254
225 lines
7.8 KiB
Diff
225 lines
7.8 KiB
Diff
From ff789d88541954e4fc1678dff728bc6a3ea7472e Mon Sep 17 00:00:00 2001
|
|
From: Victor Zhestkov <vzhestkov@suse.com>
|
|
Date: Fri, 30 Aug 2024 14:30:27 +0200
|
|
Subject: [PATCH] Remove redundant run_func from
|
|
salt.master.MWorker._handle_aes
|
|
|
|
* New request context
|
|
|
|
* Fix docs
|
|
|
|
* Remove redundant run_func from salt.master.MWorker._handle_aes
|
|
|
|
* Get rid of run_func in salt.Minion._target
|
|
|
|
---------
|
|
|
|
Co-authored-by: Daniel A. Wozniak <dwozniak@vmware.com>
|
|
---
|
|
doc/topics/releases/3007.0.rst | 0
|
|
salt/_logging/impl.py | 15 ++++++---
|
|
salt/master.py | 12 ++-----
|
|
salt/minion.py | 10 ++----
|
|
salt/utils/ctx.py | 60 +++++++++++-----------------------
|
|
5 files changed, 34 insertions(+), 63 deletions(-)
|
|
create mode 100644 doc/topics/releases/3007.0.rst
|
|
|
|
diff --git a/doc/topics/releases/3007.0.rst b/doc/topics/releases/3007.0.rst
|
|
new file mode 100644
|
|
index 0000000000..e69de29bb2
|
|
diff --git a/salt/_logging/impl.py b/salt/_logging/impl.py
|
|
index 1d71cb8be8..4d1ebd2495 100644
|
|
--- a/salt/_logging/impl.py
|
|
+++ b/salt/_logging/impl.py
|
|
@@ -26,6 +26,8 @@ GARBAGE = logging.GARBAGE = 1
|
|
QUIET = logging.QUIET = 1000
|
|
|
|
import salt.defaults.exitcodes # isort:skip pylint: disable=unused-import
|
|
+import salt.utils.ctx
|
|
+
|
|
from salt._logging.handlers import DeferredStreamHandler # isort:skip
|
|
from salt._logging.handlers import RotatingFileHandler # isort:skip
|
|
from salt._logging.handlers import StreamHandler # isort:skip
|
|
@@ -33,7 +35,6 @@ from salt._logging.handlers import SysLogHandler # isort:skip
|
|
from salt._logging.handlers import WatchedFileHandler # isort:skip
|
|
from salt._logging.mixins import LoggingMixinMeta # isort:skip
|
|
from salt.exceptions import LoggingRuntimeError # isort:skip
|
|
-from salt.utils.ctx import RequestContext # isort:skip
|
|
from salt.utils.immutabletypes import freeze, ImmutableDict # isort:skip
|
|
from salt.utils.textformat import TextFormat # isort:skip
|
|
|
|
@@ -242,10 +243,14 @@ class SaltLoggingClass(LOGGING_LOGGER_CLASS, metaclass=LoggingMixinMeta):
|
|
if extra is None:
|
|
extra = {}
|
|
|
|
- # pylint: disable=no-member
|
|
- current_jid = RequestContext.current.get("data", {}).get("jid", None)
|
|
- log_fmt_jid = RequestContext.current.get("opts", {}).get("log_fmt_jid", None)
|
|
- # pylint: enable=no-member
|
|
+ current_jid = (
|
|
+ salt.utils.ctx.get_request_context().get("data", {}).get("jid", None)
|
|
+ )
|
|
+ log_fmt_jid = (
|
|
+ salt.utils.ctx.get_request_context()
|
|
+ .get("opts", {})
|
|
+ .get("log_fmt_jid", None)
|
|
+ )
|
|
|
|
if current_jid is not None:
|
|
extra["jid"] = current_jid
|
|
diff --git a/salt/master.py b/salt/master.py
|
|
index d7182d10b5..49cfb68860 100644
|
|
--- a/salt/master.py
|
|
+++ b/salt/master.py
|
|
@@ -38,6 +38,7 @@ import salt.state
|
|
import salt.utils.args
|
|
import salt.utils.atomicfile
|
|
import salt.utils.crypt
|
|
+import salt.utils.ctx
|
|
import salt.utils.event
|
|
import salt.utils.files
|
|
import salt.utils.gitfs
|
|
@@ -58,10 +59,8 @@ import salt.wheel
|
|
from salt.cli.batch_async import BatchAsync, batch_async_required
|
|
from salt.config import DEFAULT_INTERVAL
|
|
from salt.defaults import DEFAULT_TARGET_DELIM
|
|
-from salt.ext.tornado.stack_context import StackContext
|
|
from salt.transport import TRANSPORTS
|
|
from salt.utils.channel import iter_transport_opts
|
|
-from salt.utils.ctx import RequestContext
|
|
from salt.utils.debug import (
|
|
enable_sigusr1_handler,
|
|
enable_sigusr2_handler,
|
|
@@ -1108,13 +1107,8 @@ class MWorker(salt.utils.process.SignalHandlingProcess):
|
|
start = time.time()
|
|
self.stats[cmd]["runs"] += 1
|
|
|
|
- def run_func(data):
|
|
- return self.aes_funcs.run_func(data["cmd"], data)
|
|
-
|
|
- with StackContext(
|
|
- functools.partial(RequestContext, {"data": data, "opts": self.opts})
|
|
- ):
|
|
- ret = run_func(data)
|
|
+ with salt.utils.ctx.request_context({"data": data, "opts": self.opts}):
|
|
+ ret = self.aes_funcs.run_func(data["cmd"], data)
|
|
|
|
if self.opts["master_stats"]:
|
|
self._post_stats(start, cmd)
|
|
diff --git a/salt/minion.py b/salt/minion.py
|
|
index 2ccd0cd5a9..e21a017cfd 100644
|
|
--- a/salt/minion.py
|
|
+++ b/salt/minion.py
|
|
@@ -39,6 +39,7 @@ import salt.transport
|
|
import salt.utils.args
|
|
import salt.utils.context
|
|
import salt.utils.crypt
|
|
+import salt.utils.ctx
|
|
import salt.utils.data
|
|
import salt.utils.dictdiffer
|
|
import salt.utils.dictupdate
|
|
@@ -70,7 +71,6 @@ from salt.exceptions import (
|
|
SaltSystemExit,
|
|
)
|
|
from salt.template import SLS_ENCODING
|
|
-from salt.utils.ctx import RequestContext
|
|
from salt.utils.debug import enable_sigusr1_handler
|
|
from salt.utils.event import tagify
|
|
from salt.utils.network import parse_host_port
|
|
@@ -1805,18 +1805,12 @@ class Minion(MinionBase):
|
|
uid = salt.utils.user.get_uid(user=opts.get("user", None))
|
|
minion_instance.proc_dir = get_proc_dir(opts["cachedir"], uid=uid)
|
|
|
|
- def run_func(minion_instance, opts, data):
|
|
+ with salt.utils.ctx.request_context({"data": data, "opts": opts}):
|
|
if isinstance(data["fun"], tuple) or isinstance(data["fun"], list):
|
|
return Minion._thread_multi_return(minion_instance, opts, data)
|
|
else:
|
|
return Minion._thread_return(minion_instance, opts, data)
|
|
|
|
- with salt.ext.tornado.stack_context.StackContext(
|
|
- functools.partial(RequestContext, {"data": data, "opts": opts})
|
|
- ):
|
|
- with salt.ext.tornado.stack_context.StackContext(minion_instance.ctx):
|
|
- run_func(minion_instance, opts, data)
|
|
-
|
|
def _execute_job_function(
|
|
self, function_name, function_args, executors, opts, data
|
|
):
|
|
diff --git a/salt/utils/ctx.py b/salt/utils/ctx.py
|
|
index a9c0931bd8..2f4b5b4c9b 100644
|
|
--- a/salt/utils/ctx.py
|
|
+++ b/salt/utils/ctx.py
|
|
@@ -1,49 +1,27 @@
|
|
-import threading
|
|
+import contextlib
|
|
|
|
+try:
|
|
+ # Try the stdlib C extension first
|
|
+ import _contextvars as contextvars
|
|
+except ImportError:
|
|
+ # Py<3.7
|
|
+ import contextvars
|
|
|
|
-class ClassProperty(property):
|
|
- """
|
|
- Use a classmethod as a property
|
|
- http://stackoverflow.com/a/1383402/1258307
|
|
- """
|
|
+DEFAULT_CTX_VAR = "request_ctxvar"
|
|
+request_ctxvar = contextvars.ContextVar(DEFAULT_CTX_VAR)
|
|
|
|
- def __get__(self, cls, owner):
|
|
- return self.fget.__get__(None, owner)() # pylint: disable=no-member
|
|
|
|
-
|
|
-class RequestContext:
|
|
+@contextlib.contextmanager
|
|
+def request_context(data):
|
|
"""
|
|
- A context manager that saves some per-thread state globally.
|
|
- Intended for use with Tornado's StackContext.
|
|
- https://gist.github.com/simon-weber/7755289
|
|
- Simply import this class into any module and access the current request handler by this
|
|
- class's class method property 'current'. If it returns None, there's no active request.
|
|
- .. code:: python
|
|
- from raas.utils.ctx import RequestContext
|
|
- current_request_handler = RequestContext.current
|
|
+ A context manager that sets and un-sets the loader context
|
|
"""
|
|
+ tok = request_ctxvar.set(data)
|
|
+ try:
|
|
+ yield
|
|
+ finally:
|
|
+ request_ctxvar.reset(tok)
|
|
|
|
- _state = threading.local()
|
|
- _state.current_request = {}
|
|
-
|
|
- def __init__(self, current_request):
|
|
- self._current_request = current_request
|
|
-
|
|
- @ClassProperty
|
|
- @classmethod
|
|
- def current(cls):
|
|
- if not hasattr(cls._state, "current_request"):
|
|
- return {}
|
|
- return cls._state.current_request
|
|
-
|
|
- def __enter__(self):
|
|
- self._prev_request = self.__class__.current
|
|
- self.__class__._state.current_request = self._current_request
|
|
-
|
|
- def __exit__(self, *exc):
|
|
- self.__class__._state.current_request = self._prev_request
|
|
- del self._prev_request
|
|
- return False
|
|
|
|
- def __call__(self):
|
|
- return self
|
|
+def get_request_context():
|
|
+ return request_ctxvar.get({})
|
|
--
|
|
2.46.0
|
|
|