diff options
| author | Dan Engelbrecht <[email protected]> | 2023-09-15 07:36:58 -0400 |
|---|---|---|
| committer | GitHub <[email protected]> | 2023-09-15 13:36:58 +0200 |
| commit | 6163987f858597e92e68a61ed35be35bd4e7a552 (patch) | |
| tree | 94e78c3865f7f288df041636f9471b5a1511792b /src/zenserver | |
| parent | updated CHANGELOG.md release versions (diff) | |
| download | zen-6163987f858597e92e68a61ed35be35bd4e7a552.tar.xz zen-6163987f858597e92e68a61ed35be35bd4e7a552.zip | |
add more trace scopes (#362)
* more trace scopes
* Make sure ReplayLogEntries uses the correct size for oplog buffer
* changelog
Diffstat (limited to 'src/zenserver')
| -rw-r--r-- | src/zenserver/cache/cachedisklayer.cpp | 46 | ||||
| -rw-r--r-- | src/zenserver/cache/cachememorylayer.cpp | 9 | ||||
| -rw-r--r-- | src/zenserver/cache/httpstructuredcache.cpp | 275 | ||||
| -rw-r--r-- | src/zenserver/cache/structuredcachestore.cpp | 12 | ||||
| -rw-r--r-- | src/zenserver/projectstore/projectstore.cpp | 69 |
5 files changed, 251 insertions, 160 deletions
diff --git a/src/zenserver/cache/cachedisklayer.cpp b/src/zenserver/cache/cachedisklayer.cpp index 9d3935131..7adf07350 100644 --- a/src/zenserver/cache/cachedisklayer.cpp +++ b/src/zenserver/cache/cachedisklayer.cpp @@ -183,7 +183,7 @@ ZenCacheDiskLayer::CacheBucket::OpenOrCreate(std::filesystem::path BucketDir, bo { using namespace std::literals; - ZEN_TRACE_CPU("Z$::Bucket::OpenOrCreate"); + ZEN_TRACE_CPU("Z$::Disk::Bucket::OpenOrCreate"); ZEN_LOG_SCOPE("opening cache bucket '{}'", BucketDir); @@ -232,6 +232,8 @@ ZenCacheDiskLayer::CacheBucket::OpenOrCreate(std::filesystem::path BucketDir, bo if (!IsNew) { + ZEN_TRACE_CPU("Z$::Disk::Bucket::OpenOrCreate::Manifest"); + Stopwatch Timer; const auto _ = MakeGuard([&] { ZEN_INFO("read store manifest '{}' in {}", ManifestPath, NiceTimeSpanMs(Timer.GetElapsedTimeMs())); }); @@ -277,7 +279,7 @@ ZenCacheDiskLayer::CacheBucket::OpenOrCreate(std::filesystem::path BucketDir, bo void ZenCacheDiskLayer::CacheBucket::MakeIndexSnapshot() { - ZEN_TRACE_CPU("Z$::Bucket::MakeIndexSnapshot"); + ZEN_TRACE_CPU("Z$::Disk::Bucket::MakeIndexSnapshot"); uint64_t LogCount = m_SlogFile.GetLogCount(); if (m_LogFlushPosition == LogCount) @@ -362,7 +364,7 @@ ZenCacheDiskLayer::CacheBucket::MakeIndexSnapshot() uint64_t ZenCacheDiskLayer::CacheBucket::ReadIndexFile(const std::filesystem::path& IndexPath, uint32_t& OutVersion) { - ZEN_TRACE_CPU("Z$::Bucket::ReadIndexFile"); + ZEN_TRACE_CPU("Z$::Disk::Bucket::ReadIndexFile"); if (std::filesystem::is_regular_file(IndexPath)) { @@ -437,7 +439,7 @@ ZenCacheDiskLayer::CacheBucket::ReadIndexFile(const std::filesystem::path& Index uint64_t ZenCacheDiskLayer::CacheBucket::ReadLog(const std::filesystem::path& LogPath, uint64_t SkipEntryCount) { - ZEN_TRACE_CPU("Z$::Bucket::ReadLog"); + ZEN_TRACE_CPU("Z$::Disk::Bucket::ReadLog"); if (std::filesystem::is_regular_file(LogPath)) { @@ -492,7 +494,7 @@ ZenCacheDiskLayer::CacheBucket::ReadLog(const std::filesystem::path& LogPath, ui void ZenCacheDiskLayer::CacheBucket::OpenLog(const bool IsNew) { - ZEN_TRACE_CPU("Z$::Bucket::OpenLog"); + ZEN_TRACE_CPU("Z$::Disk::Bucket::OpenLog"); m_TotalStandaloneSize = 0; @@ -624,6 +626,8 @@ ZenCacheDiskLayer::CacheBucket::BuildPath(PathBuilderBase& Path, const IoHash& H IoBuffer ZenCacheDiskLayer::CacheBucket::GetInlineCacheValue(const DiskLocation& Loc) const { + ZEN_TRACE_CPU("Z$::Disk::Bucket::GetInlineCacheValue"); + BlockStoreLocation Location = Loc.GetBlockLocation(m_PayloadAlignment); IoBuffer Value = m_BlockStore.TryGetChunk(Location); @@ -638,7 +642,7 @@ ZenCacheDiskLayer::CacheBucket::GetInlineCacheValue(const DiskLocation& Loc) con IoBuffer ZenCacheDiskLayer::CacheBucket::GetStandaloneCacheValue(const DiskLocation& Loc, const IoHash& HashKey) const { - ZEN_TRACE_CPU("Z$::Bucket::GetStandaloneCacheValue"); + ZEN_TRACE_CPU("Z$::Disk::Bucket::GetStandaloneCacheValue"); ExtendablePathBuilder<256> DataFilePath; BuildPath(DataFilePath, HashKey); @@ -723,7 +727,7 @@ ZenCacheDiskLayer::CacheBucket::Put(const IoHash& HashKey, const ZenCacheValue& bool ZenCacheDiskLayer::CacheBucket::Drop() { - ZEN_TRACE_CPU("Z$::Bucket::Drop"); + ZEN_TRACE_CPU("Z$::Disk::Bucket::Drop"); RwLock::ExclusiveLockScope _(m_IndexLock); @@ -747,7 +751,7 @@ ZenCacheDiskLayer::CacheBucket::Drop() void ZenCacheDiskLayer::CacheBucket::Flush() { - ZEN_TRACE_CPU("Z$::Bucket::Flush"); + ZEN_TRACE_CPU("Z$::Disk::Bucket::Flush"); m_BlockStore.Flush(); @@ -762,7 +766,7 @@ ZenCacheDiskLayer::CacheBucket::SaveManifest() { using namespace std::literals; - ZEN_TRACE_CPU("Z$::Bucket::SaveManifest"); + ZEN_TRACE_CPU("Z$::Disk::Bucket::SaveManifest"); CbObjectWriter Writer; Writer << "BucketId"sv << m_BucketId; @@ -884,7 +888,7 @@ ValidateCacheBucketEntryValue(ZenContentType ContentType, IoBuffer Buffer) void ZenCacheDiskLayer::CacheBucket::ScrubStorage(ScrubContext& Ctx) { - ZEN_TRACE_CPU("Z$::Bucket::Scrub"); + ZEN_TRACE_CPU("Z$::Disk::Bucket::Scrub"); ZEN_INFO("scrubbing '{}'", m_BucketDir); @@ -1123,7 +1127,7 @@ ZenCacheDiskLayer::CacheBucket::ScrubStorage(ScrubContext& Ctx) void ZenCacheDiskLayer::CacheBucket::GatherReferences(GcContext& GcCtx) { - ZEN_TRACE_CPU("Z$::DiskLayer::CacheBucket::GatherReferences"); + ZEN_TRACE_CPU("Z$::Disk::Bucket::GatherReferences"); uint64_t WriteBlockTimeUs = 0; uint64_t WriteBlockLongestTimeUs = 0; @@ -1225,7 +1229,7 @@ ZenCacheDiskLayer::CacheBucket::GatherReferences(GcContext& GcCtx) void ZenCacheDiskLayer::CacheBucket::CollectGarbage(GcContext& GcCtx) { - ZEN_TRACE_CPU("Z$::DiskLayer::CacheBucket::CollectGarbage"); + ZEN_TRACE_CPU("Z$::Disk::Bucket::CollectGarbage"); ZEN_DEBUG("collecting garbage from '{}'", m_BucketDir); @@ -1320,6 +1324,8 @@ ZenCacheDiskLayer::CacheBucket::CollectGarbage(GcContext& GcCtx) IndexMap Index; BlockStore::ReclaimSnapshotState BlockStoreState; { + ZEN_TRACE_CPU("Z$::Disk::Bucket::CollectGarbage::State"); + RwLock::SharedLockScope __(m_IndexLock); Stopwatch Timer; const auto ____ = MakeGuard([&] { @@ -1364,6 +1370,8 @@ ZenCacheDiskLayer::CacheBucket::CollectGarbage(GcContext& GcCtx) if (GcCtx.IsDeletionMode()) { + ZEN_TRACE_CPU("Z$::Disk::Bucket::CollectGarbage::Delete"); + std::error_code Ec; ExtendablePathBuilder<256> Path; @@ -1545,6 +1553,8 @@ ZenCacheDiskLayer::CacheBucket::CollectGarbage(GcContext& GcCtx) void ZenCacheDiskLayer::CacheBucket::UpdateAccessTimes(const std::vector<zen::access_tracking::KeyAccessTime>& AccessTimes) { + ZEN_TRACE_CPU("Z$::Disk::Bucket::UpdateAccessTimes"); + using namespace access_tracking; for (const KeyAccessTime& KeyTime : AccessTimes) @@ -1612,6 +1622,8 @@ ZenCacheDiskLayer::CacheBucket::GetValueDetails(const std::string_view ValueFilt void ZenCacheDiskLayer::CollectGarbage(GcContext& GcCtx) { + ZEN_TRACE_CPU("Z$::Disk::CollectGarbage"); + RwLock::SharedLockScope _(m_Lock); for (auto& Kv : m_Buckets) @@ -1639,7 +1651,7 @@ ZenCacheDiskLayer::UpdateAccessTimes(const zen::access_tracking::AccessTimes& Ac void ZenCacheDiskLayer::CacheBucket::PutStandaloneCacheValue(const IoHash& HashKey, const ZenCacheValue& Value) { - ZEN_TRACE_CPU("Z$::Bucket::PutStandaloneCacheValue"); + ZEN_TRACE_CPU("Z$::Disk::Bucket::PutStandaloneCacheValue"); uint64_t NewFileSize = Value.Value.Size(); @@ -1777,6 +1789,8 @@ ZenCacheDiskLayer::CacheBucket::PutStandaloneCacheValue(const IoHash& HashKey, c void ZenCacheDiskLayer::CacheBucket::PutInlineCacheValue(const IoHash& HashKey, const ZenCacheValue& Value) { + ZEN_TRACE_CPU("Z$::Disk::Bucket::PutInlineCacheValue"); + uint8_t EntryFlags = 0; if (Value.Value.GetContentType() == ZenContentType::kCbObject) @@ -1824,6 +1838,8 @@ ZenCacheDiskLayer::~ZenCacheDiskLayer() = default; bool ZenCacheDiskLayer::Get(std::string_view InBucket, const IoHash& HashKey, ZenCacheValue& OutValue) { + ZEN_TRACE_CPU("Z$::Disk::Get"); + const auto BucketName = std::string(InBucket); CacheBucket* Bucket = nullptr; @@ -1871,6 +1887,8 @@ ZenCacheDiskLayer::Get(std::string_view InBucket, const IoHash& HashKey, ZenCach void ZenCacheDiskLayer::Put(std::string_view InBucket, const IoHash& HashKey, const ZenCacheValue& Value) { + ZEN_TRACE_CPU("Z$::Disk::Put"); + const auto BucketName = std::string(InBucket); CacheBucket* Bucket = nullptr; @@ -2060,6 +2078,8 @@ ZenCacheDiskLayer::ScrubStorage(ScrubContext& Ctx) void ZenCacheDiskLayer::GatherReferences(GcContext& GcCtx) { + ZEN_TRACE_CPU("Z$::Disk::GatherReferences"); + RwLock::SharedLockScope _(m_Lock); for (auto& Kv : m_Buckets) diff --git a/src/zenserver/cache/cachememorylayer.cpp b/src/zenserver/cache/cachememorylayer.cpp index 1ef581ba5..c18db7706 100644 --- a/src/zenserver/cache/cachememorylayer.cpp +++ b/src/zenserver/cache/cachememorylayer.cpp @@ -4,6 +4,7 @@ #include <zencore/compactbinaryvalidation.h> #include <zencore/compress.h> +#include <zencore/trace.h> ////////////////////////////////////////////////////////////////////////// @@ -20,6 +21,8 @@ ZenCacheMemoryLayer::~ZenCacheMemoryLayer() bool ZenCacheMemoryLayer::Get(std::string_view InBucket, const IoHash& HashKey, ZenCacheValue& OutValue) { + ZEN_TRACE_CPU("Z$::Mem::Get"); + RwLock::SharedLockScope _(m_Lock); auto It = m_Buckets.find(std::string(InBucket)); @@ -43,6 +46,8 @@ ZenCacheMemoryLayer::Get(std::string_view InBucket, const IoHash& HashKey, ZenCa void ZenCacheMemoryLayer::Put(std::string_view InBucket, const IoHash& HashKey, const ZenCacheValue& Value) { + ZEN_TRACE_CPU("Z$::Mem::Put"); + const auto BucketName = std::string(InBucket); CacheBucket* Bucket = nullptr; @@ -240,6 +245,8 @@ ZenCacheMemoryLayer::CacheBucket::GatherAccessTimes(std::vector<zen::access_trac bool ZenCacheMemoryLayer::CacheBucket::Get(const IoHash& HashKey, ZenCacheValue& OutValue) { + ZEN_TRACE_CPU("Z$::Mem::Bucket::Get"); + RwLock::SharedLockScope _(m_BucketLock); if (auto It = m_CacheMap.find(HashKey); It != m_CacheMap.end()) @@ -261,6 +268,8 @@ ZenCacheMemoryLayer::CacheBucket::Get(const IoHash& HashKey, ZenCacheValue& OutV void ZenCacheMemoryLayer::CacheBucket::Put(const IoHash& HashKey, const ZenCacheValue& Value) { + ZEN_TRACE_CPU("Z$::Mem::Bucket::Put"); + size_t PayloadSize = Value.Value.GetSize(); { GcClock::Tick AccessTime = GcClock::TickCount(); diff --git a/src/zenserver/cache/httpstructuredcache.cpp b/src/zenserver/cache/httpstructuredcache.cpp index 7f1ce18f9..32e8c1f98 100644 --- a/src/zenserver/cache/httpstructuredcache.cpp +++ b/src/zenserver/cache/httpstructuredcache.cpp @@ -603,7 +603,10 @@ HttpStructuredCacheService::HandleDetailsRequest(HttpServerRequest& Request) void HttpStructuredCacheService::HandleRequest(HttpServerRequest& Request) { + ZEN_TRACE_CPU("z$::Http::HandleRequest"); + m_CacheStats.RequestCount++; + metrics::OperationTiming::Scope $(m_HttpRequests); std::string_view Key = Request.RelativeUri(); @@ -1599,6 +1602,8 @@ HttpStructuredCacheService::HandleRpcRequest(const CacheRequestContext& Context, int& OutTargetProcessId, CbPackage& OutResultPackage) { + ZEN_TRACE_CPU("Z$::HandleRpcRequest"); + CbPackage Package; CbObjectView Object; CbObject ObjectBuffer; @@ -1719,6 +1724,7 @@ HttpStructuredCacheService::ReplayRequestRecorder(const CacheRequestContext& Co void HttpStructuredCacheService::HandleRpcRequest(HttpServerRequest& Request) { + ZEN_TRACE_CPU("z$::Http::HandleRpcRequest"); switch (Request.RequestVerb()) { case HttpVerb::kPost: @@ -2020,6 +2026,8 @@ HttpStructuredCacheService::HandleRpcGetCacheRecords(const CacheRequestContext& for (CbFieldView RequestField : RequestsArray) { + ZEN_TRACE_CPU("Z$::RpcGetCacheRecords::Request"); + Stopwatch Timer; RecordRequestData& Request = Requests.emplace_back(); CbObjectView RequestObject = RequestField.AsObjectView(); @@ -2245,70 +2253,74 @@ HttpStructuredCacheService::HandleRpcGetCacheRecords(const CacheRequestContext& m_UpstreamCache.GetCacheRecords(*Namespace, UpstreamRequests, std::move(OnCacheRecordGetComplete)); } - CbPackage ResponsePackage; - CbObjectWriter ResponseObject; - - ResponseObject.BeginArray("Result"sv); - for (RecordRequestData& Request : Requests) { - const CacheKey& Key = Request.Upstream.Key; - if (Request.Complete || - (Request.RecordObject && EnumHasAllFlags(Request.DownstreamPolicy.GetRecordPolicy(), CachePolicy::PartialRecord))) + ZEN_TRACE_CPU("Z$::RpcGetCacheRecords::Response"); + CbPackage ResponsePackage; + CbObjectWriter ResponseObject; + + ResponseObject.BeginArray("Result"sv); + for (RecordRequestData& Request : Requests) { - ResponseObject << Request.RecordObject; - for (ValueRequestData& Value : Request.Values) + const CacheKey& Key = Request.Upstream.Key; + if (Request.Complete || + (Request.RecordObject && EnumHasAllFlags(Request.DownstreamPolicy.GetRecordPolicy(), CachePolicy::PartialRecord))) { - if (!EnumHasAllFlags(Value.DownstreamPolicy, CachePolicy::SkipData) && Value.Payload) + ResponseObject << Request.RecordObject; + for (ValueRequestData& Value : Request.Values) { - ResponsePackage.AddAttachment(CbAttachment(Value.Payload, Value.ContentId)); + if (!EnumHasAllFlags(Value.DownstreamPolicy, CachePolicy::SkipData) && Value.Payload) + { + ResponsePackage.AddAttachment(CbAttachment(Value.Payload, Value.ContentId)); + } } - } - ZEN_DEBUG("GETCACHERECORD HIT - '{}/{}/{}' {}{} ({}) in {}", - *Namespace, - Key.Bucket, - Key.Hash, - NiceBytes(Request.RecordCacheValue.Size()), - Request.Complete ? ""sv : " (PARTIAL)"sv, - Request.Source ? Request.Source->Url : "LOCAL"sv, - NiceLatencyNs(Request.ElapsedTimeUs * 1000)); - m_CacheStats.HitCount++; - m_CacheStats.UpstreamHitCount += Request.Source ? 1 : 0; - } - else - { - ResponseObject.AddNull(); - - if (!EnumHasAnyFlags(Request.DownstreamPolicy.GetRecordPolicy(), CachePolicy::Query)) - { - // If they requested no query, do not record this as a miss - ZEN_DEBUG("GETCACHERECORD DISABLEDQUERY - '{}/{}/{}' in {}", + ZEN_DEBUG("GETCACHERECORD HIT - '{}/{}/{}' {}{} ({}) in {}", *Namespace, Key.Bucket, Key.Hash, + NiceBytes(Request.RecordCacheValue.Size()), + Request.Complete ? ""sv : " (PARTIAL)"sv, + Request.Source ? Request.Source->Url : "LOCAL"sv, NiceLatencyNs(Request.ElapsedTimeUs * 1000)); + m_CacheStats.HitCount++; + m_CacheStats.UpstreamHitCount += Request.Source ? 1 : 0; } else { - ZEN_DEBUG("GETCACHERECORD MISS - '{}/{}/{}'{} ({}) in {}", - *Namespace, - Key.Bucket, - Key.Hash, - Request.RecordObject ? ""sv : " (PARTIAL)"sv, - Request.Source ? Request.Source->Url : "LOCAL"sv, - NiceLatencyNs(Request.ElapsedTimeUs * 1000)); - m_CacheStats.MissCount++; + ResponseObject.AddNull(); + + if (!EnumHasAnyFlags(Request.DownstreamPolicy.GetRecordPolicy(), CachePolicy::Query)) + { + // If they requested no query, do not record this as a miss + ZEN_DEBUG("GETCACHERECORD DISABLEDQUERY - '{}/{}/{}' in {}", + *Namespace, + Key.Bucket, + Key.Hash, + NiceLatencyNs(Request.ElapsedTimeUs * 1000)); + } + else + { + ZEN_DEBUG("GETCACHERECORD MISS - '{}/{}/{}'{} ({}) in {}", + *Namespace, + Key.Bucket, + Key.Hash, + Request.RecordObject ? ""sv : " (PARTIAL)"sv, + Request.Source ? Request.Source->Url : "LOCAL"sv, + NiceLatencyNs(Request.ElapsedTimeUs * 1000)); + m_CacheStats.MissCount++; + } } } + ResponseObject.EndArray(); + ResponsePackage.SetObject(ResponseObject.Save()); + return ResponsePackage; } - ResponseObject.EndArray(); - ResponsePackage.SetObject(ResponseObject.Save()); - return ResponsePackage; } CbPackage HttpStructuredCacheService::HandleRpcPutCacheValues(const CacheRequestContext& Context, const CbPackage& BatchRequest) { + ZEN_TRACE_CPU("Z$::RpcPutCacheValues"); CbObjectView BatchObject = BatchRequest.GetObject(); CbObjectView Params = BatchObject["Params"sv].AsObjectView(); @@ -2324,6 +2336,8 @@ HttpStructuredCacheService::HandleRpcPutCacheValues(const CacheRequestContext& C std::vector<bool> Results; for (CbFieldView RequestField : Params["Requests"sv]) { + ZEN_TRACE_CPU("Z$::RpcPutCacheValues::Request"); + Stopwatch Timer; CbObjectView RequestObject = RequestField.AsObjectView(); @@ -2404,23 +2418,27 @@ HttpStructuredCacheService::HandleRpcPutCacheValues(const CacheRequestContext& C return CbPackage{}; } - CbObjectWriter ResponseObject; - ResponseObject.BeginArray("Result"sv); - for (bool Value : Results) { - ResponseObject.AddBool(Value); - } - ResponseObject.EndArray(); + ZEN_TRACE_CPU("Z$::RpcPutCacheValues::Response"); + CbObjectWriter ResponseObject; + ResponseObject.BeginArray("Result"sv); + for (bool Value : Results) + { + ResponseObject.AddBool(Value); + } + ResponseObject.EndArray(); - CbPackage RpcResponse; - RpcResponse.SetObject(ResponseObject.Save()); + CbPackage RpcResponse; + RpcResponse.SetObject(ResponseObject.Save()); - return RpcResponse; + return RpcResponse; + } } CbPackage HttpStructuredCacheService::HandleRpcGetCacheValues(const CacheRequestContext& Context, CbObjectView RpcRequest) { + ZEN_TRACE_CPU("Z$::RpcGetCacheValues"); ZEN_ASSERT(RpcRequest["Method"sv].AsString() == "GetCacheValues"sv); CbObjectView Params = RpcRequest["Params"sv].AsObjectView(); @@ -2450,6 +2468,8 @@ HttpStructuredCacheService::HandleRpcGetCacheValues(const CacheRequestContext& C for (CbFieldView RequestField : RequestView) { + ZEN_TRACE_CPU("Z$::RpcGetCacheValues::Request"); + Stopwatch Timer; RequestData& Request = Requests.emplace_back(); @@ -2584,38 +2604,41 @@ HttpStructuredCacheService::HandleRpcGetCacheValues(const CacheRequestContext& C return CbPackage{}; } - CbPackage RpcResponse; - CbObjectWriter ResponseObject; - ResponseObject.BeginArray("Result"sv); - for (const RequestData& Request : Requests) { - ResponseObject.BeginObject(); + ZEN_TRACE_CPU("Z$::RpcGetCacheValues::Response"); + CbPackage RpcResponse; + CbObjectWriter ResponseObject; + ResponseObject.BeginArray("Result"sv); + for (const RequestData& Request : Requests) { - const CompressedBuffer& Result = Request.Result; - if (Result) + ResponseObject.BeginObject(); { - ResponseObject.AddHash("RawHash"sv, Request.RawHash); - if (!EnumHasAllFlags(Request.Policy, CachePolicy::SkipData)) + const CompressedBuffer& Result = Request.Result; + if (Result) { - RpcResponse.AddAttachment(CbAttachment(Result, Request.RawHash)); + ResponseObject.AddHash("RawHash"sv, Request.RawHash); + if (!EnumHasAllFlags(Request.Policy, CachePolicy::SkipData)) + { + RpcResponse.AddAttachment(CbAttachment(Result, Request.RawHash)); + } + else + { + ResponseObject.AddInteger("RawSize"sv, Request.RawSize); + } } - else + else if (Request.RawHash != IoHash::Zero) { + ResponseObject.AddHash("RawHash"sv, Request.RawHash); ResponseObject.AddInteger("RawSize"sv, Request.RawSize); } } - else if (Request.RawHash != IoHash::Zero) - { - ResponseObject.AddHash("RawHash"sv, Request.RawHash); - ResponseObject.AddInteger("RawSize"sv, Request.RawSize); - } + ResponseObject.EndObject(); } - ResponseObject.EndObject(); - } - ResponseObject.EndArray(); + ResponseObject.EndArray(); - RpcResponse.SetObject(ResponseObject.Save()); - return RpcResponse; + RpcResponse.SetObject(ResponseObject.Save()); + return RpcResponse; + } } namespace cache::detail { @@ -2657,6 +2680,7 @@ namespace cache::detail { CbPackage HttpStructuredCacheService::HandleRpcGetCacheChunks(const CacheRequestContext& Context, CbObjectView RpcRequest) { + ZEN_TRACE_CPU("Z$::RpcGetCacheChunks"); using namespace cache::detail; std::string Namespace; @@ -2698,6 +2722,8 @@ HttpStructuredCacheService::ParseGetCacheChunksRequest(std::string& Nam std::vector<cache::detail::ChunkRequest*>& ValueRequests, CbObjectView RpcRequest) { + ZEN_TRACE_CPU("Z$::ParseGetCacheChunksRequest"); + using namespace cache::detail; ZEN_ASSERT(RpcRequest["Method"sv].AsString() == "GetCacheChunks"sv); @@ -2731,6 +2757,8 @@ HttpStructuredCacheService::ParseGetCacheChunksRequest(std::string& Nam for (CbFieldView RequestView : ChunkRequestsArray) { + ZEN_TRACE_CPU("Z$::ParseGetCacheChunksRequest::Request"); + CbObjectView RequestObject = RequestView.AsObjectView(); CacheChunkRequest& RequestKey = RequestKeys.emplace_back(); ChunkRequest& Request = Requests.emplace_back(); @@ -2809,12 +2837,16 @@ HttpStructuredCacheService::GetLocalCacheRecords(const CacheRequestContext& std::vector<cache::detail::ChunkRequest*>& RecordRequests, std::vector<CacheChunkRequest*>& OutUpstreamChunks) { + ZEN_TRACE_CPU("Z$::GetLocalCacheRecords"); + using namespace cache::detail; const bool HasUpstream = m_UpstreamCache.IsActive(); std::vector<CacheKeyRequest*> UpstreamRecordRequests; for (size_t RecordIndex = 0; RecordIndex < Records.size(); ++RecordIndex) { + ZEN_TRACE_CPU("Z$::GetLocalCacheRecords::Record"); + Stopwatch Timer; CacheKeyRequest& RecordKey = RecordKeys[RecordIndex]; RecordBody& Record = Records[RecordIndex]; @@ -2872,6 +2904,8 @@ HttpStructuredCacheService::GetLocalCacheRecords(const CacheRequestContext& for (ChunkRequest* Request : RecordRequests) { + ZEN_TRACE_CPU("Z$::GetLocalCacheRecords::Chunk"); + Stopwatch Timer; if (Request->Key->ChunkId == IoHash::Zero) { @@ -2962,11 +2996,15 @@ HttpStructuredCacheService::GetLocalCacheValues(const CacheRequestContext& std::vector<cache::detail::ChunkRequest*>& ValueRequests, std::vector<CacheChunkRequest*>& OutUpstreamChunks) { + ZEN_TRACE_CPU("Z$::GetLocalCacheValues"); + using namespace cache::detail; const bool HasUpstream = m_UpstreamCache.IsActive(); for (ChunkRequest* Request : ValueRequests) { + ZEN_TRACE_CPU("Z$::GetLocalCacheValues::Value"); + Stopwatch Timer; if (!Request->Exists && EnumHasAllFlags(Request->DownstreamPolicy, CachePolicy::QueryLocal)) { @@ -3007,62 +3045,65 @@ HttpStructuredCacheService::GetUpstreamCacheChunks(const CacheRequestContext& std::vector<CacheChunkRequest>& RequestKeys, std::vector<cache::detail::ChunkRequest>& Requests) { + if (UpstreamChunks.empty()) + { + return; + } + ZEN_TRACE_CPU("Z$::GetUpstreamCacheChunks"); + using namespace cache::detail; - if (!UpstreamChunks.empty()) - { - const auto OnCacheChunksGetComplete = [this, Namespace, &RequestKeys, &Requests, Context](CacheChunkGetCompleteParams&& Params) { - if (Params.RawHash == Params.RawHash.Zero) + const auto OnCacheChunksGetComplete = [this, Namespace, &RequestKeys, &Requests, Context](CacheChunkGetCompleteParams&& Params) { + if (Params.RawHash == Params.RawHash.Zero) + { + return; + } + + CacheChunkRequest& Key = Params.Request; + size_t RequestIndex = std::distance(RequestKeys.data(), &Key); + ChunkRequest& Request = Requests[RequestIndex]; + Request.ElapsedTimeUs += static_cast<uint64_t>(Params.ElapsedSeconds * 1000000.0); + if (EnumHasAllFlags(Request.DownstreamPolicy, CachePolicy::StoreLocal) || + !EnumHasAllFlags(Request.DownstreamPolicy, CachePolicy::SkipData)) + { + CompressedBuffer Compressed = CompressedBuffer::FromCompressedNoValidate(IoBuffer(Params.Value)); + if (!Compressed) { return; } - CacheChunkRequest& Key = Params.Request; - size_t RequestIndex = std::distance(RequestKeys.data(), &Key); - ChunkRequest& Request = Requests[RequestIndex]; - Request.ElapsedTimeUs += static_cast<uint64_t>(Params.ElapsedSeconds * 1000000.0); - if (EnumHasAllFlags(Request.DownstreamPolicy, CachePolicy::StoreLocal) || - !EnumHasAllFlags(Request.DownstreamPolicy, CachePolicy::SkipData)) + bool StoreLocal = EnumHasAllFlags(Request.DownstreamPolicy, CachePolicy::StoreLocal) && AreDiskWritesAllowed(); + if (StoreLocal) { - CompressedBuffer Compressed = CompressedBuffer::FromCompressedNoValidate(IoBuffer(Params.Value)); - if (!Compressed) + if (Request.IsRecordRequest) { - return; - } - - bool StoreLocal = EnumHasAllFlags(Request.DownstreamPolicy, CachePolicy::StoreLocal) && AreDiskWritesAllowed(); - if (StoreLocal) - { - if (Request.IsRecordRequest) - { - m_CidStore.AddChunk(Params.Value, Params.RawHash); - } - else - { - m_CacheStore.Put(Context, - Namespace, - Key.Key.Bucket, - Key.Key.Hash, - {.Value = Params.Value, .RawSize = Params.RawSize, .RawHash = Params.RawHash}); - m_CacheStats.WriteCount++; - } + m_CidStore.AddChunk(Params.Value, Params.RawHash); } - if (!EnumHasAllFlags(Request.DownstreamPolicy, CachePolicy::SkipData)) + else { - Request.Value = std::move(Compressed); + m_CacheStore.Put(Context, + Namespace, + Key.Key.Bucket, + Key.Key.Hash, + {.Value = Params.Value, .RawSize = Params.RawSize, .RawHash = Params.RawHash}); + m_CacheStats.WriteCount++; } } - Key.ChunkId = Params.RawHash; - Request.Exists = true; - Request.RawSize = Params.RawSize; - Request.RawSizeKnown = true; - Request.Source = Params.Source; + if (!EnumHasAllFlags(Request.DownstreamPolicy, CachePolicy::SkipData)) + { + Request.Value = std::move(Compressed); + } + } + Key.ChunkId = Params.RawHash; + Request.Exists = true; + Request.RawSize = Params.RawSize; + Request.RawSizeKnown = true; + Request.Source = Params.Source; - m_CacheStats.UpstreamHitCount++; - }; + m_CacheStats.UpstreamHitCount++; + }; - m_UpstreamCache.GetCacheChunks(Namespace, UpstreamChunks, std::move(OnCacheChunksGetComplete)); - } + m_UpstreamCache.GetCacheChunks(Namespace, UpstreamChunks, std::move(OnCacheChunksGetComplete)); } CbPackage @@ -3070,6 +3111,8 @@ HttpStructuredCacheService::WriteGetCacheChunksResponse([[maybe_unused]] const C std::string_view Namespace, std::vector<cache::detail::ChunkRequest>& Requests) { + ZEN_TRACE_CPU("Z$::WriteGetCacheChunksResponse"); + using namespace cache::detail; CbPackage RpcResponse; @@ -3078,6 +3121,8 @@ HttpStructuredCacheService::WriteGetCacheChunksResponse([[maybe_unused]] const C Writer.BeginArray("Result"sv); for (ChunkRequest& Request : Requests) { + ZEN_TRACE_CPU("Z$::WriteGetCacheChunksResponse::Request"); + Writer.BeginObject(); { if (Request.Exists) diff --git a/src/zenserver/cache/structuredcachestore.cpp b/src/zenserver/cache/structuredcachestore.cpp index 56e83eef2..2ba1f61bd 100644 --- a/src/zenserver/cache/structuredcachestore.cpp +++ b/src/zenserver/cache/structuredcachestore.cpp @@ -61,7 +61,7 @@ ZenCacheNamespace::~ZenCacheNamespace() bool ZenCacheNamespace::Get(std::string_view InBucket, const IoHash& HashKey, ZenCacheValue& OutValue) { - ZEN_TRACE_CPU("Z$::Get"); + ZEN_TRACE_CPU("Z$::Namespace::Get"); bool Ok = m_MemLayer.Get(InBucket, HashKey, OutValue); @@ -90,7 +90,7 @@ ZenCacheNamespace::Get(std::string_view InBucket, const IoHash& HashKey, ZenCach void ZenCacheNamespace::Put(std::string_view InBucket, const IoHash& HashKey, const ZenCacheValue& Value) { - ZEN_TRACE_CPU("Z$::Put"); + ZEN_TRACE_CPU("Z$::Namespace::Put"); // Store value and index @@ -152,6 +152,8 @@ ZenCacheNamespace::ScrubStorage(ScrubContext& Ctx) void ZenCacheNamespace::GatherReferences(GcContext& GcCtx) { + ZEN_TRACE_CPU("Z$::ZenCacheNamespace::GatherReferences"); + Stopwatch Timer; const auto Guard = MakeGuard([&] { ZEN_DEBUG("cache gathered all references from '{}' in {}", m_RootDir, NiceTimeSpanMs(Timer.GetElapsedTimeMs())); }); @@ -166,6 +168,8 @@ ZenCacheNamespace::GatherReferences(GcContext& GcCtx) void ZenCacheNamespace::CollectGarbage(GcContext& GcCtx) { + ZEN_TRACE_CPU("Z$::Namespace::CollectGarbage"); + m_MemLayer.Reset(); m_DiskLayer.CollectGarbage(GcCtx); } @@ -354,6 +358,8 @@ ZenCacheStore::Get(const CacheRequestContext& Context, const IoHash& HashKey, ZenCacheValue& OutValue) { + ZEN_TRACE_CPU("Z$::Get"); + if (ZenCacheNamespace* Store = GetNamespace(Namespace); Store) { bool Result = Store->Get(Bucket, HashKey, OutValue); @@ -396,6 +402,8 @@ ZenCacheStore::Put(const CacheRequestContext& Context, const IoHash& HashKey, const ZenCacheValue& Value) { + ZEN_TRACE_CPU("Z$::Put"); + if (m_Configuration.EnableWriteLog) { ZEN_TRACE_CPU("Z$::Get::WriteLog"); diff --git a/src/zenserver/projectstore/projectstore.cpp b/src/zenserver/projectstore/projectstore.cpp index 2fd6d492e..9be600e4e 100644 --- a/src/zenserver/projectstore/projectstore.cpp +++ b/src/zenserver/projectstore/projectstore.cpp @@ -267,6 +267,8 @@ struct ProjectStore::OplogStorage : public RefCounted void Open(bool IsCreate) { + ZEN_TRACE_CPU("Store::OplogStorage::Open"); + using namespace std::literals; ZEN_INFO("initializing oplog storage at '{}'", m_OplogStoragePath); @@ -288,7 +290,7 @@ struct ProjectStore::OplogStorage : public RefCounted void ReplayLog(std::function<void(CbObject, const OplogEntry&)>&& Handler) { - ZEN_TRACE_CPU("ProjectStore::OplogStorage::ReplayLog"); + ZEN_TRACE_CPU("Store::OplogStorage::ReplayLog"); // This could use memory mapping or do something clever but for now it just reads the file sequentially @@ -359,8 +361,7 @@ struct ProjectStore::OplogStorage : public RefCounted InvalidEntries++; continue; } - CbObject Op(SharedBuffer::MakeView(OpBuffer.Data(), LogEntry.OpCoreSize)); - Handler(Op, LogEntry); + Handler(CbObject(SharedBuffer::MakeView(OpBuffer.Data(), LogEntry.OpCoreSize)), LogEntry); } if (InvalidEntries) @@ -374,9 +375,9 @@ struct ProjectStore::OplogStorage : public RefCounted m_NextOpsOffset.load()); } - void ReplayLog(const std::span<OplogEntryAddress> Entries, std::function<void(CbObject)>&& Handler) + void ReplayLogEntries(const std::span<OplogEntryAddress> Entries, std::function<void(CbObject)>&& Handler) { - ZEN_TRACE_CPU("Store::OplogStorage::ReplayLog"); + ZEN_TRACE_CPU("Store::OplogStorage::ReplayLogEntries"); BasicFileBuffer OpBlobsBuffer(m_OpBlobs, 65536); IoBuffer OpBuffer(512); @@ -389,12 +390,14 @@ struct ProjectStore::OplogStorage : public RefCounted OpBuffer = IoBuffer(Entry.Size); } OpBlobsBuffer.Read((void*)OpBuffer.Data(), Entry.Size, OpFileOffset); - Handler(CbObject(SharedBuffer(OpBuffer))); + Handler(CbObject(SharedBuffer::MakeView(OpBuffer.Data(), Entry.Size))); } } CbObject GetOp(const OplogEntryAddress& Entry) { + ZEN_TRACE_CPU("Store::OplogStorage::GetOp"); + IoBuffer OpBuffer(Entry.Size); const uint64_t OpFileOffset = Entry.Offset * m_OpsAlign; @@ -405,7 +408,7 @@ struct ProjectStore::OplogStorage : public RefCounted OplogEntry AppendOp(SharedBuffer Buffer, uint32_t OpCoreHash, XXH3_128 KeyHash) { - ZEN_TRACE_CPU("ProjectStore::OplogStorage::AppendOp"); + ZEN_TRACE_CPU("Store::OplogStorage::AppendOp"); using namespace std::literals; @@ -498,7 +501,7 @@ ProjectStore::Oplog::ScrubStorage(ScrubContext& Ctx) const void ProjectStore::Oplog::GatherReferences(GcContext& GcCtx) { - ZEN_TRACE_CPU("ProjectStore::Oplog::GatherReferences"); + ZEN_TRACE_CPU("Store::Oplog::GatherReferences"); tsl::robin_set<IoHash> AttachmentHashes; IterateOplog([&](CbObject Op) { @@ -728,7 +731,7 @@ ProjectStore::Oplog::IterateOplog(std::function<void(CbObject)>&& Handler) return Lhs.Offset < Rhs.Offset; }); - m_Storage->ReplayLog(Entries, [&](CbObject Op) { Handler(Op); }); + m_Storage->ReplayLogEntries(Entries, [&](CbObject Op) { Handler(Op); }); } void @@ -773,7 +776,7 @@ ProjectStore::Oplog::IterateOplogWithKey(std::function<void(int, const Oid&, CbO } size_t EntryIndex = 0; - m_Storage->ReplayLog(SortedEntries, [&](CbObject Op) { + m_Storage->ReplayLogEntries(SortedEntries, [&](CbObject Op) { Handler(LSNs[EntryIndex], Keys[EntryIndex], Op); EntryIndex++; }); @@ -975,7 +978,7 @@ ProjectStore::Oplog::RegisterOplogEntry(RwLock::ExclusiveLockScope& OplogLock, const OplogEntryMapping& OpMapping, const OplogEntry& OpEntry) { - ZEN_TRACE_CPU("ProjectStore::Oplog::RegisterOplogEntry"); + ZEN_TRACE_CPU("Store::Oplog::RegisterOplogEntry"); // For now we're assuming the update is all in-memory so we can hold an exclusive lock without causing // too many problems. Longer term we'll probably want to ensure we can do concurrent updates however @@ -1007,7 +1010,7 @@ ProjectStore::Oplog::RegisterOplogEntry(RwLock::ExclusiveLockScope& OplogLock, uint32_t ProjectStore::Oplog::AppendNewOplogEntry(CbPackage OpPackage) { - ZEN_TRACE_CPU("ProjectStore::Oplog::AppendNewOplogEntry"); + ZEN_TRACE_CPU("Store::Oplog::AppendNewOplogEntry"); const CbObject& Core = OpPackage.GetObject(); const uint32_t EntryId = AppendNewOplogEntry(Core); @@ -1047,7 +1050,7 @@ ProjectStore::Oplog::AppendNewOplogEntry(CbPackage OpPackage) uint32_t ProjectStore::Oplog::AppendNewOplogEntry(CbObject Core) { - ZEN_TRACE_CPU("ProjectStore::Oplog::AppendNewOplogEntry"); + ZEN_TRACE_CPU("Store::Oplog::AppendNewOplogEntry"); using namespace std::literals; @@ -1108,7 +1111,7 @@ ProjectStore::Project::Exists(const std::filesystem::path& BasePath) void ProjectStore::Project::Read() { - ZEN_TRACE_CPU("ProjectStore::Project::Read"); + ZEN_TRACE_CPU("Store::Project::Read"); using namespace std::literals; @@ -1143,6 +1146,8 @@ ProjectStore::Project::Read() void ProjectStore::Project::Write() { + ZEN_TRACE_CPU("Store::Project::Write"); + using namespace std::literals; BinaryWriter Mem; @@ -1297,6 +1302,7 @@ ProjectStore::Project::NewOplog(std::string_view OplogId, const std::filesystem: ProjectStore::Oplog* ProjectStore::Project::OpenOplog(std::string_view OplogId) { + ZEN_TRACE_CPU("Store::OpenOplog"); { RwLock::SharedLockScope _(m_ProjectLock); @@ -1435,7 +1441,7 @@ ProjectStore::Project::ScrubStorage(ScrubContext& Ctx) void ProjectStore::Project::GatherReferences(GcContext& GcCtx) { - ZEN_TRACE_CPU("ProjectStore::Project::GatherReferences"); + ZEN_TRACE_CPU("Store::Project::GatherReferences"); Stopwatch Timer; const auto Guard = MakeGuard([&] { @@ -1673,7 +1679,7 @@ ProjectStore::ScrubStorage(ScrubContext& Ctx) void ProjectStore::GatherReferences(GcContext& GcCtx) { - ZEN_TRACE_CPU("ProjectStore::GatherReferences"); + ZEN_TRACE_CPU("Store::GatherReferences"); size_t ProjectCount = 0; size_t ExpiredProjectCount = 0; @@ -1713,7 +1719,7 @@ ProjectStore::GatherReferences(GcContext& GcCtx) void ProjectStore::CollectGarbage(GcContext& GcCtx) { - ZEN_TRACE_CPU("ProjectStore::CollectGarbage"); + ZEN_TRACE_CPU("Store::CollectGarbage"); size_t ProjectCount = 0; size_t ExpiredProjectCount = 0; @@ -1816,7 +1822,7 @@ ProjectStore::CollectGarbage(GcContext& GcCtx) GcStorageSize ProjectStore::StorageSize() const { - ZEN_TRACE_CPU("ProjectStore::StorageSize"); + ZEN_TRACE_CPU("Store::StorageSize"); using namespace std::literals; @@ -1849,7 +1855,7 @@ ProjectStore::StorageSize() const Ref<ProjectStore::Project> ProjectStore::OpenProject(std::string_view ProjectId) { - ZEN_TRACE_CPU("ProjectStore::OpenProject"); + ZEN_TRACE_CPU("Store::OpenProject"); { RwLock::SharedLockScope _(m_ProjectsLock); @@ -1898,7 +1904,7 @@ ProjectStore::NewProject(const std::filesystem::path& BasePath, std::string_view ProjectRootDir, std::string_view ProjectFilePath) { - ZEN_TRACE_CPU("ProjectStore::NewProject"); + ZEN_TRACE_CPU("Store::NewProject"); RwLock::ExclusiveLockScope _(m_ProjectsLock); @@ -1922,7 +1928,7 @@ ProjectStore::UpdateProject(std::string_view ProjectId, std::string_view ProjectRootDir, std::string_view ProjectFilePath) { - ZEN_TRACE_CPU("ProjectStore::UpdateProject"); + ZEN_TRACE_CPU("Store::UpdateProject"); ZEN_INFO("updating project {}", ProjectId); @@ -1948,7 +1954,7 @@ ProjectStore::UpdateProject(std::string_view ProjectId, bool ProjectStore::DeleteProject(std::string_view ProjectId) { - ZEN_TRACE_CPU("ProjectStore::DeleteProject"); + ZEN_TRACE_CPU("Store::DeleteProject"); ZEN_INFO("deleting project {}", ProjectId); @@ -1987,7 +1993,7 @@ ProjectStore::Exists(std::string_view ProjectId) CbArray ProjectStore::GetProjectsList() { - ZEN_TRACE_CPU("ProjectStore::GetProjectsList"); + ZEN_TRACE_CPU("Store::GetProjectsList"); using namespace std::literals; @@ -2012,7 +2018,7 @@ ProjectStore::GetProjectsList() std::pair<HttpResponseCode, std::string> ProjectStore::GetProjectFiles(const std::string_view ProjectId, const std::string_view OplogId, bool FilterClient, CbObject& OutPayload) { - ZEN_TRACE_CPU("ProjectStore::GetProjectFiles"); + ZEN_TRACE_CPU("Store::GetProjectFiles"); using namespace std::literals; @@ -2294,7 +2300,7 @@ ProjectStore::PutChunk(const std::string_view ProjectId, std::pair<HttpResponseCode, std::string> ProjectStore::WriteOplog(const std::string_view ProjectId, const std::string_view OplogId, IoBuffer&& Payload, CbObject& OutResponse) { - ZEN_TRACE_CPU("ProjectStore::WriteOplog"); + ZEN_TRACE_CPU("Store::WriteOplog"); Ref<ProjectStore::Project> Project = OpenProject(ProjectId); if (!Project) @@ -2366,7 +2372,7 @@ ProjectStore::ReadOplog(const std::string_view ProjectId, const HttpServerRequest::QueryParams& Params, CbObject& OutResponse) { - ZEN_TRACE_CPU("ProjectStore::ReadOplog"); + ZEN_TRACE_CPU("Store::ReadOplog"); Ref<ProjectStore::Project> Project = OpenProject(ProjectId); if (!Project) @@ -2420,7 +2426,7 @@ ProjectStore::ReadOplog(const std::string_view ProjectId, std::pair<HttpResponseCode, std::string> ProjectStore::WriteBlock(const std::string_view ProjectId, const std::string_view OplogId, IoBuffer&& Payload) { - ZEN_TRACE_CPU("ProjectStore::WriteBlock"); + ZEN_TRACE_CPU("Store::WriteBlock"); Ref<ProjectStore::Project> Project = OpenProject(ProjectId); if (!Project) @@ -2455,7 +2461,7 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq, IoBuffer&& Payload, AuthMgr& AuthManager) { - ZEN_TRACE_CPU("ProjectStore::Rpc"); + ZEN_TRACE_CPU("Store::Rpc"); using namespace std::literals; HttpContentType PayloadContentType = HttpReq.RequestContentType(); @@ -2550,6 +2556,7 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq, } else if (Method == "getchunks"sv) { + ZEN_TRACE_CPU("Store::Rpc::getchunks"); CbPackage ResponsePackage; { CbArrayView ChunksArray = Cb["chunks"sv].AsArrayView(); @@ -2575,6 +2582,7 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq, } else if (Method == "putchunks"sv) { + ZEN_TRACE_CPU("Store::Rpc::putchunks"); if (!AreDiskWritesAllowed()) { HttpReq.WriteResponse(HttpResponseCode::InsufficientStorage); @@ -2592,6 +2600,7 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq, } else if (Method == "snapshot"sv) { + ZEN_TRACE_CPU("Store::Rpc::snapshot"); if (!AreDiskWritesAllowed()) { HttpReq.WriteResponse(HttpResponseCode::InsufficientStorage); @@ -2753,7 +2762,7 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq, std::pair<HttpResponseCode, std::string> ProjectStore::Export(Ref<ProjectStore::Project> Project, ProjectStore::Oplog& Oplog, CbObjectView&& Params, AuthMgr& AuthManager) { - ZEN_TRACE_CPU("ProjectStore::Export"); + ZEN_TRACE_CPU("Store::Export"); using namespace std::literals; @@ -2813,7 +2822,7 @@ ProjectStore::Export(Ref<ProjectStore::Project> Project, ProjectStore::Oplog& Op std::pair<HttpResponseCode, std::string> ProjectStore::Import(ProjectStore::Project& Project, ProjectStore::Oplog& Oplog, CbObjectView&& Params, AuthMgr& AuthManager) { - ZEN_TRACE_CPU("ProjectStore::Import"); + ZEN_TRACE_CPU("Store::Import"); using namespace std::literals; |