refactor BackingStoreOptions

Reviewed By: jdelliot

Differential Revision: D54032139

fbshipit-source-id: a49662b4d62c8388f5bd187fc20a98ab6d852409
This commit is contained in:
Michael Cuevas 2024-02-23 11:27:15 -08:00 committed by Facebook GitHub Bot
parent 50ac261ab0
commit a71c6e26ff
12 changed files with 75 additions and 49 deletions

View File

@ -140,13 +140,13 @@ std::shared_ptr<HgQueuedBackingStore> createHgQueuedBackingStore(
const BackingStoreFactory::CreateParams& params,
const AbsolutePath& repoPath,
std::shared_ptr<ReloadableConfig> reloadableConfig,
std::unique_ptr<HgDatapackStore::CppOptions> cppOptions) {
std::unique_ptr<HgBackingStoreOptions> runtimeOptions) {
auto underlyingStore = std::make_unique<HgBackingStore>(
repoPath,
params.localStore,
params.serverState->getThreadPool().get(),
reloadableConfig,
std::move(cppOptions),
std::move(runtimeOptions),
params.sharedStats.copy(),
params.serverState->getStructuredLogger(),
&params.serverState->getFaultInjector());
@ -174,10 +174,10 @@ void EdenMain::registerStandardBackingStores() {
const auto repoPath = realpath(params.name);
auto reloadableConfig = params.serverState->getReloadableConfig();
auto cppOptions = std::make_unique<HgDatapackStore::CppOptions>(
auto runtimeOptions = std::make_unique<HgBackingStoreOptions>(
/*ignoreFilteredPathsConfig=*/false);
auto hgQueuedBackingStore = createHgQueuedBackingStore(
params, repoPath, reloadableConfig, std::move(cppOptions));
params, repoPath, reloadableConfig, std::move(runtimeOptions));
auto localStoreCaching = reloadableConfig->getEdenConfig()
->hgEnableBlobMetaLocalStoreCaching.getValue()
@ -202,10 +202,10 @@ void EdenMain::registerStandardBackingStores() {
: LocalStoreCachedBackingStore::CachingPolicy::Trees;
auto hgSparseFilter = std::make_unique<HgSparseFilter>(repoPath);
auto cppOptions = std::make_unique<HgDatapackStore::CppOptions>(
auto options = std::make_unique<HgBackingStoreOptions>(
/*ignoreFilteredPathsConfig=*/true);
auto hgQueuedBackingStore = createHgQueuedBackingStore(
params, repoPath, reloadableConfig, std::move(cppOptions));
params, repoPath, reloadableConfig, std::move(options));
auto wrappedStore = std::make_shared<FilteredBackingStore>(
std::move(hgQueuedBackingStore), std::move(hgSparseFilter));
return std::make_shared<LocalStoreCachedBackingStore>(

View File

@ -92,27 +92,27 @@ class SaplingRetryThreadFactory : public folly::InitThreadFactory {
[] {}) {}
};
HgDatapackStore::SaplingNativeOptions computeRustOptions() {
HgDatapackStore::SaplingNativeOptions computeSaplingOptions() {
HgDatapackStore::SaplingNativeOptions options{};
options.allow_retries = false;
return options;
}
HgDatapackStore::SaplingNativeOptions computeTestRustOptions() {
HgDatapackStore::SaplingNativeOptions computeTestSaplingOptions() {
HgDatapackStore::SaplingNativeOptions options{};
options.allow_retries = false;
return options;
}
std::unique_ptr<HgDatapackStore::CppOptions> computeCppOptions(
std::unique_ptr<HgDatapackStore::CppOptions> options) {
std::unique_ptr<HgBackingStoreOptions> computeRuntimeOptions(
std::unique_ptr<HgBackingStoreOptions> options) {
options->ignoreFilteredPathsConfig =
options->ignoreFilteredPathsConfig.value_or(false);
return options;
}
std::unique_ptr<HgDatapackStore::CppOptions> computeTestCppOptions(
std::unique_ptr<HgDatapackStore::CppOptions> options) {
std::unique_ptr<HgBackingStoreOptions> computeTestRuntimeOptions(
std::unique_ptr<HgBackingStoreOptions> options) {
options->ignoreFilteredPathsConfig =
options->ignoreFilteredPathsConfig.value_or(false);
return options;
@ -125,7 +125,7 @@ HgBackingStore::HgBackingStore(
std::shared_ptr<LocalStore> localStore,
UnboundedQueueExecutor* serverThreadPool,
std::shared_ptr<ReloadableConfig> config,
std::unique_ptr<HgDatapackStore::CppOptions> options,
std::unique_ptr<HgBackingStoreOptions> runtimeOptions,
EdenStatsPtr stats,
std::shared_ptr<StructuredLogger> logger,
FaultInjector* FOLLY_NONNULL faultInjector)
@ -156,8 +156,8 @@ HgBackingStore::HgBackingStore(
logger_(std::move(logger)),
datapackStore_(
repository,
computeRustOptions(),
computeCppOptions(std::move(options)),
computeSaplingOptions(),
computeRuntimeOptions(std::move(runtimeOptions)),
config_,
logger_,
faultInjector) {}
@ -171,7 +171,7 @@ HgBackingStore::HgBackingStore(
AbsolutePathPiece repository,
std::shared_ptr<ReloadableConfig> config,
std::shared_ptr<LocalStore> localStore,
std::unique_ptr<HgDatapackStore::CppOptions> options,
std::unique_ptr<HgBackingStoreOptions> runtimeOptions,
EdenStatsPtr stats,
FaultInjector* FOLLY_NONNULL faultInjector)
: localStore_{std::move(localStore)},
@ -182,8 +182,8 @@ HgBackingStore::HgBackingStore(
logger_(nullptr),
datapackStore_(
repository,
computeTestRustOptions(),
computeTestCppOptions(std::move(options)),
computeTestSaplingOptions(),
computeTestRuntimeOptions(std::move(runtimeOptions)),
config_,
logger_,
faultInjector) {}

View File

@ -17,6 +17,7 @@
#include "eden/fs/store/BackingStore.h"
#include "eden/fs/store/LocalStore.h"
#include "eden/fs/store/ObjectFetchContext.h"
#include "eden/fs/store/hg/HgBackingStoreOptions.h"
#include "eden/fs/store/hg/HgDatapackStore.h"
#include "eden/fs/telemetry/RequestMetricsScope.h"
#include "eden/fs/utils/PathFuncs.h"
@ -49,7 +50,7 @@ class HgBackingStore {
std::shared_ptr<LocalStore> localStore,
UnboundedQueueExecutor* serverThreadPool,
std::shared_ptr<ReloadableConfig> config,
std::unique_ptr<HgDatapackStore::CppOptions> options,
std::unique_ptr<HgBackingStoreOptions> runtimeOptions,
EdenStatsPtr edenStats,
std::shared_ptr<StructuredLogger> logger,
FaultInjector* FOLLY_NONNULL faultInjector);
@ -63,7 +64,7 @@ class HgBackingStore {
AbsolutePathPiece repository,
std::shared_ptr<ReloadableConfig> config,
std::shared_ptr<LocalStore> localStore,
std::unique_ptr<HgDatapackStore::CppOptions> options,
std::unique_ptr<HgBackingStoreOptions> runtimeOptions,
EdenStatsPtr,
FaultInjector* FOLLY_NONNULL faultInjector);

View File

@ -0,0 +1,27 @@
/*
* Copyright (c) Meta Platforms, Inc. and affiliates.
*
* This software may be used and distributed according to the terms of the
* GNU General Public License version 2.
*/
#pragma once
#include <optional>
namespace facebook::eden {
class HgBackingStoreOptions {
public:
/* implicit */ HgBackingStoreOptions(
std::optional<bool> ignoreFilteredPathsConfig)
: ignoreFilteredPathsConfig{ignoreFilteredPathsConfig} {}
bool ignoreConfigFilter() {
return ignoreFilteredPathsConfig.value_or(false);
}
std::optional<bool> ignoreFilteredPathsConfig;
};
} // namespace facebook::eden

View File

@ -193,7 +193,7 @@ void HgDatapackStore::getTreeBatch(const ImportRequestsList& importRequests) {
treeRequest->proxyHash.path(),
hgObjectIdFormat,
*filteredPaths,
cppOptions_->ignoreConfigFilter())};
runtimeOptions_->ignoreConfigFilter())};
});
}
@ -238,7 +238,7 @@ folly::Try<TreePtr> HgDatapackStore::getTree(
path,
std::move(hgObjectIdFormat),
std::move(*filteredPaths),
cppOptions_->ignoreConfigFilter())};
runtimeOptions_->ignoreConfigFilter())};
} else {
return GetTreeResult{tree.exception()};
}
@ -259,7 +259,7 @@ TreePtr HgDatapackStore::getTreeLocal(
proxyHash.path(),
hgObjectIdFormat,
*filteredPaths,
cppOptions_->ignoreConfigFilter());
runtimeOptions_->ignoreConfigFilter());
}
return nullptr;

