aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2023-08-09 13:27:52 +0200
committerGitHub <[email protected]>2023-08-09 13:27:52 +0200
commit6132ee22dba626e221e615addb780b5f2a5a7bf9 (patch)
tree410857cb939611cd8353eb347ed266734e907a90 /src/zenserver
parenthandle exception in asio header parsing (#348) (diff)
downloadzen-6132ee22dba626e221e615addb780b5f2a5a7bf9.tar.xz
zen-6132ee22dba626e221e615addb780b5f2a5a7bf9.zip
Add `--assume-http2` option to cloud style import/export command to use a HTTP/2 endpoint without without HTTP/1.1 upgrade (#347)
Diffstat (limited to 'src/zenserver')
-rw-r--r--src/zenserver/projectstore/jupiterremoteprojectstore.cpp3
-rw-r--r--src/zenserver/projectstore/jupiterremoteprojectstore.h1
-rw-r--r--src/zenserver/projectstore/projectstore.cpp4
-rw-r--r--src/zenserver/upstream/jupiter.cpp9
-rw-r--r--src/zenserver/upstream/jupiter.h2
5 files changed, 15 insertions, 4 deletions
diff --git a/src/zenserver/projectstore/jupiterremoteprojectstore.cpp b/src/zenserver/projectstore/jupiterremoteprojectstore.cpp
index 08c8aa0e6..b1a68c6d2 100644
--- a/src/zenserver/projectstore/jupiterremoteprojectstore.cpp
+++ b/src/zenserver/projectstore/jupiterremoteprojectstore.cpp
@@ -252,7 +252,8 @@ CreateJupiterRemoteStore(const JupiterRemoteStoreOptions& Options)
CloudCacheClientOptions ClientOptions{.Name = "Remote store"sv,
.ServiceUrl = Url,
.ConnectTimeout = std::chrono::milliseconds(2000),
- .Timeout = std::chrono::milliseconds(60000)};
+ .Timeout = std::chrono::milliseconds(60000),
+ .AssumeHttp2 = Options.AssumeHttp2};
// 1) Access token as parameter in request
// 2) Environment variable (different win vs linux/mac)
// 3) openid-provider (assumes oidctoken.exe -Zen true has been run with matching Options.OpenIdProvider
diff --git a/src/zenserver/projectstore/jupiterremoteprojectstore.h b/src/zenserver/projectstore/jupiterremoteprojectstore.h
index 697379acb..f2375a730 100644
--- a/src/zenserver/projectstore/jupiterremoteprojectstore.h
+++ b/src/zenserver/projectstore/jupiterremoteprojectstore.h
@@ -19,6 +19,7 @@ struct JupiterRemoteStoreOptions : RemoteStoreOptions
AuthMgr& AuthManager;
bool ForceDisableBlocks = false;
bool ForceDisableTempBlocks = false;
+ bool AssumeHttp2 = false;
};
std::unique_ptr<RemoteProjectStore> CreateJupiterRemoteStore(const JupiterRemoteStoreOptions& Options);
diff --git a/src/zenserver/projectstore/projectstore.cpp b/src/zenserver/projectstore/projectstore.cpp
index ae6f0d1d8..e5088e11d 100644
--- a/src/zenserver/projectstore/projectstore.cpp
+++ b/src/zenserver/projectstore/projectstore.cpp
@@ -148,6 +148,7 @@ namespace {
}
bool ForceDisableBlocks = Cloud["disableblocks"sv].AsBool(false);
bool ForceDisableTempBlocks = Cloud["disabletempblocks"sv].AsBool(false);
+ bool AssumeHttp2 = Cloud["assumehttp2"sv].AsBool(false);
JupiterRemoteStoreOptions Options = {RemoteStoreOptions{.MaxBlockSize = MaxBlockSize, .MaxChunkEmbedSize = MaxChunkEmbedSize},
Url,
@@ -158,7 +159,8 @@ namespace {
AccessToken,
AuthManager,
ForceDisableBlocks,
- ForceDisableTempBlocks};
+ ForceDisableTempBlocks,
+ AssumeHttp2};
RemoteStore = CreateJupiterRemoteStore(Options);
}
diff --git a/src/zenserver/upstream/jupiter.cpp b/src/zenserver/upstream/jupiter.cpp
index e7bb2cbcf..0f810ea2b 100644
--- a/src/zenserver/upstream/jupiter.cpp
+++ b/src/zenserver/upstream/jupiter.cpp
@@ -46,12 +46,16 @@ namespace detail {
cpr::Session& GetSession() { return m_Session; }
- void Reset(std::chrono::milliseconds ConnectTimeout, std::chrono::milliseconds Timeout)
+ void Reset(std::chrono::milliseconds ConnectTimeout, std::chrono::milliseconds Timeout, bool AssumeHttp2)
{
m_Session.SetBody({});
m_Session.SetHeader({});
m_Session.SetConnectTimeout(ConnectTimeout);
m_Session.SetTimeout(Timeout);
+ if (AssumeHttp2)
+ {
+ m_Session.SetHttpVersion(cpr::HttpVersion{cpr::HttpVersionCode::VERSION_2_0_PRIOR_KNOWLEDGE});
+ }
}
private:
@@ -912,6 +916,7 @@ CloudCacheClient::CloudCacheClient(const CloudCacheClientOptions& Options, std::
, m_ConnectTimeout(Options.ConnectTimeout)
, m_Timeout(Options.Timeout)
, m_TokenProvider(std::move(TokenProvider))
+, m_AssumeHttp2(Options.AssumeHttp2)
{
ZEN_ASSERT(m_TokenProvider.get() != nullptr);
}
@@ -958,7 +963,7 @@ CloudCacheClient::AllocSessionState()
State = new detail::CloudCacheSessionState(*this);
}
- State->Reset(m_ConnectTimeout, m_Timeout);
+ State->Reset(m_ConnectTimeout, m_Timeout, m_AssumeHttp2);
if (IsTokenValid == false)
{
diff --git a/src/zenserver/upstream/jupiter.h b/src/zenserver/upstream/jupiter.h
index dd50f75e1..3d965e846 100644
--- a/src/zenserver/upstream/jupiter.h
+++ b/src/zenserver/upstream/jupiter.h
@@ -175,6 +175,7 @@ struct CloudCacheClientOptions
std::string_view ComputeCluster;
std::chrono::milliseconds ConnectTimeout{5000};
std::chrono::milliseconds Timeout{};
+ bool AssumeHttp2 = false;
};
/**
@@ -203,6 +204,7 @@ private:
std::chrono::milliseconds m_ConnectTimeout{};
std::chrono::milliseconds m_Timeout{};
std::unique_ptr<CloudCacheTokenProvider> m_TokenProvider;
+ bool m_AssumeHttp2;
RwLock m_SessionStateLock;
std::list<detail::CloudCacheSessionState*> m_SessionStateCache;