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

Import errors when trying to use profiler #1328

Closed
alandotcom opened this issue Apr 1, 2020 · 7 comments · Fixed by #1333
Closed

Import errors when trying to use profiler #1328

alandotcom opened this issue Apr 1, 2020 · 7 comments · Fixed by #1333

Comments

@alandotcom
Copy link

Thanks for taking the time for reporting an issue!

Before reporting an issue on dd-trace-py, please be sure to provide all
necessary information.

If you're hitting a bug, make sure that you're using the latest version of this
library.

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

0.35.0

Which version of the libraries are you using?

alembic==1.0.3
analytics-python==1.2.9
aniso8601==7.0.0
asn1crypto==1.2.0
Authlib==0.6
awscli==1.16.186
Babel==1.3
backoff==1.6.0
bcrypt==3.1.4
bleach==3.1.4
blinker==1.3
boto3==1.9.176
botocore==1.12.176
boxsdk==1.5.5
cachetools==2.0.1
certifi==2019.11.28
cffi==1.13.2
chardet==3.0.4
Click==7.0
click-log==0.3.2
colorama==0.3.9
cryptography==2.7
datadog==0.35.0
ddtrace==0.35.0
decorator==4.4.1
defusedxml==0.5.0
docutils==0.14
expiringdict==1.2.0
Flask==1.1.1
Flask-Caching==1.8.0
Flask-GraphQL==2.0.0
Flask-Login==0.4.1
Flask-Script==2.0.6
Flask-Session==0.3.1
Flask-SQLAlchemy==2.4.1
Flask-WTF==0.14
freezegun==0.3.5
google-api-python-client==1.6.5
google-auth==1.4.1
google-auth-httplib2==0.0.3
google-auth-oauthlib==0.2.0
graphene==2.1.8
graphql-core==2.2.1
graphql-relay==2.0.0
graphql-server-core==1.1.3
holidays==0.3.1
html5lib==1.0.1
httplib2==0.11.0
httpretty==0.9.5
humanize==0.5.1
idna==2.6
ijson==2.3
iso8601==0.1
isodate==0.5.0
itsdangerous==0.24
Jinja2==2.10.3
jira==2.0.0
jmespath==0.9.3
jsondiff==1.1.2
launchdarkly-server-sdk==6.9.3
lxml==4.5.0
Mako==1.1.0
MarkupSafe==1.1.1
marshmallow==3.0.0rc3
MonthDelta==0.9.1
msgpack==1.0.0
mysqlclient==1.4.6
oauth2client==4.1.2
oauthlib==2.0.7
pathspec==0.6.0
pbr==5.4.4
Pillow==6.2.0
pkgconfig==1.5.1
promise==2.3
pyasn1==0.4.2
pyasn1-modules==0.2.1
pycparser==2.19
PyJWT==1.7.1
pyRFC3339==1.1
pysnow==0.7.4
python-dateutil==2.7.5
python-editor==1.0.4
python-json-logger==0.1.10
python-slugify==1.2.4
python3-saml==1.8.0
pytoml==0.1.21
pytz==2015.2
PyYAML==5.1
redis==3.3.11
requests==2.20.0
requests-oauthlib==0.8.0
requests-toolbelt==0.8.0
rsa==3.4.2
Rx==1.6.1
s3transfer==0.2.1
semver==2.9.0
sentry-sdk==0.14.3
sh==1.11
simplejson==3.16.0
six==1.13.0
SQLAlchemy==1.3.11
sqlalchemy-easy-profile==1.0.2
sqlparse==0.3.0
tabulate==0.8.3
tlslite==0.4.6
Unidecode==1.0.22
uritemplate==3.0.0
urllib3==1.24.3
uWSGI==2.0.17.1
uwsgi-tools==1.1.1
webargs==5.1.3
webencodings==0.5.1
Werkzeug==0.16.0
wrapt==1.11.1
WTForms==2.0.2
xmlsec==1.3.3
xmltodict==0.12.0
yamllint==1.11.1
yasha==4.3
zipstreamer==0.1.3

How can we reproduce your problem?

import ddtrace.profile.auto

