Skip to content

Commit 8fc9d23

Browse files
Change ObjectStore to use a ReloadableConfig
Reviewed By: kavehahmadi60 Differential Revision: D75826415 fbshipit-source-id: 2aa45c73421d8a70a1a5766f492c7323d6d7bab4
1 parent 157f8bd commit 8fc9d23

8 files changed

Lines changed: 41 additions & 26 deletions

File tree

eden/fs/service/EdenServer.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1830,7 +1830,7 @@ ImmediateFuture<std::shared_ptr<EdenMount>> EdenServer::mount(
18301830
getStats().copy(),
18311831
serverState_->getProcessInfoCache(),
18321832
serverState_->getStructuredLogger(),
1833-
serverState_->getReloadableConfig()->getEdenConfig(),
1833+
serverState_->getReloadableConfig(),
18341834
initialConfig->getEnableWindowsSymlinks(),
18351835
initialConfig->getCaseSensitive());
18361836
auto journal = std::make_unique<Journal>(getStats().copy());

eden/fs/service/EdenServiceHandler.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2844,7 +2844,7 @@ EdenServiceHandler::streamSelectedChangesSince(
28442844
server_->getServerState()->getStats().copy(),
28452845
server_->getServerState()->getProcessInfoCache(),
28462846
server_->getServerState()->getStructuredLogger(),
2847-
server_->getServerState()->getEdenConfig(),
2847+
server_->getServerState()->getReloadableConfig(),
28482848
mountHandle.getEdenMount()
28492849
.getCheckoutConfig()
28502850
->getEnableWindowsSymlinks(),

eden/fs/store/ObjectStore.cpp

Lines changed: 19 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
#include "eden/common/utils/ImmediateFuture.h"
1919
#include "eden/common/utils/ProcessInfoCache.h"
2020
#include "eden/common/utils/Throw.h"
21+
#include "eden/fs/config/ReloadableConfig.h"
2122
#include "eden/fs/model/Blob.h"
2223
#include "eden/fs/model/Tree.h"
2324
#include "eden/fs/model/TreeAuxData.h"
@@ -48,7 +49,7 @@ std::shared_ptr<ObjectStore> ObjectStore::create(
4849
EdenStatsPtr stats,
4950
std::shared_ptr<ProcessInfoCache> processInfoCache,
5051
std::shared_ptr<StructuredLogger> structuredLogger,
51-
std::shared_ptr<const EdenConfig> edenConfig,
52+
std::shared_ptr<ReloadableConfig> edenConfig,
5253
bool windowsSymlinksEnabled,
5354
CaseSensitivity caseSensitive) {
5455
return std::shared_ptr<ObjectStore>{new ObjectStore{
@@ -70,13 +71,13 @@ ObjectStore::ObjectStore(
7071
EdenStatsPtr stats,
7172
std::shared_ptr<ProcessInfoCache> processInfoCache,
7273
std::shared_ptr<StructuredLogger> structuredLogger,
73-
std::shared_ptr<const EdenConfig> edenConfig,
74+
std::shared_ptr<ReloadableConfig> edenConfig,
7475
bool windowsSymlinksEnabled,
7576
CaseSensitivity caseSensitive)
76-
: blobAuxDataCache_{std::in_place, edenConfig->metadataCacheSize.getValue()},
77+
: blobAuxDataCache_{std::in_place, edenConfig->getEdenConfig()->metadataCacheSize.getValue()},
7778
treeAuxDataCache_{
7879
std::in_place,
79-
edenConfig->metadataCacheSize.getValue()},
80+
edenConfig->getEdenConfig()->metadataCacheSize.getValue()},
8081
treeCache_{std::move(treeCache)},
8182
backingStore_{std::move(backingStore)},
8283
localStore_{std::move(localStore)},
@@ -98,7 +99,8 @@ void ObjectStore::updateProcessFetch(
9899
const ObjectFetchContext& fetchContext) const {
99100
if (auto pid = fetchContext.getClientPid()) {
100101
auto fetch_count = pidFetchCounts_->recordProcessFetch(pid.value());
101-
auto threshold = edenConfig_->fetchHeavyThreshold.getValue();
102+
auto threshold =
103+
edenConfig_->getEdenConfig()->fetchHeavyThreshold.getValue();
102104
// indicate heavy event when fetch_count reaches multiple of threshold
103105
if (fetch_count && threshold && (fetch_count % threshold) == 0) {
104106
sendFetchHeavyEvent(pid.value(), fetch_count);
@@ -134,7 +136,8 @@ void ObjectStore::deprioritizeWhenFetchHeavy(
134136
ObjectFetchContext& context) const {
135137
if (auto pid = context.getClientPid()) {
136138
auto fetch_count = pidFetchCounts_->getCountByPid(pid.value());
137-
auto threshold = edenConfig_->fetchHeavyThreshold.getValue();
139+
auto threshold =
140+
edenConfig_->getEdenConfig()->fetchHeavyThreshold.getValue();
138141
if (threshold && fetch_count >= threshold) {
139142
context.deprioritize(kImportPriorityDeprioritizeAmount);
140143
}
@@ -325,7 +328,8 @@ void ObjectStore::maybeCacheTreeAndAuxInLocalStore(
325328
// Pre-warm the cache if there is tree aux data available
326329
if (treeResult.tree && treeResult.tree->getAuxData()) {
327330
if (shouldCacheTreeAuxData &&
328-
edenConfig_->warmTreeAuxLocalCacheIfTreeFromBackingStore.getValue()) {
331+
edenConfig_->getEdenConfig()
332+
->warmTreeAuxLocalCacheIfTreeFromBackingStore.getValue()) {
329333
stats_->increment(
330334
&ObjectStoreStats::prewarmTreeAuxLocalCacheForTreeFromBackingStore);
331335
localStore_->putTreeAuxData(id, *treeResult.tree->getAuxData());
@@ -339,7 +343,8 @@ void ObjectStore::maybeCacheTreeAuxInMemCache(
339343
const ObjectId& id,
340344
const BackingStore::GetTreeResult& treeResult) const {
341345
if (treeResult.tree && treeResult.tree->getAuxData() &&
342-
edenConfig_->warmTreeAuxMemCacheIfTreeFromBackingStore.getValue()) {
346+
edenConfig_->getEdenConfig()
347+
->warmTreeAuxMemCacheIfTreeFromBackingStore.getValue()) {
343348
stats_->increment(
344349
&ObjectStoreStats::prewarmTreeAuxMemCacheForTreeFromBackingStore);
345350
treeAuxDataCache_.wlock()->set(id, *treeResult.tree->getAuxData());
@@ -366,8 +371,8 @@ folly::SemiFuture<BackingStore::GetTreeResult> ObjectStore::getTreeImpl(
366371
&ObjectStoreStats::getTreeLocalstoreDuration,
367372
watch.elapsed());
368373
if (tree->getAuxData() == nullptr &&
369-
self->edenConfig_->warmTreeAuxCacheIfTreeFromLocalStore
370-
.getValue()) {
374+
self->edenConfig_->getEdenConfig()
375+
->warmTreeAuxCacheIfTreeFromLocalStore.getValue()) {
371376
// The tree stored locally does not have Tree Aux Data attached.
372377
// This means the Tree was fetched before Tree serialization V2
373378
// and before we support TreeAuxData included in Tree response
@@ -883,7 +888,10 @@ ImmediateFuture<Hash20> ObjectStore::getBlobSha1(
883888

884889
Hash32 ObjectStore::computeBlake3(const Blob& blob) const {
885890
const auto content = blob.getContents();
886-
const auto& maybeBlakeKey = edenConfig_->blake3Key.getValue();
891+
// This should maybe be read at startup and saved in a member variable, but in
892+
// practice this key should never change.
893+
const auto& maybeBlakeKey =
894+
edenConfig_->getEdenConfig()->blake3Key.getValue();
887895
return maybeBlakeKey ? Hash32::keyedBlake3(
888896
folly::ByteRange{folly::StringPiece{
889897
maybeBlakeKey->data(), maybeBlakeKey->size()}},

eden/fs/store/ObjectStore.h

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,7 @@
3131
namespace facebook::eden {
3232

3333
class Blob;
34-
class EdenConfig;
34+
class ReloadableConfig;
3535
class EdenStats;
3636
class ProcessInfoCache;
3737
class StructuredLogger;
@@ -89,7 +89,7 @@ class ObjectStore : public IObjectStore,
8989
EdenStatsPtr stats,
9090
std::shared_ptr<ProcessInfoCache> processInfoCache,
9191
std::shared_ptr<StructuredLogger> structuredLogger,
92-
std::shared_ptr<const EdenConfig> edenConfig,
92+
std::shared_ptr<ReloadableConfig> edenConfig,
9393
bool windowsSymlinksEnabled,
9494
CaseSensitivity caseSensitive);
9595
~ObjectStore() override;
@@ -365,7 +365,7 @@ class ObjectStore : public IObjectStore,
365365
EdenStatsPtr stats,
366366
std::shared_ptr<ProcessInfoCache> processInfoCache,
367367
std::shared_ptr<StructuredLogger> structuredLogger,
368-
std::shared_ptr<const EdenConfig> edenConfig,
368+
std::shared_ptr<ReloadableConfig> edenConfig,
369369
bool windowsSymlinksEnabled,
370370
CaseSensitivity caseSensitive);
371371
// Forbidden copy constructor and assignment operator
@@ -492,7 +492,7 @@ class ObjectStore : public IObjectStore,
492492
*/
493493
std::shared_ptr<ProcessInfoCache> processInfoCache_;
494494
std::shared_ptr<StructuredLogger> structuredLogger_;
495-
std::shared_ptr<const EdenConfig> edenConfig_;
495+
std::shared_ptr<ReloadableConfig> edenConfig_;
496496

497497
// Is this ObjectStore case sensitive? This only matters for methods returning
498498
// Tree.

eden/fs/store/test/BlobAccessTest.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@ struct BlobAccessTest : ::testing::Test {
103103
makeRefPtr<EdenStats>(),
104104
std::make_shared<ProcessInfoCache>(),
105105
std::make_shared<NullStructuredLogger>(),
106-
rawEdenConfig,
106+
edenConfig,
107107
true,
108108
kPathMapDefaultCaseSensitive);
109109

eden/fs/store/test/DiffTest.cpp

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ class DiffTest : public ::testing::Test {
8383
makeRefPtr<EdenStats>(),
8484
std::make_shared<ProcessInfoCache>(),
8585
std::make_shared<NullStructuredLogger>(),
86-
rawEdenConfig,
86+
edenConfig,
8787
true,
8888
kPathMapDefaultCaseSensitive);
8989
}

eden/fs/store/test/ObjectStoreTest.cpp

Lines changed: 8 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,8 @@ struct ObjectStoreTest : public ::testing::TestWithParam<CaseSensitivity> {
5454
stats.copy(),
5555
std::make_shared<ProcessInfoCache>(),
5656
std::make_shared<NullStructuredLogger>(),
57-
EdenConfig::createTestEdenConfig(),
57+
std::make_shared<ReloadableConfig>(
58+
EdenConfig::createTestEdenConfig(), ConfigReloadBehavior::NoReload),
5859
true,
5960
GetParam());
6061

@@ -72,7 +73,8 @@ struct ObjectStoreTest : public ::testing::TestWithParam<CaseSensitivity> {
7273
stats.copy(),
7374
std::make_shared<ProcessInfoCache>(),
7475
std::make_shared<NullStructuredLogger>(),
75-
std::move(configWithBlake3Key),
76+
std::make_shared<ReloadableConfig>(
77+
configWithBlake3Key, ConfigReloadBehavior::NoReload),
7678
true,
7779
GetParam());
7880

@@ -330,7 +332,8 @@ TEST_P(ObjectStoreTest, getBlobSizeFromLocalStore) {
330332
stats.copy(),
331333
std::make_shared<ProcessInfoCache>(),
332334
std::make_shared<NullStructuredLogger>(),
333-
EdenConfig::createTestEdenConfig(),
335+
std::make_shared<ReloadableConfig>(
336+
EdenConfig::createTestEdenConfig(), ConfigReloadBehavior::NoReload),
334337
true,
335338
GetParam());
336339

@@ -574,7 +577,8 @@ TEST_P(ObjectStoreTest, get_tree_with_different_sensitivities) {
574577
stats.copy(),
575578
std::make_shared<ProcessInfoCache>(),
576579
std::make_shared<NullStructuredLogger>(),
577-
EdenConfig::createTestEdenConfig(),
580+
std::make_shared<ReloadableConfig>(
581+
EdenConfig::createTestEdenConfig(), ConfigReloadBehavior::NoReload),
578582
true,
579583
getOppositeCaseSensitivity());
580584

eden/fs/testharness/TestMount.cpp

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -274,7 +274,8 @@ void TestMount::createMount(
274274
stats_.copy(),
275275
std::make_shared<ProcessInfoCache>(),
276276
std::make_shared<NullStructuredLogger>(),
277-
edenConfig_,
277+
std::make_shared<ReloadableConfig>(
278+
edenConfig_, ConfigReloadBehavior::NoReload),
278279
config_->getEnableWindowsSymlinks(),
279280
config_->getCaseSensitive());
280281
auto journal = std::make_unique<Journal>(stats_.copy());
@@ -389,7 +390,8 @@ void TestMount::remount() {
389390
stats_.copy(),
390391
std::make_shared<ProcessInfoCache>(),
391392
std::make_shared<NullStructuredLogger>(),
392-
edenConfig_,
393+
std::make_shared<ReloadableConfig>(
394+
edenConfig_, ConfigReloadBehavior::NoReload),
393395
config->getEnableWindowsSymlinks(),
394396
config->getCaseSensitive());
395397

@@ -432,7 +434,8 @@ void TestMount::remountGracefully() {
432434
stats_.copy(),
433435
std::make_shared<ProcessInfoCache>(),
434436
std::make_shared<NullStructuredLogger>(),
435-
edenConfig_,
437+
std::make_shared<ReloadableConfig>(
438+
edenConfig_, ConfigReloadBehavior::NoReload),
436439
config->getEnableWindowsSymlinks(),
437440
config->getCaseSensitive());
438441

0 commit comments

Comments
 (0)