aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/projectstore/projectstore.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2023-08-14 13:01:55 +0200
committerGitHub <[email protected]>2023-08-14 13:01:55 +0200
commit126cd15dbca6e322360ece085563deba449926c6 (patch)
tree22d132c528b80bd5c8e61c3f75eb7e8fe6e5a4ac /src/zenserver/projectstore/projectstore.cpp
parentupdate vcpkg dependencies (#356) (diff)
downloadzen-126cd15dbca6e322360ece085563deba449926c6.tar.xz
zen-126cd15dbca6e322360ece085563deba449926c6.zip
project store stats (#357)
* add basic stats for project store * stats for BadRequest in ProjectStore::Rpc * changelog * group stats fix ChunkWriteCount when accepting ops
Diffstat (limited to 'src/zenserver/projectstore/projectstore.cpp')
-rw-r--r--src/zenserver/projectstore/projectstore.cpp73
1 files changed, 45 insertions, 28 deletions
diff --git a/src/zenserver/projectstore/projectstore.cpp b/src/zenserver/projectstore/projectstore.cpp
index 3a91d7f0c..40fd3d30b 100644
--- a/src/zenserver/projectstore/projectstore.cpp
+++ b/src/zenserver/projectstore/projectstore.cpp
@@ -2323,7 +2323,7 @@ ProjectStore::WriteBlock(const std::string_view ProjectId, const std::string_vie
return {HttpResponseCode::OK, {}};
}
-void
+bool
ProjectStore::Rpc(HttpServerRequest& HttpReq,
const std::string_view ProjectId,
const std::string_view OplogId,
@@ -2346,9 +2346,10 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq,
Cb = LoadCompactBinaryFromJson(JsonText).AsObject();
if (!Cb)
{
- return HttpReq.WriteResponse(HttpResponseCode::BadRequest,
- HttpContentType::kText,
- "Content format not supported, expected JSON format");
+ HttpReq.WriteResponse(HttpResponseCode::BadRequest,
+ HttpContentType::kText,
+ "Content format not supported, expected JSON format");
+ return false;
}
}
break;
@@ -2356,9 +2357,10 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq,
Cb = LoadCompactBinaryObject(Payload);
if (!Cb)
{
- return HttpReq.WriteResponse(HttpResponseCode::BadRequest,
- HttpContentType::kText,
- "Content format not supported, expected compact binary format");
+ HttpReq.WriteResponse(HttpResponseCode::BadRequest,
+ HttpContentType::kText,
+ "Content format not supported, expected compact binary format");
+ return false;
}
break;
case HttpContentType::kCbPackage:
@@ -2366,30 +2368,34 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq,
Cb = Package.GetObject();
if (!Cb)
{
- return HttpReq.WriteResponse(HttpResponseCode::BadRequest,
- HttpContentType::kText,
- "Content format not supported, expected package message format");
+ HttpReq.WriteResponse(HttpResponseCode::BadRequest,
+ HttpContentType::kText,
+ "Content format not supported, expected package message format");
+ return false;
}
break;
default:
- return HttpReq.WriteResponse(HttpResponseCode::BadRequest, HttpContentType::kText, "Invalid request content type");
+ HttpReq.WriteResponse(HttpResponseCode::BadRequest, HttpContentType::kText, "Invalid request content type");
+ return false;
}
Ref<ProjectStore::Project> Project = OpenProject(ProjectId);
if (!Project)
{
- return HttpReq.WriteResponse(HttpResponseCode::NotFound,
- HttpContentType::kText,
- fmt::format("Rpc oplog request for unknown project '{}'", ProjectId));
+ HttpReq.WriteResponse(HttpResponseCode::NotFound,
+ HttpContentType::kText,
+ fmt::format("Rpc oplog request for unknown project '{}'", ProjectId));
+ return true;
}
Project->TouchProject();
ProjectStore::Oplog* Oplog = Project->OpenOplog(OplogId);
if (!Oplog)
{
- return HttpReq.WriteResponse(HttpResponseCode::NotFound,
- HttpContentType::kText,
- fmt::format("Rpc oplog request for unknown oplog '{}/{}'", ProjectId, OplogId));
+ HttpReq.WriteResponse(HttpResponseCode::NotFound,
+ HttpContentType::kText,
+ fmt::format("Rpc oplog request for unknown oplog '{}/{}'", ProjectId, OplogId));
+ return true;
}
Project->TouchOplog(OplogId);
@@ -2399,23 +2405,28 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq,
{
if (!AreDiskWritesAllowed())
{
- return HttpReq.WriteResponse(HttpResponseCode::InsufficientStorage);
+ HttpReq.WriteResponse(HttpResponseCode::InsufficientStorage);
+ return true;
}
std::pair<HttpResponseCode, std::string> Result = Import(*Project.Get(), *Oplog, Cb["params"sv].AsObjectView(), AuthManager);
if (Result.second.empty())
{
- return HttpReq.WriteResponse(Result.first);
+ HttpReq.WriteResponse(Result.first);
+ return Result.first != HttpResponseCode::BadRequest;
}
- return HttpReq.WriteResponse(Result.first, HttpContentType::kText, Result.second);
+ HttpReq.WriteResponse(Result.first, HttpContentType::kText, Result.second);
+ return true;
}
else if (Method == "export"sv)
{
std::pair<HttpResponseCode, std::string> Result = Export(*Project.Get(), *Oplog, Cb["params"sv].AsObjectView(), AuthManager);
if (Result.second.empty())
{
- return HttpReq.WriteResponse(Result.first);
+ HttpReq.WriteResponse(Result.first);
+ return Result.first != HttpResponseCode::BadRequest;
}
- return HttpReq.WriteResponse(Result.first, HttpContentType::kText, Result.second);
+ HttpReq.WriteResponse(Result.first, HttpContentType::kText, Result.second);
+ return true;
}
else if (Method == "getchunks"sv)
{
@@ -2439,13 +2450,15 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq,
ResponsePackage.SetObject(ResponseWriter.Save());
}
CompositeBuffer RpcResponseBuffer = FormatPackageMessageBuffer(ResponsePackage, FormatFlags::kDefault);
- return HttpReq.WriteResponse(HttpResponseCode::OK, HttpContentType::kCbPackage, RpcResponseBuffer);
+ HttpReq.WriteResponse(HttpResponseCode::OK, HttpContentType::kCbPackage, RpcResponseBuffer);
+ return true;
}
else if (Method == "putchunks"sv)
{
if (!AreDiskWritesAllowed())
{
- return HttpReq.WriteResponse(HttpResponseCode::InsufficientStorage);
+ HttpReq.WriteResponse(HttpResponseCode::InsufficientStorage);
+ return true;
}
std::span<const CbAttachment> Attachments = Package.GetAttachments();
for (const CbAttachment& Attachment : Attachments)
@@ -2454,13 +2467,15 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq,
CompressedBuffer Compressed = Attachment.AsCompressedBinary();
m_CidStore.AddChunk(Compressed.GetCompressed().Flatten().AsIoBuffer(), RawHash, CidStore::InsertMode::kCopyOnly);
}
- return HttpReq.WriteResponse(HttpResponseCode::OK);
+ HttpReq.WriteResponse(HttpResponseCode::OK);
+ return true;
}
else if (Method == "snapshot"sv)
{
if (!AreDiskWritesAllowed())
{
- return HttpReq.WriteResponse(HttpResponseCode::InsufficientStorage);
+ HttpReq.WriteResponse(HttpResponseCode::InsufficientStorage);
+ return true;
}
// Snapshot all referenced files. This brings the content of all
@@ -2614,9 +2629,11 @@ ProjectStore::Rpc(HttpServerRequest& HttpReq,
ZEN_INFO("rewrote {} oplog entries (out of {})", NewOps.size(), OpCount);
- return HttpReq.WriteResponse(HttpResponseCode::OK, ResponseObj.Save());
+ HttpReq.WriteResponse(HttpResponseCode::OK, ResponseObj.Save());
+ return true;
}
- return HttpReq.WriteResponse(HttpResponseCode::OK, HttpContentType::kText, fmt::format("Unknown rpc method '{}'", Method));
+ HttpReq.WriteResponse(HttpResponseCode::OK, HttpContentType::kText, fmt::format("Unknown rpc method '{}'", Method));
+ return true;
}
std::pair<HttpResponseCode, std::string>