From bdb22ddfcf26f057850f6fdbc4705e9026c15469 Mon Sep 17 00:00:00 2001 From: Dan Engelbrecht Date: Fri, 9 Sep 2022 18:09:28 +0200 Subject: only try to parse payload hash if header exists (#163) * only try to parse payload hash if header exists * changelog --- CHANGELOG.md | 3 +++ zenserver/upstream/jupiter.cpp | 9 ++++++++- 2 files changed, 11 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index ee7d6d5f5..352b1e894 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,4 +1,7 @@ ## +- Bugfix: Don't fail entire request if GetCacheValue from Horde fails for a single value + +## v0.1.4 - Change: Bumped ZEN_SCHEMA_VERSION - this will invalidate entire local cache when deployed - Change: Make CAS storage an hidden implementation detail of CidStore, we no longer hash and do mapping to compressed hash when storing cache values - Feature: Extended zen print command to also handle CbPackage and CompressedBuffer format payloads diff --git a/zenserver/upstream/jupiter.cpp b/zenserver/upstream/jupiter.cpp index b82290f3d..260b83355 100644 --- a/zenserver/upstream/jupiter.cpp +++ b/zenserver/upstream/jupiter.cpp @@ -209,7 +209,14 @@ CloudCacheSession::GetInlineBlob(std::string_view Namespace, std::string_view Bu const bool Success = Response.status_code == 200; const IoBuffer Buffer = Success ? IoBufferBuilder::MakeCloneFromMemory(Response.text.data(), Response.text.size()) : IoBuffer(); - OutPayloadHash = IoHash::FromHexString(Response.header["X-Jupiter-InlinePayloadHash"]); + if (auto It = Response.header.find("X-Jupiter-InlinePayloadHash"); It != Response.header.end()) + { + const std::string& PayloadHashHeader = It->second; + if (PayloadHashHeader.length() == IoHash::StringLength) + { + OutPayloadHash = IoHash::FromHexString(PayloadHashHeader); + } + } return {.Response = Buffer, .Bytes = Response.downloaded_bytes, .ElapsedSeconds = Response.elapsed, .Success = Success}; } -- cgit v1.2.3