Skip to content

Commit f36ae74

Browse files
authored
Merge branch 'v3.x-dev' into gaaguiar/remove_azure_init
2 parents 6e7929d + e78e2e3 commit f36ae74

File tree

6 files changed

+38
-17
lines changed

6 files changed

+38
-17
lines changed

azure_functions_worker/dispatcher.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@
3434
from .logging import disable_console_logging, enable_console_logging
3535
from .logging import enable_debug_logging_recommendation
3636
from .logging import (logger, error_logger, is_system_log_category,
37-
CONSOLE_LOG_PREFIX)
37+
CONSOLE_LOG_PREFIX, format_exception)
3838
from .utils.common import get_app_setting, is_envvar_true
3939
from .utils.dependency import DependencyManager
4040
from .utils.tracing import marshall_exception_trace
@@ -696,7 +696,9 @@ def gen(resp_queue):
696696
if ex is grpc_req_stream:
697697
# Yes, this is how grpc_req_stream iterator exits.
698698
return
699-
error_logger.exception('unhandled error in gRPC thread')
699+
error_logger.exception(
700+
'unhandled error in gRPC thread. Exception: {0}'.format(
701+
format_exception(ex)))
700702
raise
701703

702704

azure_functions_worker/logging.py

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
from typing import Optional
55
import logging
66
import logging.handlers
7+
import traceback
78
import sys
89

910
# Logging Prefixes
@@ -20,6 +21,13 @@
2021
error_handler: Optional[logging.Handler] = None
2122

2223

24+
def format_exception(exception):
25+
msg = str(exception) + "\n"
26+
msg += ''.join(traceback.format_exception(
27+
etype=type(exception), value=exception, tb=exception.__traceback__))
28+
return msg
29+
30+
2331
def setup(log_level, log_destination):
2432
# Since handler and error_handler are moved to the global scope,
2533
# before assigning to these handlers, we should define 'global' keyword

azure_functions_worker/main.py

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -36,20 +36,21 @@ def main():
3636

3737
from . import logging
3838
from ._thirdparty import aio_compat
39-
from .logging import error_logger, logger
39+
from .logging import error_logger, logger, format_exception
4040

4141
args = parse_args()
4242
logging.setup(log_level=args.log_level, log_destination=args.log_to)
43-
44-
logger.info('Starting Azure Functions Python Worker.')
45-
logger.info('Worker ID: %s, Request ID: %s, Host Address: %s:%s',
43+
logger.info('Starting Azure Functions Python Worker. \n'
44+
'Worker ID: %s, Request ID: %s, Host Address: %s:%s',
4645
args.worker_id, args.request_id, args.host, args.port)
4746

4847
try:
4948
return aio_compat.run(start_async(
5049
args.host, args.port, args.worker_id, args.request_id))
51-
except Exception:
52-
error_logger.exception('unhandled error in functions worker')
50+
except Exception as ex:
51+
error_logger.exception(
52+
'unhandled error in functions worker: {0}'.format(
53+
format_exception(ex)))
5354
raise
5455

5556

setup.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@
112112
"grpcio~=1.43.0",
113113
"grpcio-tools~=1.43.0",
114114
"protobuf~=3.19.3",
115-
"azure-functions==1.10.1"
115+
"azure-functions==1.11.3b2"
116116
]
117117

118118

tests/endtoend/test_cosmosdb_functions.py

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -35,10 +35,13 @@ def test_cosmosdb_trigger(self):
3535
response = r.json()
3636
response.pop('_metadata', None)
3737

38-
self.assertEqual(
39-
response,
40-
doc
41-
)
38+
self.assertEqual(response['id'], doc['id'])
39+
self.assertEqual(response['data'], doc['data'])
40+
self.assertTrue('_etag' in response)
41+
self.assertTrue('_lsn' in response)
42+
self.assertTrue('_rid' in response)
43+
self.assertTrue('_self' in response)
44+
self.assertTrue('_ts' in response)
4245
except AssertionError:
4346
if try_no == max_retries - 1:
4447
raise
@@ -67,10 +70,14 @@ def test_cosmosdb_input(self):
6770
self.assertEqual(r.status_code, 200)
6871
response = r.json()
6972

70-
self.assertEqual(
71-
response,
72-
doc
73-
)
73+
# _lsn is present for cosmosdb change feed only,
74+
# ref https://aka.ms/cosmos-change-feed
75+
self.assertEqual(response['id'], doc['id'])
76+
self.assertEqual(response['data'], doc['data'])
77+
self.assertTrue('_etag' in response)
78+
self.assertTrue('_rid' in response)
79+
self.assertTrue('_self' in response)
80+
self.assertTrue('_ts' in response)
7481
except AssertionError:
7582
if try_no == max_retries - 1:
7683
raise

tests/endtoend/test_dependency_isolation_functions.py

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22
# Licensed under the MIT License.
33
import os
44
import importlib.util
5+
from unittest import skip
56
from unittest.case import skipIf
67
from unittest.mock import patch
78

@@ -128,6 +129,7 @@ def test_loading_libraries_from_customers_package(self):
128129
)
129130

130131

132+
@skip("Skipping dependency isolation test for dedicated. Needs investigation")
131133
class TestOlderVersionOfAzFuncDependencyIsolationOnDedicated(
132134
testutils.WebHostTestCase):
133135
"""Test the dependency manager E2E scenario via Http Trigger.
@@ -176,6 +178,7 @@ def test_loading_libraries_from_customers_package(self):
176178
self.expected_azfunc_version, libraries['func.version'])
177179

178180

181+
@skip("Skipping dependency isolation test for dedicated. Needs investigation")
179182
class TestNewerVersionOfAzFuncDependencyIsolationOnDedicated(
180183
testutils.WebHostTestCase):
181184
"""Test the dependency manager E2E scenario via Http Trigger.

0 commit comments

Comments
 (0)