Skip to content

Commit fe1bd89

Browse files
weakref, not id()
1 parent df2085d commit fe1bd89

File tree

1 file changed

+10
-10
lines changed
  • instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask

1 file changed

+10
-10
lines changed

instrumentation/opentelemetry-instrumentation-flask/src/opentelemetry/instrumentation/flask/__init__.py

+10-10
Original file line numberDiff line numberDiff line change
@@ -243,6 +243,7 @@ def response_hook(span: Span, status: str, response_headers: List):
243243
from time import time_ns
244244
from timeit import default_timer
245245
from typing import Collection
246+
import weakref
246247

247248
import flask
248249

@@ -265,18 +266,17 @@ def response_hook(span: Span, status: str, response_headers: List):
265266
_ENVIRON_STARTTIME_KEY = "opentelemetry-flask.starttime_key"
266267
_ENVIRON_SPAN_KEY = "opentelemetry-flask.span_key"
267268
_ENVIRON_ACTIVATION_KEY = "opentelemetry-flask.activation_key"
268-
_ENVIRON_REQCTX_ID_KEY = "opentelemetry-flask.reqctx_id_key"
269+
_ENVIRON_REQCTX_REF_KEY = "opentelemetry-flask.reqctx_ref_key"
269270
_ENVIRON_TOKEN = "opentelemetry-flask.token"
270271

271272
_excluded_urls_from_env = get_excluded_urls("FLASK")
272273

273274
if package_version.parse(flask.__version__) >= package_version.parse("2.2.0"):
274-
def _request_ctx_id() -> int:
275-
# return id(flask.globals.request_ctx)
276-
return id(flask.globals.request_ctx._get_current_object())
275+
def _request_ctx_ref() -> weakref.ReferenceType:
276+
return weakref.ref(flask.globals.request_ctx._get_current_object())
277277
else:
278-
def _request_ctx_id() -> int:
279-
return id(flask._request_ctx_stack.top)
278+
def _request_ctx_ref() -> int:
279+
return weakref.ref(flask._request_ctx_stack.top)
280280

281281
def get_default_span_name():
282282
try:
@@ -406,7 +406,7 @@ def _before_request():
406406
activation = trace.use_span(span, end_on_exit=True)
407407
activation.__enter__() # pylint: disable=E1101
408408
flask_request_environ[_ENVIRON_ACTIVATION_KEY] = activation
409-
flask_request_environ[_ENVIRON_REQCTX_ID_KEY] = _request_ctx_id()
409+
flask_request_environ[_ENVIRON_REQCTX_REF_KEY] = _request_ctx_ref()
410410
flask_request_environ[_ENVIRON_SPAN_KEY] = span
411411
flask_request_environ[_ENVIRON_TOKEN] = token
412412

@@ -447,9 +447,9 @@ def _teardown_request(exc):
447447

448448
activation = flask.request.environ.get(_ENVIRON_ACTIVATION_KEY)
449449

450-
original_reqctx_id = flask.request.environ.get(_ENVIRON_REQCTX_ID_KEY)
451-
current_reqctx_id = _request_ctx_id()
452-
if not activation or original_reqctx_id != current_reqctx_id:
450+
original_reqctx_ref = flask.request.environ.get(_ENVIRON_REQCTX_REF_KEY)
451+
current_reqctx_ref = _request_ctx_ref()
452+
if not activation or original_reqctx_ref != current_reqctx_ref:
453453
# This request didn't start a span, maybe because it was created in
454454
# a way that doesn't run `before_request`, like when it is created
455455
# with `app.test_request_context`.

0 commit comments

Comments
 (0)