Skip to content

Commit 4708843

Browse files
fix(vector-db): prevent duplicate exception recording in span context managers
Add record_exception=False and set_status_on_exception=False to all start_as_current_span calls in chromadb, pinecone, weaviate, lancedb, and milvus wrappers to avoid double-recording exceptions that are already captured by the explicit span.record_exception(e) calls.
1 parent 69e73ec commit 4708843

File tree

5 files changed

+19
-9
lines changed
  • packages
    • opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb
    • opentelemetry-instrumentation-lancedb/opentelemetry/instrumentation/lancedb
    • opentelemetry-instrumentation-milvus/opentelemetry/instrumentation/milvus
    • opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation/pinecone
    • opentelemetry-instrumentation-weaviate/opentelemetry/instrumentation/weaviate

5 files changed

+19
-9
lines changed

packages/opentelemetry-instrumentation-chromadb/opentelemetry/instrumentation/chromadb/wrapper.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ def _wrap(tracer, to_wrap, wrapped, instance, args, kwargs):
3838
return wrapped(*args, **kwargs)
3939

4040
name = to_wrap.get("span_name")
41-
with tracer.start_as_current_span(name) as span:
41+
with tracer.start_as_current_span(
42+
name, record_exception=False, set_status_on_exception=False
43+
) as span:
4244
span.set_attribute(SpanAttributes.DB_SYSTEM, "chroma")
4345
span.set_attribute(SpanAttributes.DB_OPERATION, to_wrap.get("method"))
4446

@@ -66,7 +68,7 @@ def _wrap(tracer, to_wrap, wrapped, instance, args, kwargs):
6668
return_value = wrapped(*args, **kwargs)
6769
except Exception as e:
6870
span.record_exception(e)
69-
span.set_status(Status(StatusCode.ERROR, str(e)))
71+
span.set_status(Status(StatusCode.ERROR))
7072
raise
7173
if to_wrap.get("method") == "query":
7274
_add_query_result_events(span, return_value)

packages/opentelemetry-instrumentation-lancedb/opentelemetry/instrumentation/lancedb/wrapper.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,9 @@ def _wrap(tracer, to_wrap, wrapped, instance, args, kwargs):
3535
return wrapped(*args, **kwargs)
3636

3737
name = to_wrap.get("span_name")
38-
with tracer.start_as_current_span(name) as span:
38+
with tracer.start_as_current_span(
39+
name, record_exception=False, set_status_on_exception=False
40+
) as span:
3941
span.set_attribute(SpanAttributes.DB_SYSTEM, "lancedb")
4042
span.set_attribute(SpanAttributes.DB_OPERATION, to_wrap.get("method"))
4143

@@ -50,7 +52,7 @@ def _wrap(tracer, to_wrap, wrapped, instance, args, kwargs):
5052
return_value = wrapped(*args, **kwargs)
5153
except Exception as e:
5254
span.record_exception(e)
53-
span.set_status(Status(StatusCode.ERROR, str(e)))
55+
span.set_status(Status(StatusCode.ERROR))
5456
raise
5557

5658
return return_value

packages/opentelemetry-instrumentation-milvus/opentelemetry/instrumentation/milvus/wrapper.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -77,7 +77,9 @@ def _wrap(
7777

7878
method = to_wrap.get("method")
7979
name = to_wrap.get("span_name")
80-
with tracer.start_as_current_span(name) as span:
80+
with tracer.start_as_current_span(
81+
name, record_exception=False, set_status_on_exception=False
82+
) as span:
8183
span.set_attribute(SpanAttributes.DB_SYSTEM, "milvus")
8284
span.set_attribute(SpanAttributes.DB_OPERATION, to_wrap.get("method"))
8385

@@ -114,7 +116,7 @@ def _wrap(
114116
)
115117
span.set_attribute(ERROR_TYPE, error_type)
116118
span.record_exception(e)
117-
span.set_status(SpanStatus(StatusCode.ERROR, str(e)))
119+
span.set_status(SpanStatus(StatusCode.ERROR))
118120
raise
119121

120122
shared_attributes = {

packages/opentelemetry-instrumentation-pinecone/opentelemetry/instrumentation/pinecone/__init__.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -143,6 +143,8 @@ def _wrap(
143143
attributes={
144144
AISpanAttributes.VECTOR_DB_VENDOR: "Pinecone",
145145
},
146+
record_exception=False,
147+
set_status_on_exception=False,
146148
) as span:
147149
if span.is_recording():
148150
_set_input_attributes(span, instance, kwargs)
@@ -158,7 +160,7 @@ def _wrap(
158160
response = wrapped(*args, **kwargs)
159161
except Exception as e:
160162
span.record_exception(e)
161-
span.set_status(Status(StatusCode.ERROR, str(e)))
163+
span.set_status(Status(StatusCode.ERROR))
162164
raise
163165
end_time = time.time()
164166

packages/opentelemetry-instrumentation-weaviate/opentelemetry/instrumentation/weaviate/wrapper.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -38,7 +38,9 @@ def _wrap(tracer, to_wrap, wrapped, instance, args, kwargs):
3838
return wrapped(*args, **kwargs)
3939

4040
name = to_wrap.get("span_name")
41-
with tracer.start_as_current_span(name) as span:
41+
with tracer.start_as_current_span(
42+
name, record_exception=False, set_status_on_exception=False
43+
) as span:
4244
span.set_attribute(SpanAttributes.DB_SYSTEM, "weaviate")
4345
span.set_attribute(SpanAttributes.DB_OPERATION, to_wrap.get("method"))
4446

@@ -51,7 +53,7 @@ def _wrap(tracer, to_wrap, wrapped, instance, args, kwargs):
5153
return_value = wrapped(*args, **kwargs)
5254
except Exception as e:
5355
span.record_exception(e)
54-
span.set_status(Status(StatusCode.ERROR, str(e)))
56+
span.set_status(Status(StatusCode.ERROR))
5557
raise
5658

5759
return return_value

0 commit comments

Comments
 (0)