diff options
author | Lucian Petrut <lpetrut@cloudbasesolutions.com> | 2016-09-26 17:58:49 +0300 |
---|---|---|
committer | Lucian Petrut <lpetrut@cloudbasesolutions.com> | 2016-10-03 16:57:47 +0000 |
commit | 9ac99b675eae255b660b03d3a1e61599d09f8316 (patch) | |
tree | 02033a0b56816de4b90eb9c822a523af71a9f982 | |
parent | f653c5cf38d54b2d5e942b64e918cfc4e204daeb (diff) | |
download | oslo-concurrency-stable/newton.tar.gz |
Ignore prlimit argument on Windowsnewton-eol3.14.1stable/newton
The built in 'resource' module is used in order to apply process
resource limits. This is not available on Windows.
For the moment, we'll ignore this argument and log a warning
message. In the future, we may provide a portable implementation
for this feature.
Change-Id: I6a82916eb68fbf8737b45a65f71cae1f835d12d1
Closes-Bug: #1627766
(cherry picked from commit 70ff5511053bc7070c071f46978b1ff59b89c4b5)
-rw-r--r-- | oslo_concurrency/processutils.py | 15 | ||||
-rw-r--r-- | oslo_concurrency/tests/unit/test_processutils.py | 22 |
2 files changed, 32 insertions, 5 deletions
diff --git a/oslo_concurrency/processutils.py b/oslo_concurrency/processutils.py index 808ae2a..7fa294e 100644 --- a/oslo_concurrency/processutils.py +++ b/oslo_concurrency/processutils.py @@ -327,11 +327,16 @@ def execute(*cmd, **kwargs): cmd = [str(c) for c in cmd] if prlimit: - args = [sys.executable, '-m', 'oslo_concurrency.prlimit'] - args.extend(prlimit.prlimit_args()) - args.append('--') - args.extend(cmd) - cmd = args + if os.name == 'nt': + LOG.log(loglevel, + _('Process resource limits are ignored as ' + 'this feature is not supported on Windows.')) + else: + args = [sys.executable, '-m', 'oslo_concurrency.prlimit'] + args.extend(prlimit.prlimit_args()) + args.append('--') + args.extend(cmd) + cmd = args sanitized_cmd = strutils.mask_password(' '.join(cmd)) diff --git a/oslo_concurrency/tests/unit/test_processutils.py b/oslo_concurrency/tests/unit/test_processutils.py index 7f68be3..e5ef532 100644 --- a/oslo_concurrency/tests/unit/test_processutils.py +++ b/oslo_concurrency/tests/unit/test_processutils.py @@ -895,3 +895,25 @@ class PrlimitTestCase(test_base.BaseTestCase): self.assertIn(expected, exc.stderr) else: self.fail("ProcessExecutionError not raised") + + @mock.patch.object(os, 'name', 'nt') + @mock.patch.object(processutils.subprocess, "Popen") + def test_prlimit_windows(self, mock_popen): + # We want to ensure that process resource limits are + # ignored on Windows, in which case this feature is not + # supported. We'll just check the command passed to Popen, + # which is expected to be unaltered. + prlimit = self.limit_address_space() + mock_popen.return_value.communicate.return_value = None + + processutils.execute( + *self.SIMPLE_PROGRAM, + prlimit=prlimit, + check_exit_code=False) + + mock_popen.assert_called_once_with( + self.SIMPLE_PROGRAM, + stdin=mock.ANY, stdout=mock.ANY, + stderr=mock.ANY, close_fds=mock.ANY, + preexec_fn=mock.ANY, shell=mock.ANY, + cwd=mock.ANY, env=mock.ANY) |