def test_trace_spawn_later_multiple_greenlets_multiple_traces(self):
# multiple greenlets must be part of the same trace
def entrypoint():
with self.tracer.trace('greenlet.main') as span:
span.resource = 'base'
jobs = [gevent.spawn_later(0.01, green_1), gevent.spawn_later(0.01, green_2)]
gevent.joinall(jobs)
def green_1():
with self.tracer.trace('greenlet.worker') as span:
span.set_tag('worker_id', '1')
gevent.sleep(0.01)
def green_2():
with self.tracer.trace('greenlet.worker') as span:
span.set_tag('worker_id', '2')
gevent.sleep(0.01)
gevent.spawn(entrypoint).join()
traces = self.tracer.writer.pop_traces()
eq_(3, len(traces))
eq_(1, len(traces[0]))
parent_span = traces[2][0]
worker_1 = traces[0][0]
worker_2 = traces[1][0]
# check spans data and hierarchy
eq_(parent_span.name, 'greenlet.main')
eq_(parent_span.resource, 'base')
eq_(worker_1.get_tag('worker_id'), '1')
eq_(worker_1.name, 'greenlet.worker')
eq_(worker_1.resource, 'greenlet.worker')
eq_(worker_1.parent_id, parent_span.span_id)
eq_(worker_2.get_tag('worker_id'), '2')
eq_(worker_2.name, 'greenlet.worker')
eq_(worker_2.resource, 'greenlet.worker')
eq_(worker_2.parent_id, parent_span.span_id)
评论列表
文章目录