Update the max TP threads count to sys.maxsize (#875)

* Removing any max limits altogether.
This commit is contained in:
Varad Meru 2021-07-22 17:07:58 -07:00 коммит произвёл GitHub
Родитель e4adb351e5
Коммит e9afecc971
Не найден ключ, соответствующий данной подписи
Идентификатор ключа GPG: 4AEE18F83AFDEB23
3 изменённых файлов: 36 добавлений и 19 удалений

Просмотреть файл

@ -1,6 +1,8 @@
# Copyright (c) Microsoft Corporation. All rights reserved.
# Licensed under the MIT License.
import sys
# Capabilities
RAW_HTTP_BODY_BYTES = "RawHttpBodyBytes"
TYPED_DATA_COLLECTION = "TypedDataCollection"
@ -36,7 +38,7 @@ UNIX_SHARED_MEMORY_DIRECTORIES = "FUNCTIONS_UNIX_SHARED_MEMORY_DIRECTORIES"
# Setting Defaults
PYTHON_THREADPOOL_THREAD_COUNT_DEFAULT = 1
PYTHON_THREADPOOL_THREAD_COUNT_MIN = 1
PYTHON_THREADPOOL_THREAD_COUNT_MAX = 32
PYTHON_THREADPOOL_THREAD_COUNT_MAX = sys.maxsize
PYTHON_ISOLATE_WORKER_DEPENDENCIES_DEFAULT = False
PYTHON_ISOLATE_WORKER_DEPENDENCIES_DEFAULT_39 = True
PYTHON_ENABLE_WORKER_EXTENSIONS_DEFAULT = False

Просмотреть файл

@ -570,7 +570,9 @@ class Dispatcher(metaclass=DispatcherMeta):
if int_value < PYTHON_THREADPOOL_THREAD_COUNT_MIN or (
int_value > PYTHON_THREADPOOL_THREAD_COUNT_MAX):
logger.warning(f'{PYTHON_THREADPOOL_THREAD_COUNT} must be set '
'to a value between 1 and 32. '
f'to a value between '
f'{PYTHON_THREADPOOL_THREAD_COUNT_MIN} and '
f'{PYTHON_THREADPOOL_THREAD_COUNT_MAX}. '
'Reverting to default value for max_workers')
return False

Просмотреть файл

@ -10,7 +10,9 @@ from unittest.mock import patch
from azure_functions_worker import protos
from azure_functions_worker import testutils
from azure_functions_worker.constants import PYTHON_THREADPOOL_THREAD_COUNT, \
PYTHON_THREADPOOL_THREAD_COUNT_DEFAULT
PYTHON_THREADPOOL_THREAD_COUNT_DEFAULT, \
PYTHON_THREADPOOL_THREAD_COUNT_MAX, \
PYTHON_THREADPOOL_THREAD_COUNT_MIN
SysVersionInfo = col.namedtuple("VersionInfo", ["major", "minor", "micro",
"releaselevel", "serial"])
@ -35,6 +37,7 @@ class TestThreadPoolSettingsPython37(testutils.AsyncTestCase):
script_root=DISPATCHER_FUNCTIONS_DIR)
self._default_workers: Optional[
int] = PYTHON_THREADPOOL_THREAD_COUNT_DEFAULT
self._allowed_max_workers: int = 100000
self._pre_env = dict(os.environ)
self.mock_version_info = patch(
'azure_functions_worker.dispatcher.sys.version_info',
@ -87,10 +90,12 @@ class TestThreadPoolSettingsPython37(testutils.AsyncTestCase):
"""Test if the sync threadpool maximum worker can be set
"""
# Configure thread pool max worker
os.environ.update({PYTHON_THREADPOOL_THREAD_COUNT: '5'})
os.environ.update({PYTHON_THREADPOOL_THREAD_COUNT:
f'{self._allowed_max_workers}'})
async with self._ctrl as host:
await self._check_if_function_is_ok(host)
await self._assert_workers_threadpool(self._ctrl, host, 5)
await self._assert_workers_threadpool(self._ctrl, host,
self._allowed_max_workers)
async def test_dispatcher_sync_threadpool_invalid_worker_count(self):
"""Test when sync threadpool maximum worker is set to an invalid value,
@ -124,15 +129,20 @@ class TestThreadPoolSettingsPython37(testutils.AsyncTestCase):
self._default_workers)
mock_logger.warning.assert_any_call(
f'{PYTHON_THREADPOOL_THREAD_COUNT} must be set to a value '
'between 1 and 32. Reverting to default value for max_workers')
f'between {PYTHON_THREADPOOL_THREAD_COUNT_MIN} and '
f'{PYTHON_THREADPOOL_THREAD_COUNT_MAX}. Reverting to default '
f'value for max_workers')
@unittest.skip("We no more check any max limit. This is up to the customer,"
" how ever high int they want to set")
async def test_dispatcher_sync_threadpool_exceed_max_setting(self):
"""Test if the sync threadpool will pick up default value when the
setting is above maximum
"""
with patch('azure_functions_worker.dispatcher.logger') as mock_logger:
# Configure thread pool max worker to an invalid value
os.environ.update({PYTHON_THREADPOOL_THREAD_COUNT: '33'})
os.environ.update({PYTHON_THREADPOOL_THREAD_COUNT:
f'{self._over_max_workers}'})
async with self._ctrl as host:
await self._check_if_function_is_ok(host)
@ -142,8 +152,9 @@ class TestThreadPoolSettingsPython37(testutils.AsyncTestCase):
mock_logger.warning.assert_any_call(
f'{PYTHON_THREADPOOL_THREAD_COUNT} must be set to a value '
'between 1 and 32. '
'Reverting to default value for max_workers')
f'between {PYTHON_THREADPOOL_THREAD_COUNT_MIN} and '
f'{PYTHON_THREADPOOL_THREAD_COUNT_MAX}. Reverting to default '
f'value for max_workers')
async def test_dispatcher_sync_threadpool_in_placeholder(self):
"""Test if the sync threadpool will pick up app setting in placeholder
@ -154,10 +165,10 @@ class TestThreadPoolSettingsPython37(testutils.AsyncTestCase):
# Reload environment variable on specialization
await host.reload_environment(environment={
PYTHON_THREADPOOL_THREAD_COUNT: '3'
PYTHON_THREADPOOL_THREAD_COUNT: f'{self._allowed_max_workers}'
})
# Ensure the dispatcher sync threadpool should fallback to 1
await self._assert_workers_threadpool(self._ctrl, host, 3)
await self._assert_workers_threadpool(self._ctrl, host,
self._allowed_max_workers)
async def test_dispatcher_sync_threadpool_in_placeholder_invalid(self):
"""Test if the sync threadpool will use the default setting when the
@ -178,6 +189,8 @@ class TestThreadPoolSettingsPython37(testutils.AsyncTestCase):
mock_logger.warning.assert_any_call(
f'{PYTHON_THREADPOOL_THREAD_COUNT} must be an integer')
@unittest.skip("We no more check any max limit. This is up to the customer,"
" how ever high int they want to set")
async def test_dispatcher_sync_threadpool_in_placeholder_above_max(self):
"""Test if the sync threadpool will use the default setting when the
app setting is above maximum
@ -188,7 +201,7 @@ class TestThreadPoolSettingsPython37(testutils.AsyncTestCase):
# Reload environment variable on specialization
await host.reload_environment(environment={
PYTHON_THREADPOOL_THREAD_COUNT: '33'
PYTHON_THREADPOOL_THREAD_COUNT: f'{self._over_max_workers}'
})
await self._assert_workers_threadpool(self._ctrl, host,
self._default_workers)
@ -196,7 +209,7 @@ class TestThreadPoolSettingsPython37(testutils.AsyncTestCase):
mock_logger.warning.assert_any_call(
f'{PYTHON_THREADPOOL_THREAD_COUNT} must be set to a '
f'value '
'between 1 and 32. '
'between 1 and 1024. '
'Reverting to default value for max_workers')
async def test_dispatcher_sync_threadpool_in_placeholder_below_min(self):
@ -216,10 +229,10 @@ class TestThreadPoolSettingsPython37(testutils.AsyncTestCase):
self._default_workers)
mock_logger.warning.assert_any_call(
f'{PYTHON_THREADPOOL_THREAD_COUNT} must be set to a '
f'value '
'between 1 and 32. '
'Reverting to default value for max_workers')
f'{PYTHON_THREADPOOL_THREAD_COUNT} must be set to a value '
f'between {PYTHON_THREADPOOL_THREAD_COUNT_MIN} and '
f'{PYTHON_THREADPOOL_THREAD_COUNT_MAX}. Reverting to '
f'default value for max_workers')
async def test_sync_invocation_request_log(self):
with patch('azure_functions_worker.dispatcher.logger') as mock_logger:
@ -346,7 +359,7 @@ class TestThreadPoolSettingsPython37(testutils.AsyncTestCase):
# Check if the dispatcher still function
await self._check_if_function_is_ok(host)
async def _check_if_function_is_ok(self, host) -> Tuple[str, str]:
async def _check_if_function_is_ok(self, host) -> Tuple[str, str, str]:
# Ensure the function can be properly loaded
function_name = "show_context"
func_id, load_r = await host.load_function(function_name)