Skip to content

Commit

Permalink
Stop multiple calls to AsyncPGInstrumentor.__init__ from clobbering i…
Browse files Browse the repository at this point in the history
…nstance attributes (#1791)

* Stop multiple calls to AsyncPGInstrumentor.__init__ from clobbering instance tracer attribute

* Remove class-level initialisation of _tracer

* Fix regex

* Add to changelog

* Fix lint errors

* Update CHANGELOG.md

Co-authored-by: Shalev Roda <[email protected]>

* Set tracer in class definition to avoid lint error

---------

Co-authored-by: Srikanth Chekuri <[email protected]>
Co-authored-by: Shalev Roda <[email protected]>
  • Loading branch information
3 people authored Feb 5, 2024
1 parent 13ce910 commit 47caeab
Show file tree
Hide file tree
Showing 3 changed files with 15 additions and 3 deletions.
2 changes: 2 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,8 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
([#2151](https:/open-telemetry/opentelemetry-python-contrib/pull/2151))
- `opentelemetry-resource-detector-azure` Added 10s timeout to VM Resource Detector
([#2119](https:/open-telemetry/opentelemetry-python-contrib/pull/2119))
- `opentelemetry-instrumentation-asyncpg` Allow AsyncPGInstrumentor to be instantiated multiple times
([#1791](https:/open-telemetry/opentelemetry-python-contrib/pull/1791))
- `opentelemetry-instrumentation-confluent-kafka` Add support for higher versions until 2.3.0 of confluent_kafka
([#2132](https:/open-telemetry/opentelemetry-python-contrib/pull/2132))
- `opentelemetry-resource-detector-azure` Changed timeout to 4 seconds due to [timeout bug](https:/open-telemetry/opentelemetry-python/issues/3644)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -96,11 +96,13 @@ def _hydrate_span_from_args(connection, query, parameters) -> dict:


class AsyncPGInstrumentor(BaseInstrumentor):

_leading_comment_remover = re.compile(r"^/\*.*?\*/")
_tracer = None

def __init__(self, capture_parameters=False):
super().__init__()
self.capture_parameters = capture_parameters
self._tracer = None
self._leading_comment_remover = re.compile(r"^/\*.*?\*/")

def instrumentation_dependencies(self) -> Collection[str]:
return _instruments
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@


class TestAsyncPGInstrumentation(TestBase):
def test_duplicated_instrumentation(self):
def test_duplicated_instrumentation_can_be_uninstrumented(self):
AsyncPGInstrumentor().instrument()
AsyncPGInstrumentor().instrument()
AsyncPGInstrumentor().instrument()
Expand All @@ -16,6 +16,14 @@ def test_duplicated_instrumentation(self):
hasattr(method, "_opentelemetry_ext_asyncpg_applied")
)

def test_duplicated_instrumentation_works(self):
first = AsyncPGInstrumentor()
first.instrument()
second = AsyncPGInstrumentor()
second.instrument()
self.assertIsNotNone(first._tracer)
self.assertIsNotNone(second._tracer)

def test_duplicated_uninstrumentation(self):
AsyncPGInstrumentor().instrument()
AsyncPGInstrumentor().uninstrument()
Expand Down

0 comments on commit 47caeab

Please sign in to comment.