From c3e88a35189fa3b6966b261206f2350af4d44cd6 Mon Sep 17 00:00:00 2001 From: Luke Zhang Date: Fri, 31 Oct 2025 08:46:58 -0700 Subject: [PATCH 1/2] Revert "Reapply "Fix: Unable to run ADOT Python unit tests with latest Tox release (#521)" (#523) (#527)" This reverts commit 49f8a7a8937f591c1cfc3c49ab35f717b44ab215. --- .github/actions/set_up/action.yml | 8 ++------ CHANGELOG.md | 3 --- tox.ini | 10 +++++----- 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/.github/actions/set_up/action.yml b/.github/actions/set_up/action.yml index b11c98fef..433367f95 100644 --- a/.github/actions/set_up/action.yml +++ b/.github/actions/set_up/action.yml @@ -27,8 +27,7 @@ runs: - name: Install tox shell: bash - run: | - pip install tox==4.30.3 + run: pip install tox==3.27.1 tox-factor - name: Cache tox environment # Preserves .tox directory between runs for faster installs @@ -42,7 +41,4 @@ runs: - name: Run unit tests/benchmarks with tox if: ${{ inputs.run_unit_tests == 'true' }} shell: bash - run: | - ENV_NAME="${{ inputs.python_version }}-test-${{ inputs.package_name }}" - echo "Running tox env: $ENV_NAME" - tox -e "$ENV_NAME" -- -ra + run: tox -f ${{ inputs.python_version }}-${{ inputs.package_name }} -- -ra diff --git a/CHANGELOG.md b/CHANGELOG.md index 138824592..2c94a1f79 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -17,10 +17,7 @@ If your change does not need a CHANGELOG entry, add the "skip changelog" label t ([#497](https://github.com/aws-observability/aws-otel-python-instrumentation/pull/497)) - Fix timeout handling for exceeded deadline in retry logic in OTLPAwsLogsExporter ([#501](https://github.com/aws-observability/aws-otel-python-instrumentation/pull/501)) -- Fix: Unable to run ADOT Python unit tests with latest Tox release - ([#521](https://github.com/aws-observability/aws-otel-python-instrumentation/pull/521)) - Fix Gevent patch regression with correct import order ([#522](https://github.com/aws-observability/aws-otel-python-instrumentation/pull/522)) - Bump ADOT Python version to 0.13.0 and OTel dependencies to 1.37.0/0.58b0 ([#524](https://github.com/aws-observability/aws-otel-python-instrumentation/pull/524)) - diff --git a/tox.ini b/tox.ini index 99159f169..3fe9b6354 100644 --- a/tox.ini +++ b/tox.ini @@ -34,11 +34,11 @@ commands_pre = ; Install common packages for all the tests. These are not needed in all the ; cases but it saves a lot of boilerplate in this file. test: pip install botocore - test: pip install opentelemetry-api[test]@{env:CORE_REPO}\#egg=opentelemetry-api&subdirectory=opentelemetry-api - test: pip install opentelemetry-sdk[test]@{env:CORE_REPO}\#egg=opentelemetry-sdk&subdirectory=opentelemetry-sdk - test: pip install opentelemetry-instrumentation[test]@{env:CONTRIB_REPO}\#egg=opentelemetry-instrumentation&subdirectory=opentelemetry-instrumentation - test: pip install opentelemetry-exporter-otlp[test]@{env:CORE_REPO}\#egg=opentelemetry-exporter-otlp&subdirectory=exporter/opentelemetry-exporter-otlp - test: pip install opentelemetry-test-utils@{env:CORE_REPO}\#egg=opentelemetry-test-utils&subdirectory=tests/opentelemetry-test-utils + test: pip install "opentelemetry-api[test] @ {env:CORE_REPO}#egg=opentelemetry-api&subdirectory=opentelemetry-api" + test: pip install "opentelemetry-sdk[test] @ {env:CORE_REPO}#egg=opentelemetry-sdk&subdirectory=opentelemetry-sdk" + test: pip install "opentelemetry-instrumentation[test] @ {env:CONTRIB_REPO}#egg=opentelemetry-instrumentation&subdirectory=opentelemetry-instrumentation" + test: pip install "opentelemetry-exporter-otlp[test] @ {env:CORE_REPO}#egg=opentelemetry-exporter-otlp&subdirectory=exporter/opentelemetry-exporter-otlp" + test: pip install "opentelemetry-test-utils @ {env:CORE_REPO}#egg=opentelemetry-test-utils&subdirectory=tests/opentelemetry-test-utils" aws-opentelemetry-distro: pip install {toxinidir}/aws-opentelemetry-distro commands = From 505d154a772a26fca392b85f8cdd4c1711643dd1 Mon Sep 17 00:00:00 2001 From: Luke Zhang Date: Fri, 31 Oct 2025 08:47:08 -0700 Subject: [PATCH 2/2] Revert "Bump ADOT Python version to 0.13.0 and OTel dependencies to 1.37.0/0.58b0 (#524)" This reverts commit d3b22ba6c1ac99079ee01ffc7cf273a974c4e9f2. --- CHANGELOG.md | 2 - aws-opentelemetry-distro/pyproject.toml | 110 +++++++++--------- .../aws_batch_unsampled_span_processor.py | 14 +-- .../distro/aws_opentelemetry_configurator.py | 5 +- ..._aws_cw_otlp_batch_log_record_processor.py | 16 +-- .../otlp/aws/logs/otlp_aws_logs_exporter.py | 3 +- .../amazon/opentelemetry/distro/version.py | 2 +- ..._aws_cw_otlp_batch_log_record_processor.py | 38 +++--- .../patches/test_instrumentation_patch.py | 4 +- ...test_aws_batch_unsampled_span_processor.py | 6 +- .../test_aws_opentelementry_configurator.py | 2 +- .../applications/botocore/requirements.txt | 2 +- .../applications/django/requirements.txt | 2 +- .../mysql-connector/requirements.txt | 2 +- .../applications/mysqlclient/requirements.txt | 2 +- .../applications/psycopg2/requirements.txt | 2 +- .../applications/pymysql/requirements.txt | 2 +- .../applications/requests/requirements.txt | 2 +- .../images/mock-collector/pyproject.toml | 10 +- .../images/mock-collector/requirements.txt | 10 +- contract-tests/tests/pyproject.toml | 8 +- dev-requirements.txt | 2 +- tox.ini | 4 +- 23 files changed, 123 insertions(+), 127 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2c94a1f79..04f0e5b6e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -19,5 +19,3 @@ If your change does not need a CHANGELOG entry, add the "skip changelog" label t ([#501](https://github.com/aws-observability/aws-otel-python-instrumentation/pull/501)) - Fix Gevent patch regression with correct import order ([#522](https://github.com/aws-observability/aws-otel-python-instrumentation/pull/522)) -- Bump ADOT Python version to 0.13.0 and OTel dependencies to 1.37.0/0.58b0 - ([#524](https://github.com/aws-observability/aws-otel-python-instrumentation/pull/524)) diff --git a/aws-opentelemetry-distro/pyproject.toml b/aws-opentelemetry-distro/pyproject.toml index 3735545db..60a1a48e7 100644 --- a/aws-opentelemetry-distro/pyproject.toml +++ b/aws-opentelemetry-distro/pyproject.toml @@ -26,63 +26,63 @@ classifiers = [ ] dependencies = [ - "opentelemetry-api == 1.37.0", - "opentelemetry-sdk == 1.37.0", - "opentelemetry-exporter-otlp-proto-grpc == 1.37.0", - "opentelemetry-exporter-otlp-proto-http == 1.37.0", - "opentelemetry-propagator-b3 == 1.37.0", - "opentelemetry-propagator-jaeger == 1.37.0", - "opentelemetry-exporter-otlp-proto-common == 1.37.0", + "opentelemetry-api == 1.33.1", + "opentelemetry-sdk == 1.33.1", + "opentelemetry-exporter-otlp-proto-grpc == 1.33.1", + "opentelemetry-exporter-otlp-proto-http == 1.33.1", + "opentelemetry-propagator-b3 == 1.33.1", + "opentelemetry-propagator-jaeger == 1.33.1", + "opentelemetry-exporter-otlp-proto-common == 1.33.1", "opentelemetry-sdk-extension-aws == 2.0.2", "opentelemetry-propagator-aws-xray == 1.0.1", - "opentelemetry-distro == 0.58b0", - "opentelemetry-processor-baggage == 0.58b0", - "opentelemetry-propagator-ot-trace == 0.58b0", - "opentelemetry-instrumentation == 0.58b0", - "opentelemetry-instrumentation-aws-lambda == 0.58b0", - "opentelemetry-instrumentation-aio-pika == 0.58b0", - "opentelemetry-instrumentation-aiohttp-client == 0.58b0", - "opentelemetry-instrumentation-aiokafka == 0.58b0", - "opentelemetry-instrumentation-aiopg == 0.58b0", - "opentelemetry-instrumentation-asgi == 0.58b0", - "opentelemetry-instrumentation-asyncpg == 0.58b0", - "opentelemetry-instrumentation-boto == 0.58b0", - "opentelemetry-instrumentation-boto3sqs == 0.58b0", - "opentelemetry-instrumentation-botocore == 0.58b0", - "opentelemetry-instrumentation-celery == 0.58b0", - "opentelemetry-instrumentation-confluent-kafka == 0.58b0", - "opentelemetry-instrumentation-dbapi == 0.58b0", - "opentelemetry-instrumentation-django == 0.58b0", - "opentelemetry-instrumentation-elasticsearch == 0.58b0", - "opentelemetry-instrumentation-falcon == 0.58b0", - "opentelemetry-instrumentation-fastapi == 0.58b0", - "opentelemetry-instrumentation-flask == 0.58b0", - "opentelemetry-instrumentation-grpc == 0.58b0", - "opentelemetry-instrumentation-httpx == 0.58b0", - "opentelemetry-instrumentation-jinja2 == 0.58b0", - "opentelemetry-instrumentation-kafka-python == 0.58b0", - "opentelemetry-instrumentation-logging == 0.58b0", - "opentelemetry-instrumentation-mysql == 0.58b0", - "opentelemetry-instrumentation-mysqlclient == 0.58b0", - "opentelemetry-instrumentation-pika == 0.58b0", - "opentelemetry-instrumentation-psycopg2 == 0.58b0", - "opentelemetry-instrumentation-pymemcache == 0.58b0", - "opentelemetry-instrumentation-pymongo == 0.58b0", - "opentelemetry-instrumentation-pymysql == 0.58b0", - "opentelemetry-instrumentation-pyramid == 0.58b0", - "opentelemetry-instrumentation-redis == 0.58b0", - "opentelemetry-instrumentation-remoulade == 0.58b0", - "opentelemetry-instrumentation-requests == 0.58b0", - "opentelemetry-instrumentation-sqlalchemy == 0.58b0", - "opentelemetry-instrumentation-sqlite3 == 0.58b0", - "opentelemetry-instrumentation-starlette == 0.58b0", - "opentelemetry-instrumentation-system-metrics == 0.58b0", - "opentelemetry-instrumentation-tornado == 0.58b0", - "opentelemetry-instrumentation-tortoiseorm == 0.58b0", - "opentelemetry-instrumentation-urllib == 0.58b0", - "opentelemetry-instrumentation-urllib3 == 0.58b0", - "opentelemetry-instrumentation-wsgi == 0.58b0", - "opentelemetry-instrumentation-cassandra == 0.58b0", + "opentelemetry-distro == 0.54b1", + "opentelemetry-processor-baggage == 0.54b1", + "opentelemetry-propagator-ot-trace == 0.54b1", + "opentelemetry-instrumentation == 0.54b1", + "opentelemetry-instrumentation-aws-lambda == 0.54b1", + "opentelemetry-instrumentation-aio-pika == 0.54b1", + "opentelemetry-instrumentation-aiohttp-client == 0.54b1", + "opentelemetry-instrumentation-aiokafka == 0.54b1", + "opentelemetry-instrumentation-aiopg == 0.54b1", + "opentelemetry-instrumentation-asgi == 0.54b1", + "opentelemetry-instrumentation-asyncpg == 0.54b1", + "opentelemetry-instrumentation-boto == 0.54b1", + "opentelemetry-instrumentation-boto3sqs == 0.54b1", + "opentelemetry-instrumentation-botocore == 0.54b1", + "opentelemetry-instrumentation-celery == 0.54b1", + "opentelemetry-instrumentation-confluent-kafka == 0.54b1", + "opentelemetry-instrumentation-dbapi == 0.54b1", + "opentelemetry-instrumentation-django == 0.54b1", + "opentelemetry-instrumentation-elasticsearch == 0.54b1", + "opentelemetry-instrumentation-falcon == 0.54b1", + "opentelemetry-instrumentation-fastapi == 0.54b1", + "opentelemetry-instrumentation-flask == 0.54b1", + "opentelemetry-instrumentation-grpc == 0.54b1", + "opentelemetry-instrumentation-httpx == 0.54b1", + "opentelemetry-instrumentation-jinja2 == 0.54b1", + "opentelemetry-instrumentation-kafka-python == 0.54b1", + "opentelemetry-instrumentation-logging == 0.54b1", + "opentelemetry-instrumentation-mysql == 0.54b1", + "opentelemetry-instrumentation-mysqlclient == 0.54b1", + "opentelemetry-instrumentation-pika == 0.54b1", + "opentelemetry-instrumentation-psycopg2 == 0.54b1", + "opentelemetry-instrumentation-pymemcache == 0.54b1", + "opentelemetry-instrumentation-pymongo == 0.54b1", + "opentelemetry-instrumentation-pymysql == 0.54b1", + "opentelemetry-instrumentation-pyramid == 0.54b1", + "opentelemetry-instrumentation-redis == 0.54b1", + "opentelemetry-instrumentation-remoulade == 0.54b1", + "opentelemetry-instrumentation-requests == 0.54b1", + "opentelemetry-instrumentation-sqlalchemy == 0.54b1", + "opentelemetry-instrumentation-sqlite3 == 0.54b1", + "opentelemetry-instrumentation-starlette == 0.54b1", + "opentelemetry-instrumentation-system-metrics == 0.54b1", + "opentelemetry-instrumentation-tornado == 0.54b1", + "opentelemetry-instrumentation-tortoiseorm == 0.54b1", + "opentelemetry-instrumentation-urllib == 0.54b1", + "opentelemetry-instrumentation-urllib3 == 0.54b1", + "opentelemetry-instrumentation-wsgi == 0.54b1", + "opentelemetry-instrumentation-cassandra == 0.54b1", ] [project.optional-dependencies] diff --git a/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/aws_batch_unsampled_span_processor.py b/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/aws_batch_unsampled_span_processor.py index b3da2abf8..367ff38ee 100644 --- a/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/aws_batch_unsampled_span_processor.py +++ b/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/aws_batch_unsampled_span_processor.py @@ -12,9 +12,6 @@ class BatchUnsampledSpanProcessor(BaseBatchSpanProcessor): - def __init__(self, *args, **kwargs): - super().__init__(*args, **kwargs) - self._spans_dropped = False # pylint: disable=no-self-use def on_start(self, span: Span, parent_context: Optional[Context] = None) -> None: @@ -25,18 +22,19 @@ def on_end(self, span: ReadableSpan) -> None: if span.context.trace_flags.sampled: return - if self._batch_processor._shutdown: + if self.done: logger.warning("Already shutdown, dropping span.") return - if len(self._batch_processor._queue) == self._batch_processor._max_queue_size: + if len(self.queue) == self.max_queue_size: # pylint: disable=access-member-before-definition if not self._spans_dropped: logger.warning("Queue is full, likely spans will be dropped.") # pylint: disable=attribute-defined-outside-init self._spans_dropped = True - self._batch_processor._queue.appendleft(span) + self.queue.appendleft(span) - if len(self._batch_processor._queue) >= self._batch_processor._max_export_batch_size: - self._batch_processor._worker_awaken.set() + if len(self.queue) >= self.max_export_batch_size: + with self.condition: + self.condition.notify() diff --git a/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/aws_opentelemetry_configurator.py b/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/aws_opentelemetry_configurator.py index 41fa542db..0eabca5e7 100644 --- a/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/aws_opentelemetry_configurator.py +++ b/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/aws_opentelemetry_configurator.py @@ -43,7 +43,7 @@ _import_id_generator, _import_sampler, _OTelSDKConfigurator, - _overwrite_logging_config_fns, + _patch_basic_config, ) from opentelemetry.sdk._events import EventLoggerProvider from opentelemetry.sdk._logs import LoggerProvider, LoggingHandler @@ -230,10 +230,11 @@ def _init_logging( set_event_logger_provider(event_logger_provider) if setup_logging_handler: + _patch_basic_config() + # Add OTel handler handler = LoggingHandler(level=logging.NOTSET, logger_provider=provider) logging.getLogger().addHandler(handler) - _overwrite_logging_config_fns(handler) def _init_tracing( diff --git a/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/exporter/otlp/aws/logs/_aws_cw_otlp_batch_log_record_processor.py b/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/exporter/otlp/aws/logs/_aws_cw_otlp_batch_log_record_processor.py index 51c19d731..fe90e1f90 100644 --- a/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/exporter/otlp/aws/logs/_aws_cw_otlp_batch_log_record_processor.py +++ b/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/exporter/otlp/aws/logs/_aws_cw_otlp_batch_log_record_processor.py @@ -8,8 +8,8 @@ from amazon.opentelemetry.distro.exporter.otlp.aws.logs.otlp_aws_logs_exporter import OTLPAwsLogExporter from opentelemetry.context import _SUPPRESS_INSTRUMENTATION_KEY, attach, detach, set_value from opentelemetry.sdk._logs import LogData +from opentelemetry.sdk._logs._internal.export import BatchLogExportStrategy from opentelemetry.sdk._logs.export import BatchLogRecordProcessor -from opentelemetry.sdk._shared_internal import BatchExportStrategy from opentelemetry.util.types import AnyValue _logger = logging.getLogger(__name__) @@ -89,7 +89,7 @@ def __init__( self._exporter = exporter - def _export(self, batch_strategy: BatchExportStrategy) -> None: + def _export(self, batch_strategy: BatchLogExportStrategy) -> None: """ Explicitly overrides upstream _export method to add AWS CloudWatch size-based batching See: @@ -102,20 +102,20 @@ def _export(self, batch_strategy: BatchExportStrategy) -> None: - Estimated data size of exported batches will typically be <= 1 MB except for the case below: - If the estimated data size of an exported batch is ever > 1 MB then the batch size is guaranteed to be 1 """ - with self._batch_processor._export_lock: + with self._export_lock: iteration = 0 # We could see concurrent export calls from worker and force_flush. We call _should_export_batch # once the lock is obtained to see if we still need to make the requested export. - while self._batch_processor._should_export_batch(batch_strategy, iteration): + while self._should_export_batch(batch_strategy, iteration): iteration += 1 token = attach(set_value(_SUPPRESS_INSTRUMENTATION_KEY, True)) try: - batch_length = min(self._batch_processor._max_export_batch_size, len(self._batch_processor._queue)) + batch_length = min(self._max_export_batch_size, len(self._queue)) batch_data_size = 0 batch = [] for _ in range(batch_length): - log_data: LogData = self._batch_processor._queue.pop() + log_data: LogData = self._queue.pop() log_size = self._estimate_log_size(log_data) if batch and (batch_data_size + log_size > self._MAX_LOG_REQUEST_BYTE_SIZE): @@ -252,7 +252,7 @@ def _estimate_utf8_size(s: str): # https://github.com/open-telemetry/opentelemetry-python/issues/3193 # https://github.com/open-telemetry/opentelemetry-python/blob/main/opentelemetry-sdk/src/opentelemetry/sdk/_shared_internal/__init__.py#L199 def force_flush(self, timeout_millis: Optional[int] = None) -> bool: - if self._batch_processor._shutdown: + if self._shutdown: return False - self._export(BatchExportStrategy.EXPORT_AT_LEAST_ONE_BATCH) + self._export(BatchLogExportStrategy.EXPORT_AT_LEAST_ONE_BATCH) return True diff --git a/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/exporter/otlp/aws/logs/otlp_aws_logs_exporter.py b/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/exporter/otlp/aws/logs/otlp_aws_logs_exporter.py index b61cc09a2..07c1cb76a 100644 --- a/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/exporter/otlp/aws/logs/otlp_aws_logs_exporter.py +++ b/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/exporter/otlp/aws/logs/otlp_aws_logs_exporter.py @@ -18,7 +18,6 @@ from amazon.opentelemetry.distro.exporter.otlp.aws.common.aws_auth_session import AwsAuthSession from opentelemetry.exporter.otlp.proto.common._log_encoder import encode_logs from opentelemetry.exporter.otlp.proto.http import Compression -from opentelemetry.exporter.otlp.proto.http._common import _is_retryable from opentelemetry.exporter.otlp.proto.http._log_exporter import OTLPLogExporter from opentelemetry.sdk._logs import LogData from opentelemetry.sdk._logs.export import LogExportResult @@ -172,7 +171,7 @@ def _retryable(resp: Response) -> bool: """ # See: https://opentelemetry.io/docs/specs/otlp/#otlphttp-throttling - return resp.status_code in (429, 503) or _is_retryable(resp) + return resp.status_code in (429, 503) or OTLPLogExporter._retryable(resp) def _get_retry_delay_sec(self, headers: CaseInsensitiveDict, retry_num: int) -> float: """ diff --git a/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/version.py b/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/version.py index b203bb5df..05dff4918 100644 --- a/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/version.py +++ b/aws-opentelemetry-distro/src/amazon/opentelemetry/distro/version.py @@ -1,4 +1,4 @@ # Copyright Amazon.com, Inc. or its affiliates. All Rights Reserved. # SPDX-License-Identifier: Apache-2.0 -__version__ = "0.13.0.dev0" +__version__ = "0.12.1.dev0" diff --git a/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/exporter/otlp/aws/logs/test_aws_cw_otlp_batch_log_record_processor.py b/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/exporter/otlp/aws/logs/test_aws_cw_otlp_batch_log_record_processor.py index 814760647..748ddf199 100644 --- a/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/exporter/otlp/aws/logs/test_aws_cw_otlp_batch_log_record_processor.py +++ b/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/exporter/otlp/aws/logs/test_aws_cw_otlp_batch_log_record_processor.py @@ -7,11 +7,11 @@ from amazon.opentelemetry.distro.exporter.otlp.aws.logs._aws_cw_otlp_batch_log_record_processor import ( AwsCloudWatchOtlpBatchLogRecordProcessor, + BatchLogExportStrategy, ) from opentelemetry._logs.severity import SeverityNumber from opentelemetry.sdk._logs import LogData, LogRecord from opentelemetry.sdk._logs.export import LogExportResult -from opentelemetry.sdk._shared_internal import BatchExportStrategy from opentelemetry.sdk.util.instrumentation import InstrumentationScope from opentelemetry.trace import TraceFlags from opentelemetry.util.types import AnyValue @@ -151,14 +151,14 @@ def test_export_single_batch_under_size_limit(self, _, __, ___): for log in test_logs: size = self.processor._estimate_log_size(log) total_data_size += size - self.processor._batch_processor._queue.appendleft(log) + self.processor._queue.appendleft(log) - self.processor._export(batch_strategy=BatchExportStrategy.EXPORT_ALL) + self.processor._export(batch_strategy=BatchLogExportStrategy.EXPORT_ALL) args, _ = self.mock_exporter.export.call_args actual_batch = args[0] self.assertLess(total_data_size, self.processor._MAX_LOG_REQUEST_BYTE_SIZE) - self.assertEqual(len(self.processor._batch_processor._queue), 0) + self.assertEqual(len(self.processor._queue), 0) self.assertEqual(len(actual_batch), log_count) self.mock_exporter.export.assert_called_once() @@ -175,11 +175,11 @@ def test_export_single_batch_all_logs_over_size_limit(self, _, __, ___): test_logs = self.generate_test_log_data(log_body=large_log_body, count=15) for log in test_logs: - self.processor._batch_processor._queue.appendleft(log) + self.processor._queue.appendleft(log) - self.processor._export(batch_strategy=BatchExportStrategy.EXPORT_ALL) + self.processor._export(batch_strategy=BatchLogExportStrategy.EXPORT_ALL) - self.assertEqual(len(self.processor._batch_processor._queue), 0) + self.assertEqual(len(self.processor._queue), 0) self.assertEqual(self.mock_exporter.export.call_count, len(test_logs)) batches = self.mock_exporter.export.call_args_list @@ -209,11 +209,11 @@ def test_export_single_batch_some_logs_over_size_limit(self, _, __, ___): test_logs = large_logs + small_logs for log in test_logs: - self.processor._batch_processor._queue.appendleft(log) + self.processor._queue.appendleft(log) - self.processor._export(batch_strategy=BatchExportStrategy.EXPORT_ALL) + self.processor._export(batch_strategy=BatchLogExportStrategy.EXPORT_ALL) - self.assertEqual(len(self.processor._batch_processor._queue), 0) + self.assertEqual(len(self.processor._queue), 0) self.assertEqual(self.mock_exporter.export.call_count, 5) batches = self.mock_exporter.export.call_args_list @@ -249,22 +249,22 @@ def test_force_flush_returns_false_when_shutdown(self): def test_force_flush_exports_only_one_batch(self, _, __, ___): """Tests that force_flush should try to at least export one batch of logs. Rest of the logs will be dropped""" # Set max_export_batch_size to 5 to limit batch size - self.processor._batch_processor._max_export_batch_size = 5 - self.processor._batch_processor._shutdown = False + self.processor._max_export_batch_size = 5 + self.processor._shutdown = False # Add 6 logs to queue, after the export there should be 1 log remaining log_count = 6 test_logs = self.generate_test_log_data(log_body="test message", count=log_count) for log in test_logs: - self.processor._batch_processor._queue.appendleft(log) + self.processor._queue.appendleft(log) - self.assertEqual(len(self.processor._batch_processor._queue), log_count) + self.assertEqual(len(self.processor._queue), log_count) result = self.processor.force_flush() self.assertTrue(result) - self.assertEqual(len(self.processor._batch_processor._queue), 1) + self.assertEqual(len(self.processor._queue), 1) self.mock_exporter.export.assert_called_once() # Verify only one batch of 5 logs was exported @@ -287,10 +287,10 @@ def test_export_handles_exception_gracefully(self, mock_logger, _, __, ___): # Add logs to queue test_logs = self.generate_test_log_data(log_body="test message", count=2) for log in test_logs: - self.processor._batch_processor._queue.appendleft(log) + self.processor._queue.appendleft(log) # Call _export - should not raise exception - self.processor._export(batch_strategy=BatchExportStrategy.EXPORT_ALL) + self.processor._export(batch_strategy=BatchLogExportStrategy.EXPORT_ALL) # Verify exception was logged mock_logger.exception.assert_called_once() @@ -298,7 +298,7 @@ def test_export_handles_exception_gracefully(self, mock_logger, _, __, ___): self.assertIn("Exception while exporting logs:", call_args[0]) # Queue should be empty even though export failed - self.assertEqual(len(self.processor._batch_processor._queue), 0) + self.assertEqual(len(self.processor._queue), 0) @patch("amazon.opentelemetry.distro.exporter.otlp.aws.logs._aws_cw_otlp_batch_log_record_processor._logger") def test_estimate_log_size_debug_logging_on_depth_exceeded(self, mock_logger): @@ -350,7 +350,7 @@ def test_constructor_with_custom_parameters(self): self.assertEqual(custom_processor._exporter, self.mock_exporter) # Verify parameters are passed to parent constructor - self.assertEqual(custom_processor._batch_processor._max_export_batch_size, 100) + self.assertEqual(custom_processor._max_export_batch_size, 100) @staticmethod def generate_test_log_data( diff --git a/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/patches/test_instrumentation_patch.py b/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/patches/test_instrumentation_patch.py index 8289aa3ee..c6a90676b 100644 --- a/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/patches/test_instrumentation_patch.py +++ b/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/patches/test_instrumentation_patch.py @@ -188,7 +188,7 @@ def _test_unpatched_botocore_instrumentation(self): self.assertTrue("sns" in _KNOWN_EXTENSIONS, "Upstream has removed the SNS extension") # StepFunctions - self.assertTrue("stepfunctions" in _KNOWN_EXTENSIONS, "Upstream has removed the StepFunctions extension") + self.assertFalse("stepfunctions" in _KNOWN_EXTENSIONS, "Upstream has added a StepFunctions extension") # Lambda self.assertTrue("lambda" in _KNOWN_EXTENSIONS, "Upstream has removed the Lambda extension") @@ -832,7 +832,7 @@ def _test_unpatched_starlette_instrumentation(self): instrumentor = StarletteInstrumentor() deps = original_deps(instrumentor) # Default should have version constraint - self.assertEqual(deps, ("starlette >= 0.13",)) + self.assertEqual(deps, ("starlette >= 0.13, <0.15",)) except ImportError: # If starlette instrumentation is not installed, skip this test pass diff --git a/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_aws_batch_unsampled_span_processor.py b/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_aws_batch_unsampled_span_processor.py index d6319bf73..5b6fed42e 100644 --- a/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_aws_batch_unsampled_span_processor.py +++ b/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_aws_batch_unsampled_span_processor.py @@ -24,7 +24,7 @@ def test_on_end_sampled(self, mock_span_class): self.processor.on_start(mock_span) self.processor.on_end(mock_span) - self.assertEqual(len(self.processor._batch_processor._queue), 0) + self.assertEqual(len(self.processor.queue), 0) mock_span.set_attribute.assert_not_called() @patch("opentelemetry.sdk.trace.Span") @@ -42,7 +42,7 @@ def test_on_end_not_sampled(self, mock_span_class): self.processor.on_start(mock_span2) self.processor.on_end(mock_span2) - self.assertEqual(len(self.processor._batch_processor._queue), 1) + self.assertEqual(len(self.processor.queue), 1) self.assertIn(AWS_TRACE_FLAG_SAMPLED, mock_span1.set_attribute.call_args_list[0][0][0]) self.processor.shutdown() @@ -51,4 +51,4 @@ def test_on_end_not_sampled(self, mock_span_class): self.processor.on_start(mock_span2) self.processor.on_end(mock_span2) - self.assertEqual(len(self.processor._batch_processor._queue), 0) + self.assertEqual(len(self.processor.queue), 0) diff --git a/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_aws_opentelementry_configurator.py b/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_aws_opentelementry_configurator.py index 740733ad4..abe36e8e4 100644 --- a/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_aws_opentelementry_configurator.py +++ b/aws-opentelemetry-distro/tests/amazon/opentelemetry/distro/test_aws_opentelementry_configurator.py @@ -863,7 +863,7 @@ def test_customize_span_processors_lambda(self): self.assertIsInstance(second_processor, AttributePropagatingSpanProcessor) third_processor: SpanProcessor = mock_tracer_provider.add_span_processor.call_args_list[2].args[0] self.assertIsInstance(third_processor, BatchUnsampledSpanProcessor) - self.assertEqual(third_processor._batch_processor._max_export_batch_size, LAMBDA_SPAN_EXPORT_BATCH_SIZE) + self.assertEqual(third_processor.max_export_batch_size, LAMBDA_SPAN_EXPORT_BATCH_SIZE) os.environ.pop("OTEL_AWS_APPLICATION_SIGNALS_ENABLED", None) os.environ.pop("AWS_LAMBDA_FUNCTION_NAME", None) diff --git a/contract-tests/images/applications/botocore/requirements.txt b/contract-tests/images/applications/botocore/requirements.txt index 2e75a781d..61ddebf98 100644 --- a/contract-tests/images/applications/botocore/requirements.txt +++ b/contract-tests/images/applications/botocore/requirements.txt @@ -1,3 +1,3 @@ -typing-extensions==4.15.0 +typing-extensions==4.12.2 botocore==1.34.143 boto3==1.34.143 diff --git a/contract-tests/images/applications/django/requirements.txt b/contract-tests/images/applications/django/requirements.txt index cbfc3a83e..84dfdeabb 100644 --- a/contract-tests/images/applications/django/requirements.txt +++ b/contract-tests/images/applications/django/requirements.txt @@ -1,2 +1,2 @@ -typing-extensions==4.15.0 +typing-extensions==4.12.2 django==5.0.11 diff --git a/contract-tests/images/applications/mysql-connector/requirements.txt b/contract-tests/images/applications/mysql-connector/requirements.txt index 7360f2d78..f285dcb1f 100644 --- a/contract-tests/images/applications/mysql-connector/requirements.txt +++ b/contract-tests/images/applications/mysql-connector/requirements.txt @@ -1,2 +1,2 @@ -typing-extensions==4.15.0 +typing-extensions==4.12.2 mysql-connector-python~=9.1.0 diff --git a/contract-tests/images/applications/mysqlclient/requirements.txt b/contract-tests/images/applications/mysqlclient/requirements.txt index 53d9a31ba..933e606b4 100644 --- a/contract-tests/images/applications/mysqlclient/requirements.txt +++ b/contract-tests/images/applications/mysqlclient/requirements.txt @@ -1,2 +1,2 @@ -typing-extensions==4.15.0 +typing-extensions==4.12.2 mysqlclient==2.2.4 diff --git a/contract-tests/images/applications/psycopg2/requirements.txt b/contract-tests/images/applications/psycopg2/requirements.txt index 50ddd7656..8786aff35 100644 --- a/contract-tests/images/applications/psycopg2/requirements.txt +++ b/contract-tests/images/applications/psycopg2/requirements.txt @@ -1,2 +1,2 @@ -typing-extensions==4.15.0 +typing-extensions==4.12.2 psycopg2==2.9.9 diff --git a/contract-tests/images/applications/pymysql/requirements.txt b/contract-tests/images/applications/pymysql/requirements.txt index 55594bfff..8ba76defb 100644 --- a/contract-tests/images/applications/pymysql/requirements.txt +++ b/contract-tests/images/applications/pymysql/requirements.txt @@ -1,2 +1,2 @@ -typing-extensions==4.15.0 +typing-extensions==4.12.2 pymysql==1.1.1 diff --git a/contract-tests/images/applications/requests/requirements.txt b/contract-tests/images/applications/requests/requirements.txt index 943064066..700b31404 100644 --- a/contract-tests/images/applications/requests/requirements.txt +++ b/contract-tests/images/applications/requests/requirements.txt @@ -1,2 +1,2 @@ -typing-extensions==4.15.0 +typing-extensions==4.12.2 requests~=2.0 diff --git a/contract-tests/images/mock-collector/pyproject.toml b/contract-tests/images/mock-collector/pyproject.toml index cd7cb8416..3b7b76396 100644 --- a/contract-tests/images/mock-collector/pyproject.toml +++ b/contract-tests/images/mock-collector/pyproject.toml @@ -10,11 +10,11 @@ license = "Apache-2.0" requires-python = ">=3.9" dependencies = [ - "grpcio ~= 1.76.0", - "opentelemetry-proto==1.37.0", - "opentelemetry-sdk==1.37.0", - "protobuf==6.33.0", - "typing-extensions==4.15.0" + "grpcio ~= 1.66.0", + "opentelemetry-proto==1.33.1", + "opentelemetry-sdk==1.33.1", + "protobuf==5.29.5", + "typing-extensions==4.12.2" ] [tool.hatch.build.targets.sdist] diff --git a/contract-tests/images/mock-collector/requirements.txt b/contract-tests/images/mock-collector/requirements.txt index db89ab3fb..923722d77 100644 --- a/contract-tests/images/mock-collector/requirements.txt +++ b/contract-tests/images/mock-collector/requirements.txt @@ -1,5 +1,5 @@ -grpcio==1.76.0 -opentelemetry-proto==1.37.0 -opentelemetry-sdk==1.37.0 -protobuf==6.33.0 -typing-extensions==4.15.0 +grpcio==1.66.2 +opentelemetry-proto==1.33.1 +opentelemetry-sdk==1.33.1 +protobuf==5.29.5 +typing-extensions==4.12.2 diff --git a/contract-tests/tests/pyproject.toml b/contract-tests/tests/pyproject.toml index ff45cf496..393c425cc 100644 --- a/contract-tests/tests/pyproject.toml +++ b/contract-tests/tests/pyproject.toml @@ -10,13 +10,13 @@ license = "Apache-2.0" requires-python = ">=3.9" dependencies = [ - "opentelemetry-proto==1.37.0", - "opentelemetry-sdk==1.37.0", + "opentelemetry-proto==1.33.1", + "opentelemetry-sdk==1.33.1", "testcontainers==3.7.1", - "grpcio==1.76.0", + "grpcio==1.66.2", "docker==7.1.0", "mock-collector==1.0.0", - "requests==2.32.5" + "requests==2.32.4" ] [project.optional-dependencies] diff --git a/dev-requirements.txt b/dev-requirements.txt index 5170e1674..68f54a26e 100644 --- a/dev-requirements.txt +++ b/dev-requirements.txt @@ -11,7 +11,7 @@ bleach==4.1.0 # transient dependency for readme-renderer protobuf~=5.29.5 markupsafe>=2.0.1 codespell==2.1.0 -requests==2.32.5 +requests==2.32.4 ruamel.yaml==0.17.21 flaky==3.7.0 botocore==1.34.67 diff --git a/tox.ini b/tox.ini index 3fe9b6354..740c85d00 100644 --- a/tox.ini +++ b/tox.ini @@ -22,8 +22,8 @@ deps = setenv = ; TODO: The two repos branches need manual updated over time, need to figure out a more sustainable solution. - CORE_REPO=git+https://github.com/open-telemetry/opentelemetry-python.git@release/v1.37.x-0.58bx - CONTRIB_REPO=git+https://github.com/open-telemetry/opentelemetry-python-contrib.git@release/v1.37.x-0.58bx + CORE_REPO="git+https://github.com/open-telemetry/opentelemetry-python.git@release/v1.33.x-0.54bx" + CONTRIB_REPO="git+https://github.com/open-telemetry/opentelemetry-python-contrib.git@release/v1.33.x-0.54bx" changedir = test-aws-opentelemetry-distro: aws-opentelemetry-distro/tests