Ignore prlimit argument on Windows
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
This commit is contained in:
parent
e27945cc88
commit
70ff551105
@ -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))
|
||||
|
||||
|
@ -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)
|
||||
|
Loading…
x
Reference in New Issue
Block a user