Skip to content

Fix instrumentation of SQLAlchemy when using sqlalchemy.engine_from_config#2816

Merged
shalevr merged 16 commits into
open-telemetry:mainfrom
moredip:fix-sqlalchemy-engine-from-config-monkeypatching
Dec 4, 2024
Merged

Fix instrumentation of SQLAlchemy when using sqlalchemy.engine_from_config#2816
shalevr merged 16 commits into
open-telemetry:mainfrom
moredip:fix-sqlalchemy-engine-from-config-monkeypatching

Conversation

@moredip
Copy link
Copy Markdown
Contributor

@moredip moredip commented Aug 23, 2024

Description

Fixes a bug where SQLAlchemy engines created via sqlalchemy.engine_from_config(...) are not instrumented by SQLAlchemyInstrumentor.

sqlalchemy.engine_from_config(...) directly calls create_engine(...) imported from sqlalchemy.engine.create. If we don't wrap that copy of the create_engine method then engines created via engine_from_config are not
instrumented.

Type of change

Please delete options that are not relevant.

  • Bug fix (non-breaking change which fixes an issue)
  • New feature (non-breaking change which adds functionality)
  • Breaking change (fix or feature that would cause existing functionality to not work as expected)
  • This change requires a documentation update

How Has This Been Tested?

  • Added a unit test
  • ran it and checked that it failed
  • made the fix
  • verified that the test now passes

Does This PR Require a Core Repo Change?

  • Yes. - Link to PR:
  • No.

Checklist:

See contributing.md for styleguide, changelog guidelines, and more.

  • Followed the style guidelines of this project
  • Changelogs have been updated
  • Unit tests have been added
  • Documentation has been updated

sqlalchemy.engine_from_config directly calls create_engine imported from that path; if we don't
wrap that copy of the `create_engine` call then engines created via engine_from_config are not
instrumented.
@linux-foundation-easycla
Copy link
Copy Markdown

linux-foundation-easycla Bot commented Aug 23, 2024

CLA Signed

The committers listed above are authorized under a signed CLA.

@moredip moredip requested a review from a team August 23, 2024 00:51
Comment thread CHANGELOG.md Outdated
Co-authored-by: Emídio Neto <9735060+emdneto@users.noreply.github.com>
Copy link
Copy Markdown
Member

@emdneto emdneto left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

oh wait, there's a pypy test failing 😓

@shalevr shalevr requested a review from a team as a code owner September 28, 2024 13:06
@tammy-baylis-swi
Copy link
Copy Markdown
Contributor

Thanks for putting this in! Currently 5 of the unit tests are failing with ModuleNotFoundError: No module named 'sqlalchemy.engine.create' which comes from sqlalchemy.engine.create being introduced in SQLAlchemy 2 but the tests are run in 1.1 and 1.4 (also tox.ini comment). The instrumentor doesn't seem to have bounds for supported SQLAlchemy version though, so I think it would be ok to bump the test-requirements versions. Please could you give that a try.

@moredip
Copy link
Copy Markdown
Contributor Author

moredip commented Nov 8, 2024

Thanks for putting this in! Currently 5 of the unit tests are failing with ModuleNotFoundError: No module named 'sqlalchemy.engine.create' which comes from sqlalchemy.engine.create being introduced in SQLAlchemy 2 but the tests are run in 1.1 and 1.4 (also tox.ini comment). The instrumentor doesn't seem to have bounds for supported SQLAlchemy version though, so I think it would be ok to bump the test-requirements versions. Please could you give that a try.

Sorry for dropping the ball on this for a while, @tammy-baylis-swi. I've not contributed to otel before, and not used tox before either; would you be able to elaborate on what I need to do with the test-requirements versions?

@tammy-baylis-swi
Copy link
Copy Markdown
Contributor

Sorry for dropping the ball on this for a while, @tammy-baylis-swi. I've not contributed to otel before, and not used tox before either; would you be able to elaborate on what I need to do with the test-requirements versions?

No worries @moredip ! Coincidentally, yesterday we merged 2 PRs to address some of what I mentioned:

I'm going to merge main into this branch and reassess.

Comment thread instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py Outdated
…/test_sqlalchemy.py

Co-authored-by: Tammy Baylis <96076570+tammy-baylis-swi@users.noreply.github.com>
@moredip moredip requested a review from emdneto November 9, 2024 18:37
@tammy-baylis-swi
Copy link
Copy Markdown
Contributor

Getting closer! Please could you run a tox -e ruff on your local and push the formatting change to get this to pass:

https://github.com/open-telemetry/opentelemetry-python-contrib/actions/runs/11960954700/job/33346209372?pr=2816

Comment thread CHANGELOG.md Outdated
Signed-off-by: emdneto <9735060+emdneto@users.noreply.github.com>
Comment thread CHANGELOG.md Outdated
Copy link
Copy Markdown
Contributor

@tammy-baylis-swi tammy-baylis-swi left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looks good to me. Thank you 😺

@moredip
Copy link
Copy Markdown
Contributor Author

moredip commented Nov 22, 2024

Looks good to me. Thank you 😺

Thanks so much for patiently shepherding me through! Very much appreciated 🙇

@moredip
Copy link
Copy Markdown
Contributor Author

moredip commented Dec 4, 2024

@tammy-baylis-swi @emdneto @xrmx is this OK to merge, or do I also need to wait on a 👍 from @shalevr

@shalevr shalevr merged commit 7617031 into open-telemetry:main Dec 4, 2024
xrmx added a commit to xrmx/opentelemetry-python-contrib that referenced this pull request Jan 24, 2025
…onfig (open-telemetry#2816)

* wrap sqlalchemy.engine.create.create_engine

sqlalchemy.engine_from_config directly calls create_engine imported from that path; if we don't
wrap that copy of the `create_engine` call then engines created via engine_from_config are not
instrumented.

* add changelog entry

* Update CHANGELOG.md

Co-authored-by: Emídio Neto <9735060+emdneto@users.noreply.github.com>

* Update instrumentation/opentelemetry-instrumentation-sqlalchemy/tests/test_sqlalchemy.py

Co-authored-by: Tammy Baylis <96076570+tammy-baylis-swi@users.noreply.github.com>

* make some monkey-patching conditional on the version of SQLAlchemy

* lint

* fix changelog

Signed-off-by: emdneto <9735060+emdneto@users.noreply.github.com>

* Update CHANGELOG.md

---------

Signed-off-by: emdneto <9735060+emdneto@users.noreply.github.com>
Co-authored-by: Emídio Neto <9735060+emdneto@users.noreply.github.com>
Co-authored-by: Leighton Chen <lechen@microsoft.com>
Co-authored-by: Shalev Roda <65566801+shalevr@users.noreply.github.com>
Co-authored-by: Tammy Baylis <96076570+tammy-baylis-swi@users.noreply.github.com>
Co-authored-by: Riccardo Magliocchetti <riccardo.magliocchetti@gmail.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

6 participants