Skip to content

Commit 4c63636

Browse files
authored
fix(rq): resolve set_tag warnings when job status is None (#7986)
1 parent 1940f78 commit 4c63636

File tree

4 files changed

+97
-1
lines changed

4 files changed

+97
-1
lines changed

ddtrace/contrib/rq/__init__.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -194,7 +194,8 @@ def traced_perform_job(rq, pin, func, instance, args, kwargs):
194194
try:
195195
return func(*args, **kwargs)
196196
finally:
197-
span.set_tag_str("job.status", job.get_status())
197+
# get_status() returns None when ttl=0
198+
span.set_tag_str("job.status", job.get_status() or "None")
198199
span.set_tag_str("job.origin", job.origin)
199200
if job.is_failed:
200201
span.error = 1
Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,4 @@
1+
---
2+
fixes:
3+
- |
4+
rq: Fixed a bug where the RQ integration would emit a warning when setting ``job.status`` span tag.

tests/contrib/rq/test_rq.py

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -86,6 +86,16 @@ def test_sync_worker(queue):
8686
assert job.result == 2
8787

8888

89+
@snapshot(ignores=snapshot_ignores)
90+
def test_sync_worker_ttl(queue):
91+
# queue a job where the result expires immediately
92+
job = queue.enqueue(job_add1, 1, result_ttl=0)
93+
worker = rq.SimpleWorker([queue], connection=queue.connection)
94+
worker.work(burst=True)
95+
assert job.get_status() is None
96+
assert job.result is None
97+
98+
8999
@snapshot(ignores=snapshot_ignores)
90100
def test_sync_worker_multiple_jobs(queue):
91101
jobs = []
Lines changed: 81 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
[[
2+
{
3+
"name": "rq.queue.enqueue_job",
4+
"service": "rq",
5+
"resource": "tests.contrib.rq.jobs.job_add1",
6+
"trace_id": 0,
7+
"span_id": 1,
8+
"parent_id": 0,
9+
"type": "worker",
10+
"error": 0,
11+
"meta": {
12+
"_dd.base_service": "",
13+
"_dd.p.dm": "-0",
14+
"_dd.p.tid": "654a694400000000",
15+
"component": "rq",
16+
"job.func_name": "tests.contrib.rq.jobs.job_add1",
17+
"job.id": "30c861b5-640d-4d34-aed4-f4a5270723f1",
18+
"language": "python",
19+
"queue.name": "q",
20+
"runtime-id": "696c3bcd1bb346e982f3c710445cbea1",
21+
"span.kind": "producer"
22+
},
23+
"metrics": {
24+
"_dd.top_level": 1,
25+
"_dd.tracer_kr": 1.0,
26+
"_sampling_priority_v1": 1,
27+
"process_id": 2601
28+
},
29+
"duration": 830708,
30+
"start": 1692649887569483383
31+
},
32+
{
33+
"name": "rq.worker.perform_job",
34+
"service": "rq-worker",
35+
"resource": "tests.contrib.rq.jobs.job_add1",
36+
"trace_id": 0,
37+
"span_id": 2,
38+
"parent_id": 1,
39+
"type": "worker",
40+
"error": 0,
41+
"meta": {
42+
"_dd.base_service": "",
43+
"_dd.p.dm": "-0",
44+
"_dd.p.tid": "654a694400000000",
45+
"component": "rq",
46+
"job.id": "30c861b5-640d-4d34-aed4-f4a5270723f1",
47+
"job.origin": "q",
48+
"job.status": "None",
49+
"language": "python",
50+
"runtime-id": "696c3bcd1bb346e982f3c710445cbea1",
51+
"span.kind": "consumer",
52+
"traceparent": "00-0000000000000000dfe7ed03d1f23df4-d773b116ed54102c-01",
53+
"tracestate": "dd=s:1;t.dm:-0"
54+
},
55+
"metrics": {
56+
"_dd.top_level": 1,
57+
"_dd.tracer_kr": 1.0,
58+
"_sampling_priority_v1": 1,
59+
"process_id": 2601
60+
},
61+
"duration": 1692083,
62+
"start": 1692649887575252633
63+
},
64+
{
65+
"name": "rq.job.perform",
66+
"service": "rq-worker",
67+
"resource": "tests.contrib.rq.jobs.job_add1",
68+
"trace_id": 0,
69+
"span_id": 3,
70+
"parent_id": 2,
71+
"type": "",
72+
"error": 0,
73+
"meta": {
74+
"_dd.base_service": "",
75+
"_dd.p.tid": "654a694400000000",
76+
"component": "rq",
77+
"job.id": "30c861b5-640d-4d34-aed4-f4a5270723f1"
78+
},
79+
"duration": 178917,
80+
"start": 1692649887575690758
81+
}]]

0 commit comments

Comments
 (0)