diff options
| author | Dan Engelbrecht <[email protected]> | 2025-10-01 21:03:09 +0200 |
|---|---|---|
| committer | Dan Engelbrecht <[email protected]> | 2025-10-01 21:06:40 +0200 |
| commit | 14ab3e8cba6977e245469586610320d772ca26bf (patch) | |
| tree | 4d83ecfd8fab8da4f737aa61a1a5536854d1b5b8 /src/zenserver/projectstore/httpprojectstore.cpp | |
| parent | Fix bug in ReplayLogEntries for large op blobs (#537) (diff) | |
| download | zen-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/httpprojectstore.cpp')
| -rw-r--r-- | src/zenserver/projectstore/httpprojectstore.cpp | 52 |
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; |