curve源码分析 nebd—part2

源码目录
curve-release2.2\nebd\src\part2

nebd_server.cpp
file_service.cpp
request_executor.cpp
request_executor_curve.cpp
metafile_manager.cpp
file_entity.cpp
file_manager.cpp 
heartbeat_manager.cpp 
heartbeat_service.cpp

由于nebd_server.cpp文件内容较长,我将分段进行注释和分析,以便更好地理解代码的结构和功能。

// 引入必要的头文件
#include <glog/logging.h>
#include <memory>
#include "nebd/src/common/file_lock.h"
#include "nebd/src/part2/nebd_server.h"
#include "nebd/src/part2/file_service.h"
#include "nebd/src/part2/heartbeat_service.h"
#include "nebd/src/common/nebd_version.h"

// 命名空间声明
namespace nebd {
   
namespace server {
   

// NebdServer类的初始化函数
int NebdServer::Init(const std::string &confPath, std::shared_ptr<CurveClient> curveClient) {
   
    // 检查服务器是否已经处于运行状态
    if (isRunning_) {
   
        LOG(WARNING) << "NebdServer is inited";
        return -1;
    }

    // 从配置文件中加载配置信息
    bool loadConf = LoadConfFromFile(confPath);
    if (false == loadConf) {
   
        LOG(ERROR) << "NebdServer load config from file fail";
        return -1;
    }
    LOG(INFO) << "NebdServer load config from file ok";

    // 初始化服务器监听地址
    bool initAddressOk = conf_.GetStringValue(LISTENADDRESS, &listenAddress_);
    if (false == initAddressOk) {
   
        LOG(ERROR) << "NebdServer init socket file address fail";
        return -1;
    }
    LOG(INFO) << "NebdServer init socket file address ok";

    // 初始化CurveClient
    curveClient_ = curveClient;
    bool initExecutorOk = InitCurveRequestExecutor();
    if (false == initExecutorOk) {
   
        LOG(ERROR) << "NebdServer init curveRequestExecutor fail";
        return -1;
    }
    LOG(INFO) << "NebdServer init curveRequestExecutor ok";

    // 初始化文件管理器
    bool initFileManagerOk = InitFileManager();
    if (false == initFileManagerOk) {
   
        LOG(ERROR) << "NebdServer init fileManager fail";
        return -1;
    }
    LOG(INFO) << "NebdServer init fileManager ok";

    // 初始化心跳管理器
    bool initHeartbeatManagerOk = InitHeartbeatManager();
    if (false == initHeartbeatManagerOk) {
   
        LOG(ERROR) << "NebdServer init heartbeatManager fail";
        return -1;
    }
    LOG(INFO) << "NebdServer init heartbeatManager ok";

    // 记录日志信息
    LOG(INFO) << "NebdServer init ok";
    // 暴露版本信息
    LOG(INFO) << "nebd version: " << nebd::common::NebdVersion();
    nebd::common::ExposeNebdVersion();
    return 0;
}

// NebdServer类的运行函数,直到服务器被要求停止
int NebdServer::RunUntilAskedToQuit() {
   
    // 启动服务器
    if (false == StartServer()) {
   
        LOG(INFO) << "start server fail";
        return -1;
    }

    return 0;
}

// NebdServer类的析构函数
int NebdServer::Fini() {
   
    // 如果服务器正在运行,则请求停止
    if (isRunning_) {
   
        brpc::AskToQuit();
    }

    // 停止文件管理器
    if (fileManager_ != nullptr) {
   
        fileManager_->Fini();
    }

    // 卸载CurveClient
    if (curveClient_ != nullptr) {
   
        curveClient_->UnInit();
    }

    // 停止心跳管理器
    if (heartbeatManager_ != nullptr) {
   
        heartbeatManager_->Fini();
    }

    return 0;
}

// 从配置文件中加载配置信息的函数
bool NebdServer::LoadConfFromFile(const std::string &confPath) {
   
    // 设置配置文件路径并加载配置
    conf_.SetConfigPath(confPath);
    return conf_.LoadConfig();
}

// 初始化文件管理器的函数
bool NebdServer::InitFileManager() {
   
    // 初始化元数据文件管理器
    MetaFileManagerPtr metaFileManager = InitMetaFileManager();
    if (nullptr == metaFileManager) {
   
        LOG(ERROR) << "NebdServer init meta file manager fail";
        return false;
    }

    // 创建文件管理器并运行
    fileManager_ = std::make_shared<NebdFileManager>(metaFileManager);
    CHECK(fileManager_ != nullptr) << "Init file manager failed.";
    int runRes = fileManager_->Run();
    if (0 != runRes) {
   
        LOG(ERROR) << "nebd file manager run fail";
        return false;
    }

    return true;
}

// 初始化CurveRequestExecutor的函数
bool NebdServer::InitCurveRequestExecutor() {
   
    // 获取CurveClient的配置路径
    std::string confPath;
    bool getOk = conf_.GetStringValue(CURVECLIENTCONFPATH, &confPath);
    if (!getOk) {
   
        LOG(ERROR) << "get " << CURVECLIENTCONFPATH << " fail";
        return false;
    }

    // 初始化CurveClient
    int initRes = curveClient_->Init(confPath);
    if (initRes < 0) {
   
        LOG(ERROR) << "Init curve client fail";
        return false;
    }

    // 初始化请求执行器
    CurveRequestExecutor::GetInstance().Init(curveClient_);
    return true;
}

// 初始化元数据文件管理器的函数
MetaFileManagerPtr NebdServer::InitMetaFileManager() {
   
    // 设置元数据文件路径
    NebdMetaFileManagerOption option;
    option.wrapper = std::make_shared<PosixWrapper>();
    option.parser = std::make_shared<NebdMetaFileParser>();
    bool getOk = conf_.GetStringValue(METAFILEPATH, &option.metaFilePath);
    if (false == getOk) {
   
        return nullptr;
    }

    // 创建并初始化元数据文件管理器
    MetaFileManagerPtr metaFileManager = std::make_shared<NebdMetaFileManager>();
    CHECK(metaFileManager != nullptr) << "meta file manager is nullptr";
    int ret = metaFileManager->Init(option);
    if (ret != 0) {
   
        LOG(ERROR) << "Init meta file manager failed.";
        return nullptr;
    }

    return metaFileManager;
}

// 初始化心跳管理器的函数
bool NebdServer::InitHeartbeatManager() {
   
    // 创建心跳管理器选项
    HeartbeatManagerOption option;
    bool initOptionSuccess = InitHeartbeatManagerOption(&option);
    if (!initOptionSuccess) {
   
        LOG(ERROR) << "NebdServer init heartbeat manager option fail";
        return false;
    }

    // 创建心跳管理器并运行
    heartbeatManager_ = std::make_shared<HeartbeatManager>(option);
    CHECK(heartbeatManager_ != nullptr) << "Init heartbeat manager failed.";
    int runRes = heartbeatManager_->Run();
    if (0 != runRes) {
   
        LOG(ERROR) << "nebd heartbeat manager run fail";
        return false;
    }

    return true;
}

// 启动服务器的函数
bool NebdServer::StartServer() {
   
    // 添加服务
    bool returnRpcWhenIoError;
    bool ret = conf_.GetBoolValue(RESPONSERETURNRPCWHENIOERROR, &returnRpcWhenIoError);
    if (false == ret) {
   
        LOG(ERROR) << "get " << RESPONSERETURNRPCWHENIOERROR << " fail";
        return false;
    }

    // 创建文件服务并添加到服务器
    NebdFileServiceImpl fileService(fileManager_, returnRpcWhenIoError);
    int addFileServiceRes = server_.AddService(&fileService, brpc::SERVER_DOESNT_OWN_SERVICE);
    if (0 != addFileServiceRes) {
   
        LOG(ERROR) << "NebdServer add file service fail";
        return false;
    }

    // 创建心跳服务并添加到服务器
    NebdHeartbeatServiceImpl heartbeatService(heartbeatManager_);
    addFileServiceRes = server_.AddService(&heartbeatService, brpc::SERVER_DOESNT_OWN_SERVICE);
    if (0 != addFileServiceRes) {
   
        LOG(ERROR) << "NebdServer add heartbeat service fail";
        return false;
    }

    // 启动brpc服务器
    brpc::ServerOptions option;
    option.idle_timeout_sec = -1;
    // 获取文件锁
    common::FileLock fileLock(listenAddress_ + ".lock");
    if (fileLock.AcquireFileLock() != 0) {
   
        LOG(ERROR) << "Address already in use";
        return -1;
    }
    int startBrpcServerRes = server_.StartAtSockFile(listenAddress_.c_str(), &option);
    if (0 != startBrpcServerRes) {
   
        LOG(ERROR) << "NebdServer start brpc server fail, res=" << startBrpcServerRes;
        return false;
    }

    // 允许所有用户连接到这个socket
    int r = 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值