What is the result that you get?

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/local/lib/python3.7/site-packages/ddtrace/internal/import_hooks.py", line 215, in wrapped_find_and_load_unlocked
    return exec_and_call_hooks(module_name, wrapped, args, kwargs)
  File "/usr/local/lib/python3.7/site-packages/ddtrace/internal/import_hooks.py", line 171, in exec_and_call_hooks
    return wrapped(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/ddtrace/profile/auto.py", line 2, in <module>
    from ddtrace.profile.bootstrap import sitecustomize  # noqa
  File "/usr/local/lib/python3.7/site-packages/ddtrace/internal/import_hooks.py", line 215, in wrapped_find_and_load_unlocked
    return exec_and_call_hooks(module_name, wrapped, args, kwargs)
  File "/usr/local/lib/python3.7/site-packages/ddtrace/internal/import_hooks.py", line 171, in exec_and_call_hooks
    return wrapped(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/ddtrace/profile/bootstrap/sitecustomize.py", line 7, in <module>
    from ddtrace.profile import profiler
  File "/usr/local/lib/python3.7/site-packages/ddtrace/internal/import_hooks.py", line 215, in wrapped_find_and_load_unlocked
    return exec_and_call_hooks(module_name, wrapped, args, kwargs)
  File "/usr/local/lib/python3.7/site-packages/ddtrace/internal/import_hooks.py", line 171, in exec_and_call_hooks
    return wrapped(*args, **kwargs)
  File "/usr/local/lib/python3.7/site-packages/ddtrace/profile/profiler.py", line 10, in <module>
    from ddtrace.profile.collector import stack
ImportError: cannot import name 'stack' from 'ddtrace.profile.collector' (/usr/local/lib/python3.7/site-packages/ddtrace/profile/collector/__init__.py)

### What is the result that you expected?

Not an exception
@jd
Copy link
Contributor

jd commented Apr 2, 2020

Hi,

It looks like the extension has not been compiled. How did you install the library?

@alandotcom
Copy link
Author

Following the normal instructions,

pip install ddtrace[profile]==0.35.0

This is being tested in an Alpine Linux container

@alandotcom
Copy link
Author

So this definitely looks like an issue with building in Alpine Linux:

In python:3.7 (Debian)

docker run -it --rm python:3.7 bash
root@10a961d023a2:/# pip install ddtrace[profile]==0.36.0
Collecting ddtrace[profile]==0.36.0
  Downloading ddtrace-0.36.0-cp37-cp37m-manylinux2010_x86_64.whl (891 kB)
     |████████████████████████████████| 891 kB 4.9 MB/s
Collecting msgpack>=0.5.0
  Downloading msgpack-1.0.0-cp37-cp37m-manylinux1_x86_64.whl (275 kB)
     |████████████████████████████████| 275 kB 24.1 MB/s
Collecting intervaltree; extra == "profile"
  Downloading intervaltree-3.0.2.tar.gz (30 kB)
Collecting protobuf>=3; extra == "profile"
  Downloading protobuf-3.11.3-cp37-cp37m-manylinux1_x86_64.whl (1.3 MB)
     |████████████████████████████████| 1.3 MB 25.5 MB/s
Collecting sortedcontainers<3.0,>=2.0
  Downloading sortedcontainers-2.1.0-py2.py3-none-any.whl (28 kB)
Requirement already satisfied: setuptools in /usr/local/lib/python3.7/site-packages (from protobuf>=3; extra == "profile"->ddtrace[profile]==0.36.0) (46.1.3)
Collecting six>=1.9
  Downloading six-1.14.0-py2.py3-none-any.whl (10 kB)
Building wheels for collected packages: intervaltree
  Building wheel for intervaltree (setup.py) ... done
  Created wheel for intervaltree: filename=intervaltree-3.0.2-py3-none-any.whl size=25793 sha256=a958c9799a44688ed7ce9f742c8b5343749cd1d6bb2cd87265ae88271bc34a58
  Stored in directory: /root/.cache/pip/wheels/68/2d/6f/68fdd1342f58dac32f7d2781b00e9fd43b15d51e4c1ff9b4fb
Successfully built intervaltree
Installing collected packages: msgpack, sortedcontainers, intervaltree, six, protobuf, ddtrace
Successfully installed ddtrace-0.36.0 intervaltree-3.0.2 msgpack-1.0.0 protobuf-3.11.3 six-1.14.0 sortedcontainers-2.1.0
root@10a961d023a2:/# python
Python 3.7.7 (default, Mar 31 2020, 15:46:29)
[GCC 8.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import ddtrace.profile.auto
__main__:1: RemovedInDDTrace10Warning: 'ddtrace.profile' is deprecated and will be remove in future versions. Use ddtrace.profiling instead.
No exporters are configured, no profile will be output

There may be a build time dependency missing, but I don't see any errors during pip install

@jd
Copy link
Contributor

jd commented Apr 2, 2020

There are 3 different problems:

  1. We provide pre-built wheels for Linux, but Alpine is not compatible with them, so you have to install it by source
  2. Alpine does not have any C compiler by default, so you can't compile our wheels
  3. Our wheel building / install mechanism should but it does not

I'll fix 3. by making sure you see an error when installing. That being said, this is not going to solve your issue — you'll just get an error message.

If you want to use Alpine Linux, you need (at least) to install gcc.

There may be a build time dependency missing, but I don't see any errors during pip install

Yeah this is due to 3. You can see WARNING being print with pip -v, but they should be errors, not warning. Our bad.

jd added a commit to jd/dd-trace-py that referenced this issue Apr 2, 2020
If no C compiler is available, the installation do not fail and only a warning
is being print. This is wrong as the profiler won't work — at all.

Since we need a C compiler to build the profiler extensions that are part of
the wheel anyway,  let's not make wrapt or psutil optional.

Fixes DataDog#1328
jd added a commit to jd/dd-trace-py that referenced this issue Apr 2, 2020
If no C compiler is available, the installation do not fail and only a warning
is being print. This is wrong as the profiler won't work — at all.

Since we need a C compiler to build the profiler extensions that are part of
the wheel anyway,  let's not make wrapt or psutil optional.

Fixes DataDog#1328
@alandotcom
Copy link
Author

I ran with -v and I can see the gcc failure now:

WARNING: Failed to build extension ddtrace.profiling.collector.stack, skipping: command 'gcc' failed with exit status 1
  building 'ddtrace.profiling.collector._traceback' extension
  gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -DTHREAD_STACK_SIZE=0x100000 -fPIC -I/usr/local/include/python3.7m -c ddtrace/profiling/collector/_traceback.c -o build/temp.linux-x86_64-3.7/ddtrace/profiling/collector/_traceback.o
  gcc -shared build/temp.linux-x86_64-3.7/ddtrace/profiling/collector/_traceback.o -L/usr/local/lib -lpython3.7m -o build/lib.linux-x86_64-3.7/ddtrace/profiling/collector/_traceback.cpython-37m-x86_64-linux-gnu.so
  building 'ddtrace.profiling._build' extension
  gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -DTHREAD_STACK_SIZE=0x100000 -fPIC -I/usr/local/include/python3.7m -c ddtrace/profiling/_build.c -o build/temp.linux-x86_64-3.7/ddtrace/profiling/_build.o
  gcc -shared build/temp.linux-x86_64-3.7/ddtrace/profiling/_build.o -L/usr/local/lib -lpython3.7m -o build/lib.linux-x86_64-3.7/ddtrace/profiling/_build.cpython-37m-x86_64-linux-gnu.so
  building 'ddtrace.vendor.wrapt._wrappers' extension
  creating build/temp.linux-x86_64-3.7/ddtrace/vendor
  creating build/temp.linux-x86_64-3.7/ddtrace/vendor/wrapt
  gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -DTHREAD_STACK_SIZE=0x100000 -fPIC -I/usr/local/include/python3.7m -c ddtrace/vendor/wrapt/_wrappers.c -o build/temp.linux-x86_64-3.7/ddtrace/vendor/wrapt/_wrappers.o
  gcc -shared build/temp.linux-x86_64-3.7/ddtrace/vendor/wrapt/_wrappers.o -L/usr/local/lib -lpython3.7m -o build/lib.linux-x86_64-3.7/ddtrace/vendor/wrapt/_wrappers.cpython-37m-x86_64-linux-gnu.so
  building 'ddtrace.vendor.psutil._psutil_linux' extension
  creating build/temp.linux-x86_64-3.7/ddtrace/vendor/psutil
  gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -DTHREAD_STACK_SIZE=0x100000 -fPIC -DPSUTIL_VERSION=567 -DPSUTIL_POSIX=1 -DPSUTIL_LINUX=1 -I/usr/local/include/python3.7m -c ddtrace/vendor/psutil/_psutil_common.c -o build/temp.linux-x86_64-3.7/ddtrace/vendor/psutil/_psutil_common.o
  gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -DTHREAD_STACK_SIZE=0x100000 -fPIC -DPSUTIL_VERSION=567 -DPSUTIL_POSIX=1 -DPSUTIL_LINUX=1 -I/usr/local/include/python3.7m -c ddtrace/vendor/psutil/_psutil_posix.c -o build/temp.linux-x86_64-3.7/ddtrace/vendor/psutil/_psutil_posix.o
  gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -DTHREAD_STACK_SIZE=0x100000 -fPIC -DPSUTIL_VERSION=567 -DPSUTIL_POSIX=1 -DPSUTIL_LINUX=1 -I/usr/local/include/python3.7m -c ddtrace/vendor/psutil/_psutil_linux.c -o build/temp.linux-x86_64-3.7/ddtrace/vendor/psutil/_psutil_linux.o
  ddtrace/vendor/psutil/_psutil_linux.c: In function 'PyInit__psutil_linux':
  ddtrace/vendor/psutil/_psutil_linux.c:607:15: warning: unused variable 'v' [-Wunused-variable]
       PyObject *v;
                 ^
  gcc -shared build/temp.linux-x86_64-3.7/ddtrace/vendor/psutil/_psutil_common.o build/temp.linux-x86_64-3.7/ddtrace/vendor/psutil/_psutil_posix.o build/temp.linux-x86_64-3.7/ddtrace/vendor/psutil/_psutil_linux.o -L/usr/local/lib -lpython3.7m -o build/lib.linux-x86_64-3.7/ddtrace/vendor/psutil/_psutil_linux.cpython-37m-x86_64-linux-gnu.so
  building 'ddtrace.vendor.psutil._psutil_posix' extension
  gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -DTHREAD_STACK_SIZE=0x100000 -fPIC -DPSUTIL_VERSION=567 -DPSUTIL_POSIX=1 -DPSUTIL_LINUX=1 -I/usr/local/include/python3.7m -c ddtrace/vendor/psutil/_psutil_common.c -o build/temp.linux-x86_64-3.7/ddtrace/vendor/psutil/_psutil_common.o
  gcc -Wno-unused-result -Wsign-compare -DNDEBUG -g -fwrapv -O3 -Wall -DTHREAD_STACK_SIZE=0x100000 -fPIC -DPSUTIL_VERSION=567 -DPSUTIL_POSIX=1 -DPSUTIL_LINUX=1 -I/usr/local/include/python3.7m -c ddtrace/vendor/psutil/_psutil_posix.c -o build/temp.linux-x86_64-3.7/ddtrace/vendor/psutil/_psutil_posix.o
  gcc -shared build/temp.linux-x86_64-3.7/ddtrace/vendor/psutil/_psutil_common.o build/temp.linux-x86_64-3.7/ddtrace/vendor/psutil/_psutil_posix.o -L/usr/local/lib -lpython3.7m -o build/lib.linux-x86_64-3.7/ddtrace/vendor/psutil/_psutil_posix.cpython-37m-x86_64-linux-gnu.so
  installing to build/bdist.linux-x86_64/wheel

@jd
Copy link
Contributor

jd commented Apr 3, 2020

I've tried compiling the library on Alpine, and it fails with some Cython generated code for the stack collector.
I'll look into that, though in the meantime I'd suggest switching to e.g. Debian based images.

@jd
Copy link
Contributor

jd commented Apr 6, 2020

Compilation on Alpine fails and I'm unable to make it work so far — there's a conversion issue around pthread_t and int triggered with gcc.

As it's discouraged to use Alpine for Python image anyway¹, I recommend switching to another Docker image.

¹ https://pythonspeed.com/articles/alpine-docker-python/

jd added a commit to jd/dd-trace-py that referenced this issue Apr 15, 2020
If no C compiler is available, the installation do not fail and only a warning
is being print. This is wrong as the profiler won't work — at all.

Since we need a C compiler to build the profiler extensions that are part of
the wheel anyway,  let's not make wrapt or psutil optional.

Fixes DataDog#1328
@jd jd closed this as completed in #1333 Apr 15, 2020
jd added a commit that referenced this issue Apr 15, 2020
If no C compiler is available, the installation do not fail and only a warning
is being print. This is wrong as the profiler won't work — at all.

Since we need a C compiler to build the profiler extensions that are part of
the wheel anyway,  let's not make wrapt or psutil optional.

Fixes #1328
Kyle-Verhoog added a commit that referenced this issue Apr 17, 2020
* chore: update six to 1.14.0 (#1313)

* chore(ci): test only with grpcio wheels (#1310)

* chore(ci): test only with grpcio wheels

* fix

Co-authored-by: Kyle Verhoog <kyle@verhoog.ca>

* fix(profiling/pprof): provide timestamp to export() (#1312)

Currently, the Exporters have to guess what the time range is for the provided
events.
This is not optimal in cases where we don't have any events — even if it
_should_ not happen in practice.

By forcing the caller of the exporter to provide the collection time range, we
can generate data that are actually more precise.

Co-authored-by: Kyle Verhoog <kyle@verhoog.ca>

* ci: import our Dockerfile in the repository (#1227)

That should make it easier to manage our CI image.

Co-authored-by: Brett Langdon <brett.langdon@datadoghq.com>
Co-authored-by: Kyle Verhoog <kyle@verhoog.ca>

* fmt: black celery tests (#1314)

* celery: black fmt tests

* celery: use self.assert_is_measured

Co-authored-by: Julien Danjou <julien@danjou.info>

* Add uds_path to ddtrace.opentracer.Tracer (#1275)

Fixes #1274

* logging: only use global setting for env, service and version (#1317)

* logging: update documentation (#1318)

* chore(docs): consolidate environment variable configuration (#1320)

* docs: consolidate environment variable configuration

* Update docs/configuration.rst

Co-Authored-By: Kyle Verhoog <kyle@verhoog.ca>

* remove env vars from usage

Co-authored-by: Kyle Verhoog <kyle@verhoog.ca>

* logging: fix typo (#1323)

* fix(tests/profiling): use a string with setenv, not a int (#1321)

* fix(profiling/http): converts nanoseconds timestamp to seconds (#1325)

* fix(profiling): ignore failure on shutdown (#1327)

On interpreter shutdown, we can see this kind of errors:

Traceback (most recent call last):
  File "ddtrace/profiling/_periodic.py", line 104, in run
    del threading._active[self._tident]
TypeError: 'NoneType' object does not support item deletion

This changes the code to use the same try/except mechanism in the above block
to avoid logging those errors on shutdown.

* aiobotocore: pin to <1.0 (#1330)

* aiobotocore: pin to <1.0

* aiobotocore: don't test 0.12 with Python 3.5

* Update error event handler name within SQLAlchemy engine (#1324)

* Updating event handler name

Update method name for handling db errors in sqlalchemy

* Listen for dbapi events

* Accommodating difference in positional args among sqlalchemy versions

Co-authored-by: Kyle Verhoog <kyle@verhoog.ca>

* fix: tag runtime metrics for only internal services (#1311)

* fix: tag runtime metrics only for internal services

* only add internal services

* handle case where span type not set as internal

* remove deprecated functions

* check lang

* revert to deprecated regexp asserts

* docs(opentracing): add celery example (#1329)

* Document how to propagate the tracer across celery tasks

* docs(opentracing): add celery distributed tracing example

Co-authored-by: Lie Ryan <lie.1296@gmail.com>
Co-authored-by: Tahir H. Butt <tahir.butt@datadoghq.com>

* fix(profiling): allow to override options after load (#1332)

Using default=os.getenv in attr attributes will make the default unchangeable
after the library is loaded.

Most options already leverage ddtrace.profiling._attr.from_env to avoid
this, but not the HTTP exporter.

Co-authored-by: Kyle Verhoog <kyle@verhoog.ca>

* ci: allow to use latest pytest version (#1326)

* feat(profiling): add the pip install when recompilation is needed (#1334)

If an incompatible ABI is detected, users are usually lost and don't know what
to do.
Indicate the command to use to install and compile this module.

* tracer: add support for cross process tracing (#1331)

* feat(profiling): add support for DD_VERSION (#1340)

* feat(profiling): add support for DD_SERVICE (#1339)

* fix: avoid context deadlock with logs injection enabled (#1338)

* don't try to get current span on patched internal logger

* run black

* add span directly to log record

* add test

* run black

* contextually group test a bit better

* don't add issue number

Co-Authored-By: Tahir H. Butt <tahir@tahirbutt.com>

* rename logger_arg to logger_override 1/2

Co-Authored-By: Tahir H. Butt <tahir@tahirbutt.com>

* rename logger_arg to logger_override 2/2

Co-Authored-By: Tahir H. Butt <tahir@tahirbutt.com>

* fix arg name

Co-authored-by: Tahir H. Butt <tahir@tahirbutt.com>

* fix(profiling): use formats.asbool to convert bool from env (#1342)

Using the `bool` primitive will only work with 0 or 1, whereas we want to
support true/false strings.

* feat(profiling): add support for DD_ENV environment variable (#1343)

* span: handle non-string tag keys (#1345)

* span: handle non-string keys

* span: use six.string_types for type checking

* fix(profiling): pthread_t is defined as unsigned long, not int (#1347)

Co-authored-by: Kyle Verhoog <kyle@verhoog.ca>

* Allow Profiler to finish upload data in the background when stopped (#1322)

* feat(profiling/periodic): allow to call a shutdown function

* feat(profiling): do not reset event list of no exporter configured

* feat(profiling): allow to stop/join collectors in 2 steps

This should make the Profiler slightly faster to stop.

* refactor: introduce Service class

This introduces a new class Service that describes a Service that can be
started, stopped and joined.

The Service tracks its own status in order to avoid starting twice the same
service.

The collectors are now inheriting from this common class as they all provide a
startable/stoppable service.

* refactor(scheduler): leverage PeriodicService class

This changes the Scheduler class to leverage the PeriodicService class.

It also makes sure the Scheduler always flush on exit.

The Profiler is now responsible for joining or not the Scheduler if it wants to
block on the last upload before returning from its `stop` method.

* feat(profiling): add support for DD_API_KEY (#1350)

* feat(profiling): add support for DD_SITE (#1351)

* tracer: stop previous writer if a new one is created (#1356)

* Updates configuration docs (#1360)

This updates the configuration docs, calling out that the DD_SERVICE, DD_ENV, and DD_VERSION env vars were added in v0.36.0

Co-authored-by: Kyle Verhoog <kyle@verhoog.ca>

* feat(profiling): allow to pass service_name to HTTP exporter (#1358)

* Add config to omit `django.user.name` tag from request root span (#1361)

* Add `user_name_enabled` config to Django contrib

* Elaborate on user_name_enabled comment

* Change test to only check for user name tag instead of all meta tags

* Check that "django.user.name" key does not exist in meta

* Change `user_name_enabled` to `include_user_name`

* feat(profiling): replace http_client by urllib for uploading (#1359)

This is slightly higher level than http_client and supports features such as
the `HTTP_PROXY` environment variable.

* test(profiling): check for thread presence rather than number of threads (#1357)

This test would fail occasionally if a thread from another test is still
running, depending on the order the tests are run.

This replaces check with a more accurate one.

* Fix task context management for asyncio in Python <3.7 (#1352)

* fix for context propagation when first span is closed

* fix tests and merge

* fix for context propagation when first span is closed

* fix tests and merge

* test without context changes

* asyncio: use context.clone()

Co-authored-by: Alexander Mohr <thehesiod@hotmail.com>
Co-authored-by: Alexander Mohr <amohr@farmersbusinessnetwork.com>

* fix: make C extensions mandatory (#1333)

If no C compiler is available, the installation do not fail and only a warning
is being print. This is wrong as the profiler won't work — at all.

Since we need a C compiler to build the profiler extensions that are part of
the wheel anyway,  let's not make wrapt or psutil optional.

Fixes #1328

* writer: allow configuration of queue maxsize via env var (#1364)

* writer: allow configuration of queue maxsize via env var

* rename to DD_TRACE_MAX_TPS

* cleanup

Co-authored-by: Julien Danjou <julien@danjou.info>
Co-authored-by: Tahir H. Butt <tahir.butt@datadoghq.com>
Co-authored-by: Kyle Verhoog <kyle@verhoog.ca>
Co-authored-by: Brett Langdon <brett.langdon@datadoghq.com>
Co-authored-by: Sarah Harvey <worldwise001@users.noreply.github.com>
Co-authored-by: Robert Townley <Me@RobertTownley.com>
Co-authored-by: Lie Ryan <lie.1296@gmail.com>
Co-authored-by: Zach Hammer <zhammer@seatgeek.com>
Co-authored-by: Tahir H. Butt <tahir@tahirbutt.com>
Co-authored-by: Scott Burns <scott.s.burns@gmail.com>
Co-authored-by: Sebastian Coetzee <mail@sebastiancoetzee.com>
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

Successfully merging a pull request may close this issue.

2 participants