Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Fix DbtVirtualenvBaseOperator to use correct virtualenv Python path #1252

Open
wants to merge 2 commits into
base: main
Choose a base branch
from

Conversation

kesompochy
Copy link
Contributor

Description

This PR addresses an issue where the DbtVirtualenvBaseOperator was executing dbt commands using the system-wide Python path instead of the virtualenv path. The root cause was that the self reference in the run_subprocess method was bound to a different instance than the one created during initialization, likely due to Airflow's DAG pickling mechanism.
To resolve this, we've refactored the invoke_dbt and handle_exception methods to be properties. This ensures that they dynamically reference the correct method of the current instance at runtime, rather than being bound to a potentially stale instance from initialization.

Related Issue(s)

fix #1246

This may be related to issue #958 in version 1.5.0

Breaking Change?

No

Checklist

  • I have made corresponding changes to the documentation (if required)
  • I have added tests that prove my fix is effective or that my feature works

Additional Notes

I acknowledge that ideally, a test should be added to reproduce the original issue and verify the fix. However, I found it challenging to create an appropriate test, especially considering that this might require an integration test with Airflow to properly simulate Airflow behavior. If there are suggestions for how to effectively test this scenario, I would greatly appreciate the guidance.

I sincerely apologize for introducing this bug in the first place with PR #1200. I understand this has caused inconvenience, and I'm grateful for the opportunity to fix it. I kindly request a thorough review of these changes to ensure we've fully addressed the issue without introducing new problems.

- Log Python binary info before command execution when using virtualenv
- Reorder log statements for better readability and debugging
DAG pickling caused __init__-assigned methods to reference original
instance state instead of newly created instances. Switch to properties
for dynamic method assignment to ensure correct instance reference.
Update tests to cover new behavior.
@dosubot dosubot bot added the size:M This PR changes 30-99 lines, ignoring generated files. label Oct 12, 2024
@dosubot dosubot bot added area:execution Related to the execution environment/mode, like Docker, Kubernetes, Local, VirtualEnv, etc area:testing Related to testing, like unit tests, integration tests, etc labels Oct 12, 2024
Copy link

netlify bot commented Oct 12, 2024

Deploy Preview for sunny-pastelito-5ecb04 canceled.

Name Link
🔨 Latest commit c57efa6
🔍 Latest deploy log https://app.netlify.com/sites/sunny-pastelito-5ecb04/deploys/670a655734ce0d0008350bd6

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
area:execution Related to the execution environment/mode, like Docker, Kubernetes, Local, VirtualEnv, etc area:testing Related to testing, like unit tests, integration tests, etc size:M This PR changes 30-99 lines, ignoring generated files.
Projects
None yet
Development

Successfully merging this pull request may close these issues.

[Bug] DbtVirtualenvBaseOperator uses system-wide dbt instead of virtualenv-specific in v1.7.0
1 participant