diff --git a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py index 6164403bcd..b2a798f4bd 100644 --- a/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py +++ b/instrumentation/opentelemetry-instrumentation-sqlalchemy/src/opentelemetry/instrumentation/sqlalchemy/engine.py @@ -3,6 +3,7 @@ import os import re import weakref +from sqlalchemy.exc import InvalidRequestError import sqlalchemy from sqlalchemy.event import ( # pylint: disable=no-name-in-module @@ -308,15 +309,14 @@ def _register_event_listener(cls, target, identifier, func, *args, **kw): @classmethod def remove_all_event_listeners(cls): - for ( - weak_ref_target, - identifier, - func, - ) in cls._remove_event_listener_params: - # Remove an event listener only if saved weak reference points to an object - # which has not been garbage collected - if weak_ref_target() is not None: - remove(weak_ref_target(), identifier, func) + for weak_ref_target, identifier, fn in cls._remove_event_listener_params: + target = weak_ref_target() + if target is None: + continue + try: + event.remove(target, identifier, fn) + except InvalidRequestError: + pass cls._remove_event_listener_params.clear() def _operation_name(self, db_name, statement):