View File

@ -15,6 +15,7 @@
#include "eden/fs/model/BlobFwd.h"
#include "eden/fs/model/BlobMetadataFwd.h"
#include "eden/fs/model/TreeFwd.h"
#include "eden/fs/store/hg/HgBackingStoreOptions.h"
#include "eden/fs/telemetry/RequestMetricsScope.h"
#include "eden/fs/utils/PathFuncs.h"
#include "eden/scm/lib/backingstore/include/SaplingNativeBackingStore.h"
@ -33,24 +34,10 @@ class RefPtr;
class ObjectFetchContext;
using ObjectFetchContextPtr = RefPtr<ObjectFetchContext>;
class HgDatapackStoreOptions {
public:
/* implicit */ HgDatapackStoreOptions(
std::optional<bool> ignoreFilteredPathsConfig)
: ignoreFilteredPathsConfig{ignoreFilteredPathsConfig} {}
bool ignoreConfigFilter() {
return ignoreFilteredPathsConfig.value_or(false);
}
std::optional<bool> ignoreFilteredPathsConfig;
};
class HgDatapackStore {
public:
using SaplingNativeOptions = sapling::SaplingNativeBackingStoreOptions;
using CppOptions = HgDatapackStoreOptions;
using ImportRequestsList = std::vector<std::shared_ptr<HgImportRequest>>;
using SaplingNativeOptions = sapling::SaplingNativeBackingStoreOptions;
/**
* FaultInjector must be valid for the lifetime of the HgDatapackStore.
@ -61,12 +48,12 @@ class HgDatapackStore {
HgDatapackStore(
AbsolutePathPiece repository,
const SaplingNativeOptions& saplingNativeOptions,
std::unique_ptr<CppOptions> cppOptions,
std::unique_ptr<HgBackingStoreOptions> runtimeOptions,
std::shared_ptr<ReloadableConfig> config,
std::shared_ptr<StructuredLogger> logger,
FaultInjector* FOLLY_NONNULL faultInjector)
: store_{repository.view(), saplingNativeOptions},
cppOptions_{std::move(cppOptions)},
runtimeOptions_{std::move(runtimeOptions)},
config_{std::move(config)},
logger_{std::move(logger)},
faultInjector_{*faultInjector} {}
@ -172,7 +159,7 @@ class HgDatapackStore {
const std::string& requestType);
sapling::SaplingNativeBackingStore store_;
std::unique_ptr<HgDatapackStoreOptions> cppOptions_;
std::unique_ptr<HgBackingStoreOptions> runtimeOptions_;
std::shared_ptr<ReloadableConfig> config_;
std::shared_ptr<StructuredLogger> logger_;
FaultInjector& faultInjector_;

View File

@ -28,6 +28,7 @@ cpp_library(
"//folly/logging:logging",
],
exported_deps = [
":hg_backing_store_options",
":hg_datapack_store",
"//eden/fs:config",
"//eden/fs/store:backing_store_interface",
@ -143,6 +144,7 @@ cpp_library(
"//folly/logging:logging",
],
exported_deps = [
":hg_backing_store_options",
"//eden/fs/model:model-fwd",
"//eden/fs/telemetry:telemetry",
"//eden/fs/utils:path",
@ -154,6 +156,11 @@ cpp_library(
],
)
cpp_library(
name = "hg_backing_store_options",
headers = ["HgBackingStoreOptions.h"],
)
cpp_library(
name = "hg_proxy_hash",
srcs = ["HgProxyHash.cpp"],

View File

@ -21,6 +21,7 @@
#include "eden/fs/store/ObjectStore.h"
#include "eden/fs/store/TreeCache.h"
#include "eden/fs/store/hg/HgBackingStore.h"
#include "eden/fs/store/hg/HgBackingStoreOptions.h"
#include "eden/fs/store/hg/HgQueuedBackingStore.h"
#include "eden/fs/telemetry/EdenStats.h"
#include "eden/fs/telemetry/NullStructuredLogger.h"
@ -91,7 +92,7 @@ struct HgBackingStoreTest : TestRepo, ::testing::Test {
repo.path(),
edenConfig,
localStore,
std::make_unique<HgDatapackStore::CppOptions>(
std::make_unique<HgBackingStoreOptions>(
/*ignoreFilteredPathsConfig=*/false),
stats.copy(),
&faultInjector),

