Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
31 commits
Select commit Hold shift + click to select a range
3dfa76e
chore(ci):updated partial flush configs
mawais54013 Aug 4, 2022
97b268c
added try statement
mawais54013 Aug 5, 2022
d1bb075
updated try statement
mawais54013 Aug 5, 2022
83ac626
reformat file
mawais54013 Aug 5, 2022
361e080
Merge branch '1.x' into mawais54013/enabling-partialflushing
mawais54013 Aug 5, 2022
f664f6a
Update tests/integration/test_integration.py
mawais54013 Aug 5, 2022
80fb73d
updated writer interval
mawais54013 Aug 8, 2022
240f28f
Merge branch '1.x' into mawais54013/enabling-partialflushing
mawais54013 Aug 8, 2022
1bee242
added partial flush to doc
mawais54013 Aug 8, 2022
537d950
Merge branch '1.x' into mawais54013/enabling-partialflushing
mawais54013 Aug 8, 2022
2d72416
minor addition
mawais54013 Aug 8, 2022
55984b6
minor update v1
mawais54013 Aug 8, 2022
41bab1e
updated tags for encoding
mawais54013 Aug 12, 2022
1073271
Merge branch '1.x' into mawais54013/enabling-partialflushing
mawais54013 Aug 12, 2022
faab3d1
add formatting
mawais54013 Aug 12, 2022
d369bb7
Merge branch '1.x' into mawais54013/enabling-partialflushing
mawais54013 Aug 15, 2022
f95fcdf
Merge branch '1.x' into mawais54013/enabling-partialflushing
mawais54013 Aug 15, 2022
cdfb4e9
added encoding and updated key
mawais54013 Aug 15, 2022
9d13809
updated encoder key
mawais54013 Aug 15, 2022
c317bcf
Update docs/configuration.rst
mawais54013 Aug 15, 2022
83466f8
Merge branch '1.x' into mawais54013/enabling-partialflushing
mabdinur Aug 19, 2022
42b01ba
Merge branch '1.x' into mawais54013/enabling-partialflushing
brettlangdon Sep 2, 2022
ebfeb12
Merge branch '1.x' into mawais54013/enabling-partialflushing
mergify[bot] Sep 2, 2022
cf57087
Merge branch '1.x' into mawais54013/enabling-partialflushing
mergify[bot] Sep 6, 2022
64696bd
Merge branch '1.x' into mawais54013/enabling-partialflushing
mergify[bot] Sep 6, 2022
b43b019
Merge branch '1.x' into mawais54013/enabling-partialflushing
mergify[bot] Sep 6, 2022
dca7233
Merge branch '1.x' into mawais54013/enabling-partialflushing
mergify[bot] Sep 6, 2022
f8f5b6c
Merge branch '1.x' into mawais54013/enabling-partialflushing
mergify[bot] Sep 7, 2022
cfff595
Merge branch '1.x' into mawais54013/enabling-partialflushing
mergify[bot] Sep 7, 2022
5ea2c5b
Merge branch '1.x' into mawais54013/enabling-partialflushing
mergify[bot] Sep 7, 2022
f98c809
Merge branch '1.x' into mawais54013/enabling-partialflushing
mergify[bot] Sep 7, 2022
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion ddtrace/tracer.py
Original file line number Diff line number Diff line change
Expand Up @@ -215,7 +215,7 @@ def __init__(
)
self._single_span_sampling_rules = get_span_sampling_rules() # type: List[SpanSamplingRule]
self._writer = writer # type: TraceWriter
self._partial_flush_enabled = asbool(os.getenv("DD_TRACE_PARTIAL_FLUSH_ENABLED", default=False))
self._partial_flush_enabled = asbool(os.getenv("DD_TRACE_PARTIAL_FLUSH_ENABLED", default=True))
self._partial_flush_min_spans = int(os.getenv("DD_TRACE_PARTIAL_FLUSH_MIN_SPANS", default=500))
self._appsec_enabled = config._appsec_enabled

Expand Down
6 changes: 6 additions & 0 deletions docs/configuration.rst
Original file line number Diff line number Diff line change
Expand Up @@ -233,6 +233,12 @@ below:
- 512
- The maximum length of ``x-datadog-tags`` header allowed in the Datadog propagation style. Must be a value between 0 to 512. If 0, propagation of ``x-datadog-tags`` is disabled.

.. _dd-trace-partial-flush-enabled:
* - ``DD_TRACE_PARTIAL_FLUSH_ENABLED``
- Boolean
- True
- Prevents large payloads being sent to APM.

