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

2.2.0 raises a ValueError on windows #7625

Closed
emmyoop opened this issue Nov 15, 2023 · 11 comments
Closed

2.2.0 raises a ValueError on windows #7625

emmyoop opened this issue Nov 15, 2023 · 11 comments
Assignees

Comments

@emmyoop
Copy link

emmyoop commented Nov 15, 2023

Summary of problem

We run tests with pytest on macos, ubuntu and windows.

Newly released version 2.2.0 fails when running on a windows runner. Issues resolved when I pin to 2.1.7.

Which version of dd-trace-py are you using?

2.2.0

Which version of pip are you using?

23.3.1

Which libraries and their versions are you using?

`pip freeze` agate==1.7.1 alabaster==0.7.13 appnope==0.1.3 asttokens==2.4.1 attrs==23.1.0 Babel==2.13.1 backcall==0.2.0 black==23.3.0 build==1.0.3 bump2version==1.0.1 bumpversion==0.6.0 bytecode==0.15.1 cachetools==5.3.2 cattrs==23.1.2 certifi==2023.7.22 cffi==1.16.0 cfgv==3.4.0 chardet==5.2.0 charset-normalizer==3.3.2 click==8.1.7 colorama==0.4.6 coverage==7.3.2 -e git+https://emmyoop@github.com/dbt-labs/dbt-core.git@c3860f8aa15437b1641b5cac7babfdefd3db9b4b#egg=dbt_core&subdirectory=core dbt-extractor==0.5.0 -e git+https://emmyoop@github.com/dbt-labs/dbt-core.git@c3860f8aa15437b1641b5cac7babfdefd3db9b4b#egg=dbt_postgres&subdirectory=plugins/postgres dbt-semantic-interfaces==0.4.1 -e git+https://emmyoop@github.com/dbt-labs/dbt-core.git@c3860f8aa15437b1641b5cac7babfdefd3db9b4b#egg=dbt_tests_adapter&subdirectory=tests/adapter ddsketch==2.0.4 ddtrace==2.1.6 decorator==5.1.1 Deprecated==1.2.14 distlib==0.3.7 docutils==0.20.1 envier==0.4.0 exceptiongroup==1.1.3 execnet==2.0.2 executing==2.0.1 filelock==3.13.1 flake8==6.1.0 flaky==3.7.0 freezegun==0.3.12 hypothesis==6.88.4 identify==2.5.31 idna==3.4 imagesize==1.4.1 importlib-metadata==6.8.0 importlib-resources==6.1.1 iniconfig==2.0.0 ipdb==0.13.13 ipython==8.12.3 isodate==0.6.1 jaraco.classes==3.3.0 jedi==0.19.1 Jinja2==3.1.2 jsonschema==4.19.2 jsonschema-specifications==2023.7.1 keyring==24.3.0 leather==0.3.4 Logbook==1.5.3 markdown-it-py==3.0.0 MarkupSafe==2.1.3 mashumaro==3.10 matplotlib-inline==0.1.6 mccabe==0.7.0 mdurl==0.1.2 minimal-snowplow-tracker==0.0.2 mocker==1.1.1 more-itertools==10.1.0 msgpack==1.0.7 mypy==1.4.1 mypy-extensions==1.0.0 networkx==3.1 nh3==0.2.14 nodeenv==1.8.0 opentelemetry-api==1.21.0 packaging==23.2 parsedatetime==2.6 parso==0.8.3 pathspec==0.11.2 pexpect==4.8.0 pickleshare==0.7.5 pip-tools==7.3.0 pkginfo==1.9.6 pkgutil_resolve_name==1.3.10 platformdirs==3.11.0 pluggy==1.3.0 pre-commit==3.5.0 prompt-toolkit==3.0.41 protobuf==4.25.0 psycopg2-binary==2.9.9 ptyprocess==0.7.0 pure-eval==0.2.2 pycodestyle==2.11.1 pycparser==2.21 pydantic==1.10.13 pyflakes==3.1.0 Pygments==2.16.1 pyproject-api==1.6.1 pyproject_hooks==1.0.0 pytest==7.4.3 pytest-cov==4.1.0 pytest-csv==3.0.0 pytest-dotenv==0.5.2 pytest-logbook==1.2.0 pytest-mock==3.12.0 pytest-split==0.8.1 pytest-xdist==3.4.0 python-dateutil==2.8.2 python-dotenv==1.0.0 python-slugify==8.0.1 pytimeparse==1.1.8 pytz==2023.3.post1 PyYAML==6.0.1 readme-renderer==42.0 referencing==0.30.2 requests==2.31.0 requests-toolbelt==1.0.0 rfc3986==2.0.0 rich==13.6.0 rpds-py==0.12.0 six==1.16.0 snowballstemmer==2.2.0 sortedcontainers==2.4.0 Sphinx==7.1.2 sphinxcontrib-applehelp==1.0.4 sphinxcontrib-devhelp==1.0.2 sphinxcontrib-htmlhelp==2.0.1 sphinxcontrib-jsmath==1.0.1 sphinxcontrib-qthelp==1.0.3 sphinxcontrib-serializinghtml==1.1.5 sqlparse==0.4.4 stack-data==0.6.3 text-unidecode==1.3 tomli==2.0.1 tox==4.11.3 traitlets==5.13.0 twine==4.0.2 types-colorama==0.4.15.12 types-docutils==0.20.0.3 types-freezegun==1.1.10 types-Jinja2==2.11.9 types-jsonschema==4.19.0.4 types-MarkupSafe==1.1.10 types-mock==5.1.0.2 types-protobuf==4.24.0.4 types-python-dateutil==2.8.19.14 types-pytz==2023.3.1.1 types-PyYAML==6.0.12.12 types-requests==2.30.0.0 types-setuptools==68.2.0.1 types-urllib3==1.26.25.14 typing_extensions==4.8.0 urllib3==1.26.18 virtualenv==20.24.6 wcwidth==0.2.10 wrapt==1.16.0 xmltodict==0.13.0 zipp==3.17.0

