Skip to content

Commit 65d38da

Browse files
authored
Use OpContext trace span for Cardinal tracing (#1684)
* Pin Cardinal config-carrier tracing branch Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Use OpContext trace span in Knowhere tracing Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Pin milvus-common trace helper package Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * refactor trace span helper usage Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * include Tracer for scoped trace helpers Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Pin milvus-common trace helper package Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Fix tracing clang-format Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Define Cardinal graph candidate limit metric Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Force Cardinal branch checkout Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Restore config trace fallback Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Fix tracing clang-format Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Pin merged milvus-common tracing package Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> * Keep Cardinal v2 on released version Signed-off-by: jamesgao-jpg <james.gao@zilliz.com> --------- Signed-off-by: jamesgao-jpg <james.gao@zilliz.com>
1 parent 6b287f3 commit 65d38da

7 files changed

Lines changed: 136 additions & 170 deletions

File tree

conanfile.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -116,7 +116,7 @@ def configure(self):
116116
def requirements(self):
117117
self.requires("abseil/20250127.0#481edcc75deb0efb16500f511f0f0a1c")
118118
self.requires("boost/1.83.0#4e8a94ac1b88312af95eded83cd81ca8")
119-
self.requires("milvus-common/1.0.0-ac18852@milvus/dev#d9aa7497425662eb17749b4871700200")
119+
self.requires("milvus-common/1.0.0-ae43d5c@milvus/dev#fe24230e26e129f6bf303a8342ba8980")
120120
self.requires("gflags/2.2.2#7671803f1dc19354cc90bd32874dcfda")
121121
self.requires("glog/0.7.1#a306e61d7b8311db8cb148ad62c48030")
122122
self.requires("nlohmann_json/3.11.3#ffb9e9236619f1c883e36662f944345d", force=True)

include/knowhere/prometheus_client.h

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -159,6 +159,7 @@ KNOWHERE_DECLARE_PROMETHEUS_HISTOGRAM(search_emb_list_retrieval_ann_ratio, PROME
159159
KNOWHERE_DECLARE_PROMETHEUS_HISTOGRAM(search_emb_list_retrieval_ann_ratio, PROMETHEUS_LABEL_CARDINAL);
160160

161161
KNOWHERE_DECLARE_PROMETHEUS_HISTOGRAM(search_level, PROMETHEUS_LABEL_CARDINAL);
162+
KNOWHERE_DECLARE_PROMETHEUS_HISTOGRAM(graph_search_candidate_limit, PROMETHEUS_LABEL_CARDINAL);
162163
KNOWHERE_DECLARE_PROMETHEUS_HISTOGRAM(bitset_ratio, PROMETHEUS_LABEL_CARDINAL);
163164
KNOWHERE_DECLARE_PROMETHEUS_HISTOGRAM(quant_compute_cnt, PROMETHEUS_LABEL_CARDINAL);
164165
KNOWHERE_DECLARE_PROMETHEUS_HISTOGRAM(raw_compute_cnt, PROMETHEUS_LABEL_CARDINAL);

include/knowhere/tracer.h

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,19 @@
1818

1919
#define TRACE_SERVICE_KNOWHERE "knowhere"
2020

21+
#if defined(NOT_COMPILE_FOR_SWIG) && !defined(KNOWHERE_WITH_LIGHT)
22+
namespace milvus {
23+
struct OpContext;
24+
namespace tracer {
25+
struct AutoSpan;
26+
} // namespace tracer
27+
} // namespace milvus
28+
29+
namespace knowhere {
30+
class BaseConfig;
31+
} // namespace knowhere
32+
#endif
33+
2134
namespace knowhere::tracer {
2235

2336
struct TraceConfig {
@@ -46,6 +59,13 @@ GetTracer();
4659
std::shared_ptr<trace::Span>
4760
StartSpan(const std::string& name, TraceContext* ctx = nullptr);
4861

62+
#if defined(NOT_COMPILE_FOR_SWIG) && !defined(KNOWHERE_WITH_LIGHT)
63+
// Starts a Milvus span from OpContext first. If OpContext has no trace span,
64+
// falls back to legacy trace fields in BaseConfig.
65+
std::unique_ptr<milvus::tracer::AutoSpan>
66+
StartMilvusSpanFromOpContextOrConfig(const std::string& name, milvus::OpContext* op_context, const BaseConfig& cfg);
67+
#endif
68+
4969
void
5070
SetRootSpan(std::shared_ptr<trace::Span> span);
5171

src/common/comp/brute_force.cc

Lines changed: 59 additions & 128 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,7 @@
3535
#include "simd/hook.h"
3636

3737
#if defined(NOT_COMPILE_FOR_SWIG) && !defined(KNOWHERE_WITH_LIGHT)
38+
#include "common/Tracer.h"
3839
#include "knowhere/tracer.h"
3940
#endif
4041

@@ -509,19 +510,14 @@ BruteForceSearchWithBufImpl(const DataSetPtr base_dataset, const DataSetPtr quer
509510

510511
#if defined(NOT_COMPILE_FOR_SWIG) && !defined(KNOWHERE_WITH_LIGHT)
511512
// LCOV_EXCL_START
512-
std::shared_ptr<tracer::trace::Span> span = nullptr;
513-
if (cfg.trace_id.has_value()) {
514-
auto trace_id_str = tracer::GetIDFromHexStr(cfg.trace_id.value());
515-
auto span_id_str = tracer::GetIDFromHexStr(cfg.span_id.value());
516-
auto ctx = tracer::TraceContext{.traceID = reinterpret_cast<const uint8_t*>(trace_id_str.c_str()),
517-
.spanID = reinterpret_cast<const uint8_t*>(span_id_str.c_str()),
518-
.traceFlags = static_cast<uint8_t>(cfg.trace_flags.value())};
519-
span = tracer::StartSpan("knowhere bf search with buf", &ctx);
520-
span->SetAttribute(meta::METRIC_TYPE, cfg.metric_type.value());
521-
span->SetAttribute(meta::TOPK, cfg.k.value());
522-
span->SetAttribute(meta::ROWS, nb);
523-
span->SetAttribute(meta::DIM, dim);
524-
span->SetAttribute(meta::NQ, nq);
513+
auto span = knowhere::tracer::StartMilvusSpanFromOpContextOrConfig("knowhere bf search with buf", op_context, cfg);
514+
auto span_ptr = span != nullptr ? span->GetSpan() : milvus::tracer::SpanPtr{};
515+
if (span_ptr != nullptr) {
516+
span_ptr->SetAttribute(meta::METRIC_TYPE, cfg.metric_type.value());
517+
span_ptr->SetAttribute(meta::TOPK, cfg.k.value());
518+
span_ptr->SetAttribute(meta::ROWS, nb);
519+
span_ptr->SetAttribute(meta::DIM, dim);
520+
span_ptr->SetAttribute(meta::NQ, nq);
525521
}
526522
// LCOV_EXCL_STOP
527523
#endif
@@ -617,14 +613,6 @@ BruteForceSearchWithBufImpl(const DataSetPtr base_dataset, const DataSetPtr quer
617613
}
618614
}
619615

620-
#if defined(NOT_COMPILE_FOR_SWIG) && !defined(KNOWHERE_WITH_LIGHT)
621-
// LCOV_EXCL_START
622-
if (cfg.trace_id.has_value()) {
623-
span->End();
624-
}
625-
// LCOV_EXCL_STOP
626-
#endif
627-
628616
return Status::success;
629617
}
630618

@@ -673,19 +661,15 @@ BruteForceSearchOnChunkWithBufImpl(const DataSetPtr base_dataset, const DataSetP
673661

674662
#if defined(NOT_COMPILE_FOR_SWIG) && !defined(KNOWHERE_WITH_LIGHT)
675663
// LCOV_EXCL_START
676-
std::shared_ptr<tracer::trace::Span> span = nullptr;
677-
if (cfg.trace_id.has_value()) {
678-
auto trace_id_str = tracer::GetIDFromHexStr(cfg.trace_id.value());
679-
auto span_id_str = tracer::GetIDFromHexStr(cfg.span_id.value());
680-
auto ctx = tracer::TraceContext{.traceID = reinterpret_cast<const uint8_t*>(trace_id_str.c_str()),
681-
.spanID = reinterpret_cast<const uint8_t*>(span_id_str.c_str()),
682-
.traceFlags = static_cast<uint8_t>(cfg.trace_flags.value())};
683-
span = tracer::StartSpan("knowhere bf search [on chunk] with buf", &ctx);
684-
span->SetAttribute(meta::METRIC_TYPE, cfg.metric_type.value());
685-
span->SetAttribute(meta::TOPK, cfg.k.value());
686-
span->SetAttribute(meta::ROWS, num_total_vectors);
687-
span->SetAttribute(meta::DIM, dim);
688-
span->SetAttribute(meta::NQ, nq);
664+
auto span = knowhere::tracer::StartMilvusSpanFromOpContextOrConfig("knowhere bf search [on chunk] with buf",
665+
op_context, cfg);
666+
auto span_ptr = span != nullptr ? span->GetSpan() : milvus::tracer::SpanPtr{};
667+
if (span_ptr != nullptr) {
668+
span_ptr->SetAttribute(meta::METRIC_TYPE, cfg.metric_type.value());
669+
span_ptr->SetAttribute(meta::TOPK, cfg.k.value());
670+
span_ptr->SetAttribute(meta::ROWS, num_total_vectors);
671+
span_ptr->SetAttribute(meta::DIM, dim);
672+
span_ptr->SetAttribute(meta::NQ, nq);
689673
}
690674
// LCOV_EXCL_STOP
691675
#endif
@@ -951,22 +935,17 @@ BruteForceRangeSearchImpl(const DataSetPtr base_dataset, const DataSetPtr query_
951935

952936
#if defined(NOT_COMPILE_FOR_SWIG) && !defined(KNOWHERE_WITH_LIGHT)
953937
// LCOV_EXCL_START
954-
std::shared_ptr<tracer::trace::Span> span = nullptr;
955-
if (cfg.trace_id.has_value()) {
956-
auto trace_id_str = tracer::GetIDFromHexStr(cfg.trace_id.value());
957-
auto span_id_str = tracer::GetIDFromHexStr(cfg.span_id.value());
958-
auto ctx = tracer::TraceContext{.traceID = reinterpret_cast<const uint8_t*>(trace_id_str.c_str()),
959-
.spanID = reinterpret_cast<const uint8_t*>(span_id_str.c_str()),
960-
.traceFlags = static_cast<uint8_t>(cfg.trace_flags.value())};
961-
span = tracer::StartSpan("knowhere bf range search", &ctx);
962-
span->SetAttribute(meta::METRIC_TYPE, cfg.metric_type.value());
963-
span->SetAttribute(meta::RADIUS, cfg.radius.value());
938+
auto span = knowhere::tracer::StartMilvusSpanFromOpContextOrConfig("knowhere bf range search", op_context, cfg);
939+
auto span_ptr = span != nullptr ? span->GetSpan() : milvus::tracer::SpanPtr{};
940+
if (span_ptr != nullptr) {
941+
span_ptr->SetAttribute(meta::METRIC_TYPE, cfg.metric_type.value());
942+
span_ptr->SetAttribute(meta::RADIUS, cfg.radius.value());
964943
if (cfg.range_filter.value() != defaultRangeFilter) {
965-
span->SetAttribute(meta::RANGE_FILTER, cfg.range_filter.value());
944+
span_ptr->SetAttribute(meta::RANGE_FILTER, cfg.range_filter.value());
966945
}
967-
span->SetAttribute(meta::ROWS, nb);
968-
span->SetAttribute(meta::DIM, dim);
969-
span->SetAttribute(meta::NQ, nq);
946+
span_ptr->SetAttribute(meta::ROWS, nb);
947+
span_ptr->SetAttribute(meta::DIM, dim);
948+
span_ptr->SetAttribute(meta::NQ, nq);
970949
}
971950
// LCOV_EXCL_STOP
972951
#endif
@@ -1138,14 +1117,6 @@ BruteForceRangeSearchImpl(const DataSetPtr base_dataset, const DataSetPtr query_
11381117
GetRangeSearchResult(result_dist_array, result_id_array, the_larger_the_closer, nq, radius, range_filter);
11391118
auto res = GenResultDataSet(nq, std::move(range_search_result));
11401119

1141-
#if defined(NOT_COMPILE_FOR_SWIG) && !defined(KNOWHERE_WITH_LIGHT)
1142-
// LCOV_EXCL_START
1143-
if (cfg.trace_id.has_value()) {
1144-
span->End();
1145-
}
1146-
// LCOV_EXCL_STOP
1147-
#endif
1148-
11491120
return res;
11501121
}
11511122

@@ -1171,19 +1142,15 @@ BruteForceSearchSparseWithBufImpl(const DataSetPtr base_dataset, const DataSetPt
11711142
#if defined(NOT_COMPILE_FOR_SWIG) && !defined(KNOWHERE_WITH_LIGHT)
11721143
// LCOV_EXCL_START
11731144
auto dim = base_dataset->GetDim();
1174-
std::shared_ptr<tracer::trace::Span> span = nullptr;
1175-
if (cfg.trace_id.has_value()) {
1176-
auto trace_id_str = tracer::GetIDFromHexStr(cfg.trace_id.value());
1177-
auto span_id_str = tracer::GetIDFromHexStr(cfg.span_id.value());
1178-
auto ctx = tracer::TraceContext{.traceID = reinterpret_cast<const uint8_t*>(trace_id_str.c_str()),
1179-
.spanID = reinterpret_cast<const uint8_t*>(span_id_str.c_str()),
1180-
.traceFlags = static_cast<uint8_t>(cfg.trace_flags.value())};
1181-
span = tracer::StartSpan("knowhere bf search sparse with buf", &ctx);
1182-
span->SetAttribute(meta::METRIC_TYPE, cfg.metric_type.value());
1183-
span->SetAttribute(meta::TOPK, cfg.k.value());
1184-
span->SetAttribute(meta::ROWS, rows);
1185-
span->SetAttribute(meta::DIM, dim);
1186-
span->SetAttribute(meta::NQ, nq);
1145+
auto span =
1146+
knowhere::tracer::StartMilvusSpanFromOpContextOrConfig("knowhere bf search sparse with buf", op_context, cfg);
1147+
auto span_ptr = span != nullptr ? span->GetSpan() : milvus::tracer::SpanPtr{};
1148+
if (span_ptr != nullptr) {
1149+
span_ptr->SetAttribute(meta::METRIC_TYPE, cfg.metric_type.value());
1150+
span_ptr->SetAttribute(meta::TOPK, cfg.k.value());
1151+
span_ptr->SetAttribute(meta::ROWS, rows);
1152+
span_ptr->SetAttribute(meta::DIM, dim);
1153+
span_ptr->SetAttribute(meta::NQ, nq);
11871154
}
11881155
// LCOV_EXCL_STOP
11891156
#endif
@@ -1241,14 +1208,6 @@ BruteForceSearchSparseWithBufImpl(const DataSetPtr base_dataset, const DataSetPt
12411208
}
12421209
WaitAllSuccess(futs);
12431210

1244-
#if defined(NOT_COMPILE_FOR_SWIG) && !defined(KNOWHERE_WITH_LIGHT)
1245-
// LCOV_EXCL_START
1246-
if (cfg.trace_id.has_value()) {
1247-
span->End();
1248-
}
1249-
// LCOV_EXCL_STOP
1250-
#endif
1251-
12521211
return Status::success;
12531212
}
12541213

@@ -1307,18 +1266,14 @@ BruteForceAnnIteratorImpl(const DataSetPtr base_dataset, const DataSetPtr query_
13071266

13081267
#if defined(NOT_COMPILE_FOR_SWIG) && !defined(KNOWHERE_WITH_LIGHT)
13091268
// LCOV_EXCL_START
1310-
std::shared_ptr<tracer::trace::Span> span = nullptr;
1311-
if (cfg.trace_id.has_value()) {
1312-
auto trace_id_str = tracer::GetIDFromHexStr(cfg.trace_id.value());
1313-
auto span_id_str = tracer::GetIDFromHexStr(cfg.span_id.value());
1314-
auto ctx = tracer::TraceContext{.traceID = reinterpret_cast<const uint8_t*>(trace_id_str.c_str()),
1315-
.spanID = reinterpret_cast<const uint8_t*>(span_id_str.c_str()),
1316-
.traceFlags = static_cast<uint8_t>(cfg.trace_flags.value())};
1317-
span = tracer::StartSpan("knowhere bf ann iterator initialization", &ctx);
1318-
span->SetAttribute(meta::METRIC_TYPE, cfg.metric_type.value());
1319-
span->SetAttribute(meta::ROWS, nb);
1320-
span->SetAttribute(meta::DIM, dim);
1321-
span->SetAttribute(meta::NQ, nq);
1269+
auto span = knowhere::tracer::StartMilvusSpanFromOpContextOrConfig("knowhere bf ann iterator initialization",
1270+
op_context, cfg);
1271+
auto span_ptr = span != nullptr ? span->GetSpan() : milvus::tracer::SpanPtr{};
1272+
if (span_ptr != nullptr) {
1273+
span_ptr->SetAttribute(meta::METRIC_TYPE, cfg.metric_type.value());
1274+
span_ptr->SetAttribute(meta::ROWS, nb);
1275+
span_ptr->SetAttribute(meta::DIM, dim);
1276+
span_ptr->SetAttribute(meta::NQ, nq);
13221277
}
13231278
// LCOV_EXCL_STOP
13241279
#endif
@@ -1460,13 +1415,6 @@ BruteForceAnnIteratorImpl(const DataSetPtr base_dataset, const DataSetPtr query_
14601415
return expected<std::vector<IndexNode::IteratorPtr>>::Err(Status::brute_force_inner_error, e.what());
14611416
}
14621417

1463-
#if defined(NOT_COMPILE_FOR_SWIG) && !defined(KNOWHERE_WITH_LIGHT)
1464-
// LCOV_EXCL_START
1465-
if (cfg.trace_id.has_value()) {
1466-
span->End();
1467-
}
1468-
// LCOV_EXCL_STOP
1469-
#endif
14701418
return vec;
14711419
}
14721420

@@ -1540,18 +1488,14 @@ BruteForceAnnIteratorOnChunkImpl(const DataSetPtr base_dataset, const DataSetPtr
15401488

15411489
#if defined(NOT_COMPILE_FOR_SWIG) && !defined(KNOWHERE_WITH_LIGHT)
15421490
// LCOV_EXCL_START
1543-
std::shared_ptr<tracer::trace::Span> span = nullptr;
1544-
if (cfg.trace_id.has_value()) {
1545-
auto trace_id_str = tracer::GetIDFromHexStr(cfg.trace_id.value());
1546-
auto span_id_str = tracer::GetIDFromHexStr(cfg.span_id.value());
1547-
auto ctx = tracer::TraceContext{.traceID = reinterpret_cast<const uint8_t*>(trace_id_str.c_str()),
1548-
.spanID = reinterpret_cast<const uint8_t*>(span_id_str.c_str()),
1549-
.traceFlags = static_cast<uint8_t>(cfg.trace_flags.value())};
1550-
span = tracer::StartSpan("knowhere bf ann iterator initialization", &ctx);
1551-
span->SetAttribute(meta::METRIC_TYPE, cfg.metric_type.value());
1552-
span->SetAttribute(meta::ROWS, num_total_vectors);
1553-
span->SetAttribute(meta::DIM, dim);
1554-
span->SetAttribute(meta::NQ, nq);
1491+
auto span = knowhere::tracer::StartMilvusSpanFromOpContextOrConfig("knowhere bf ann iterator initialization",
1492+
op_context, cfg);
1493+
auto span_ptr = span != nullptr ? span->GetSpan() : milvus::tracer::SpanPtr{};
1494+
if (span_ptr != nullptr) {
1495+
span_ptr->SetAttribute(meta::METRIC_TYPE, cfg.metric_type.value());
1496+
span_ptr->SetAttribute(meta::ROWS, num_total_vectors);
1497+
span_ptr->SetAttribute(meta::DIM, dim);
1498+
span_ptr->SetAttribute(meta::NQ, nq);
15551499
}
15561500
// LCOV_EXCL_STOP
15571501
#endif
@@ -1749,18 +1693,13 @@ BruteForceAnnIteratorImpl<knowhere::sparse::SparseRow<float>>(const DataSetPtr b
17491693
#if defined(NOT_COMPILE_FOR_SWIG) && !defined(KNOWHERE_WITH_LIGHT)
17501694
// LCOV_EXCL_START
17511695
auto dim = base_dataset->GetDim();
1752-
std::shared_ptr<tracer::trace::Span> span = nullptr;
1753-
if (cfg.trace_id.has_value()) {
1754-
auto trace_id_str = tracer::GetIDFromHexStr(cfg.trace_id.value());
1755-
auto span_id_str = tracer::GetIDFromHexStr(cfg.span_id.value());
1756-
auto ctx = tracer::TraceContext{.traceID = reinterpret_cast<const uint8_t*>(trace_id_str.c_str()),
1757-
.spanID = reinterpret_cast<const uint8_t*>(span_id_str.c_str()),
1758-
.traceFlags = static_cast<uint8_t>(cfg.trace_flags.value())};
1759-
span = tracer::StartSpan("knowhere bf iterator sparse", &ctx);
1760-
span->SetAttribute(meta::METRIC_TYPE, metric_str);
1761-
span->SetAttribute(meta::ROWS, rows);
1762-
span->SetAttribute(meta::DIM, dim);
1763-
span->SetAttribute(meta::NQ, nq);
1696+
auto span = knowhere::tracer::StartMilvusSpanFromOpContextOrConfig("knowhere bf iterator sparse", op_context, cfg);
1697+
auto span_ptr = span != nullptr ? span->GetSpan() : milvus::tracer::SpanPtr{};
1698+
if (span_ptr != nullptr) {
1699+
span_ptr->SetAttribute(meta::METRIC_TYPE, metric_str);
1700+
span_ptr->SetAttribute(meta::ROWS, rows);
1701+
span_ptr->SetAttribute(meta::DIM, dim);
1702+
span_ptr->SetAttribute(meta::NQ, nq);
17641703
}
17651704
// LCOV_EXCL_STOP
17661705
#endif
@@ -1810,14 +1749,6 @@ BruteForceAnnIteratorImpl<knowhere::sparse::SparseRow<float>>(const DataSetPtr b
18101749
return expected<std::vector<IndexNode::IteratorPtr>>::Err(Status::brute_force_inner_error, e.what());
18111750
}
18121751

1813-
#if defined(NOT_COMPILE_FOR_SWIG) && !defined(KNOWHERE_WITH_LIGHT)
1814-
// LCOV_EXCL_START
1815-
if (cfg.trace_id.has_value()) {
1816-
span->End();
1817-
}
1818-
// LCOV_EXCL_STOP
1819-
#endif
1820-
18211752
return vec;
18221753
}
18231754

src/common/prometheus_client.cc

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -155,6 +155,9 @@ KNOWHERE_DEFINE_PROMETHEUS_HISTOGRAM(search_emb_list_retrieval_ann_ratio, PROMET
155155
KNOWHERE_DEFINE_PROMETHEUS_HISTOGRAM_FAMILY(search_level, "search level")
156156
KNOWHERE_DEFINE_PROMETHEUS_HISTOGRAM(search_level, PROMETHEUS_LABEL_CARDINAL)
157157

158+
KNOWHERE_DEFINE_PROMETHEUS_HISTOGRAM_FAMILY(graph_search_candidate_limit, "graph search candidate limit")
159+
KNOWHERE_DEFINE_PROMETHEUS_HISTOGRAM(graph_search_candidate_limit, PROMETHEUS_LABEL_CARDINAL)
160+
158161
KNOWHERE_DEFINE_PROMETHEUS_HISTOGRAM_FAMILY(bitset_ratio, "bitset ratio")
159162
KNOWHERE_DEFINE_PROMETHEUS_HISTOGRAM_WITH_BUCKETS(bitset_ratio, PROMETHEUS_LABEL_CARDINAL, ratioBuckets)
160163

src/common/tracer.cc

Lines changed: 30 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,11 @@
1616
#include <sstream>
1717
#include <utility>
1818

19+
#if defined(NOT_COMPILE_FOR_SWIG) && !defined(KNOWHERE_WITH_LIGHT)
20+
#include "common/OpContext.h"
21+
#include "common/Tracer.h"
22+
#include "knowhere/config.h"
23+
#endif
1924
#include "knowhere/log.h"
2025
#include "opentelemetry/exporters/ostream/span_exporter_factory.h"
2126
#include "opentelemetry/exporters/otlp/otlp_http_exporter_factory.h"
@@ -129,6 +134,31 @@ StartSpan(const std::string& name, TraceContext* ctx) {
129134
return GetTracer()->StartSpan(name, opts);
130135
}
131136

137+
#if defined(NOT_COMPILE_FOR_SWIG) && !defined(KNOWHERE_WITH_LIGHT)
138+
std::unique_ptr<milvus::tracer::AutoSpan>
139+
StartMilvusSpanFromOpContextOrConfig(const std::string& name, milvus::OpContext* op_context, const BaseConfig& cfg) {
140+
if (!milvus::tracer::IsTraceEnabled()) {
141+
return nullptr;
142+
}
143+
144+
auto parent = milvus::OpContext::GetTraceSpan(op_context);
145+
if (parent != nullptr) {
146+
return std::make_unique<milvus::tracer::AutoSpan>(name, parent);
147+
}
148+
149+
if (!cfg.trace_id.has_value() || !cfg.span_id.has_value()) {
150+
return nullptr;
151+
}
152+
153+
auto trace_id_str = milvus::tracer::GetIDFromHexStr(cfg.trace_id.value());
154+
auto span_id_str = milvus::tracer::GetIDFromHexStr(cfg.span_id.value());
155+
auto ctx = milvus::tracer::TraceContext{.traceID = reinterpret_cast<const uint8_t*>(trace_id_str.c_str()),
156+
.spanID = reinterpret_cast<const uint8_t*>(span_id_str.c_str()),
157+
.traceFlags = static_cast<uint8_t>(cfg.trace_flags.value())};
158+
return std::make_unique<milvus::tracer::AutoSpan>(name, &ctx);
159+
}
160+
#endif
161+
132162
thread_local std::shared_ptr<trace::Span> local_span;
133163
void
134164
SetRootSpan(std::shared_ptr<trace::Span> span) {

0 commit comments

Comments
 (0)