mirror of
https://github.com/deepseek-ai/3FS
synced 2025-06-26 18:16:45 +00:00
Initial commit
This commit is contained in:
83
src/fuse/hf3fs_fuse.cpp
Normal file
83
src/fuse/hf3fs_fuse.cpp
Normal file
@@ -0,0 +1,83 @@
|
||||
#ifdef ENABLE_FUSE_APPLICATION
|
||||
|
||||
#include "FuseApplication.h"
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
gflags::AllowCommandLineReparsing();
|
||||
using namespace hf3fs;
|
||||
return fuse::FuseApplication().run(argc, argv);
|
||||
}
|
||||
#else
|
||||
#include <folly/ScopeGuard.h>
|
||||
|
||||
#include "FuseConfig.h"
|
||||
#include "FuseMainLoop.h"
|
||||
#include "FuseOps.h"
|
||||
#include "common/logging/LogInit.h"
|
||||
|
||||
using namespace hf3fs;
|
||||
using namespace hf3fs::fuse;
|
||||
|
||||
DECLARE_string(cfg);
|
||||
DECLARE_bool(use_local_cfg);
|
||||
|
||||
auto withRetry(auto &&f, std::string_view desc) {
|
||||
using RetType = decltype(f());
|
||||
auto retryInterval = std::chrono::milliseconds(10);
|
||||
constexpr auto maxRetryInterval = std::chrono::milliseconds(1000);
|
||||
std::optional<RetType> res;
|
||||
for (int i = 0; i < 20; ++i) {
|
||||
res = f();
|
||||
if (*res) break;
|
||||
XLOGF(CRITICAL, "{} failed: {}\nretryCount: {}", desc, res->error(), i);
|
||||
std::this_thread::sleep_for(retryInterval);
|
||||
retryInterval = std::min(2 * retryInterval, maxRetryInterval);
|
||||
}
|
||||
return *res;
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[]) {
|
||||
gflags::AllowCommandLineReparsing();
|
||||
FuseConfig hf3fsConfig;
|
||||
hf3fsConfig.init(&argc, &argv);
|
||||
|
||||
auto ibResult = net::IBManager::start(hf3fsConfig.ib_devices());
|
||||
XLOGF_IF(FATAL, !ibResult, "Failed to start IBManager: {}", ibResult.error());
|
||||
SCOPE_EXIT { hf3fs::net::IBManager::stop(); };
|
||||
|
||||
auto logConfigStr = logging::generateLogConfig(hf3fsConfig.log(), String("hf3fs_fuse"));
|
||||
XLOGF(INFO, "LogConfig: {}", logConfigStr);
|
||||
logging::initOrDie(logConfigStr);
|
||||
XLOGF(INFO, "{}", VersionInfo::full());
|
||||
|
||||
auto monitorResult = monitor::Monitor::start(hf3fsConfig.monitor());
|
||||
XLOGF_IF(FATAL, !monitorResult, "Parse config file from flags failed: {}", monitorResult.error());
|
||||
|
||||
auto physicalHostnameRes = SysResource::hostname(/*physicalMachineName=*/true);
|
||||
XLOGF_IF(FATAL, !physicalHostnameRes, "Get physical hostname failed: {}", physicalHostnameRes.error());
|
||||
|
||||
auto containerHostnameRes = SysResource::hostname(/*physicalMachineName=*/false);
|
||||
XLOGF_IF(FATAL, !containerHostnameRes, "Get container hostname failed: {}", containerHostnameRes.error());
|
||||
|
||||
auto clientId = ClientId::random(*physicalHostnameRes);
|
||||
|
||||
flat::AppInfo appInfo;
|
||||
appInfo.clusterId = hf3fsConfig.cluster_id();
|
||||
appInfo.hostname = *physicalHostnameRes;
|
||||
appInfo.pid = SysResource::pid();
|
||||
appInfo.releaseVersion = flat::ReleaseVersion::fromVersionInfo();
|
||||
|
||||
auto &d = getFuseClientsInstance();
|
||||
if (auto res = d.init(appInfo, hf3fsConfig.mountpoint(), hf3fsConfig.token_file(), hf3fsConfig); !res) {
|
||||
XLOGF(FATAL, "Init fuse clients failed: {}", res.error());
|
||||
}
|
||||
SCOPE_EXIT { d.stop(); };
|
||||
|
||||
return fuseMainLoop(argv[0],
|
||||
hf3fsConfig.allow_other(),
|
||||
hf3fsConfig.mountpoint(),
|
||||
hf3fsConfig.io_bufs().max_buf_size(),
|
||||
hf3fsConfig.cluster_id());
|
||||
}
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user