View File

@ -14,6 +14,7 @@
#include "eden/fs/model/Tree.h"
#include "eden/fs/store/MemoryLocalStore.h"
#include "eden/fs/store/ObjectFetchContext.h"
#include "eden/fs/store/hg/HgBackingStoreOptions.h"
#include "eden/fs/store/hg/HgDatapackStore.h"
#include "eden/fs/store/hg/HgImportRequest.h"
#include "eden/fs/store/hg/HgProxyHash.h"
@ -51,8 +52,8 @@ HgDatapackStore::SaplingNativeOptions computeTestSaplingOptions() {
return options;
}
std::unique_ptr<HgDatapackStore::CppOptions> computeTestCppOptions(
std::unique_ptr<HgDatapackStore::CppOptions> options) {
std::unique_ptr<HgBackingStoreOptions> computeTestOptions(
std::unique_ptr<HgBackingStoreOptions> options) {
options->ignoreFilteredPathsConfig =
options->ignoreFilteredPathsConfig.value_or(false);
return options;
@ -73,7 +74,6 @@ struct HgDatapackStoreTestBase : TestRepo, ::testing::Test {
EdenStatsPtr stats{makeRefPtr<EdenStats>()};
HgDatapackStore::SaplingNativeOptions options{computeTestSaplingOptions()};
std::shared_ptr<TestConfigSource> testConfigSource{
std::make_shared<TestConfigSource>(ConfigSourceType::SystemConfig)};
@ -98,7 +98,7 @@ struct HgDatapackStoreTest : HgDatapackStoreTestBase {
HgDatapackStore datapackStore{
repo.path(),
options,
std::make_unique<HgDatapackStore::CppOptions>(
std::make_unique<HgBackingStoreOptions>(
/*ignoreFilteredPathsConfig=*/false),
edenConfig,
nullptr,
@ -109,7 +109,7 @@ struct HgDatapackStoreTestIgnoreConfig : HgDatapackStoreTestBase {
HgDatapackStore datapackStore{
repo.path(),
options,
std::make_unique<HgDatapackStore::CppOptions>(
std::make_unique<HgBackingStoreOptions>(
/*ignoreFilteredPathsConfig=*/true),
edenConfig,
nullptr,

View File

@ -14,6 +14,7 @@
#include "eden/fs/model/TestOps.h"
#include "eden/fs/store/BackingStoreLogger.h"
#include "eden/fs/store/MemoryLocalStore.h"
#include "eden/fs/store/hg/HgBackingStoreOptions.h"
#include "eden/fs/store/hg/HgQueuedBackingStore.h"
#include "eden/fs/telemetry/EdenStats.h"
#include "eden/fs/telemetry/NullStructuredLogger.h"
@ -62,7 +63,7 @@ struct HgQueuedBackingStoreTest : TestRepo, ::testing::Test {
repo.path(),
edenConfig,
localStore,
std::make_unique<HgDatapackStore::CppOptions>(
std::make_unique<HgBackingStoreOptions>(
/*ignoreFilteredPathsConfig=*/false),
stats.copy(),
&faultInjector)};

View File

@ -32,6 +32,7 @@ cpp_unittest(
"//eden/fs/store:context",
"//eden/fs/store:store",
"//eden/fs/store/hg:hg_backing_store",
"//eden/fs/store/hg:hg_backing_store_options",
"//eden/fs/store/hg:hg_datapack_store",
"//eden/fs/store/hg:hg_import_request",
"//eden/fs/store/hg:hg_import_request_queue",

View File

@ -21,6 +21,7 @@
#include "eden/fs/store/FilteredBackingStore.h"
#include "eden/fs/store/MemoryLocalStore.h"
#include "eden/fs/store/filter/HgSparseFilter.h"
#include "eden/fs/store/hg/HgBackingStoreOptions.h"
#include "eden/fs/store/hg/HgQueuedBackingStore.h"
#include "eden/fs/telemetry/NullStructuredLogger.h"
#include "eden/fs/testharness/FakeFilter.h"
@ -121,7 +122,7 @@ struct HgFilteredBackingStoreTest : TestRepo, ::testing::Test {
repo.path(),
edenConfig,
localStore,
std::make_unique<HgDatapackStore::CppOptions>(
std::make_unique<HgBackingStoreOptions>(
/*ignoreFilteredPathsConfig=*/true),
stats.copy(),
&faultInjector)};