How can we reproduce your problem?

Run tests with ddtrace on a github windows runner.

What is the result that you get?

When using pytest, I get a Value error because the path changes.

logs
INTERNALERROR> Traceback (most recent call last):
INTERNALERROR>   File "D:\a\dbt-core\dbt-core\.tox\integration\lib\site-packages\_pytest\main.py", line 271, in wrap_session
INTERNALERROR>     session.exitstatus = doit(config, session) or 0
INTERNALERROR>   File "D:\a\dbt-core\dbt-core\.tox\integration\lib\site-packages\_pytest\main.py", line 325, in _main
INTERNALERROR>     config.hook.pytest_runtestloop(session=session)
INTERNALERROR>   File "D:\a\dbt-core\dbt-core\.tox\integration\lib\site-packages\pluggy\_hooks.py", line [49](https://github.com/dbt-labs/dbt-core/actions/runs/6883250006/job/18723421574#step:8:50)3, in __call__
INTERNALERROR>     return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)
INTERNALERROR>   File "D:\a\dbt-core\dbt-core\.tox\integration\lib\site-packages\pluggy\_manager.py", line 115, in _hookexec
INTERNALERROR>     return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
INTERNALERROR>   File "D:\a\dbt-core\dbt-core\.tox\integration\lib\site-packages\pluggy\_callers.py", line 130, in _multicall
INTERNALERROR>     teardown[0].send(outcome)
INTERNALERROR>   File "D:\a\dbt-core\dbt-core\.tox\integration\lib\site-packages\pluggy\_result.py", line 114, in get_result
INTERNALERROR>     raise exc.with_traceback(exc.__traceback__)
INTERNALERROR>   File "D:\a\dbt-core\dbt-core\.tox\integration\lib\site-packages\pluggy\_callers.py", line 77, in _multicall
INTERNALERROR>     res = hook_impl.function(*args)
INTERNALERROR>   File "D:\a\dbt-core\dbt-core\.tox\integration\lib\site-packages\_pytest\main.py", line 3[50](https://github.com/dbt-labs/dbt-core/actions/runs/6883250006/job/18723421574#step:8:51), in pytest_runtestloop
INTERNALERROR>     item.config.hook.pytest_runtest_protocol(item=item, nextitem=nextitem)
INTERNALERROR>   File "D:\a\dbt-core\dbt-core\.tox\integration\lib\site-packages\pluggy\_hooks.py", line 493, in __call__
INTERNALERROR>     return self._hookexec(self.name, self._hookimpls, kwargs, firstresult)
INTERNALERROR>   File "D:\a\dbt-core\dbt-core\.tox\integration\lib\site-packages\pluggy\_manager.py", line 115, in _hookexec
INTERNALERROR>     return self._inner_hookexec(hook_name, methods, kwargs, firstresult)
INTERNALERROR>   File "D:\a\dbt-core\dbt-core\.tox\integration\lib\site-packages\pluggy\_callers.py", line 1[52](https://github.com/dbt-labs/dbt-core/actions/runs/6883250006/job/18723421574#step:8:53), in _multicall
INTERNALERROR>     return outcome.get_result()
INTERNALERROR>   File "D:\a\dbt-core\dbt-core\.tox\integration\lib\site-packages\pluggy\_result.py", line 114, in get_result
INTERNALERROR>     raise exc.with_traceback(exc.__traceback__)
INTERNALERROR>   File "D:\a\dbt-core\dbt-core\.tox\integration\lib\site-packages\pluggy\_callers.py", line [62](https://github.com/dbt-labs/dbt-core/actions/runs/6883250006/job/18723421574#step:8:63), in _multicall
INTERNALERROR>     next(wrapper_gen)  # first yield
INTERNALERROR>   File "D:\a\dbt-core\dbt-core\.tox\integration\lib\site-packages\ddtrace\contrib\pytest\plugin.py", line [64](https://github.com/dbt-labs/dbt-core/actions/runs/6883250006/job/18723421574#step:8:65)5, in pytest_runtest_protocol
INTERNALERROR>     _add_start_end_source_file_path_data_to_span(span, test_method_object, test_name)
INTERNALERROR>   File "D:\a\dbt-core\dbt-core\.tox\integration\lib\site-packages\ddtrace\internal\ci_visibility\utils.py", line 40, in _add_start_end_source_file_path_data_to_span
INTERNALERROR>     source_file_path = get_source_file_path_for_test_method(test_method_object)
INTERNALERROR>   File "D:\a\dbt-core\dbt-core\.tox\integration\lib\site-packages\ddtrace\internal\ci_visibility\utils.py", line 15, in get_source_file_path_for_test_method
INTERNALERROR>     source_file_path = os.path.relpath(inspect.getfile(test_method_object))
INTERNALERROR>   File "C:\hostedtoolcache\windows\Python\3.8.10\x64\lib\ntpath.py", line [70](https://github.com/dbt-labs/dbt-core/actions/runs/6883250006/job/18723421574#step:8:71)3, in relpath
INTERNALERROR>     raise ValueError("path is on mount %r, start on mount %r" % (
INTERNALERROR> ValueError: path is on mount 'D:', start on mount 'C:'

example run

What is the result that you expected?

For all my tests to run.

Extra info

I think the problem is with the use of relpath here because the path and start are on different drives, per the docs

@romainkomorndatadog
Copy link
Collaborator

@emmyoop , thanks for the report details. We're going to look at this today. Just to confirm, looking at the exception in your example run, do I have this correct?

  • Your git repo is on D: (based on the lines containing D:\a\dbt-core\dbt-core\.tox\)
  • Your virtual environment is on D: (based on the lines containing D:\a\dbt-core\dbt-core\.tox\integration\lib\site-packages\ddtrace)
  • Your python executable is on C: (based on the lines containing C:\hostedtoolcache\windows\Python\3.8.10\x64\lib\ntpath.py)

When you start the command from this log entry integration: commands[0]> .tox\integration\Scripts\python.exe -m pytest --cov=core --ddtrace tests/functional, does that happen on D: or C: ? Based on what I'm seeing, I want to say that's on D: but if that were the case, the error you're getting seems unexpected?

@romainkomorndatadog romainkomorndatadog self-assigned this Nov 16, 2023
@emmyoop
Copy link
Author

emmyoop commented Nov 16, 2023

That all looks correct to me as well. 🤔 I'll take a closer look later today too to see if I can determine what's happening.

For what it's worth, we're not doing any path manipulation with GitHub and we use the GitHub managed actions to checkout the repo and install python.

@romainkomorndatadog
Copy link
Collaborator

I think we have a good workaround in progress in #7627 .

@romainkomorndatadog
Copy link
Collaborator

@emmyoop , if you have a chance, would you be able to run a test with the following?

pip install git+https://github.com/DataDog/dd-trace-py.git@54419ef6a3523776d803d9f4cba2334dcceb9fbb

That should resolve your issue since your pytest's rootdir is D:\a\dbt-core\dbt-core (according to https://github.com/dbt-labs/dbt-core/actions/runs/6883250006/job/18723421574#step:8:34) .

That should prevent the INTERNALERROR> ValueError: path is on mount 'D:', start on mount 'C:' error.

@emmyoop
Copy link
Author

emmyoop commented Nov 17, 2023

I don't actually have a windows machine. I modified our dependencies in this PR and the windows tests in GitHub ran successfully! The fix has resolved our issues. Thanks so much!

We're pinned to 2.1.7 so no rush but what's the general cadence for releasing bug fixes?

@romainkomorndatadog
Copy link
Collaborator

romainkomorndatadog commented Nov 20, 2023

@emmyoop , I think we should get it into 2.3.0 which should be out today or tomorrow. Looks like we just missed the cut on the next patch releases for 2.2, though, so that may have to wait another week.

@ericlaz
Copy link
Contributor

ericlaz commented Nov 21, 2023

@emmyoop, as an update, 2.3.0 is now out which should fix the ValueError issue. Hope this helps!

@romainkomorndatadog
Copy link
Collaborator

#7680 merged into our 2.2 release branch, so it should also make it out in 2.2.1 which I think we're hoping to release today.

@romainkomorndatadog
Copy link
Collaborator

2.2.1 was published a little while ago. @emmyoop , I'd rather wait for your thumbs up before closing this out, if you don't mind.

@emmyoop
Copy link
Author

emmyoop commented Nov 27, 2023

Sorry for the late reply. I've been off for the last several days. I can confirm this fixed it for us in both 2.3.0 and 2.2.1. Thanks so much for the quick turn around!

@romainkomorndatadog
Copy link
Collaborator

Great! I'll close this now then. :) Thanks to @ericlaz for the quick fix!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

3 participants