aboutsummaryrefslogtreecommitdiff
path: root/src/zenserver/projectstore/projectstore.cpp
diff options
context:
space:
mode:
authorDan Engelbrecht <[email protected]>2023-09-12 09:11:48 -0400
committerGitHub <[email protected]>2023-09-12 15:11:48 +0200
commitc190ff256f13645d2905bd8bd744699559d5c5f6 (patch)
tree85e5d01e0df562b11ddfdc77d702b901c516dacb /src/zenserver/projectstore/projectstore.cpp
parentMake sure error logging or destructors don't throw exception when trying to g... (diff)
downloadzen-c190ff256f13645d2905bd8bd744699559d5c5f6.tar.xz
zen-c190ff256f13645d2905bd8bd744699559d5c5f6.zip
incremental oplog upload for block-based targets (#392)
* add option for base container for oplog export read base oplog and fetch known blocks * reuse blocks if a known block has 80+ % usage * changelog * better logging and added base to remotestore descriptions
Diffstat (limited to 'src/zenserver/projectstore/projectstore.cpp')
-rw-r--r--src/zenserver/projectstore/projectstore.cpp22
1 files changed, 20 insertions, 2 deletions
diff --git a/src/zenserver/projectstore/projectstore.cpp b/src/zenserver/projectstore/projectstore.cpp
index 7754f61cd..f993a7ec7 100644
--- a/src/zenserver/projectstore/projectstore.cpp
+++ b/src/zenserver/projectstore/projectstore.cpp
@@ -94,12 +94,14 @@ namespace {
{
return {nullptr, "Missing file name"};
}
- bool ForceDisableBlocks = File["disableblocks"sv].AsBool(false);
- bool ForceEnableTempBlocks = File["enabletempblocks"sv].AsBool(false);
+ std::string_view OptionalBaseName(File["basename"sv].AsString());
+ bool ForceDisableBlocks = File["disableblocks"sv].AsBool(false);
+ bool ForceEnableTempBlocks = File["enabletempblocks"sv].AsBool(false);
FileRemoteStoreOptions Options = {RemoteStoreOptions{.MaxBlockSize = MaxBlockSize, .MaxChunkEmbedSize = MaxChunkEmbedSize},
FolderPath,
std::string(Name),
+ std::string(OptionalBaseName),
ForceDisableBlocks,
ForceEnableTempBlocks};
RemoteStore = CreateFileRemoteStore(Options);
@@ -148,6 +150,21 @@ namespace {
{
return {nullptr, "Invalid key string"};
}
+ IoHash BaseKey = IoHash::Zero;
+ std::string_view BaseKeyParam = Cloud["basekey"sv].AsString();
+ if (!BaseKeyParam.empty())
+ {
+ if (BaseKeyParam.length() != IoHash::StringLength)
+ {
+ return {nullptr, "Invalid base key"};
+ }
+ BaseKey = IoHash::FromHexString(BaseKeyParam);
+ if (BaseKey == IoHash::Zero)
+ {
+ return {nullptr, "Invalid base key string"};
+ }
+ }
+
bool ForceDisableBlocks = Cloud["disableblocks"sv].AsBool(false);
bool ForceDisableTempBlocks = Cloud["disabletempblocks"sv].AsBool(false);
bool AssumeHttp2 = Cloud["assumehttp2"sv].AsBool(false);
@@ -157,6 +174,7 @@ namespace {
std::string(Namespace),
std::string(Bucket),
Key,
+ BaseKey,
std::string(OpenIdProvider),
AccessToken,
AuthManager,