Skip to content

Commit dd7d959

Browse files
committed
Do not share subprocess lock between instances
Signed-off-by: Aleksei Stepanov <penguinolog@gmail.com> (cherry picked from commit 82da78d) Signed-off-by: Aleksei Stepanov <penguinolog@gmail.com>
1 parent 43da048 commit dd7d959

File tree

3 files changed

+14
-81
lines changed

3 files changed

+14
-81
lines changed

doc/source/Subprocess.rst

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,6 @@ API: Subprocess
1616
:type log_mask_re: typing.Optional[str]
1717

1818
.. versionchanged:: 1.2.0 log_mask_re regex rule for masking cmd
19-
.. versionchanged:: 1.9.0 Not singleton anymore. Only lock is shared between all instances.
2019

2120
.. py:attribute:: log_mask_re
2221
@@ -50,6 +49,7 @@ API: Subprocess
5049
:rtype: typing.ContextManager
5150

5251
.. Note:: Enter and exit main context manager is produced as well.
52+
.. versionadded:: 4.1.0
5353

5454
.. py:method:: execute_async(command, stdin=None, open_stdout=True, open_stderr=True, verbose=False, log_mask_re=None, **kwargs)
5555
@@ -72,7 +72,7 @@ API: Subprocess
7272
:raises OSError: impossible to process STDIN
7373

7474
.. versionadded:: 1.2.0
75-
.. versionchanged:: 1.4.0 Use typed NamedTuple as result
75+
.. versionchanged:: 2.1.0 Use typed NamedTuple as result
7676

7777
.. py:method:: execute(command, verbose=False, timeout=1*60*60, **kwargs)
7878
@@ -107,7 +107,7 @@ API: Subprocess
107107
:raises ExecHelperTimeoutError: Timeout exceeded
108108

109109
.. note:: stdin channel is closed after the input processing
110-
.. versionadded:: 1.9.7
110+
.. versionadded:: 3.3.0
111111

112112
.. py:method:: check_call(command, verbose=False, timeout=1*60*60, error_info=None, expected=(0,), raise_on_err=True, **kwargs)
113113
@@ -131,8 +131,8 @@ API: Subprocess
131131

132132
.. versionchanged:: 1.1.0 make method
133133
.. versionchanged:: 1.2.0 default timeout 1 hour
134-
.. versionchanged:: 1.10.0 Exception class can be substituted
135-
.. versionchanged:: 1.11.0 Expected is not optional, defaults os dependent
134+
.. versionchanged:: 3.2.0 Exception class can be substituted
135+
.. versionchanged:: 3.4.0 Expected is not optional, defaults os dependent
136136

137137
.. py:method:: check_stderr(command, verbose=False, timeout=1*60*60, error_info=None, raise_on_err=True, **kwargs)
138138
@@ -156,7 +156,7 @@ API: Subprocess
156156

157157
.. versionchanged:: 1.1.0 make method
158158
.. versionchanged:: 1.2.0 default timeout 1 hour
159-
.. versionchanged:: 1.10.0 Exception class can be substituted
159+
.. versionchanged:: 3.2.0 Exception class can be substituted
160160

161161

162162
.. py:class:: SubprocessExecuteAsyncResult
@@ -183,4 +183,4 @@ API: Subprocess
183183
184184
``datetime.datetime``
185185

186-
.. versionadded:: 2.11.0
186+
.. versionadded:: 3.4.1

exec_helpers/metaclasses.py

Lines changed: 0 additions & 67 deletions
This file was deleted.

exec_helpers/subprocess_runner.py

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# Copyright 2018 Alexey Stepanov aka penguinolog.
1+
# Copyright 2018 - 2019 Alexey Stepanov aka penguinolog.
22

33
# Copyright 2016 Mirantis, Inc.
44
#
@@ -31,7 +31,6 @@
3131
import typing # noqa: F401 # pylint: disable=unused-import
3232

3333
# External Dependencies
34-
import six
3534
import threaded
3635

3736
# Exec-Helpers Implementation
@@ -40,7 +39,6 @@
4039
from exec_helpers import api
4140
from exec_helpers import exceptions
4241
from exec_helpers import exec_result
43-
from exec_helpers import metaclasses # pylint: disable=unused-import
4442

4543
logger = logging.getLogger(__name__) # type: logging.Logger
4644
# noinspection PyUnresolvedReferences
@@ -57,7 +55,7 @@ def interface(self): # type: () -> subprocess.Popen
5755
return super(SubprocessExecuteAsyncResult, self).interface
5856

5957

60-
class Subprocess(six.with_metaclass(metaclasses.SingleLock, api.ExecHelper)):
58+
class Subprocess(api.ExecHelper):
6159
"""Subprocess helper with timeouts and lock-free FIFO."""
6260

6361
def __init__(self, log_mask_re=None): # type: (typing.Optional[typing.Text]) -> None
@@ -70,7 +68,9 @@ def __init__(self, log_mask_re=None): # type: (typing.Optional[typing.Text]) ->
7068
:type log_mask_re: typing.Optional[str]
7169
7270
.. versionchanged:: 1.2.0 log_mask_re regex rule for masking cmd
73-
.. versionchanged:: 1.9.0 Not singleton anymore. Only lock is shared between all instances.
71+
.. versionchanged:: 3.1.0 Not singleton anymore. Only lock is shared between all instances.
72+
.. versionchanged:: 4.1.0 support chroot
73+
.. versionchanged:: 4.3.0 Lock is not shared anymore: allow parallel call of different instances.
7474
"""
7575
super(Subprocess, self).__init__(logger=logger, log_mask_re=log_mask_re)
7676

@@ -211,8 +211,8 @@ def execute_async(
211211
:raises OSError: impossible to process STDIN
212212
213213
.. versionadded:: 1.2.0
214-
.. versionchanged:: 1.4.0 Use typed NamedTuple as result
215-
.. versionchanged:: 1.12.0 support chroot
214+
.. versionchanged:: 2.1.0 Use typed NamedTuple as result
215+
.. versionchanged:: 3.5.3 support chroot
216216
"""
217217
cmd_for_log = self._mask_command(cmd=command, log_mask_re=log_mask_re)
218218

0 commit comments

Comments
 (0)