From 2b0bc6def92b846effbed29a34f284a3ec2ac01a Mon Sep 17 00:00:00 2001 From: zousar <2936246+zousar@users.noreply.github.com> Date: Fri, 1 Dec 2023 14:49:10 -0700 Subject: Add endpoint for all chunk infos Add endpoint for querying all chunk infos in an oplog. --- src/zenserver/projectstore/httpprojectstore.cpp | 40 +++++++++++++++++++++++++ src/zenserver/projectstore/httpprojectstore.h | 1 + src/zenserver/projectstore/projectstore.cpp | 12 +++----- 3 files changed, 45 insertions(+), 8 deletions(-) (limited to 'src') diff --git a/src/zenserver/projectstore/httpprojectstore.cpp b/src/zenserver/projectstore/httpprojectstore.cpp index 261485834..3994a9a46 100644 --- a/src/zenserver/projectstore/httpprojectstore.cpp +++ b/src/zenserver/projectstore/httpprojectstore.cpp @@ -275,6 +275,11 @@ HttpProjectService::HttpProjectService(CidStore& Store, ProjectStore* Projects, [this](HttpRouterRequest& Req) { HandleFilesRequest(Req); }, HttpVerb::kGet); + m_Router.RegisterRoute( + "{project}/oplog/{log}/chunks", + [this](HttpRouterRequest& Req) { HandleChunksRequest(Req); }, + HttpVerb::kGet); + m_Router.RegisterRoute( "{project}/oplog/{log}/{chunk}/info", [this](HttpRouterRequest& Req) { HandleChunkInfoRequest(Req); }, @@ -642,6 +647,41 @@ HttpProjectService::HandleFilesRequest(HttpRouterRequest& Req) return HttpReq.WriteResponse(Result.first, HttpContentType::kText, Result.second); } +void +HttpProjectService::HandleChunksRequest(HttpRouterRequest& Req) +{ + ZEN_TRACE_CPU("ProjectService::Chunks"); + + HttpServerRequest& HttpReq = Req.ServerRequest(); + + const auto& ProjectId = Req.GetCapture(1); + const auto& OplogId = Req.GetCapture(2); + + CbObject ResponsePayload; + std::pair Result = m_ProjectStore->GetProjectChunks(ProjectId, OplogId, ResponsePayload); + if (Result.first == HttpResponseCode::OK) + { + return HttpReq.WriteResponse(HttpResponseCode::OK, ResponsePayload); + } + else + { + if (Result.first == HttpResponseCode::BadRequest) + { + m_ProjectStats.BadRequestCount++; + } + ZEN_DEBUG("Request {}: '{}' failed with {}. Reason: `{}`", + ToString(HttpReq.RequestVerb()), + HttpReq.QueryString(), + static_cast(Result.first), + Result.second); + } + if (Result.second.empty()) + { + return HttpReq.WriteResponse(Result.first); + } + return HttpReq.WriteResponse(Result.first, HttpContentType::kText, Result.second); +} + void HttpProjectService::HandleChunkInfoRequest(HttpRouterRequest& Req) { diff --git a/src/zenserver/projectstore/httpprojectstore.h b/src/zenserver/projectstore/httpprojectstore.h index 9998ae83e..9845164d7 100644 --- a/src/zenserver/projectstore/httpprojectstore.h +++ b/src/zenserver/projectstore/httpprojectstore.h @@ -64,6 +64,7 @@ private: void HandleProjectListRequest(HttpRouterRequest& Req); void HandleChunkBatchRequest(HttpRouterRequest& Req); void HandleFilesRequest(HttpRouterRequest& Req); + void HandleChunksRequest(HttpRouterRequest& Req); void HandleChunkInfoRequest(HttpRouterRequest& Req); void HandleChunkByIdRequest(HttpRouterRequest& Req); void HandleChunkByCidRequest(HttpRouterRequest& Req); diff --git a/src/zenserver/projectstore/projectstore.cpp b/src/zenserver/projectstore/projectstore.cpp index c6097dea2..b19913747 100644 --- a/src/zenserver/projectstore/projectstore.cpp +++ b/src/zenserver/projectstore/projectstore.cpp @@ -2242,14 +2242,10 @@ ProjectStore::GetProjectChunks(const std::string_view ProjectId, const std::stri Response.BeginArray("chunks"sv); for (ProjectStore::Oplog::ChunkInfo& Info : ChunkInfo) { - Response << Info.ChunkId; - } - Response.EndArray(); - - Response.BeginArray("sizes"sv); - for (ProjectStore::Oplog::ChunkInfo& Info : ChunkInfo) - { - Response << Info.ChunkSize; + Response.BeginObject(); + Response << "id"sv << Info.ChunkId; + Response << "size"sv << Info.ChunkSize; + Response.EndObject(); } Response.EndArray(); -- cgit v1.2.3