Skip to content

Commit 54af26b

Browse files
vzhestkovagraul
authored andcommitted
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> BACKPORT-UPSTREAM=saltstack#66509 BACKPORT-UPSTREAM=saltstack@0c3ebc0
1 parent 11fcb12 commit 54af26b

File tree

5 files changed

+34
-63
lines changed

5 files changed

+34
-63
lines changed

doc/topics/releases/3007.0.rst

Whitespace-only changes.

salt/_logging/impl.py

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,15 @@
2626
QUIET = logging.QUIET = 1000
2727

2828
import salt.defaults.exitcodes # isort:skip pylint: disable=unused-import
29+
import salt.utils.ctx
30+
2931
from salt._logging.handlers import DeferredStreamHandler # isort:skip
3032
from salt._logging.handlers import RotatingFileHandler # isort:skip
3133
from salt._logging.handlers import StreamHandler # isort:skip
3234
from salt._logging.handlers import SysLogHandler # isort:skip
3335
from salt._logging.handlers import WatchedFileHandler # isort:skip
3436
from salt._logging.mixins import LoggingMixinMeta # isort:skip
3537
from salt.exceptions import LoggingRuntimeError # isort:skip
36-
from salt.utils.ctx import RequestContext # isort:skip
3738
from salt.utils.immutabletypes import freeze, ImmutableDict # isort:skip
3839
from salt.utils.textformat import TextFormat # isort:skip
3940

@@ -242,10 +243,14 @@ def _log(
242243
if extra is None:
243244
extra = {}
244245

245-
# pylint: disable=no-member
246-
current_jid = RequestContext.current.get("data", {}).get("jid", None)
247-
log_fmt_jid = RequestContext.current.get("opts", {}).get("log_fmt_jid", None)
248-
# pylint: enable=no-member
246+
current_jid = (
247+
salt.utils.ctx.get_request_context().get("data", {}).get("jid", None)
248+
)
249+
log_fmt_jid = (
250+
salt.utils.ctx.get_request_context()
251+
.get("opts", {})
252+
.get("log_fmt_jid", None)
253+
)
249254

250255
if current_jid is not None:
251256
extra["jid"] = current_jid

salt/master.py

Lines changed: 3 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,7 @@
3838
import salt.utils.args
3939
import salt.utils.atomicfile
4040
import salt.utils.crypt
41+
import salt.utils.ctx
4142
import salt.utils.event
4243
import salt.utils.files
4344
import salt.utils.gitfs
@@ -58,10 +59,8 @@
5859
from salt.cli.batch_async import BatchAsync, batch_async_required
5960
from salt.config import DEFAULT_INTERVAL
6061
from salt.defaults import DEFAULT_TARGET_DELIM
61-
from salt.ext.tornado.stack_context import StackContext
6262
from salt.transport import TRANSPORTS
6363
from salt.utils.channel import iter_transport_opts
64-
from salt.utils.ctx import RequestContext
6564
from salt.utils.debug import (
6665
enable_sigusr1_handler,
6766
enable_sigusr2_handler,
@@ -1108,13 +1107,8 @@ def _handle_aes(self, data):
11081107
start = time.time()
11091108
self.stats[cmd]["runs"] += 1
11101109

1111-
def run_func(data):
1112-
return self.aes_funcs.run_func(data["cmd"], data)
1113-
1114-
with StackContext(
1115-
functools.partial(RequestContext, {"data": data, "opts": self.opts})
1116-
):
1117-
ret = run_func(data)
1110+
with salt.utils.ctx.request_context({"data": data, "opts": self.opts}):
1111+
ret = self.aes_funcs.run_func(data["cmd"], data)
11181112

11191113
if self.opts["master_stats"]:
11201114
self._post_stats(start, cmd)

salt/minion.py

Lines changed: 2 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939
import salt.utils.args
4040
import salt.utils.context
4141
import salt.utils.crypt
42+
import salt.utils.ctx
4243
import salt.utils.data
4344
import salt.utils.dictdiffer
4445
import salt.utils.dictupdate
@@ -70,7 +71,6 @@
7071
SaltSystemExit,
7172
)
7273
from salt.template import SLS_ENCODING
73-
from salt.utils.ctx import RequestContext
7474
from salt.utils.debug import enable_sigusr1_handler
7575
from salt.utils.event import tagify
7676
from salt.utils.network import parse_host_port
@@ -1805,18 +1805,12 @@ def _target(cls, minion_instance, opts, data, connected):
18051805
uid = salt.utils.user.get_uid(user=opts.get("user", None))
18061806
minion_instance.proc_dir = get_proc_dir(opts["cachedir"], uid=uid)
18071807

1808-
def run_func(minion_instance, opts, data):
1808+
with salt.utils.ctx.request_context({"data": data, "opts": opts}):
18091809
if isinstance(data["fun"], tuple) or isinstance(data["fun"], list):
18101810
return Minion._thread_multi_return(minion_instance, opts, data)
18111811
else:
18121812
return Minion._thread_return(minion_instance, opts, data)
18131813

1814-
with salt.ext.tornado.stack_context.StackContext(
1815-
functools.partial(RequestContext, {"data": data, "opts": opts})
1816-
):
1817-
with salt.ext.tornado.stack_context.StackContext(minion_instance.ctx):
1818-
run_func(minion_instance, opts, data)
1819-
18201814
def _execute_job_function(
18211815
self, function_name, function_args, executors, opts, data
18221816
):

salt/utils/ctx.py

Lines changed: 19 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -1,49 +1,27 @@
1-
import threading
1+
import contextlib
22

3+
try:
4+
# Try the stdlib C extension first
5+
import _contextvars as contextvars
6+
except ImportError:
7+
# Py<3.7
8+
import contextvars
39

4-
class ClassProperty(property):
5-
"""
6-
Use a classmethod as a property
7-
http://stackoverflow.com/a/1383402/1258307
8-
"""
10+
DEFAULT_CTX_VAR = "request_ctxvar"
11+
request_ctxvar = contextvars.ContextVar(DEFAULT_CTX_VAR)
912

10-
def __get__(self, cls, owner):
11-
return self.fget.__get__(None, owner)() # pylint: disable=no-member
1213

13-
14-
class RequestContext:
14+
@contextlib.contextmanager
15+
def request_context(data):
1516
"""
16-
A context manager that saves some per-thread state globally.
17-
Intended for use with Tornado's StackContext.
18-
https://gist.github.com/simon-weber/7755289
19-
Simply import this class into any module and access the current request handler by this
20-
class's class method property 'current'. If it returns None, there's no active request.
21-
.. code:: python
22-
from raas.utils.ctx import RequestContext
23-
current_request_handler = RequestContext.current
17+
A context manager that sets and un-sets the loader context
2418
"""
19+
tok = request_ctxvar.set(data)
20+
try:
21+
yield
22+
finally:
23+
request_ctxvar.reset(tok)
2524

26-
_state = threading.local()
27-
_state.current_request = {}
28-
29-
def __init__(self, current_request):
30-
self._current_request = current_request
31-
32-
@ClassProperty
33-
@classmethod
34-
def current(cls):
35-
if not hasattr(cls._state, "current_request"):
36-
return {}
37-
return cls._state.current_request
38-
39-
def __enter__(self):
40-
self._prev_request = self.__class__.current
41-
self.__class__._state.current_request = self._current_request
42-
43-
def __exit__(self, *exc):
44-
self.__class__._state.current_request = self._prev_request
45-
del self._prev_request
46-
return False
4725

48-
def __call__(self):
49-
return self
26+
def get_request_context():
27+
return request_ctxvar.get({})

0 commit comments

Comments
 (0)