.. _dd-profiling-enabled:
* - ``DD_PROFILING_ENABLED``
- Boolean
Expand Down
2 changes: 1 addition & 1 deletion tests/commands/test_runner.py
Original file line number Diff line number Diff line change
Expand Up @@ -410,7 +410,7 @@ def test_info_no_configs():
Log injection enabled: False
Health metrics enabled: False
Priority sampling enabled: True
Partial flushing enabled: False
Partial flushing enabled: True
Partial flush minimum number of spans: 500
\x1b[92m\x1b[1mTagging:\x1b[0m
DD Service: None
Expand Down
5 changes: 3 additions & 2 deletions tests/contrib/asyncio/test_tracer_safety.py
Original file line number Diff line number Diff line change
Expand Up @@ -45,11 +45,12 @@ async def coro():
with tracer.trace("coroutine"):
await asyncio.sleep(0.01)

futures = [asyncio.ensure_future(coro()) for x in range(1000)]
# partial flushing is enabled, ensure the number of spans generated is less than 500
futures = [asyncio.ensure_future(coro()) for x in range(400)]
for future in futures:
await future

# the trace is wrong but the Context is finished
traces = tracer.pop_traces()
assert 1 == len(traces)
assert 1000 == len(traces[0])
assert 400 == len(traces[0])
72 changes: 71 additions & 1 deletion tests/integration/test_integration.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,4 @@
# -*- coding: utf-8 -*-
import itertools
import logging
import os
Expand Down Expand Up @@ -219,6 +220,47 @@ def test_metrics(encoding, monkeypatch):

with override_global_config(dict(health_metrics_enabled=True)):
t = Tracer()
assert t._partial_flush_min_spans == 500
statsd_mock = mock.Mock()
t._writer.dogstatsd = statsd_mock
assert t._writer._report_metrics
with mock.patch("ddtrace.internal.writer.log") as log:
for _ in range(5):
spans = []
for i in range(3000):
spans.append(t.trace("op"))
# Since _partial_flush_min_spans is set to 500 we will flush spans in 6 batches
# each batch will contain 500 spans
for s in spans:
s.finish()

t.shutdown()
log.warning.assert_not_called()
log.error.assert_not_called()

statsd_mock.distribution.assert_has_calls(
[
mock.call("datadog.tracer.http.sent.bytes", AnyInt()),
mock.call("datadog.tracer.http.sent.traces", 30),
mock.call("datadog.tracer.writer.accepted.traces", 30, tags=[]),
mock.call("datadog.tracer.buffer.accepted.traces", 30, tags=[]),
mock.call("datadog.tracer.buffer.accepted.spans", 15000, tags=[]),
mock.call("datadog.tracer.http.requests", 1, tags=[]),
mock.call("datadog.tracer.http.sent.bytes", AnyInt(), tags=[]),
],
any_order=True,
)


@allencodings
def test_metrics_partial_flush_disabled(encoding, monkeypatch):
monkeypatch.setenv("DD_TRACE_API_VERSION", encoding)

with override_global_config(dict(health_metrics_enabled=True)):
t = Tracer()
t.configure(
partial_flush_enabled=False,
)
statsd_mock = mock.Mock()
t._writer.dogstatsd = statsd_mock
assert t._writer._report_metrics
Expand Down Expand Up @@ -248,8 +290,37 @@ def test_metrics(encoding, monkeypatch):
@allencodings
def test_single_trace_too_large(encoding, monkeypatch):
monkeypatch.setenv("DD_TRACE_API_VERSION", encoding)
# setting writer interval to 5 seconds so that buffer can fit larger traces
monkeypatch.setenv("DD_TRACE_WRITER_INTERVAL_SECONDS", "5.0")

t = Tracer()
assert t._partial_flush_enabled is True
with mock.patch("ddtrace.internal.writer.log") as log:
key = "a" * 250
with t.trace("huge"):
for i in range(200000):
with t.trace("operation") as s:
# Need to make the strings unique so that the v0.5 encoding doesn’t compress the data
s.set_tag(key + str(i), key + str(i))
t.shutdown()
log.warning.assert_any_call(
"trace buffer (%s traces %db/%db) cannot fit trace of size %db, dropping",
AnyInt(),
AnyInt(),
AnyInt(),
AnyInt(),
)
log.error.assert_not_called()


@allencodings
def test_single_trace_too_large_partial_flush_disabled(encoding, monkeypatch):
monkeypatch.setenv("DD_TRACE_API_VERSION", encoding)

t = Tracer()
t.configure(
partial_flush_enabled=False,
)
with mock.patch("ddtrace.internal.writer.log") as log:
with t.trace("huge"):
for i in range(200000):
Expand Down Expand Up @@ -717,7 +788,6 @@ def test_partial_flush_log(run_python_code_in_subprocess, encoding, monkeypatch)
t = Tracer()

t.configure(
partial_flush_enabled=True,
partial_flush_min_spans=partial_flush_min_spans,
)

Expand Down