Skip to content

Commit 6587898

Browse files
authored
fix: Update function directory in load request to use /home/site/wwwroot (Azure#1480)
* Updating function dir in metadata resp * Updating test imports * Removed path hardcoding * Added UT * Revert FileNotFound error * Added Otel flag * Linting fix * Fixed index func
1 parent a754e58 commit 6587898

File tree

6 files changed

+48
-15
lines changed

6 files changed

+48
-15
lines changed

azure_functions_worker/constants.py

+3
Original file line numberDiff line numberDiff line change
@@ -80,3 +80,6 @@
8080

8181
# Base extension supported Python minor version
8282
BASE_EXT_SUPPORTED_PY_MINOR_VERSION = 8
83+
84+
PYTHON_ENABLE_OPENTELEMETRY = "PYTHON_ENABLE_OPENTELEMETRY"
85+
PYTHON_ENABLE_OPENTELEMETRY_DEFAULT = True

azure_functions_worker/dispatcher.py

+25-12
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,9 @@
3030
PYTHON_SCRIPT_FILE_NAME,
3131
PYTHON_SCRIPT_FILE_NAME_DEFAULT,
3232
PYTHON_LANGUAGE_RUNTIME, PYTHON_ENABLE_INIT_INDEXING,
33-
METADATA_PROPERTIES_WORKER_INDEXED)
33+
METADATA_PROPERTIES_WORKER_INDEXED,
34+
PYTHON_ENABLE_OPENTELEMETRY,
35+
PYTHON_ENABLE_OPENTELEMETRY_DEFAULT)
3436
from .extension import ExtensionManager
3537
from .http_v2 import http_coordinator, initialize_http_server, HttpV2Registry, \
3638
sync_http_request, HttpServerInitError
@@ -318,10 +320,12 @@ async def _handle__worker_init_request(self, request):
318320
constants.SHARED_MEMORY_DATA_TRANSFER: _TRUE,
319321
}
320322

321-
self.update_opentelemetry_status()
323+
if get_app_setting(setting=PYTHON_ENABLE_OPENTELEMETRY,
324+
default_value=PYTHON_ENABLE_OPENTELEMETRY_DEFAULT):
325+
self.update_opentelemetry_status()
322326

323-
if self._otel_libs_available:
324-
capabilities[constants.WORKER_OPEN_TELEMETRY_ENABLED] = _TRUE
327+
if self._otel_libs_available:
328+
capabilities[constants.WORKER_OPEN_TELEMETRY_ENABLED] = _TRUE
325329

326330
if DependencyManager.should_load_cx_dependencies():
327331
DependencyManager.prioritize_customer_dependencies()
@@ -383,8 +387,10 @@ def load_function_metadata(self, function_app_directory, caller_info):
383387
function_path = os.path.join(function_app_directory,
384388
script_file_name)
385389

390+
# For V1, the function path will not exist and
391+
# return None.
386392
self._function_metadata_result = (
387-
self.index_functions(function_path)) \
393+
self.index_functions(function_path, function_app_directory)) \
388394
if os.path.exists(function_path) else None
389395

390396
async def _handle__functions_metadata_request(self, request):
@@ -439,8 +445,9 @@ async def _handle__function_load_request(self, request):
439445

440446
logger.info(
441447
'Received WorkerLoadRequest, request ID %s, function_id: %s,'
442-
'function_name: %s',
443-
self.request_id, function_id, function_name)
448+
'function_name: %s, function_app_directory : %s',
449+
self.request_id, function_id, function_name,
450+
function_app_directory)
444451

445452
programming_model = "V2"
446453
try:
@@ -705,9 +712,14 @@ async def _handle__function_environment_reload_request(self, request):
705712
bindings.load_binding_registry()
706713

