store EdenServer* in HiveLogger

Reviewed By: xavierd

Differential Revision: D29234427

fbshipit-source-id: 711f5eda4a8df9be0f31bc330fcfc54520e25400
This commit is contained in:
Genevieve Helsel 2021-06-29 09:44:22 -07:00 committed by Facebook GitHub Bot
parent 9b4909d022
commit 09a16a72aa
9 changed files with 34 additions and 24 deletions

View File

@ -12,6 +12,7 @@
#include "eden/fs/config/EdenConfig.h"
#include "eden/fs/model/git/TopLevelIgnores.h"
#include "eden/fs/telemetry/IHiveLogger.h"
#include "eden/fs/utils/Clock.h"
#include "eden/fs/utils/FaultInjector.h"
#include "eden/fs/utils/UnboundedQueueExecutor.h"
@ -38,7 +39,6 @@ ServerState::ServerState(
std::shared_ptr<Clock> clock,
std::shared_ptr<ProcessNameCache> processNameCache,
std::shared_ptr<StructuredLogger> structuredLogger,
std::shared_ptr<IHiveLogger> hiveLogger,
std::shared_ptr<const EdenConfig> edenConfig,
std::shared_ptr<NfsServer> nfs,
bool enableFaultDetection)
@ -48,7 +48,7 @@ ServerState::ServerState(
clock_{std::move(clock)},
processNameCache_{std::move(processNameCache)},
structuredLogger_{std::move(structuredLogger)},
hiveLogger_{std::move(hiveLogger)},
hiveLogger_{std::make_shared<NullHiveLogger>()},
faultInjector_{std::make_unique<FaultInjector>(enableFaultDetection)},
nfs_{std::move(nfs)},
config_{edenConfig},

View File

@ -48,7 +48,6 @@ class ServerState {
std::shared_ptr<Clock> clock,
std::shared_ptr<ProcessNameCache> processNameCache,
std::shared_ptr<StructuredLogger> structuredLogger,
std::shared_ptr<IHiveLogger> hiveLogger,
std::shared_ptr<const EdenConfig> edenConfig,
std::shared_ptr<NfsServer> nfs,
bool enableFaultInjection = false);
@ -147,12 +146,20 @@ class ServerState {
return structuredLogger_;
}
/**
* Overwrite the default NullHiveLogger. This should only be called from
* within EdenMain, after the server is created but before it is started.
*/
void setHiveLogger(std::shared_ptr<IHiveLogger> hiveLogger) {
hiveLogger_ = std::move(hiveLogger);
}
/**
* Returns a HiveLogger that can be used to send log events to external
* long term storage for offline consumption.
*/
const std::shared_ptr<IHiveLogger>& getHiveLogger() const {
return hiveLogger_;
IHiveLogger* getHiveLogger() const {
return hiveLogger_.get();
}
FaultInjector& getFaultInjector() {

View File

@ -148,7 +148,8 @@ MetadataImporterFactory DefaultEdenMain::getMetadataImporterFactory() {
std::shared_ptr<IHiveLogger> DefaultEdenMain::getHiveLogger(
SessionInfo /*sessionInfo*/,
std::shared_ptr<EdenConfig> /*edenConfig*/) {
std::shared_ptr<EdenConfig> /*edenConfig*/,
EdenServer* /*edenServer*/) {
return std::make_shared<NullHiveLogger>();
}
@ -265,18 +266,21 @@ int runEdenMain(EdenMain&& main, int argc, char** argv) {
auto sessionInfo = makeSessionInfo(
identity, main.getLocalHostname(), main.getEdenfsVersion());
auto hiveLogger = main.getHiveLogger(sessionInfo, edenConfig);
server.emplace(
std::move(originalCommandLine),
std::move(identity),
std::move(sessionInfo),
sessionInfo,
std::move(privHelper),
std::move(edenConfig),
edenConfig,
main.getMetadataImporterFactory(),
std::move(hiveLogger),
main.getEdenfsVersion());
if (server.has_value()) {
auto hiveLogger = main.getHiveLogger(
std::move(sessionInfo), std::move(edenConfig), &(server.value()));
server->getServerState()->setHiveLogger(std::move(hiveLogger));
}
prepareFuture = server->prepare(startupLogger, !FLAGS_noWaitForMounts);
} catch (const std::exception& ex) {
auto startTimeInSeconds =

View File

@ -34,7 +34,8 @@ class EdenMain {
virtual MetadataImporterFactory getMetadataImporterFactory() = 0;
virtual std::shared_ptr<IHiveLogger> getHiveLogger(
SessionInfo sessionInfo,
std::shared_ptr<EdenConfig> edenConfig) = 0;
std::shared_ptr<EdenConfig> edenConfig,
EdenServer* edenServer) = 0;
void runServer(const EdenServer& server);
};
@ -52,7 +53,8 @@ class DefaultEdenMain : public EdenMain {
virtual MetadataImporterFactory getMetadataImporterFactory() override;
virtual std::shared_ptr<IHiveLogger> getHiveLogger(
SessionInfo sessionInfo,
std::shared_ptr<EdenConfig> edenConfig) override;
std::shared_ptr<EdenConfig> edenConfig,
EdenServer* edenServer) override;
};
int runEdenMain(EdenMain&& main, int argc, char** argv);

View File

@ -56,7 +56,6 @@
#include "eden/fs/store/hg/HgQueuedBackingStore.h"
#include "eden/fs/store/hg/MetadataImporter.h"
#include "eden/fs/telemetry/EdenStats.h"
#include "eden/fs/telemetry/IHiveLogger.h"
#include "eden/fs/telemetry/RequestMetricsScope.h"
#include "eden/fs/telemetry/SessionInfo.h"
#include "eden/fs/telemetry/StructuredLogger.h"
@ -318,7 +317,6 @@ EdenServer::EdenServer(
std::unique_ptr<PrivHelper> privHelper,
std::shared_ptr<const EdenConfig> edenConfig,
MetadataImporterFactory metadataImporterFactory,
std::shared_ptr<IHiveLogger> hiveLogger,
std::string version)
: originalCommandLine_{std::move(originalCommandLine)},
edenDir_{edenConfig->edenDir.getValue()},
@ -337,7 +335,6 @@ EdenServer::EdenServer(
std::make_shared<UnixClock>(),
std::make_shared<ProcessNameCache>(),
makeDefaultStructuredLogger(*edenConfig, std::move(sessionInfo)),
std::move(hiveLogger),
edenConfig,
#ifndef _WIN32
edenConfig->enableNfsServer.getValue()

View File

@ -63,7 +63,6 @@ namespace eden {
class BackingStore;
class HgQueuedBackingStore;
class IHiveLogger;
class BlobCache;
class TreeCache;
class Dirstate;
@ -115,7 +114,6 @@ class EdenServer : private TakeoverHandler {
std::unique_ptr<PrivHelper> privHelper,
std::shared_ptr<const EdenConfig> edenConfig,
MetadataImporterFactory metadataImporterFactory,
std::shared_ptr<IHiveLogger> hiveLogger,
std::string version = "");
virtual ~EdenServer();

View File

@ -13,14 +13,18 @@
namespace facebook::eden {
class EdenConfig;
class EdenServer;
// TODO: Deprecate ScribeLogger and rename this class ScribeLogger.
class IHiveLogger {
public:
IHiveLogger(
SessionInfo sessionInfo,
std::shared_ptr<const EdenConfig> edenConfig)
: sessionInfo_{std::move(sessionInfo)}, reloadableConfig_{edenConfig} {}
std::shared_ptr<const EdenConfig> edenConfig,
EdenServer* edenServer)
: sessionInfo_{std::move(sessionInfo)},
reloadableConfig_{edenConfig},
edenServer_{edenServer} {}
virtual ~IHiveLogger() = default;
/**
@ -32,11 +36,12 @@ class IHiveLogger {
protected:
SessionInfo sessionInfo_;
ReloadableConfig reloadableConfig_;
EdenServer* edenServer_;
};
class NullHiveLogger : public IHiveLogger {
public:
NullHiveLogger() : IHiveLogger{SessionInfo{}, {}} {}
NullHiveLogger() : IHiveLogger{SessionInfo{}, {}, nullptr} {}
std::unique_ptr<IHiveLogger> create() override {
return std::make_unique<NullHiveLogger>();

View File

@ -31,7 +31,6 @@
#include "eden/fs/store/LocalStore.h"
#include "eden/fs/store/MemoryLocalStore.h"
#include "eden/fs/store/ObjectStore.h"
#include "eden/fs/telemetry/IHiveLogger.h"
#include "eden/fs/telemetry/NullStructuredLogger.h"
#include "eden/fs/testharness/FakeBackingStore.h"
#include "eden/fs/testharness/FakeClock.h"
@ -114,7 +113,6 @@ TestMount::TestMount()
clock_,
make_shared<ProcessNameCache>(),
make_shared<NullStructuredLogger>(),
make_shared<NullHiveLogger>(),
edenConfig_,
nullptr,
/*enableFaultInjection=*/true)};

View File

@ -77,7 +77,6 @@ unique_ptr<EdenServer> TestServer::createServer(AbsolutePathPiece tmpDir) {
std::move(privHelper),
config,
MetadataImporter::getMetadataImporterFactory<DefaultMetadataImporter>(),
std::make_shared<NullHiveLogger>(),
"test server");
}