aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver
diff options
context:
space:
mode:
authorzousar <[email protected]>2023-12-01 14:49:10 -0700
committerzousar <[email protected]>2023-12-01 14:49:10 -0700
commit2b0bc6def92b846effbed29a34f284a3ec2ac01a (patch)
tree54a35c9c2398c49066e2fd7e08fe3df251bdef2f /src/zenserver
parentuse 32 bit offset and size in BlockStoreLocation (#581) (diff)
downloadzen-2b0bc6def92b846effbed29a34f284a3ec2ac01a.tar.xz
zen-2b0bc6def92b846effbed29a34f284a3ec2ac01a.zip
Add endpoint for all chunk infos
Add endpoint for querying all chunk infos in an oplog.
Diffstat (limited to 'src/zenserver')
-rw-r--r--src/zenserver/projectstore/httpprojectstore.cpp40
-rw-r--r--src/zenserver/projectstore/httpprojectstore.h1
-rw-r--r--src/zenserver/projectstore/projectstore.cpp12
3 files changed, 45 insertions, 8 deletions
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
@@ -276,6 +276,11 @@ HttpProjectService::HttpProjectService(CidStore& Store, ProjectStore* Projects,
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); },
HttpVerb::kGet);
@@ -643,6 +648,41 @@ HttpProjectService::HandleFilesRequest(HttpRouterRequest& Req)
}
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<HttpResponseCode, std::string> 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<int>(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)
{
ZEN_TRACE_CPU("ProjectService::ChunkInfo");
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();