diff options
| -rw-r--r-- | zenserver/upstream/upstreamcache.cpp | 16 | ||||
| -rw-r--r-- | zenserver/upstream/zen.cpp | 13 | ||||
| -rw-r--r-- | zenserver/upstream/zen.h | 1 |
3 files changed, 28 insertions, 2 deletions
diff --git a/zenserver/upstream/upstreamcache.cpp b/zenserver/upstream/upstreamcache.cpp index c015ef3e9..e235db516 100644 --- a/zenserver/upstream/upstreamcache.cpp +++ b/zenserver/upstream/upstreamcache.cpp @@ -292,8 +292,20 @@ namespace detail { virtual bool Initialize() override { - // TODO: Test and authenticate Zen client connection - return !m_Client->ServiceUrl().empty(); + try + { + ZenStructuredCacheSession Session(*m_Client); + ZenCacheResult Result; + for (int32_t Attempt = 0, MaxAttempts = 3; Attempt < MaxAttempts && !Result.Success; ++Attempt) + { + Result = Session.SayHello(); + } + return Result.Success; + } + catch (std::exception&) + { + return false; + } } virtual std::string_view DisplayName() const override { return m_DisplayName; } diff --git a/zenserver/upstream/zen.cpp b/zenserver/upstream/zen.cpp index 55ddd310f..be4daa30a 100644 --- a/zenserver/upstream/zen.cpp +++ b/zenserver/upstream/zen.cpp @@ -382,6 +382,19 @@ ZenStructuredCacheSession::~ZenStructuredCacheSession() } ZenCacheResult +ZenStructuredCacheSession::SayHello() +{ + ExtendableStringBuilder<256> Uri; + Uri << m_Client.ServiceUrl() << "/test/hello"; + + cpr::Session& Session = m_SessionState->Session; + Session.SetOption(cpr::Url{Uri.c_str()}); + cpr::Response Response = Session.Get(); + + return {.Bytes = Response.downloaded_bytes, .ElapsedSeconds = Response.elapsed, .Success = Response.status_code == 200}; +} + +ZenCacheResult ZenStructuredCacheSession::GetCacheRecord(std::string_view BucketId, const IoHash& Key, ZenContentType Type) { ExtendableStringBuilder<256> Uri; diff --git a/zenserver/upstream/zen.h b/zenserver/upstream/zen.h index ff4a551bf..36cfd1217 100644 --- a/zenserver/upstream/zen.h +++ b/zenserver/upstream/zen.h @@ -109,6 +109,7 @@ public: ZenStructuredCacheSession(ZenStructuredCacheClient& OuterClient); ~ZenStructuredCacheSession(); + ZenCacheResult SayHello(); ZenCacheResult GetCacheRecord(std::string_view BucketId, const IoHash& Key, ZenContentType Type); ZenCacheResult GetCachePayload(std::string_view BucketId, const IoHash& Key, const IoHash& PayloadId); ZenCacheResult PutCacheRecord(std::string_view BucketId, const IoHash& Key, IoBuffer Value, ZenContentType Type); |