aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPer Larsson <[email protected]>2021-09-20 08:54:09 +0200
committerPer Larsson <[email protected]>2021-09-20 08:54:09 +0200
commitd3c8d678d395c9ce091d93e629d77d698f714dcd (patch)
tree647fcf3d57bf1667989daf94f52a49471141159d
parentAdded upstream cache policy command line option (read|write,readonly,writeonl... (diff)
downloadzen-d3c8d678d395c9ce091d93e629d77d698f714dcd.tar.xz
zen-d3c8d678d395c9ce091d93e629d77d698f714dcd.zip
Probe upstream Zen server when initializing upstream cache.
-rw-r--r--zenserver/upstream/upstreamcache.cpp16
-rw-r--r--zenserver/upstream/zen.cpp13
-rw-r--r--zenserver/upstream/zen.h1
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);