summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLucian Petrut <lpetrut@cloudbasesolutions.com>2016-09-26 17:58:49 +0300
committerLucian Petrut <lpetrut@cloudbasesolutions.com>2016-10-03 16:57:47 +0000
commit9ac99b675eae255b660b03d3a1e61599d09f8316 (patch)
tree02033a0b56816de4b90eb9c822a523af71a9f982
parentf653c5cf38d54b2d5e942b64e918cfc4e204daeb (diff)
downloadoslo-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.py15
-rw-r--r--oslo_concurrency/tests/unit/test_processutils.py22
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)