aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/projectstore
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2025-10-01 21:03:09 +0200
committerDan Engelbrecht <[email protected]>2025-10-01 21:06:40 +0200
commit14ab3e8cba6977e245469586610320d772ca26bf (patch)
tree4d83ecfd8fab8da4f737aa61a1a5536854d1b5b8 /src/zenserver/projectstore
parentFix bug in ReplayLogEntries for large op blobs (#537) (diff)
downloadzen-de/oplog-attachment-warnings.tar.xz
zen-de/oplog-attachment-warnings.zip
add more verbose errors when new oplog op fails to find attachmentsde/oplog-attachment-warnings
Diffstat (limited to 'src/zenserver/projectstore')
-rw-r--r--src/zenserver/projectstore/httpprojectstore.cpp52
1 files changed, 37 insertions, 15 deletions
diff --git a/src/zenserver/projectstore/httpprojectstore.cpp b/src/zenserver/projectstore/httpprojectstore.cpp
index 2a1bf9a5e..69762d194 100644
--- a/src/zenserver/projectstore/httpprojectstore.cpp
+++ b/src/zenserver/projectstore/httpprojectstore.cpp
@@ -1178,9 +1178,10 @@ HttpProjectService::HandleOplogOpNewRequest(HttpRouterRequest& Req)
// the prep step rejected the chunk. This should be fixed since there's
// a performance cost associated with any file system activity
- bool IsValid = true;
std::vector<IoHash> MissingChunks;
+ ExtendableStringBuilder<256> Errors;
+
CbPackage::AttachmentResolver Resolver = [&](const IoHash& Hash) -> SharedBuffer {
if (m_CidStore.ContainsChunk(Hash))
{
@@ -1207,7 +1208,11 @@ HttpProjectService::HandleOplogOpNewRequest(HttpRouterRequest& Req)
}
else
{
- IsValid = false;
+ if (Errors.Size() > 0)
+ {
+ Errors << "\n";
+ }
+ Errors << fmt::format(" Failed to open file '{}' to read attachment '{}'", AttachmentPath, Hash);
MissingChunks.push_back(Hash);
return {};
@@ -1229,20 +1234,40 @@ HttpProjectService::HandleOplogOpNewRequest(HttpRouterRequest& Req)
std::filesystem::path BadPackagePath =
Oplog.TempPath() / "bad_packages"sv / fmt::format("session{}_request{}"sv, HttpReq.SessionId(), HttpReq.RequestId());
- ZEN_WARN("Received malformed package ('{}')! Saving payload to '{}'", ToString(ValidateResult), BadPackagePath);
-
- WriteFile(BadPackagePath, Payload);
+ std::error_code Ec;
+ CreateDirectories(BadPackagePath.parent_path(), Ec);
+ if (Ec)
+ {
+ WriteFile(BadPackagePath, Payload);
+ ZEN_WARN("Received malformed package ('{}')! Saved payload to '{}'", ToString(ValidateResult), BadPackagePath);
+ }
+ else
+ {
+ ZEN_WARN("Received malformed package ('{}')! Failed to save payload to '{}': Reason: {}",
+ ToString(ValidateResult),
+ BadPackagePath,
+ Ec.message());
+ }
m_ProjectStats.BadRequestCount++;
return HttpReq.WriteResponse(HttpResponseCode::BadRequest,
HttpContentType::kText,
- u8"request body must be a compact binary object or package in legacy format");
+ fmt::format("Request body must be a compact binary object or package in legacy format. Error: {}",
+ ToString(ValidateResult)));
}
}
+ CbObject Core = Package.GetObject();
+
+ if (!Core["key"sv])
+ {
+ m_ProjectStats.BadRequestCount++;
+ return HttpReq.WriteResponse(HttpResponseCode::BadRequest, HttpContentType::kText, "No oplog entry key specified");
+ }
+
m_ProjectStats.ChunkMissCount += MissingChunks.size();
- if (!IsValid)
+ if (!MissingChunks.empty())
{
ExtendableStringBuilder<256> ResponseText;
ResponseText.Append("Missing chunk references: ");
@@ -1261,15 +1286,12 @@ HttpProjectService::HandleOplogOpNewRequest(HttpRouterRequest& Req)
Hash.ToHexString(ResponseText);
}
- return HttpReq.WriteResponse(HttpResponseCode::NotFound, HttpContentType::kText, ResponseText);
- }
-
- CbObject Core = Package.GetObject();
+ if (Errors.Size() > 0)
+ {
+ ResponseText << "\n" << Errors.ToView();
+ }
- if (!Core["key"sv])
- {
- m_ProjectStats.BadRequestCount++;
- return HttpReq.WriteResponse(HttpResponseCode::BadRequest, HttpContentType::kText, "No oplog entry key specified");
+ return HttpReq.WriteResponse(HttpResponseCode::NotFound, HttpContentType::kText, ResponseText);
}
eastl::fixed_vector<IoHash, 16> ReferencedChunks;