MCPcopy Create free account
hub / github.com/apache/brpc / FindSpans

Function FindSpans

src/brpc/span.cpp:952–981  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

950}
951
952void FindSpans(uint64_t trace_id, std::deque<RpczSpan>* out) {
953 out->clear();
954 butil::intrusive_ptr<SpanDB> db;
955 if (GetSpanDB(&db) != 0) {
956 return;
957 }
958 leveldb::Iterator* it = db->id_db->NewIterator(leveldb::ReadOptions());
959 uint32_t key_data[4];
960 ToBigEndian(trace_id, key_data);
961 ToBigEndian(0, key_data + 2);
962 leveldb::Slice key((char*)key_data, sizeof(key_data));
963 for (it->Seek(key); it->Valid(); it->Next()) {
964 if (it->key().size() != sizeof(key_data)) {
965 LOG(ERROR) << "Invalid key size: " << it->key().size();
966 break;
967 }
968 const uint64_t stored_trace_id =
969 ToLittleEndian((const uint32_t*)it->key().data());
970 if (trace_id != stored_trace_id) {
971 break;
972 }
973 RpczSpan span;
974 if (span.ParseFromArray(it->value().data(), it->value().size())) {
975 out->push_back(span);
976 } else {
977 LOG(ERROR) << "Fail to parse from value";
978 }
979 }
980 delete it;
981}
982
983void ListSpans(int64_t starting_realtime, size_t max_scan,
984 std::deque<BriefSpan>* out, SpanFilter* filter) {

Callers 1

default_methodMethod · 0.85

Calls 13

GetSpanDBFunction · 0.85
ToBigEndianFunction · 0.85
ToLittleEndianFunction · 0.85
ValidMethod · 0.80
ParseFromArrayMethod · 0.80
clearMethod · 0.45
SeekMethod · 0.45
NextMethod · 0.45
sizeMethod · 0.45
keyMethod · 0.45
dataMethod · 0.45
valueMethod · 0.45

Tested by

no test coverage detected