707714
capabilities = {}
708-
self.update_opentelemetry_status()
709-
if self._otel_libs_available:
710-
capabilities[constants.WORKER_OPEN_TELEMETRY_ENABLED] = _TRUE
715+
if get_app_setting(
716+
setting=PYTHON_ENABLE_OPENTELEMETRY,
717+
default_value=PYTHON_ENABLE_OPENTELEMETRY_DEFAULT):
718+
self.update_opentelemetry_status()
719+
720+
if self._otel_libs_available:
721+
capabilities[constants.WORKER_OPEN_TELEMETRY_ENABLED] = (
722+
_TRUE)
711723

712724
if is_envvar_true(PYTHON_ENABLE_INIT_INDEXING):
713725
try:
@@ -749,7 +761,7 @@ async def _handle__function_environment_reload_request(self, request):
749761
request_id=self.request_id,
750762
function_environment_reload_response=failure_response)
751763

752-
def index_functions(self, function_path: str):
764+
def index_functions(self, function_path: str, function_dir: str):
753765
indexed_functions = loader.index_function_app(function_path)
754766
logger.info(
755767
"Indexed function app and found %s functions",
@@ -760,7 +772,8 @@ def index_functions(self, function_path: str):
760772
fx_metadata_results, fx_bindings_logs = (
761773
loader.process_indexed_function(
762774
self._functions,
763-
indexed_functions))
775+
indexed_functions,
776+
function_dir))
764777

765778
indexed_function_logs: List[str] = []
766779
indexed_function_bindings_logs = []

azure_functions_worker/loader.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,7 @@ def build_variable_interval_retry(retry, max_retry_count, retry_strategy):
121121

122122

123123
def process_indexed_function(functions_registry: functions.Registry,
124-
indexed_functions):
124+
indexed_functions, function_dir):
125125
"""
126126
fx_metadata_results is a list of the RpcFunctionMetadata for
127127
all the functions in the particular app.
@@ -150,7 +150,7 @@ def process_indexed_function(functions_registry: functions.Registry,
150150
name=function_info.name,
151151
function_id=function_info.function_id,
152152
managed_dependency_enabled=False, # only enabled for PowerShell
153-
directory=function_info.directory,
153+
directory=function_dir,
154154
script_file=indexed_function.function_script_file,
155155
entry_point=function_info.name,
156156
is_proxy=False, # not supported in V4

tests/endtoend/blueprint_functions/functions_in_blueprint_only/blueprint.py

+10
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
import logging
2+
import time
3+
from datetime import datetime
24

35
import azure.functions as func
46

@@ -29,3 +31,11 @@ def default_template(req: func.HttpRequest) -> func.HttpResponse:
2931
" personalized response.",
3032
status_code=200
3133
)
34+
35+
36+
@bp.route(route="http_func")
37+
def http_func(req: func.HttpRequest) -> func.HttpResponse:
38+
time.sleep(1)
39+
40+
current_time = datetime.now().strftime("%H:%M:%S")
41+
return func.HttpResponse(f"{current_time}")

tests/endtoend/test_worker_process_count_functions.py

+8
Original file line numberDiff line numberDiff line change
@@ -68,3 +68,11 @@ class TestWorkerProcessCountStein(TestWorkerProcessCount):
6868
def get_script_dir(cls):
6969
return testutils.E2E_TESTS_FOLDER / 'http_functions' /\
7070
'http_functions_stein'
71+
72+
73+
class TestWorkerProcessCountWithBlueprintStein(TestWorkerProcessCount):
74+
75+
@classmethod
76+
def get_script_dir(cls):
77+
return testutils.E2E_TESTS_FOLDER / 'blueprint_functions' /\
78+
'functions_in_blueprint_only'

tests/unittests/test_dispatcher.py

-1
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,6 @@
2121
from tests.utils import testutils
2222
from tests.utils.testutils import UNIT_TESTS_ROOT
2323

24-
2524
SysVersionInfo = col.namedtuple("VersionInfo", ["major", "minor", "micro",
2625
"releaselevel", "serial"])
2726
DISPATCHER_FUNCTIONS_DIR = testutils.UNIT_TESTS_FOLDER / 'dispatcher_functions'

0 commit comments

Comments
 (0)